45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
import { transform } from 'esbuild';
|
|
import { readdir, readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
import { join, dirname, relative } from 'node:path';
|
|
|
|
const SRC = 'src';
|
|
const DIST = 'dist';
|
|
|
|
async function getFiles(dir) {
|
|
const entries = await readdir(dir, { withFileTypes: true });
|
|
const files = [];
|
|
for (const entry of entries) {
|
|
const full = join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
if (entry.name === '__test__' || entry.name === 'types') continue;
|
|
files.push(...(await getFiles(full)));
|
|
} else if (entry.name.endsWith('.ts')) {
|
|
files.push(full);
|
|
}
|
|
}
|
|
return files;
|
|
}
|
|
|
|
async function main() {
|
|
const files = await getFiles(SRC);
|
|
|
|
for (const file of files) {
|
|
const input = await readFile(file, 'utf-8');
|
|
const { code } = await transform(input, {
|
|
format: 'esm',
|
|
loader: 'ts',
|
|
target: 'es2021'
|
|
});
|
|
|
|
const rel = relative(SRC, file).replace(/\.ts$/, '.js');
|
|
const outPath = join(DIST, rel);
|
|
|
|
await mkdir(dirname(outPath), { recursive: true });
|
|
await writeFile(outPath, code);
|
|
}
|
|
|
|
console.log(`Built ${files.length} files to ${DIST}/`);
|
|
}
|
|
|
|
main();
|