diff --git a/extensions/configuration-editing/.vscodeignore b/extensions/configuration-editing/.vscodeignore index 679a6d6859f..7c246a3d95f 100644 --- a/extensions/configuration-editing/.vscodeignore +++ b/extensions/configuration-editing/.vscodeignore @@ -1,9 +1,8 @@ test/** src/** -tsconfig.json +tsconfig*.json out/** -extension.webpack.config.js -extension-browser.webpack.config.js +esbuild* package-lock.json build/** schemas/devContainer.codespaces.schema.json diff --git a/extensions/configuration-editing/esbuild.browser.mts b/extensions/configuration-editing/esbuild.browser.mts new file mode 100644 index 00000000000..347aadc7c92 --- /dev/null +++ b/extensions/configuration-editing/esbuild.browser.mts @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import type { Plugin } from 'esbuild'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +/** + * Plugin to redirect `./node/net` imports to `./browser/net` for the browser build. + */ +const browserNetPlugin: Plugin = { + name: 'browser-net-redirect', + setup(build) { + build.onResolve({ filter: /\/node\/net$/ }, args => { + return { path: path.join(path.dirname(args.resolveDir), 'src', 'browser', 'net.ts') }; + }); + }, +}; + +run({ + platform: 'browser', + entryPoints: { + 'configurationEditingMain': path.join(srcDir, 'configurationEditingMain.ts'), + }, + srcDir, + outdir: outDir, + additionalOptions: { + plugins: [browserNetPlugin], + tsconfig: path.join(import.meta.dirname, 'tsconfig.browser.json'), + }, +}, process.argv); diff --git a/extensions/configuration-editing/esbuild.mts b/extensions/configuration-editing/esbuild.mts new file mode 100644 index 00000000000..a0d03289442 --- /dev/null +++ b/extensions/configuration-editing/esbuild.mts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'configurationEditingMain': path.join(srcDir, 'configurationEditingMain.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/configuration-editing/extension-browser.webpack.config.js b/extensions/configuration-editing/extension-browser.webpack.config.js deleted file mode 100644 index 1136c925208..00000000000 --- a/extensions/configuration-editing/extension-browser.webpack.config.js +++ /dev/null @@ -1,23 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import path from 'path'; -import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; - -export default withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/configurationEditingMain.ts' - }, - output: { - filename: 'configurationEditingMain.js' - }, - resolve: { - alias: { - './node/net': path.resolve(import.meta.dirname, 'src', 'browser', 'net'), - } - } -}); - diff --git a/extensions/configuration-editing/package.json b/extensions/configuration-editing/package.json index 84af30cb45b..60569fb201f 100644 --- a/extensions/configuration-editing/package.json +++ b/extensions/configuration-editing/package.json @@ -22,7 +22,13 @@ "browser": "./dist/browser/configurationEditingMain", "scripts": { "compile": "gulp compile-extension:configuration-editing", - "watch": "gulp watch-extension:configuration-editing" + "watch": "gulp watch-extension:configuration-editing", + "compile-web": "npm-run-all2 -lp bundle-web typecheck-web", + "bundle-web": "node ./esbuild.browser.mts", + "typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit", + "watch-web": "npm-run-all2 -lp watch-bundle-web watch-typecheck-web", + "watch-bundle-web": "node ./esbuild.browser.mts --watch", + "watch-typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit --watch" }, "dependencies": { "@octokit/rest": "^21.1.1", diff --git a/extensions/configuration-editing/tsconfig.browser.json b/extensions/configuration-editing/tsconfig.browser.json new file mode 100644 index 00000000000..f609992ab58 --- /dev/null +++ b/extensions/configuration-editing/tsconfig.browser.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ], + "files": [ + "./src/configurationEditingMain.ts" + ] +} diff --git a/extensions/emmet/.vscodeignore b/extensions/emmet/.vscodeignore index ccf478fb97f..c63ff6f6805 100644 --- a/extensions/emmet/.vscodeignore +++ b/extensions/emmet/.vscodeignore @@ -2,9 +2,8 @@ test/** test-workspace/** src/** out/** -tsconfig.json -extension.webpack.config.js -extension-browser.webpack.config.js +tsconfig*.json +esbuild* CONTRIBUTING.md cgmanifest.json package-lock.json diff --git a/extensions/emmet/esbuild.browser.mts b/extensions/emmet/esbuild.browser.mts new file mode 100644 index 00000000000..5436791dde6 --- /dev/null +++ b/extensions/emmet/esbuild.browser.mts @@ -0,0 +1,21 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + platform: 'browser', + entryPoints: { + 'emmetBrowserMain': path.join(srcDir, 'browser', 'emmetBrowserMain.ts'), + }, + srcDir, + outdir: outDir, + additionalOptions: { + tsconfig: path.join(import.meta.dirname, 'tsconfig.browser.json'), + }, +}, process.argv); diff --git a/extensions/npm/extension-browser.webpack.config.js b/extensions/emmet/esbuild.mts similarity index 50% rename from extensions/npm/extension-browser.webpack.config.js rename to extensions/emmet/esbuild.mts index 6ec242a87a2..1bc372fa8c6 100644 --- a/extensions/npm/extension-browser.webpack.config.js +++ b/extensions/emmet/esbuild.mts @@ -2,22 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -const config = withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/npmBrowserMain.ts' - }, - output: { - filename: 'npmBrowserMain.js' - }, - resolve: { - fallback: { - 'child_process': false - } - } -}); +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'node'); -export default config; +run({ + platform: 'node', + entryPoints: { + 'emmetNodeMain': path.join(srcDir, 'node', 'emmetNodeMain.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json index 5b5d3748f87..c4e020a8d16 100644 --- a/extensions/emmet/package.json +++ b/extensions/emmet/package.json @@ -474,8 +474,14 @@ } }, "scripts": { - "watch": "gulp watch-extension:emmet", "compile": "gulp compile-extension:emmet", + "watch": "gulp watch-extension:emmet", + "compile-web": "npm-run-all2 -lp bundle-web typecheck-web", + "bundle-web": "node ./esbuild.browser.mts", + "typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit", + "watch-web": "npm-run-all2 -lp watch-bundle-web watch-typecheck-web", + "watch-bundle-web": "node ./esbuild.browser.mts --watch", + "watch-typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit --watch", "deps": "npm install @vscode/emmet-helper" }, "devDependencies": { diff --git a/extensions/emmet/tsconfig.browser.json b/extensions/emmet/tsconfig.browser.json new file mode 100644 index 00000000000..781e4ba631c --- /dev/null +++ b/extensions/emmet/tsconfig.browser.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ], + "files": [ + "./src/browser/emmetBrowserMain.ts" + ] +} diff --git a/extensions/esbuild-extension-common.mts b/extensions/esbuild-extension-common.mts index 513656ae89f..e429554a639 100644 --- a/extensions/esbuild-extension-common.mts +++ b/extensions/esbuild-extension-common.mts @@ -16,17 +16,7 @@ type BuildOptions = Partial & { * Build the source code once using esbuild. */ async function build(options: BuildOptions, didBuild?: (outDir: string) => unknown): Promise { - await esbuild.build({ - bundle: true, - minify: true, - sourcemap: false, - format: 'cjs', - platform: 'node', - target: ['es2024'], - external: ['vscode'], - ...options, - }); - + await esbuild.build(options); await didBuild?.(options.outdir); } @@ -42,10 +32,44 @@ async function tryBuild(options: BuildOptions, didBuild?: (outDir: string) => un } interface RunConfig { - srcDir: string; - outdir: string; - entryPoints: string[] | Record | { in: string; out: string }[]; - additionalOptions?: Partial; + readonly platform: 'node' | 'browser'; + readonly srcDir: string; + readonly outdir: string; + readonly entryPoints: string[] | Record | { in: string; out: string }[]; + readonly additionalOptions?: Partial; +} + +function resolveOptions(config: RunConfig, outdir: string): BuildOptions { + const options: BuildOptions = { + platform: config.platform, + bundle: true, + minify: true, + sourcemap: true, + target: ['es2024'], + external: ['vscode'], + entryPoints: config.entryPoints, + outdir, + logOverride: { + 'import-is-undefined': 'error', + }, + ...(config.additionalOptions || {}), + }; + + if (config.platform === 'node') { + options.format = 'cjs'; + } else if (config.platform === 'browser') { + options.format = 'iife'; + options.alias = { + 'path': 'path-browserify', + }; + options.define = { + 'process.platform': JSON.stringify('web'), + 'process.env': JSON.stringify({}), + 'process.env.BROWSER_ENV': JSON.stringify('true'), + }; + } + + return options; } export async function run(config: RunConfig, args: string[], didBuild?: (outDir: string) => unknown): Promise { @@ -57,14 +81,7 @@ export async function run(config: RunConfig, args: string[], didBuild?: (outDir: outdir = path.join(outputRoot, outputDirName); } - const resolvedOptions: BuildOptions = { - entryPoints: config.entryPoints, - outdir, - logOverride: { - 'import-is-undefined': 'error', - }, - ...(config.additionalOptions || {}), - }; + const resolvedOptions = resolveOptions(config, outdir); const isWatch = args.indexOf('--watch') >= 0; if (isWatch) { diff --git a/extensions/grunt/.vscodeignore b/extensions/grunt/.vscodeignore index 698898bf9df..e6cd7f0ed82 100644 --- a/extensions/grunt/.vscodeignore +++ b/extensions/grunt/.vscodeignore @@ -1,6 +1,6 @@ test/** src/** -tsconfig.json +tsconfig*.json out/** -extension.webpack.config.js +esbuild* package-lock.json diff --git a/extensions/emmet/extension-browser.webpack.config.js b/extensions/grunt/esbuild.mts similarity index 52% rename from extensions/emmet/extension-browser.webpack.config.js rename to extensions/grunt/esbuild.mts index ce7ea8d197b..9be4332b6d8 100644 --- a/extensions/emmet/extension-browser.webpack.config.js +++ b/extensions/grunt/esbuild.mts @@ -2,16 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -export default withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/browser/emmetBrowserMain.ts' +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'main': path.join(srcDir, 'main.ts'), }, - output: { - filename: 'emmetBrowserMain.js' - } -}); - + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/gulp/.vscodeignore b/extensions/gulp/.vscodeignore index 360fcfd1c99..58e98fc5182 100644 --- a/extensions/gulp/.vscodeignore +++ b/extensions/gulp/.vscodeignore @@ -1,5 +1,5 @@ src/** -tsconfig.json +tsconfig*.json out/** -extension.webpack.config.js +esbuild* package-lock.json diff --git a/extensions/emmet/extension.webpack.config.js b/extensions/gulp/esbuild.mts similarity index 52% rename from extensions/emmet/extension.webpack.config.js rename to extensions/gulp/esbuild.mts index 2c6094112e1..9be4332b6d8 100644 --- a/extensions/emmet/extension.webpack.config.js +++ b/extensions/gulp/esbuild.mts @@ -2,18 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import path from 'path'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -import withDefaults from '../shared.webpack.config.mjs'; +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/node/emmetNodeMain.ts', +run({ + platform: 'node', + entryPoints: { + 'main': path.join(srcDir, 'main.ts'), }, - output: { - path: path.join(import.meta.dirname, 'dist', 'node'), - filename: 'emmetNodeMain.js' - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/gulp/extension.webpack.config.js b/extensions/gulp/extension.webpack.config.js deleted file mode 100644 index 1e221c2fa85..00000000000 --- a/extensions/gulp/extension.webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; - -export default withDefaults({ - context: import.meta.dirname, - entry: { - main: './src/main.ts', - }, - resolve: { - mainFields: ['module', 'main'] - } -}); diff --git a/extensions/jake/.vscodeignore b/extensions/jake/.vscodeignore index 360fcfd1c99..58e98fc5182 100644 --- a/extensions/jake/.vscodeignore +++ b/extensions/jake/.vscodeignore @@ -1,5 +1,5 @@ src/** -tsconfig.json +tsconfig*.json out/** -extension.webpack.config.js +esbuild* package-lock.json diff --git a/extensions/grunt/extension.webpack.config.js b/extensions/jake/esbuild.mts similarity index 52% rename from extensions/grunt/extension.webpack.config.js rename to extensions/jake/esbuild.mts index 1e221c2fa85..9be4332b6d8 100644 --- a/extensions/grunt/extension.webpack.config.js +++ b/extensions/jake/esbuild.mts @@ -2,15 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -export default withDefaults({ - context: import.meta.dirname, - entry: { - main: './src/main.ts', +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'main': path.join(srcDir, 'main.ts'), }, - resolve: { - mainFields: ['module', 'main'] - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/jake/extension.webpack.config.js b/extensions/jake/extension.webpack.config.js deleted file mode 100644 index 1e221c2fa85..00000000000 --- a/extensions/jake/extension.webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; - -export default withDefaults({ - context: import.meta.dirname, - entry: { - main: './src/main.ts', - }, - resolve: { - mainFields: ['module', 'main'] - } -}); diff --git a/extensions/markdown-language-features/esbuild.browser.mts b/extensions/markdown-language-features/esbuild.browser.mts index ddf0c5a99dc..ece1769bcdc 100644 --- a/extensions/markdown-language-features/esbuild.browser.mts +++ b/extensions/markdown-language-features/esbuild.browser.mts @@ -19,22 +19,13 @@ async function copyServerWorkerMain(outDir: string): Promise { } run({ + platform: 'browser', entryPoints: { 'extension': path.join(srcDir, 'extension.browser.ts'), }, srcDir, outdir: outDir, additionalOptions: { - platform: 'browser', - format: 'cjs', - alias: { - 'path': 'path-browserify', - }, - define: { - 'process.platform': JSON.stringify('web'), - 'process.env': JSON.stringify({}), - 'process.env.BROWSER_ENV': JSON.stringify('true'), - }, tsconfig: path.join(import.meta.dirname, 'tsconfig.browser.json'), }, }, process.argv, copyServerWorkerMain); diff --git a/extensions/markdown-language-features/esbuild.mts b/extensions/markdown-language-features/esbuild.mts index a1cf6eb5fa8..2a7eda8c183 100644 --- a/extensions/markdown-language-features/esbuild.mts +++ b/extensions/markdown-language-features/esbuild.mts @@ -19,6 +19,7 @@ async function copyServerWorkerMain(outDir: string): Promise { } run({ + platform: 'node', entryPoints: { 'extension': path.join(srcDir, 'extension.ts'), }, diff --git a/extensions/markdown-math/esbuild.browser.mts b/extensions/markdown-math/esbuild.browser.mts index e3fa7792d05..9ea4d5f6840 100644 --- a/extensions/markdown-math/esbuild.browser.mts +++ b/extensions/markdown-math/esbuild.browser.mts @@ -9,18 +9,13 @@ const srcDir = path.join(import.meta.dirname, 'src'); const outDir = path.join(import.meta.dirname, 'dist', 'browser'); run({ + platform: 'browser', entryPoints: { 'extension': path.join(srcDir, 'extension.ts'), }, srcDir, outdir: outDir, additionalOptions: { - platform: 'browser', - format: 'cjs', - define: { - 'process.platform': JSON.stringify('web'), - 'process.env': JSON.stringify({}), - 'process.env.BROWSER_ENV': JSON.stringify('true'), - }, + tsconfig: path.join(import.meta.dirname, 'tsconfig.browser.json'), }, }, process.argv); diff --git a/extensions/markdown-math/esbuild.mts b/extensions/markdown-math/esbuild.mts index 5fafb57ab75..2b75ca703da 100644 --- a/extensions/markdown-math/esbuild.mts +++ b/extensions/markdown-math/esbuild.mts @@ -9,6 +9,7 @@ const srcDir = path.join(import.meta.dirname, 'src'); const outDir = path.join(import.meta.dirname, 'dist'); run({ + platform: 'node', entryPoints: { 'extension': path.join(srcDir, 'extension.ts'), }, diff --git a/extensions/media-preview/esbuild.browser.mts b/extensions/media-preview/esbuild.browser.mts index e3fa7792d05..9ea4d5f6840 100644 --- a/extensions/media-preview/esbuild.browser.mts +++ b/extensions/media-preview/esbuild.browser.mts @@ -9,18 +9,13 @@ const srcDir = path.join(import.meta.dirname, 'src'); const outDir = path.join(import.meta.dirname, 'dist', 'browser'); run({ + platform: 'browser', entryPoints: { 'extension': path.join(srcDir, 'extension.ts'), }, srcDir, outdir: outDir, additionalOptions: { - platform: 'browser', - format: 'cjs', - define: { - 'process.platform': JSON.stringify('web'), - 'process.env': JSON.stringify({}), - 'process.env.BROWSER_ENV': JSON.stringify('true'), - }, + tsconfig: path.join(import.meta.dirname, 'tsconfig.browser.json'), }, }, process.argv); diff --git a/extensions/media-preview/esbuild.mts b/extensions/media-preview/esbuild.mts index 5fafb57ab75..2b75ca703da 100644 --- a/extensions/media-preview/esbuild.mts +++ b/extensions/media-preview/esbuild.mts @@ -9,6 +9,7 @@ const srcDir = path.join(import.meta.dirname, 'src'); const outDir = path.join(import.meta.dirname, 'dist'); run({ + platform: 'node', entryPoints: { 'extension': path.join(srcDir, 'extension.ts'), }, diff --git a/extensions/mermaid-chat-features/esbuild.browser.mts b/extensions/mermaid-chat-features/esbuild.browser.mts index e3fa7792d05..9ea4d5f6840 100644 --- a/extensions/mermaid-chat-features/esbuild.browser.mts +++ b/extensions/mermaid-chat-features/esbuild.browser.mts @@ -9,18 +9,13 @@ const srcDir = path.join(import.meta.dirname, 'src'); const outDir = path.join(import.meta.dirname, 'dist', 'browser'); run({ + platform: 'browser', entryPoints: { 'extension': path.join(srcDir, 'extension.ts'), }, srcDir, outdir: outDir, additionalOptions: { - platform: 'browser', - format: 'cjs', - define: { - 'process.platform': JSON.stringify('web'), - 'process.env': JSON.stringify({}), - 'process.env.BROWSER_ENV': JSON.stringify('true'), - }, + tsconfig: path.join(import.meta.dirname, 'tsconfig.browser.json'), }, }, process.argv); diff --git a/extensions/mermaid-chat-features/esbuild.mts b/extensions/mermaid-chat-features/esbuild.mts index 5fafb57ab75..2b75ca703da 100644 --- a/extensions/mermaid-chat-features/esbuild.mts +++ b/extensions/mermaid-chat-features/esbuild.mts @@ -9,6 +9,7 @@ const srcDir = path.join(import.meta.dirname, 'src'); const outDir = path.join(import.meta.dirname, 'dist'); run({ + platform: 'node', entryPoints: { 'extension': path.join(srcDir, 'extension.ts'), }, diff --git a/extensions/npm/.vscodeignore b/extensions/npm/.vscodeignore index f05a79416be..7e9dd51ede2 100644 --- a/extensions/npm/.vscodeignore +++ b/extensions/npm/.vscodeignore @@ -1,7 +1,6 @@ src/** out/** -tsconfig.json +tsconfig*.json .vscode/** -extension.webpack.config.js -extension-browser.webpack.config.js +esbuild* package-lock.json diff --git a/extensions/npm/esbuild.browser.mts b/extensions/npm/esbuild.browser.mts new file mode 100644 index 00000000000..852700edd07 --- /dev/null +++ b/extensions/npm/esbuild.browser.mts @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + platform: 'browser', + entryPoints: { + 'npmBrowserMain': path.join(srcDir, 'npmBrowserMain.ts'), + }, + srcDir, + outdir: outDir, + additionalOptions: { + tsconfig: path.join(import.meta.dirname, 'tsconfig.browser.json'), + external: [ + 'vscode', + 'child_process', + ] + }, +}, process.argv); diff --git a/extensions/configuration-editing/extension.webpack.config.js b/extensions/npm/esbuild.mts similarity index 51% rename from extensions/configuration-editing/extension.webpack.config.js rename to extensions/npm/esbuild.mts index 519fc2e359f..be92f45b26c 100644 --- a/extensions/configuration-editing/extension.webpack.config.js +++ b/extensions/npm/esbuild.mts @@ -2,18 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/configurationEditingMain.ts', +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'npmMain': path.join(srcDir, 'npmMain.ts'), }, - output: { - filename: 'configurationEditingMain.js' - }, - resolve: { - mainFields: ['module', 'main'] - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/npm/extension.webpack.config.js b/extensions/npm/extension.webpack.config.js deleted file mode 100644 index 0dcad6f8b14..00000000000 --- a/extensions/npm/extension.webpack.config.js +++ /dev/null @@ -1,20 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; - -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/npmMain.ts', - }, - output: { - filename: 'npmMain.js', - }, - resolve: { - mainFields: ['module', 'main'], - extensions: ['.ts', '.js'] // support ts-files and js-files - } -}); diff --git a/extensions/npm/package.json b/extensions/npm/package.json index 9a67c3a83ec..bba6a23b8ac 100644 --- a/extensions/npm/package.json +++ b/extensions/npm/package.json @@ -18,7 +18,13 @@ ], "scripts": { "compile": "npx gulp compile-extension:npm", - "watch": "npx gulp watch-extension:npm" + "watch": "npx gulp watch-extension:npm", + "compile-web": "npm-run-all2 -lp bundle-web typecheck-web", + "bundle-web": "node ./esbuild.browser.mts", + "typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit", + "watch-web": "npm-run-all2 -lp watch-bundle-web watch-typecheck-web", + "watch-bundle-web": "node ./esbuild.browser.mts --watch", + "watch-typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit --watch" }, "dependencies": { "find-up": "^5.0.0", diff --git a/extensions/npm/src/features/packageJSONContribution.ts b/extensions/npm/src/features/packageJSONContribution.ts index 999f39664f1..d90a6b189f5 100644 --- a/extensions/npm/src/features/packageJSONContribution.ts +++ b/extensions/npm/src/features/packageJSONContribution.ts @@ -8,7 +8,7 @@ import { IJSONContribution, ISuggestionsCollector } from './jsonContributions'; import { XHRRequest } from 'request-light'; import { Location } from 'jsonc-parser'; -import * as cp from 'child_process'; +import type * as cp from 'child_process'; import { dirname } from 'path'; import { fromNow } from './date'; @@ -283,7 +283,8 @@ export class PackageJSONContribution implements IJSONContribution { return info; } - private npmView(npmCommandPath: string, pack: string, resource: Uri | undefined): Promise { + private async npmView(npmCommandPath: string, pack: string, resource: Uri | undefined): Promise { + const cp = await import('child_process'); return new Promise((resolve, _reject) => { const args = ['view', '--json', '--', pack, 'description', 'dist-tags.latest', 'homepage', 'version', 'time']; const cwd = resource && resource.scheme === 'file' ? dirname(resource.fsPath) : undefined; diff --git a/extensions/npm/tsconfig.browser.json b/extensions/npm/tsconfig.browser.json new file mode 100644 index 00000000000..4e9b89120f8 --- /dev/null +++ b/extensions/npm/tsconfig.browser.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ], + "files": [ + "./src/npmBrowserMain.ts" + ] +}