83 lines
1.7 KiB
TypeScript
83 lines
1.7 KiB
TypeScript
import { defineConfig, type Options } from 'tsup';
|
|
import babel from 'esbuild-plugin-babel';
|
|
import packageJson from './package.json';
|
|
|
|
const external = [
|
|
...Object.keys(packageJson.dependencies || {}),
|
|
...Object.keys(packageJson.peerDependencies || {}),
|
|
];
|
|
|
|
const isWatch = process.argv.includes('--watch');
|
|
|
|
// React Compiler — automatic memoization for all components and hooks
|
|
// babel-plugin-react-compiler needs TypeScript stripped first, so we use @babel/preset-typescript
|
|
const reactCompilerPlugin = babel({
|
|
filter: /\.(ts|tsx)$/,
|
|
config: {
|
|
presets: [
|
|
['@babel/preset-typescript', { isTSX: true, allExtensions: true }],
|
|
['@babel/preset-react', { runtime: 'automatic' }],
|
|
],
|
|
plugins: ['babel-plugin-react-compiler'],
|
|
},
|
|
});
|
|
|
|
const shared: Partial<Options> = {
|
|
format: ['cjs', 'esm'],
|
|
dts: true,
|
|
splitting: false,
|
|
sourcemap: true,
|
|
platform: 'browser',
|
|
external,
|
|
esbuildPlugins: [reactCompilerPlugin],
|
|
};
|
|
|
|
export default defineConfig([
|
|
{
|
|
...shared,
|
|
entry: ['src/index.ts'],
|
|
clean: !isWatch,
|
|
},
|
|
{
|
|
...shared,
|
|
entry: ['src/core/index.ts'],
|
|
clean: false,
|
|
outDir: 'dist/core',
|
|
},
|
|
{
|
|
...shared,
|
|
entry: ['src/db/index.ts'],
|
|
clean: false,
|
|
outDir: 'dist/db',
|
|
},
|
|
{
|
|
...shared,
|
|
entry: ['src/hooks/index.ts'],
|
|
clean: false,
|
|
outDir: 'dist/hooks',
|
|
},
|
|
{
|
|
...shared,
|
|
entry: ['src/utils/index.ts'],
|
|
clean: false,
|
|
outDir: 'dist/utils',
|
|
},
|
|
{
|
|
...shared,
|
|
entry: ['src/commands/index.ts'],
|
|
clean: false,
|
|
outDir: 'dist/commands',
|
|
},
|
|
{
|
|
...shared,
|
|
entry: ['src/nodes/index.ts'],
|
|
clean: false,
|
|
outDir: 'dist/nodes',
|
|
},
|
|
{
|
|
...shared,
|
|
entry: ['src/gestures/index.ts'],
|
|
clean: false,
|
|
outDir: 'dist/gestures',
|
|
},
|
|
]);
|