51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
|
|
import esbuild from 'esbuild';
|
||
|
|
import { readdirSync } from 'fs';
|
||
|
|
import { resolve, relative, dirname, extname } from 'path';
|
||
|
|
import { fileURLToPath } from 'url';
|
||
|
|
|
||
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||
|
|
const root = resolve(__dirname, '..');
|
||
|
|
const srcDir = resolve(root, 'src');
|
||
|
|
const distDir = resolve(root, 'dist');
|
||
|
|
|
||
|
|
// Find all TS/TSX entry files
|
||
|
|
const entryPoints = [];
|
||
|
|
function scan(dir) {
|
||
|
|
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
||
|
|
const full = resolve(dir, entry.name);
|
||
|
|
if (entry.isDirectory()) {
|
||
|
|
scan(full);
|
||
|
|
} else if (/\.(ts|tsx)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
|
||
|
|
entryPoints.push(full);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
scan(srcDir);
|
||
|
|
|
||
|
|
if (entryPoints.length === 0) {
|
||
|
|
console.error('No entry points found in src/');
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log(`Building ${entryPoints.length} files...`);
|
||
|
|
|
||
|
|
await esbuild.build({
|
||
|
|
entryPoints,
|
||
|
|
outdir: distDir,
|
||
|
|
format: 'cjs',
|
||
|
|
platform: 'neutral',
|
||
|
|
target: 'es2020',
|
||
|
|
bundle: false,
|
||
|
|
sourcemap: false,
|
||
|
|
minify: true,
|
||
|
|
minifyWhitespace: true,
|
||
|
|
minifyIdentifiers: true,
|
||
|
|
minifySyntax: true,
|
||
|
|
treeShaking: false, // Keep all exports since it's a library
|
||
|
|
keepNames: false,
|
||
|
|
jsx: 'automatic',
|
||
|
|
outbase: srcDir,
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log('Build complete.');
|