84 lines
2.0 KiB
TypeScript
84 lines
2.0 KiB
TypeScript
import tsup from 'tsup';
|
|
import glob from 'fast-glob';
|
|
import pc from 'picocolors';
|
|
import path from 'path';
|
|
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,
|
|
}),
|
|
...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,
|
|
}),
|
|
]).catch((err) => {
|
|
spinner.fail();
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|
|
|
|
spinner.succeed();
|
|
|
|
const duration = Date.now() - startTime;
|
|
const outFiles = await glob(`${outDir}/**`);
|
|
outFiles.forEach((file, i) => {
|
|
const color = file.endsWith('.map')
|
|
? pc.dim
|
|
: file.endsWith('.d.ts')
|
|
? pc.blue
|
|
: pc.cyan;
|
|
const prefix = i === outFiles.length - 1 ? ' └─' : ' ├─';
|
|
console.log(
|
|
`${pc.gray(prefix)} ${pc.dim(outDir + path.sep)}${color(
|
|
path.relative(outDir, file),
|
|
)}`,
|
|
);
|
|
});
|
|
consola.success(`Finished in ${formatDuration(duration)}`);
|