48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { defineConfig } from 'tsup';
|
|
import { fileURLToPath } from 'url';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
import {csvLoader} from 'inline-schema/csv-loader/esbuild';
|
|
|
|
const srcDir = fileURLToPath(new URL('./src', import.meta.url));
|
|
const samplesDir = fileURLToPath(new URL('./src/samples', import.meta.url));
|
|
|
|
// Auto-discover samples entry points
|
|
function getSamplesEntries(): Record<string, string> {
|
|
const entries: Record<string, string> = {};
|
|
if (!fs.existsSync(samplesDir)) return entries;
|
|
|
|
for (const item of fs.readdirSync(samplesDir)) {
|
|
const fullPath = path.join(samplesDir, item);
|
|
if (fs.statSync(fullPath).isDirectory()) {
|
|
// Directory sample (e.g. boop) - look for index.ts
|
|
const indexPath = path.join(fullPath, 'index.ts');
|
|
if (fs.existsSync(indexPath)) {
|
|
entries[item] = indexPath;
|
|
}
|
|
} else if (item.endsWith('.ts')) {
|
|
// Single file sample (e.g. tic-tac-toe.ts)
|
|
entries[item.replace('.ts', '')] = fullPath;
|
|
}
|
|
}
|
|
return entries;
|
|
}
|
|
|
|
const samplesEntries = getSamplesEntries();
|
|
|
|
export default defineConfig({
|
|
entry: samplesEntries,
|
|
format: ['esm'],
|
|
dts: true,
|
|
clean: true,
|
|
sourcemap: true,
|
|
outDir: 'dist/samples',
|
|
external: ['@preact/signals-core', 'mutative', 'inline-schema', 'boardgame-core'],
|
|
esbuildPlugins: [csvLoader()],
|
|
esbuildOptions(options) {
|
|
options.alias = {
|
|
'@': srcDir,
|
|
};
|
|
},
|
|
});
|