Skip to content

Commit 41e12a8

Browse files
committed
✨ feat(settings-webview): integrate settings-webview with extension
- implement settings webview using react and fluentui - add esbuild configs for building the settings webview - add vscode api typings
1 parent 59f519d commit 41e12a8

File tree

12 files changed

+8396
-7776
lines changed

12 files changed

+8396
-7776
lines changed

.vscodeignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ webview-ui/package-lock.json
4444
webview-ui/node_modules/**
4545
**/.gitignore
4646

47+
# Ignore all settings-webview files except the build directory (https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/frameworks/hello-world-react-cra/.vscodeignore)
48+
settings-webview/src/**
49+
settings-webview/public/**
50+
settings-webview/scripts/**
51+
settings-webview/index.html
52+
settings-webview/README.md
53+
settings-webview/package.json
54+
settings-webview/package-lock.json
55+
settings-webview/node_modules/**
56+
57+
4758
# Fix issue where codicons don't get packaged (https://github.com/microsoft/vscode-extension-samples/issues/692)
4859
!node_modules/@vscode/codicons/dist/codicon.css
4960
!node_modules/@vscode/codicons/dist/codicon.ttf

esbuild.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const esbuild = require("esbuild")
22
const fs = require("fs")
3+
const fsExtra = require("fs-extra")
34
const path = require("path")
45

56
const production = process.argv.includes("--production")
@@ -160,6 +161,39 @@ const copyLocalesFiles = {
160161
},
161162
}
162163

164+
const copyWebviewFiles = {
165+
name: "copy-webview-files",
166+
setup(build) {
167+
build.onEnd(() => {
168+
// Copy webview-ui build output to dist folder
169+
const webviewBuildFolder = path.join(__dirname, "webview-ui", "build")
170+
const webviewTargetFolder = path.join(__dirname, "dist", "webview-ui")
171+
if (fs.existsSync(webviewBuildFolder)) {
172+
fs.mkdirSync(webviewTargetFolder, { recursive: true })
173+
fsExtra.copySync(webviewBuildFolder, webviewTargetFolder)
174+
console.log("Copied webview-ui files to dist/webview-ui")
175+
} else {
176+
console.warn("webview-ui/build folder does not exist. Skipping copy.")
177+
}
178+
179+
// Copy settings-webview build output to dist folder
180+
const settingsWebviewDistFolder = path.join(__dirname, "settings-webview", "dist")
181+
const settingsWebviewTargetFolder = path.join(__dirname, "dist", "settings-webview")
182+
if (fs.existsSync(settingsWebviewDistFolder)) {
183+
// Clean the target folder if it exists
184+
if (fs.existsSync(settingsWebviewTargetFolder)) {
185+
fsExtra.removeSync(settingsWebviewTargetFolder)
186+
}
187+
fs.mkdirSync(settingsWebviewTargetFolder, { recursive: true })
188+
fsExtra.copySync(settingsWebviewDistFolder, settingsWebviewTargetFolder)
189+
console.log("Copied settings-webview files to dist/settings-webview")
190+
} else {
191+
console.warn("settings-webview/dist folder does not exist. Skipping copy.")
192+
}
193+
})
194+
},
195+
}
196+
163197
const extensionConfig = {
164198
bundle: true,
165199
minify: production,
@@ -168,6 +202,7 @@ const extensionConfig = {
168202
plugins: [
169203
copyWasmFiles,
170204
copyLocalesFiles,
205+
copyWebviewFiles,
171206
/* add to the end of plugins array */
172207
esbuildProblemMatcherPlugin,
173208
{

package-lock.json

Lines changed: 137 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,14 +363,17 @@
363363
"install:all": "npm install npm-run-all && npm-run-all -l -p install-*",
364364
"install-extension": "npm install",
365365
"install-webview": "cd webview-ui && npm install",
366+
"install-settings-webview": "cd settings-webview && npm install",
366367
"install-e2e": "cd e2e && npm install",
367368
"lint": "npm-run-all -l -p lint:*",
368369
"lint:extension": "eslint src --ext ts",
369370
"lint:webview": "cd webview-ui && npm run lint",
371+
"lint:settings-webview": "cd settings-webview && npm run lint",
370372
"lint:e2e": "cd e2e && npm run lint",
371373
"check-types": "npm-run-all -l -p check-types:*",
372374
"check-types:extension": "tsc --noEmit",
373375
"check-types:webview": "cd webview-ui && npm run check-types",
376+
"check-types:settings-webview": "cd settings-webview && npm run check-types",
374377
"check-types:e2e": "cd e2e && npm run check-types",
375378
"package": "npm-run-all -l -p build:webview build:settings-webview build:esbuild check-types lint",
376379
"pretest": "npm run compile",
@@ -379,6 +382,7 @@
379382
"test": "node scripts/run-tests.js",
380383
"test:extension": "jest",
381384
"test:webview": "cd webview-ui && npm run test",
385+
"test:settings-webview": "cd settings-webview && npm run test",
382386
"prepare": "husky",
383387
"publish:marketplace": "vsce publish && ovsx publish",
384388
"publish": "npm run build && changeset publish && npm install --package-lock-only",
@@ -394,10 +398,12 @@
394398
"clean": "npm-run-all -l -p clean:*",
395399
"clean:extension": "rimraf bin dist out",
396400
"clean:webview": "cd webview-ui && npm run clean",
401+
"clean:settings-webview": "cd settings-webview && npm run clean",
397402
"clean:e2e": "cd e2e && npm run clean",
398403
"vscode-test": "npm-run-all -l -p vscode-test:*",
399404
"vscode-test:extension": "tsc -p . --outDir out && node esbuild.js",
400405
"vscode-test:webview": "cd webview-ui && npm run build",
406+
"vscode-test:settings-webview": "cd settings-webview && npm run build",
401407
"update-contributors": "node scripts/update-contributors.js",
402408
"generate-types": "tsx scripts/generate-types.mts"
403409
},
@@ -477,6 +483,7 @@
477483
"esbuild": "^0.24.0",
478484
"eslint": "^8.57.0",
479485
"execa": "^9.5.2",
486+
"fs-extra": "^11.3.0",
480487
"glob": "^11.0.1",
481488
"husky": "^9.1.7",
482489
"jest": "^29.7.0",

0 commit comments

Comments
 (0)