const esbuild = require('esbuild'); const production = process.argv.includes('--production'); const watch = process.argv.includes('--watch'); async function main() { const ctx = await esbuild.context({ entryPoints: ['src/extension.ts'], bundle: true, format: 'cjs', minify: production, sourcemap: !production, sourcesContent: false, platform: 'node', outfile: 'out/extension.js', external: ['vscode'], logLevel: 'silent', // According to https://github.com/ewanharris/vscode-versions, VS Code ships with NodeJS version 16.14.2 // and according to https://node.green/ this version supports ES2022. target: "es2022", plugins: [ /* add to the end of plugins array */ esbuildProblemMatcherPlugin ] }); if (watch) { await ctx.watch(); } else { await ctx.rebuild(); await ctx.dispose(); } } /** * @type {import('esbuild').Plugin} */ const esbuildProblemMatcherPlugin = { name: 'esbuild-problem-matcher', setup(build) { build.onStart(() => { console.log('[watch] build started'); }); build.onEnd(result => { result.errors.forEach(({ text, location }) => { console.error(`✘ [ERROR] ${text}`); console.error(` ${location.file}:${location.line}:${location.column}:`); }); console.log('[watch] build finished'); }); } }; main().catch(e => { console.error(e); process.exit(1); });