const { nodeResolve } = require('@rollup/plugin-node-resolve'); const commonjs = require('@rollup/plugin-commonjs'); const babel = require('@rollup/plugin-babel'); const fs = require('fs'); const path = require('path'); // each file in utils const utilsDir = path.join(__dirname, 'src', 'utils'); const utilsFiles = fs.readdirSync(utilsDir).filter((file) => file.endsWith('.js') && file !== 'index.js'); const srcDir = path.join(__dirname, 'src'); const hasIndexFiles = []; const srcItems = fs.readdirSync(srcDir); srcItems.forEach((item) => { const itemPath = path.join(srcDir, item); if (fs.statSync(itemPath).isDirectory()) { const _Files = fs.readdirSync(itemPath).filter((file) => file.endsWith('.js') && file === 'index.js'); if (_Files.length > 0) { hasIndexFiles.push(item); } } }); const indexEntries = []; hasIndexFiles.forEach(subDir => { indexEntries.push(...generateEntries(['index.js'], subDir)); }); // src/index.js indexEntries.push(...generateEntries(['index.js'])); function generateEntries(files, parentDir) { // Create entries with both ESM and CJS outputs const _Entries = files.flatMap((file) => { const moduleName = path.basename(file, '.js'); return [ // ESM output { input: parentDir ? `src/${parentDir}/${file}` : `src/${file}`, output: { file: parentDir ? `build/esm/${parentDir}/${moduleName}.js` : `build/esm/${moduleName}.js`, format: 'es', exports: 'named', }, external: [], plugins: [ nodeResolve({ preferBuiltins: false, }), commonjs(), babel({ babelHelpers: 'bundled', presets: [ [ '@babel/preset-env', { modules: false, targets: '> 0.25%, not dead', exclude: ['transform-parameters'], }, ], ], exclude: 'node_modules/**', }), ], }, // CJS output { input: parentDir ? `src/${parentDir}/${file}` : `src/${file}`, output: { file: parentDir ? `build/cjs/${parentDir}/${moduleName}.js` : `build/cjs/${moduleName}.js`, format: 'cjs', exports: 'named', }, external: [], plugins: [ nodeResolve({ preferBuiltins: false, }), commonjs(), babel({ babelHelpers: 'bundled', presets: [ [ '@babel/preset-env', { modules: false, targets: 'node 14', }, ], ], exclude: 'node_modules/**', }), ], }, ]; }); return _Entries; } module.exports = [ // ...utilsEntries ...generateEntries(utilsFiles, 'utils'), ...indexEntries, ];