Skip to content

Commit 55e8486

Browse files
authored
refactor: modernize build pipeline, fix module resolution, and upgrade dependencies (#837)
Parallelize the build pipeline to run webview and extension bundling concurrently, reducing build time from ~3.3s to ~1s. Separate type-checking into a dedicated `typecheck` script and remove unused composite project references. Switch TypeScript to Bundler module resolution for compatibility with proxy-agent v7's `exports` field, and update the React Compiler setup for @vitejs/plugin-react v6 using @rolldown/plugin-babel. Upgrade proxy-agent to v7, @vitejs/plugin-react to v6, vite to v8, electron to v41, vitest to v4.1, esbuild to v0.27.4, and various linting/tooling dependencies.
1 parent 6988336 commit 55e8486

File tree

20 files changed

+1065
-855
lines changed

20 files changed

+1065
-855
lines changed

.github/workflows/ci.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ jobs:
118118
PACKAGE_NAME="${EXTENSION_NAME}-${{ steps.version.outputs.version }}-${SHORT_SHA}.vsix"
119119
echo "packageName=$PACKAGE_NAME" >> $GITHUB_OUTPUT
120120
121+
- name: Build extension
122+
run: pnpm build:production
123+
121124
- name: Package extension
122125
run: pnpm vsce package --no-dependencies --out "${{ steps.setup.outputs.packageName }}"
123126

.github/workflows/pre-release.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ jobs:
5757
PACKAGE_NAME="${EXTENSION_NAME}-${{ steps.version.outputs.version }}-pre.vsix"
5858
echo "packageName=$PACKAGE_NAME" >> $GITHUB_OUTPUT
5959
60+
- name: Build extension
61+
run: pnpm build:production
62+
6063
- name: Package extension
6164
run: pnpm vsce package --no-dependencies --pre-release --out "${{ steps.setup.outputs.packageName }}"
6265

.github/workflows/release.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ jobs:
5757
PACKAGE_NAME="${EXTENSION_NAME}-${{ steps.version.outputs.version }}.vsix"
5858
echo "packageName=$PACKAGE_NAME" >> $GITHUB_OUTPUT
5959
60+
- name: Build extension
61+
run: pnpm build:production
62+
6063
- name: Package extension
6164
run: pnpm vsce package --no-dependencies --out "${{ steps.setup.outputs.packageName }}"
6265

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,5 @@
88
pnpm-debug.log
99
.eslintcache
1010

11-
# Webview packages build artifacts
11+
# Workspace packages
1212
packages/*/node_modules/
13-
packages/*/dist/
14-
packages/*/*.tsbuildinfo

esbuild.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// @ts-check
22
import { context, build } from "esbuild";
33

4-
const production = process.argv.includes("--production");
4+
const production = process.env.NODE_ENV === "production";
55
const watch = process.argv.includes("--watch");
66

77
/** @type {import("esbuild").Plugin} */

eslint.config.mjs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ export default defineConfig(
1414
globalIgnores([
1515
"out/**",
1616
"dist/**",
17-
"packages/*/dist/**",
1817
"**/*.d.ts",
1918
"vitest.config.ts",
2019
"**/vite.config*.ts",

package.json

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,22 @@
1818
"type": "commonjs",
1919
"main": "./dist/extension.js",
2020
"scripts": {
21-
"build": "pnpm build:webviews && tsc --noEmit && node esbuild.mjs",
22-
"build:production": "NODE_ENV=production pnpm build:webviews && tsc --noEmit && node esbuild.mjs --production",
23-
"build:webviews": "pnpm -r --filter \"./packages/*\" build",
21+
"build": "concurrently -g -n webviews,extension \"pnpm build:webviews\" \"node esbuild.mjs\"",
22+
"build:production": "NODE_ENV=production pnpm build",
23+
"build:webviews": "pnpm -r --filter \"./packages/*\" --parallel build",
2424
"format": "prettier --write --cache --cache-strategy content .",
2525
"format:check": "prettier --check --cache --cache-strategy content .",
2626
"lint": "eslint --cache --cache-strategy content .",
2727
"lint:fix": "pnpm lint --fix",
28-
"package": "vsce package --no-dependencies",
29-
"package:prerelease": "vsce package --pre-release --no-dependencies",
28+
"package": "pnpm build:production && vsce package --no-dependencies",
29+
"package:prerelease": "pnpm build:production && vsce package --pre-release --no-dependencies",
3030
"test": "CI=true pnpm test:extension && CI=true pnpm test:webview",
3131
"test:extension": "ELECTRON_RUN_AS_NODE=1 electron node_modules/vitest/vitest.mjs --project extension",
32-
"test:integration": "tsc -p test --outDir out --noCheck && node esbuild.mjs && vscode-test",
32+
"test:integration": "tsc -p test/integration --outDir out --noCheck && node esbuild.mjs && vscode-test",
3333
"test:webview": "vitest --project webview",
34-
"typecheck": "concurrently -g \"tsc --noEmit\" \"tsc --noEmit -p test\"",
35-
"vscode:prepublish": "pnpm build:production",
36-
"watch": "concurrently -n extension,webviews \"pnpm watch:extension\" \"pnpm watch:webviews\"",
34+
"typecheck": "concurrently -g -n extension,tests,packages \"tsc --noEmit\" \"tsc --noEmit -p test\" \"pnpm typecheck:packages\"",
35+
"typecheck:packages": "pnpm -r --filter \"./packages/*\" --parallel typecheck",
36+
"watch": "concurrently -g -n extension,webviews \"pnpm watch:extension\" \"pnpm watch:webviews\"",
3737
"watch:extension": "node esbuild.mjs --watch",
3838
"watch:webviews": "pnpm -r --filter \"./packages/*\" --parallel dev"
3939
},
@@ -478,7 +478,7 @@
478478
"openpgp": "^6.3.0",
479479
"pretty-bytes": "^7.1.0",
480480
"proper-lockfile": "^4.1.2",
481-
"proxy-agent": "^6.5.0",
481+
"proxy-agent": "^7.0.0",
482482
"semver": "^7.7.4",
483483
"strip-ansi": "^7.2.0",
484484
"ua-parser-js": "^1.0.41",
@@ -489,6 +489,7 @@
489489
"@eslint-react/eslint-plugin": "^2.13.0",
490490
"@eslint/js": "^10.0.1",
491491
"@eslint/markdown": "^7.5.1",
492+
"@rolldown/plugin-babel": "catalog:",
492493
"@tanstack/react-query": "catalog:",
493494
"@testing-library/jest-dom": "^6.9.1",
494495
"@testing-library/react": "^16.3.2",
@@ -502,42 +503,42 @@
502503
"@types/ua-parser-js": "0.7.39",
503504
"@types/vscode": "^1.95.0",
504505
"@types/ws": "^8.18.1",
505-
"@typescript-eslint/eslint-plugin": "^8.56.1",
506-
"@typescript-eslint/parser": "^8.56.1",
506+
"@typescript-eslint/eslint-plugin": "^8.57.0",
507+
"@typescript-eslint/parser": "^8.57.0",
507508
"@vitejs/plugin-react": "catalog:",
508-
"@vitest/coverage-v8": "^4.0.18",
509+
"@vitest/coverage-v8": "^4.1.0",
509510
"@vscode/test-cli": "^0.0.12",
510511
"@vscode/test-electron": "^2.5.2",
511512
"@vscode/vsce": "^3.7.1",
512513
"babel-plugin-react-compiler": "catalog:",
513514
"bufferutil": "^4.1.0",
514515
"coder": "catalog:",
515516
"concurrently": "^9.2.1",
516-
"dayjs": "^1.11.19",
517-
"electron": "^40.6.1",
518-
"esbuild": "^0.27.3",
519-
"eslint": "^10.0.2",
517+
"dayjs": "^1.11.20",
518+
"electron": "^41.0.0",
519+
"esbuild": "^0.27.4",
520+
"eslint": "^10.0.3",
520521
"eslint-config-prettier": "^10.1.8",
521522
"eslint-import-resolver-typescript": "^4.4.4",
522-
"eslint-plugin-import-x": "^4.16.1",
523-
"eslint-plugin-package-json": "^0.89.2",
523+
"eslint-plugin-import-x": "^4.16.2",
524+
"eslint-plugin-package-json": "^0.90.1",
524525
"globals": "^17.4.0",
525526
"jsdom": "^28.1.0",
526527
"jsonc-eslint-parser": "^3.1.0",
527-
"memfs": "^4.56.10",
528+
"memfs": "^4.56.11",
528529
"prettier": "^3.8.1",
529530
"react": "catalog:",
530531
"react-dom": "catalog:",
531532
"typescript": "catalog:",
532-
"typescript-eslint": "^8.56.1",
533+
"typescript-eslint": "^8.57.0",
533534
"utf-8-validate": "^6.0.6",
534535
"vite": "catalog:",
535-
"vitest": "^4.0.18"
536+
"vitest": "^4.1.0"
536537
},
537538
"extensionPack": [
538539
"ms-vscode-remote.remote-ssh"
539540
],
540-
"packageManager": "pnpm@10.30.3",
541+
"packageManager": "pnpm@10.32.1",
541542
"engines": {
542543
"vscode": "^1.95.0",
543544
"node": ">= 20"

packages/shared/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
"default": "./src/index.ts"
1111
}
1212
},
13+
"scripts": {
14+
"typecheck": "tsc --noEmit"
15+
},
1316
"devDependencies": {
1417
"typescript": "catalog:"
1518
}

packages/shared/tsconfig.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
11
{
22
"extends": "../tsconfig.packages.json",
3-
"compilerOptions": {
4-
"composite": true,
5-
"declaration": true,
6-
"noEmit": false,
7-
"outDir": "dist",
8-
"rootDir": "src",
9-
"tsBuildInfoFile": "dist/.tsbuildinfo"
10-
},
113
"include": ["src"]
124
}

packages/tasks/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
"private": true,
66
"type": "module",
77
"scripts": {
8-
"build": "tsc -b && vite build",
9-
"dev": "vite build --watch"
8+
"build": "vite build",
9+
"dev": "vite build --watch",
10+
"typecheck": "tsc --noEmit"
1011
},
1112
"dependencies": {
1213
"@repo/shared": "workspace:*",
@@ -19,6 +20,7 @@
1920
"react-dom": "catalog:"
2021
},
2122
"devDependencies": {
23+
"@rolldown/plugin-babel": "catalog:",
2224
"@types/react": "catalog:",
2325
"@types/react-dom": "catalog:",
2426
"@vitejs/plugin-react": "catalog:",

0 commit comments

Comments
 (0)