58a84ec253
Entrypoint outputs and files in the public directory are typed properly. Chunks and other generated files are not typed since they aren't often accessed at runtime. BREAKING CHANGE: `browser` is now imported from `wxt/browser` instead of `webextension-polyfill`
85 lines
2.0 KiB
TypeScript
85 lines
2.0 KiB
TypeScript
import tsup from 'tsup';
|
|
import glob from 'fast-glob';
|
|
import { printFileList } from '../src/core/log/printFileList';
|
|
import { formatDuration } from '../src/core/utils/formatDuration';
|
|
import ora from 'ora';
|
|
import fs from 'fs-extra';
|
|
import { consola } from 'consola';
|
|
|
|
const spinner = ora('Building WXT').start();
|
|
|
|
const startTime = Date.now();
|
|
const outDir = 'dist';
|
|
const virtualEntrypoints = ['background', 'content-script'];
|
|
|
|
await fs.rm(outDir, { recursive: true, force: true });
|
|
|
|
await Promise.all([
|
|
tsup.build({
|
|
entry: {
|
|
index: 'src/index.ts',
|
|
},
|
|
format: ['cjs', 'esm'],
|
|
sourcemap: true,
|
|
dts: true,
|
|
silent: true,
|
|
}),
|
|
tsup.build({
|
|
entry: { cli: 'src/cli/index.ts' },
|
|
format: ['cjs'],
|
|
sourcemap: 'inline',
|
|
silent: true,
|
|
}),
|
|
tsup.build({
|
|
entry: { client: 'src/client/index.ts' },
|
|
format: ['esm'],
|
|
sourcemap: 'inline',
|
|
dts: true,
|
|
silent: true,
|
|
}),
|
|
tsup.build({
|
|
entry: { browser: 'src/client/browser.ts' },
|
|
format: ['esm'],
|
|
sourcemap: 'inline',
|
|
dts: true,
|
|
silent: true,
|
|
}),
|
|
...virtualEntrypoints.map((entryName) =>
|
|
tsup.build({
|
|
entry: {
|
|
[`virtual-modules/${entryName}-entrypoint`]: `src/client/virtual-modules/${entryName}-entrypoint.ts`,
|
|
},
|
|
format: ['esm'],
|
|
sourcemap: true,
|
|
silent: true,
|
|
external: [`virtual:user-${entryName}`],
|
|
}),
|
|
),
|
|
tsup.build({
|
|
entry: {
|
|
'virtual-modules/reload-html': `src/client/virtual-modules/reload-html.ts`,
|
|
},
|
|
format: ['esm'],
|
|
sourcemap: true,
|
|
silent: true,
|
|
}),
|
|
tsup.build({
|
|
entry: {
|
|
'virtual-modules/fake-browser': `src/client/virtual-modules/fake-browser.ts`,
|
|
},
|
|
format: ['esm', 'cjs'],
|
|
silent: true,
|
|
}),
|
|
]).catch((err) => {
|
|
spinner.fail();
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|
|
|
|
spinner.succeed();
|
|
|
|
const duration = Date.now() - startTime;
|
|
const outFiles = await glob(`${outDir}/**`, { absolute: true });
|
|
await printFileList(consola.log, outDir, outFiles);
|
|
consola.success(`Finished in ${formatDuration(duration)}`);
|