diff --git a/tsconfig.json b/tsconfig.json index 5733bc5..92ea7ea 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,12 +11,12 @@ "declaration": true, "declarationMap": true, "outDir": "./dist", - "rootDir": "./src", + "baseUrl": ".", "paths": { - "@/*": ["src/*"] - } + "@/*": ["src/*"], + }, }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist", "tests"] + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"], } diff --git a/tsup.samples.config.ts b/tsup.samples.config.ts index c967b12..f3eac6b 100644 --- a/tsup.samples.config.ts +++ b/tsup.samples.config.ts @@ -1,13 +1,13 @@ -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'; -import {yarnSpinnerPlugin} from 'yarn-spinner-loader/esbuild'; -import type { Plugin } from 'esbuild'; +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"; +import { yarnSpinnerPlugin } from "yarn-spinner-loader/esbuild"; +import type { Plugin } from "esbuild"; -const srcDir = fileURLToPath(new URL('./src', import.meta.url)); -const samplesDir = fileURLToPath(new URL('./src/samples', import.meta.url)); +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 { @@ -18,13 +18,13 @@ function getSamplesEntries(): Record { 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'); + const indexPath = path.join(fullPath, "index.ts"); if (fs.existsSync(indexPath)) { entries[item] = indexPath; } - } else if (item.endsWith('.ts')) { + } else if (item.endsWith(".ts")) { // Single file sample (e.g. tic-tac-toe.ts) - entries[item.replace('.ts', '')] = fullPath; + entries[item.replace(".ts", "")] = fullPath; } } return entries; @@ -37,20 +37,20 @@ const samplesEntries = getSamplesEntries(); */ function rewriteBoardgameImports(): Plugin { return { - name: 'rewrite-boardgame-imports', + name: "rewrite-boardgame-imports", setup(build) { - build.onResolve({ filter: /^@\/(core|utils)\// }, args => { + build.onResolve({ filter: /^@\/(core|utils)\// }, (args) => { // Mark these as external and rewrite to 'boardgame-core' return { - path: 'boardgame-core', + path: "boardgame-core", external: true, }; }); - + // Also handle @/index imports - build.onResolve({ filter: /^@\/index$/ }, args => { + build.onResolve({ filter: /^@\/index$/ }, (args) => { return { - path: 'boardgame-core', + path: "boardgame-core", external: true, }; }); @@ -60,11 +60,25 @@ function rewriteBoardgameImports(): Plugin { export default defineConfig({ entry: samplesEntries, - format: ['esm'], + format: ["esm"], dts: true, clean: true, sourcemap: true, - outDir: 'dist/samples', - external: ['@preact/signals-core', 'mutative', 'inline-schema', 'boardgame-core'], - esbuildPlugins: [csvLoader({ writeToDisk: true }), rewriteBoardgameImports(), yarnSpinnerPlugin()], + outDir: "dist/samples", + external: [ + "@preact/signals-core", + "mutative", + "inline-schema", + "boardgame-core", + ], + esbuildPlugins: [ + csvLoader({ writeToDisk: true }), + rewriteBoardgameImports(), + yarnSpinnerPlugin(), + ], + esbuildOptions(options) { + options.alias = { + "@": srcDir, + }; + }, });