mirror of
https://github.com/ShinkoNet/Wplace-Overlay-Pro.git
synced 2026-01-11 22:40:37 +00:00
60 lines
No EOL
1.7 KiB
JavaScript
60 lines
No EOL
1.7 KiB
JavaScript
import esbuild from 'esbuild';
|
|
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
import { resolve, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const DEV = process.argv.includes('--watch');
|
|
const outFile = resolve(__dirname, 'dist', 'Wplace Overlay Pro.user.js');
|
|
const metaPath = resolve(__dirname, 'src', 'meta.js');
|
|
|
|
// Plugin: prepend metadata banner after each build
|
|
const MetaBannerPlugin = {
|
|
name: 'meta-banner',
|
|
setup(build) {
|
|
build.onEnd(async (result) => {
|
|
try {
|
|
await mkdir(dirname(outFile), { recursive: true });
|
|
const [meta, js] = await Promise.all([
|
|
readFile(metaPath, 'utf8'),
|
|
readFile(outFile, 'utf8'),
|
|
]);
|
|
// Normalize CRLF and prepend
|
|
const banner = meta.trim() + '\n';
|
|
await writeFile(outFile, (banner + js).replace(/\r\n/g, '\n'), 'utf8');
|
|
} catch (err) {
|
|
console.error('[meta-banner] Failed to prepend metadata:', err);
|
|
}
|
|
});
|
|
},
|
|
};
|
|
|
|
const buildOptions = {
|
|
entryPoints: [resolve(__dirname, 'src', 'main.ts')],
|
|
outfile: outFile,
|
|
bundle: true,
|
|
minify: false,
|
|
legalComments: 'none',
|
|
target: ['es2021'],
|
|
format: 'iife',
|
|
sourcemap: false,
|
|
logLevel: 'info',
|
|
plugins: [MetaBannerPlugin],
|
|
};
|
|
|
|
async function buildOnce() {
|
|
await esbuild.build(buildOptions);
|
|
console.log('[build] Done.');
|
|
}
|
|
|
|
async function buildAndWatch() {
|
|
const ctx = await esbuild.context(buildOptions);
|
|
await ctx.watch();
|
|
console.log('[watch] Building and watching for changes...');
|
|
}
|
|
|
|
if (DEV) {
|
|
await buildAndWatch();
|
|
} else {
|
|
await buildOnce();
|
|
} |