You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.5 KiB
JavaScript

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');
// Define external dependencies (e.g., react, react-dom, etc.)
// These will not be bundled but resolved at runtime
const externalDeps = ['react', 'react-dom']; // Add more as needed
// Check if a module is external
const isExternal = (id) => {
// Check if it's a node module (not a relative import)
return externalDeps.some(dep => id === dep || id.startsWith(`${dep}/`));
};
// 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 moduleFiles = [];
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);
moduleFiles.push(...generateEntries(_Files, 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: isExternal, // Function to determine external dependencies
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: isExternal, // Function to determine external dependencies
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,
...moduleFiles,
];