| /** |
| * Copyright (c) Meta Platforms, Inc. and affiliates. |
| * |
| * This source code is licensed under the MIT license found in the |
| * LICENSE file in the root directory of this source tree. |
| */ |
| |
| const esbuild = require('esbuild'); |
| |
| const production = process.argv.includes('--production'); |
| const watch = process.argv.includes('--watch'); |
| |
| async function main() { |
| entryPoints = production ? ['src/extension.ts'] : ['src/test/**/*.test.ts', 'src/extension.ts']; |
| const ctx = await esbuild.context({ |
| entryPoints: entryPoints, |
| bundle: true, |
| format: 'cjs', |
| minify: production, |
| sourcemap: !production, |
| sourcesContent: false, |
| platform: 'node', |
| outdir: 'dist', |
| external: ['vscode'], |
| logLevel: 'warning', |
| 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}`); |
| if (location == null) return; |
| console.error(` ${location.file}:${location.line}:${location.column}:`); |
| }); |
| console.log('[watch] build finished'); |
| }); |
| } |
| }; |
| |
| main().catch(e => { |
| console.error(e); |
| process.exit(1); |
| }); |