mirror of
https://github.com/pmndrs/zustand.git
synced 2025-12-08 19:45:52 +00:00
106 lines
2.8 KiB
JavaScript
106 lines
2.8 KiB
JavaScript
/* global process*/
|
|
import path from 'path'
|
|
import alias from '@rollup/plugin-alias'
|
|
import resolve from '@rollup/plugin-node-resolve'
|
|
import replace from '@rollup/plugin-replace'
|
|
import typescript from '@rollup/plugin-typescript'
|
|
import esbuild from 'rollup-plugin-esbuild'
|
|
|
|
const extensions = ['.js', '.ts', '.tsx']
|
|
const { root } = path.parse(process.cwd())
|
|
export const entries = [
|
|
{ find: /.*\/vanilla\/shallow\.ts$/, replacement: 'zustand/vanilla/shallow' },
|
|
{ find: /.*\/react\/shallow\.ts$/, replacement: 'zustand/react/shallow' },
|
|
{ find: /.*\/vanilla\.ts$/, replacement: 'zustand/vanilla' },
|
|
{ find: /.*\/react\.ts$/, replacement: 'zustand/react' },
|
|
]
|
|
|
|
function external(id) {
|
|
return !id.startsWith('.') && !id.startsWith(root)
|
|
}
|
|
|
|
function getEsbuild() {
|
|
return esbuild({
|
|
target: 'es2018',
|
|
supported: { 'import-meta': true },
|
|
tsconfig: path.resolve('./tsconfig.json'),
|
|
})
|
|
}
|
|
|
|
function createDeclarationConfig(input, output) {
|
|
return {
|
|
input,
|
|
output: {
|
|
dir: output,
|
|
},
|
|
external,
|
|
plugins: [
|
|
typescript({
|
|
declaration: true,
|
|
emitDeclarationOnly: true,
|
|
outDir: output,
|
|
}),
|
|
],
|
|
}
|
|
}
|
|
|
|
function createESMConfig(input, output) {
|
|
return {
|
|
input,
|
|
output: { file: output, format: 'esm' },
|
|
external,
|
|
plugins: [
|
|
alias({ entries: entries.filter((entry) => !entry.find.test(input)) }),
|
|
resolve({ extensions }),
|
|
replace({
|
|
...(output.endsWith('.js')
|
|
? {
|
|
'import.meta.env?.MODE': 'process.env.NODE_ENV',
|
|
}
|
|
: {
|
|
'import.meta.env?.MODE':
|
|
'(import.meta.env ? import.meta.env.MODE : undefined)',
|
|
}),
|
|
// a workaround for #829
|
|
'use-sync-external-store/shim/with-selector':
|
|
'use-sync-external-store/shim/with-selector.js',
|
|
delimiters: ['\\b', '\\b(?!(\\.|/))'],
|
|
preventAssignment: true,
|
|
}),
|
|
getEsbuild(),
|
|
],
|
|
}
|
|
}
|
|
|
|
function createCommonJSConfig(input, output) {
|
|
return {
|
|
input,
|
|
output: { file: output, format: 'cjs' },
|
|
external,
|
|
plugins: [
|
|
alias({ entries: entries.filter((entry) => !entry.find.test(input)) }),
|
|
resolve({ extensions }),
|
|
replace({
|
|
'import.meta.env?.MODE': 'process.env.NODE_ENV',
|
|
delimiters: ['\\b', '\\b(?!(\\.|/))'],
|
|
preventAssignment: true,
|
|
}),
|
|
getEsbuild(),
|
|
],
|
|
}
|
|
}
|
|
|
|
export default function (args) {
|
|
let c = Object.keys(args).find((key) => key.startsWith('config-'))
|
|
if (c) {
|
|
c = c.slice('config-'.length).replace(/_/g, '/')
|
|
} else {
|
|
c = 'index'
|
|
}
|
|
return [
|
|
...(c === 'index' ? [createDeclarationConfig(`src/${c}.ts`, 'dist')] : []),
|
|
createCommonJSConfig(`src/${c}.ts`, `dist/${c}.js`),
|
|
createESMConfig(`src/${c}.ts`, `dist/esm/${c}.mjs`),
|
|
]
|
|
}
|