import { build } from 'esbuild'; import { copy } from 'esbuild-plugin-copy'; import { readFileSync, rmSync } from 'fs'; const { devDependencies } = JSON.parse(readFileSync('./package.json', 'utf8')); const start = Date.now(); try { const outdir = 'dist'; rmSync(outdir, { recursive: true, force: true }); build({ bundle: true, entryPoints: [ './src/index.js', // "./src/**/*.css", // "./src/**/*.hbs", // "./src/**/*.html" ], external: [...(devDependencies && Object.keys(devDependencies))], keepNames: true, loader: { '.css': 'copy', '.hbs': 'copy', '.html': 'copy', }, minify: true, outbase: './src', outdir, outExtension: { '.js': '.cjs', }, platform: 'node', plugins: [ { name: 'populate-import-meta', setup: ({ onLoad }) => { onLoad({ filter: new RegExp(`${import.meta.dirname}/src/.*\.(js|ts)$`) }, args => { const contents = readFileSync(args.path, 'utf8'); const transformedContents = contents .replace(/import\.meta/g, `{dirname:__dirname,filename:__filename}`) .replace(/import\.meta\.filename/g, '__filename') .replace(/import\.meta\.dirname/g, '__dirname'); return { contents: transformedContents, loader: 'default' }; }); }, }, copy({ assets: [ { from: ['./static/**'], to: ['./static'], }, ], }), ], }).then(() => { // biome-ignore lint/style/useTemplate: console.log('⚡ ' + '\x1b[32m' + `Done in ${Date.now() - start}ms`); }); } catch (e) { console.log(e); process.exit(1); }