diff --git a/extensions/debug-auto-launch/.vscodeignore b/extensions/debug-auto-launch/.vscodeignore index 1ebf0088b62..0628555db00 100644 --- a/extensions/debug-auto-launch/.vscodeignore +++ b/extensions/debug-auto-launch/.vscodeignore @@ -1,5 +1,5 @@ src/** tsconfig*.json out/** -extension.webpack.config.js +esbuild*.mts package-lock.json diff --git a/extensions/debug-auto-launch/extension.webpack.config.js b/extensions/debug-auto-launch/esbuild.mts similarity index 51% rename from extensions/debug-auto-launch/extension.webpack.config.js rename to extensions/debug-auto-launch/esbuild.mts index 0c857b362f5..2b75ca703da 100644 --- a/extensions/debug-auto-launch/extension.webpack.config.js +++ b/extensions/debug-auto-launch/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: { - extension: './src/extension.ts', +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'), }, - resolve: { - mainFields: ['module', 'main'] - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/debug-server-ready/.vscodeignore b/extensions/debug-server-ready/.vscodeignore index 04b88eb4a45..7b79c7b47b4 100644 --- a/extensions/debug-server-ready/.vscodeignore +++ b/extensions/debug-server-ready/.vscodeignore @@ -1,6 +1,6 @@ src/** tsconfig*.json out/** -extension.webpack.config.js +esbuild*.mts package-lock.json .vscode diff --git a/extensions/debug-server-ready/extension.webpack.config.js b/extensions/debug-server-ready/esbuild.mts similarity index 51% rename from extensions/debug-server-ready/extension.webpack.config.js rename to extensions/debug-server-ready/esbuild.mts index 0c857b362f5..2b75ca703da 100644 --- a/extensions/debug-server-ready/extension.webpack.config.js +++ b/extensions/debug-server-ready/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: { - extension: './src/extension.ts', +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'), }, - resolve: { - mainFields: ['module', 'main'] - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/.vscodeignore b/extensions/git-base/.vscodeignore index 835918d9403..44bb9f7ee78 100644 --- a/extensions/git-base/.vscodeignore +++ b/extensions/git-base/.vscodeignore @@ -1,7 +1,6 @@ src/** build/** cgmanifest.json -extension.webpack.config.js -extension-browser.webpack.config.js +esbuild*.mts tsconfig*.json diff --git a/extensions/git-base/esbuild.browser.mts b/extensions/git-base/esbuild.browser.mts new file mode 100644 index 00000000000..bf525ffa1ef --- /dev/null +++ b/extensions/git-base/esbuild.browser.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', 'browser'); + +run({ + platform: 'browser', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/extension-browser.webpack.config.js b/extensions/git-base/esbuild.mts similarity index 51% rename from extensions/git-base/extension-browser.webpack.config.js rename to extensions/git-base/esbuild.mts index fcdf954744c..2b75ca703da 100644 --- a/extensions/git-base/extension-browser.webpack.config.js +++ b/extensions/git-base/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 { 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/extension.ts' +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'), }, - output: { - filename: 'extension.js' - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/tsconfig.browser.json b/extensions/git-base/tsconfig.browser.json new file mode 100644 index 00000000000..dbacbb22fdf --- /dev/null +++ b/extensions/git-base/tsconfig.browser.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ] +} diff --git a/extensions/ipynb/.vscodeignore b/extensions/ipynb/.vscodeignore index 8805685e222..6823ef2cb7a 100644 --- a/extensions/ipynb/.vscodeignore +++ b/extensions/ipynb/.vscodeignore @@ -3,8 +3,6 @@ src/** notebook-src/** out/** tsconfig*.json -extension.webpack.config.js -extension-browser.webpack.config.js +esbuild*.mts package-lock.json .gitignore -esbuild.* diff --git a/extensions/ipynb/esbuild.browser.mts b/extensions/ipynb/esbuild.browser.mts new file mode 100644 index 00000000000..6b08f26043b --- /dev/null +++ b/extensions/ipynb/esbuild.browser.mts @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * 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: { + 'ipynbMain.browser': path.join(srcDir, 'ipynbMain.browser.ts'), + 'notebookSerializerWorker': path.join(srcDir, 'notebookSerializerWorker.web.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/ipynb/esbuild.mts b/extensions/ipynb/esbuild.mts new file mode 100644 index 00000000000..3aebefcf4df --- /dev/null +++ b/extensions/ipynb/esbuild.mts @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * 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: { + 'ipynbMain.node': path.join(srcDir, 'ipynbMain.node.ts'), + 'notebookSerializerWorker': path.join(srcDir, 'notebookSerializerWorker.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/ipynb/extension-browser.webpack.config.js b/extensions/ipynb/extension-browser.webpack.config.js deleted file mode 100644 index 08a0edc8ad0..00000000000 --- a/extensions/ipynb/extension-browser.webpack.config.js +++ /dev/null @@ -1,34 +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 { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -import path from 'path'; - -const mainConfig = withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/ipynbMain.browser.ts' - }, - output: { - filename: 'ipynbMain.browser.js', - path: path.join(import.meta.dirname, 'dist', 'browser') - } -}); - - -const workerConfig = withBrowserDefaults({ - context: import.meta.dirname, - entry: { - notebookSerializerWorker: './src/notebookSerializerWorker.web.ts', - }, - output: { - filename: 'notebookSerializerWorker.js', - path: path.join(import.meta.dirname, 'dist', 'browser'), - libraryTarget: 'var', - library: 'serverExportVar' - }, -}); - -export default [mainConfig, workerConfig]; diff --git a/extensions/ipynb/extension.webpack.config.js b/extensions/ipynb/extension.webpack.config.js deleted file mode 100644 index 2bfea01dd91..00000000000 --- a/extensions/ipynb/extension.webpack.config.js +++ /dev/null @@ -1,22 +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, { nodePlugins } from '../shared.webpack.config.mjs'; -import path from 'path'; - -export default withDefaults({ - context: import.meta.dirname, - entry: { - ['ipynbMain.node']: './src/ipynbMain.node.ts', - notebookSerializerWorker: './src/notebookSerializerWorker.ts', - }, - output: { - path: path.resolve(import.meta.dirname, 'dist'), - filename: '[name].js' - }, - plugins: [ - ...nodePlugins(import.meta.dirname), // add plugins, don't replace inherited - ] -}); diff --git a/extensions/ipynb/tsconfig.browser.json b/extensions/ipynb/tsconfig.browser.json new file mode 100644 index 00000000000..cdcf648641c --- /dev/null +++ b/extensions/ipynb/tsconfig.browser.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ], + "files": [ + "./src/ipynbMain.browser.ts" + ] +} diff --git a/extensions/media-preview/package.json b/extensions/media-preview/package.json index f1ee36118f2..838a94e6396 100644 --- a/extensions/media-preview/package.json +++ b/extensions/media-preview/package.json @@ -156,8 +156,12 @@ "watch": "npm run build-preview && gulp watch-extension:media-preview", "vscode:prepublish": "npm run build-ext", "build-ext": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.mjs compile-extension:media-preview ./tsconfig.json", - "compile-web": "npx webpack-cli --config extension-browser.webpack.config --mode none", - "watch-web": "npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose" + "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": { "@vscode/extension-telemetry": "^0.9.8", diff --git a/extensions/mermaid-chat-features/package.json b/extensions/mermaid-chat-features/package.json index ba67e03fdce..fed905d2651 100644 --- a/extensions/mermaid-chat-features/package.json +++ b/extensions/mermaid-chat-features/package.json @@ -118,8 +118,12 @@ "vscode:prepublish": "npm run build-ext && npm run build-chat-webview", "build-ext": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.mjs compile-extension:mermaid-chat-features", "build-chat-webview": "node ./esbuild.webview.mts", - "compile-web": "npx webpack-cli --config extension-browser.webpack.config --mode none", - "watch-web": "npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose" + "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" }, "devDependencies": { "@types/node": "^22.18.10", diff --git a/extensions/microsoft-authentication/.vscodeignore b/extensions/microsoft-authentication/.vscodeignore index 3e683c7e56d..e61623be63b 100644 --- a/extensions/microsoft-authentication/.vscodeignore +++ b/extensions/microsoft-authentication/.vscodeignore @@ -2,7 +2,7 @@ .vscode-test/** out/test/** out/** -extension.webpack.config.js +esbuild*.mts package-lock.json src/** .gitignore diff --git a/extensions/microsoft-authentication/esbuild.mts b/extensions/microsoft-authentication/esbuild.mts new file mode 100644 index 00000000000..38e288a2bcc --- /dev/null +++ b/extensions/microsoft-authentication/esbuild.mts @@ -0,0 +1,67 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as fs from 'node:fs'; +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'); + +const isWindows = process.platform === 'win32'; +const isMacOS = process.platform === 'darwin'; +const isLinux = !isWindows && !isMacOS; + +const windowsArches = ['x64']; +const linuxArches = ['x64']; + +let platformFolder: string; +switch (process.platform) { + case 'win32': platformFolder = 'windows'; break; + case 'darwin': platformFolder = 'macos'; break; + case 'linux': platformFolder = 'linux'; break; + default: platformFolder = ''; +} + +const arch = process.env.VSCODE_ARCH || process.arch; + +/** + * Copy native MSAL runtime binaries to the output directory. + */ +async function copyNativeMsalFiles(outDir: string): Promise { + if ( + !(isWindows && windowsArches.includes(arch)) && + !isMacOS && + !(isLinux && linuxArches.includes(arch)) + ) { + return; + } + + const msalRuntimeDir = path.join(import.meta.dirname, 'node_modules', '@azure', 'msal-node-runtime', 'dist', platformFolder, arch); + try { + const files = await fs.promises.readdir(msalRuntimeDir); + for (const file of files) { + if (/^(lib)?msal.*\.(node|dll|dylib|so)$/.test(file)) { + await fs.promises.copyFile(path.join(msalRuntimeDir, file), path.join(outDir, file)); + } + } + } catch { + // Skip if directory doesn't exist (unsupported platform/arch) + } +} + +run({ + platform: 'node', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), + }, + srcDir, + outdir: outDir, + additionalOptions: { + external: ['vscode', './msal-node-runtime'], + alias: { + 'keytar': path.resolve(import.meta.dirname, 'packageMocks', 'keytar', 'index.js'), + }, + }, +}, process.argv, copyNativeMsalFiles); diff --git a/extensions/microsoft-authentication/extension.webpack.config.js b/extensions/microsoft-authentication/extension.webpack.config.js deleted file mode 100644 index a46d5a527df..00000000000 --- a/extensions/microsoft-authentication/extension.webpack.config.js +++ /dev/null @@ -1,69 +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, { nodePlugins } from '../shared.webpack.config.mjs'; -import CopyWebpackPlugin from 'copy-webpack-plugin'; -import path from 'path'; - -const isWindows = process.platform === 'win32'; -const isMacOS = process.platform === 'darwin'; -const isLinux = !isWindows && !isMacOS; - -const windowsArches = ['x64']; -const linuxArches = ['x64']; - -let platformFolder; -switch (process.platform) { - case 'win32': - platformFolder = 'windows'; - break; - case 'darwin': - platformFolder = 'macos'; - break; - case 'linux': - platformFolder = 'linux'; - break; - default: - throw new Error(`Unsupported platform: ${process.platform}`); -} - -const arch = process.env.VSCODE_ARCH || process.arch; -console.log(`Building Microsoft Authentication Extension for ${process.platform} (${arch})`); - -const plugins = [...nodePlugins(import.meta.dirname)]; -if ( - (isWindows && windowsArches.includes(arch)) || - isMacOS || - (isLinux && linuxArches.includes(arch)) -) { - plugins.push(new CopyWebpackPlugin({ - patterns: [ - { - // The native files we need to ship with the extension - from: `**/dist/${platformFolder}/${arch}/(lib|)msal*.(node|dll|dylib|so)`, - to: '[name][ext]' - } - ] - })); -} - -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.ts' - }, - externals: { - // The @azure/msal-node-runtime package requires this native node module (.node). - // It is currently only included on Windows, but the package handles unsupported platforms - // gracefully. - './msal-node-runtime': 'commonjs ./msal-node-runtime' - }, - resolve: { - alias: { - 'keytar': path.resolve(import.meta.dirname, 'packageMocks', 'keytar', 'index.js') - } - }, - plugins -}); diff --git a/extensions/vscode-test-resolver/.vscodeignore b/extensions/vscode-test-resolver/.vscodeignore index 43e7067afbd..ec136872c17 100644 --- a/extensions/vscode-test-resolver/.vscodeignore +++ b/extensions/vscode-test-resolver/.vscodeignore @@ -4,3 +4,4 @@ typings/** **/*.map .gitignore tsconfig*.json +esbuild*.mts diff --git a/extensions/vscode-test-resolver/esbuild.browser.mts b/extensions/vscode-test-resolver/esbuild.browser.mts new file mode 100644 index 00000000000..29f504d6987 --- /dev/null +++ b/extensions/vscode-test-resolver/esbuild.browser.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', 'browser'); + +run({ + platform: 'browser', + entryPoints: { + 'testResolverMain': path.join(srcDir, 'extension.browser.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/extension.webpack.config.js b/extensions/vscode-test-resolver/esbuild.mts similarity index 51% rename from extensions/git-base/extension.webpack.config.js rename to extensions/vscode-test-resolver/esbuild.mts index 0bea7c7e821..2b75ca703da 100644 --- a/extensions/git-base/extension.webpack.config.js +++ b/extensions/vscode-test-resolver/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: { - extension: './src/extension.ts' +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'), }, - output: { - filename: 'extension.js' - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/vscode-test-resolver/extension-browser.webpack.config.js b/extensions/vscode-test-resolver/extension-browser.webpack.config.js deleted file mode 100644 index 9aeb636997b..00000000000 --- a/extensions/vscode-test-resolver/extension-browser.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 { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; - -export default withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.browser.ts' - }, - output: { - filename: 'testResolverMain.js' - } -}); diff --git a/extensions/vscode-test-resolver/tsconfig.browser.json b/extensions/vscode-test-resolver/tsconfig.browser.json new file mode 100644 index 00000000000..790349e7fec --- /dev/null +++ b/extensions/vscode-test-resolver/tsconfig.browser.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ], + "files": [ + "./src/extension.browser.ts" + ] +}