From f5827dab395d8bcffda3f4c6a5dec14c37c5470d Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Tue, 10 Feb 2026 12:39:41 -0800 Subject: [PATCH] Adopt esbuild for bundling more builtin extensions Follow up on #294208 --- eslint.config.js | 6 +++-- extensions/markdown-math/esbuild-browser.ts | 26 +++++++++++++++++++ .../esbuild.ts} | 21 ++++++++------- .../extension-browser.webpack.config.js | 13 ---------- extensions/media-preview/esbuild-browser.ts | 26 +++++++++++++++++++ .../esbuild.ts} | 21 ++++++++------- .../media-preview/extension.webpack.config.js | 16 ------------ .../mermaid-chat-features/esbuild-browser.ts | 26 +++++++++++++++++++ .../esbuild.ts} | 18 ++++++++----- .../extension-browser.webpack.config.js | 13 ---------- 10 files changed, 115 insertions(+), 71 deletions(-) create mode 100644 extensions/markdown-math/esbuild-browser.ts rename extensions/{mermaid-chat-features/extension.webpack.config.js => markdown-math/esbuild.ts} (53%) delete mode 100644 extensions/markdown-math/extension-browser.webpack.config.js create mode 100644 extensions/media-preview/esbuild-browser.ts rename extensions/{markdown-math/extension.webpack.config.js => media-preview/esbuild.ts} (53%) delete mode 100644 extensions/media-preview/extension.webpack.config.js create mode 100644 extensions/mermaid-chat-features/esbuild-browser.ts rename extensions/{media-preview/extension-browser.webpack.config.js => mermaid-chat-features/esbuild.ts} (53%) delete mode 100644 extensions/mermaid-chat-features/extension-browser.webpack.config.js diff --git a/eslint.config.js b/eslint.config.js index fa55c74032c..21c0ae56151 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -2067,8 +2067,10 @@ export default tseslint.config( 'extensions/markdown-language-features/src/**/*.ts', 'extensions/markdown-language-features/notebook/**/*.ts', 'extensions/markdown-language-features/preview-src/**/*.ts', - 'extensions/mermaid-chat-features/**/*.ts', - 'extensions/media-preview/**/*.ts', + 'extensions/mermaid-chat-features/chat-webview-src/*.ts', + 'extensions/mermaid-chat-features/src/*.ts', + 'extensions/media-preview/preview-src/*.ts', + 'extensions/media-preview/src/*.ts', 'extensions/simple-browser/**/*.ts', 'extensions/typescript-language-features/**/*.ts', ], diff --git a/extensions/markdown-math/esbuild-browser.ts b/extensions/markdown-math/esbuild-browser.ts new file mode 100644 index 00000000000..a2659e5ff46 --- /dev/null +++ b/extensions/markdown-math/esbuild-browser.ts @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * 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.ts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + 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'), + }, + }, +}, process.argv); diff --git a/extensions/mermaid-chat-features/extension.webpack.config.js b/extensions/markdown-math/esbuild.ts similarity index 53% rename from extensions/mermaid-chat-features/extension.webpack.config.js rename to extensions/markdown-math/esbuild.ts index 4928186ae55..232f589197b 100644 --- a/extensions/mermaid-chat-features/extension.webpack.config.js +++ b/extensions/markdown-math/esbuild.ts @@ -2,15 +2,16 @@ * 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.ts'; -export default withDefaults({ - context: import.meta.dirname, - resolve: { - mainFields: ['module', 'main'] +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), }, - entry: { - extension: './src/extension.ts', - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/markdown-math/extension-browser.webpack.config.js b/extensions/markdown-math/extension-browser.webpack.config.js deleted file mode 100644 index b758f2d8155..00000000000 --- a/extensions/markdown-math/extension-browser.webpack.config.js +++ /dev/null @@ -1,13 +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.ts' - } -}); diff --git a/extensions/media-preview/esbuild-browser.ts b/extensions/media-preview/esbuild-browser.ts new file mode 100644 index 00000000000..a2659e5ff46 --- /dev/null +++ b/extensions/media-preview/esbuild-browser.ts @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * 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.ts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + 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'), + }, + }, +}, process.argv); diff --git a/extensions/markdown-math/extension.webpack.config.js b/extensions/media-preview/esbuild.ts similarity index 53% rename from extensions/markdown-math/extension.webpack.config.js rename to extensions/media-preview/esbuild.ts index 4928186ae55..232f589197b 100644 --- a/extensions/markdown-math/extension.webpack.config.js +++ b/extensions/media-preview/esbuild.ts @@ -2,15 +2,16 @@ * 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.ts'; -export default withDefaults({ - context: import.meta.dirname, - resolve: { - mainFields: ['module', 'main'] +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), }, - entry: { - extension: './src/extension.ts', - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/media-preview/extension.webpack.config.js b/extensions/media-preview/extension.webpack.config.js deleted file mode 100644 index 4928186ae55..00000000000 --- a/extensions/media-preview/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, - resolve: { - mainFields: ['module', 'main'] - }, - entry: { - extension: './src/extension.ts', - } -}); diff --git a/extensions/mermaid-chat-features/esbuild-browser.ts b/extensions/mermaid-chat-features/esbuild-browser.ts new file mode 100644 index 00000000000..a2659e5ff46 --- /dev/null +++ b/extensions/mermaid-chat-features/esbuild-browser.ts @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * 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.ts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + 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'), + }, + }, +}, process.argv); diff --git a/extensions/media-preview/extension-browser.webpack.config.js b/extensions/mermaid-chat-features/esbuild.ts similarity index 53% rename from extensions/media-preview/extension-browser.webpack.config.js rename to extensions/mermaid-chat-features/esbuild.ts index 6c86474b4e5..232f589197b 100644 --- a/extensions/media-preview/extension-browser.webpack.config.js +++ b/extensions/mermaid-chat-features/esbuild.ts @@ -2,12 +2,16 @@ * 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.ts'; -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({ + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), }, -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/mermaid-chat-features/extension-browser.webpack.config.js b/extensions/mermaid-chat-features/extension-browser.webpack.config.js deleted file mode 100644 index b758f2d8155..00000000000 --- a/extensions/mermaid-chat-features/extension-browser.webpack.config.js +++ /dev/null @@ -1,13 +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.ts' - } -});