/* 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`), ] }