Web Dev Solutions

Catalin Mititiuc

const { createServer } = require('esbuild-server'); const path = require('node:path'); const fs = require('node:fs'); const { IncomingMessage } = require('node:http'); class Request extends IncomingMessage { constructor(socket) { super(socket); } get url() { console.log('getter called', this._url); return this._url; } set url(val) { console.log('setter called', val); this._url = val; } } const resolveImportedSvg = { name: 'resolveImportedSvg', setup(build) { build.onResolve({ filter: /\.svg$/ }, args => { return { path: path.resolve('public', args.path), }; }); } } const resolveSvgImports = { name: 'resolveSvgImports', setup(build) { build.onStart(() => { fs.rmSync(path.resolve(build.initialOptions.outdir), { recursive: true, force: true }); }); build.onResolve({ filter: /\.svg$/ }, args => { return { path: path.resolve('public', args.path), }; }); } } const server = createServer( { bundle: true, define: { 'env': `"${process.env.NODE_ENV || 'dev'}"`, }, entryPoints: ['src/index.js', 'src/soldier_record_block.js', 'src/map.js'], outdir: 'build', // ...(process.env.NODE_ENV !== 'test') && { // outdir: 'build' // }, plugins: [resolveSvgImports], loader: { '.svg': 'file' }, assetNames: 'assets/images/[name]-[hash]', }, { static: 'public', ...(process.env.NODE_ENV === 'test') && { port: 3005, injectLiveReload: false, watch: false, // http: { IncomingMessage: Request } } } ); const buildStart = Date.now(); server .start() .then((d) => { console.log(`Build completed in ${Date.now() - buildStart}ms`); }) .catch(() => { console.error('Build failed'); }); console.log(`${process.env.NODE_ENV === 'test' ? 'Test' : 'Development'} server running at ${server.url}`);