Skip to content

Commit 3651c29

Browse files
committed
Add web extension support
1 parent 0a7cde2 commit 3651c29

File tree

9 files changed

+1811
-97
lines changed

9 files changed

+1811
-97
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ language-configuration.json
1010
# Dependencies
1111
node_modules/
1212
.vscode-test/
13+
.vscode-test-web/
1314

1415
# Packaged extensions
1516
**/*.vsix

.vscode/launch.json

Lines changed: 87 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,62 +7,91 @@
77
// Hover to view descriptions of existing attributes.
88
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
99
{
10-
"version": "0.2.0",
11-
"configurations": [
12-
{
13-
"name": "Launch Extension",
14-
"type": "pwa-extensionHost",
15-
"request": "launch",
16-
"runtimeExecutable": "${execPath}",
17-
"args": [
18-
"--disable-extensions",
19-
"--extensionDevelopmentPath=${workspaceFolder}"
20-
],
21-
"outFiles": [
22-
"${workspaceFolder}/dist/**/*.js"
23-
],
24-
"preLaunchTask": "npm: compile"
25-
},
26-
{
27-
"name": "Launch Extension with Other Extensions",
28-
"type": "pwa-extensionHost",
29-
"request": "launch",
30-
"runtimeExecutable": "${execPath}",
31-
"args": [
32-
"--extensionDevelopmentPath=${workspaceFolder}"
33-
],
34-
"outFiles": [
35-
"${workspaceFolder}/dist/**/*.js"
36-
],
37-
"preLaunchTask": "npm: compile"
38-
},
39-
{
40-
"name": "Launch Extension of The Last Building",
41-
"type": "pwa-extensionHost",
42-
"request": "launch",
43-
"runtimeExecutable": "${execPath}",
44-
"args": [
45-
"--disable-extensions",
46-
"--extensionDevelopmentPath=${workspaceFolder}"
47-
],
48-
"outFiles": [
49-
"${workspaceFolder}/dist/**/*.js"
50-
],
51-
},
52-
{
53-
"name": "Extension Tests",
54-
"type": "pwa-extensionHost",
55-
"request": "launch",
56-
"runtimeExecutable": "${execPath}",
57-
"args": [
58-
// "--disable-extensions",
59-
"--extensionDevelopmentPath=${workspaceFolder}",
60-
"--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
61-
],
62-
"outFiles": [
63-
"${workspaceFolder}/out/test/**/*.js"
64-
],
65-
"preLaunchTask": "npm: pretest"
66-
}
67-
]
10+
"version": "0.2.0",
11+
"configurations": [
12+
{
13+
"name": "Launch Extension",
14+
"type": "extensionHost",
15+
"request": "launch",
16+
"runtimeExecutable": "${execPath}",
17+
"args": [
18+
"--disable-extensions",
19+
"--extensionDevelopmentPath=${workspaceFolder}"
20+
],
21+
"outFiles": [
22+
"${workspaceFolder}/dist/**/*.js"
23+
],
24+
"preLaunchTask": "npm: pretest"
25+
},
26+
{
27+
"name": "Launch Extension with Other Extensions",
28+
"type": "extensionHost",
29+
"request": "launch",
30+
"runtimeExecutable": "${execPath}",
31+
"args": [
32+
"--extensionDevelopmentPath=${workspaceFolder}"
33+
],
34+
"outFiles": [
35+
"${workspaceFolder}/dist/**/*.js"
36+
],
37+
"preLaunchTask": "npm: pretest"
38+
},
39+
{
40+
"name": "Launch Extension of The Last Building",
41+
"type": "extensionHost",
42+
"request": "launch",
43+
"runtimeExecutable": "${execPath}",
44+
"args": [
45+
"--disable-extensions",
46+
"--extensionDevelopmentPath=${workspaceFolder}"
47+
],
48+
"outFiles": [
49+
"${workspaceFolder}/dist/**/*.js"
50+
],
51+
},
52+
{
53+
"name": "Extension Tests",
54+
"type": "extensionHost",
55+
"request": "launch",
56+
"runtimeExecutable": "${execPath}",
57+
"args": [
58+
// "--disable-extensions",
59+
"--extensionDevelopmentPath=${workspaceFolder}",
60+
"--extensionTestsPath=${workspaceFolder}/dist/test/suite/index"
61+
],
62+
"outFiles": [
63+
"${workspaceFolder}/dist/test/**/*.js"
64+
],
65+
"preLaunchTask": "npm: pretest"
66+
},
67+
{
68+
"name": "Launch Web Extension",
69+
"type": "extensionHost",
70+
"debugWebWorkerHost": true,
71+
"request": "launch",
72+
"args": [
73+
"--extensionDevelopmentPath=${workspaceFolder}",
74+
"--disable-extensions",
75+
"--extensionDevelopmentKind=web"
76+
],
77+
"outFiles": [
78+
"${workspaceFolder}/dist/test/**/*.js"
79+
],
80+
"preLaunchTask": "npm: pretest"
81+
},
82+
{
83+
"name": "Launch Web Extension of The Last Building",
84+
"type": "extensionHost",
85+
"debugWebWorkerHost": true,
86+
"request": "launch",
87+
"args": [
88+
"--extensionDevelopmentPath=${workspaceFolder}",
89+
"--disable-extensions",
90+
"--extensionDevelopmentKind=web"
91+
],
92+
"outFiles": [
93+
"${workspaceFolder}/dist/test/**/*.js"
94+
]
95+
}
96+
]
6897
}

.vscodeignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
.vs/
33
.vscode/
44
.vscode-test/
5+
.vscode-test-web/
56
.github/
7+
.git/
68

79
# Source code
810
out/

package.json

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@
4242
"onLanguage:wikitext",
4343
"onUri"
4444
],
45-
"main": "./dist/extension",
45+
"main": "./dist/extension-node",
46+
"browser": "./dist/extension-web",
4647
"contributes": {
4748
"commands": [
4849
{
@@ -272,10 +273,13 @@
272273
"scripts": {
273274
"vscode:prepublish": "yarn run compile",
274275
"compile": "yarn run convert && webpack --config webpack.config.js --mode production",
276+
"compile-debug" : "yarn run convert && webpack --config webpack.config.js --mode development",
275277
"lint": "eslint -c .eslintrc.yml --ext .ts ./src",
276278
"watch": "yarn run convert && webpack --config webpack.config.js --mode development --watch",
277-
"pretest": "tsc -p ./ && yarn run lint",
278-
"test": "node ./out/test/runTest.js",
279+
"pretest": "yarn run compile-debug && yarn run lint",
280+
"test": "yarn run test-node && yarn run test-web",
281+
"test-node": "node ./dist/test/runTest.js",
282+
"test-web": "vscode-test-web --browserType=chromium --extensionDevelopmentPath=. --extensionTestsPath=./dist/test/suite/index-web.js",
279283
"convert": "js-yaml snippets/snippets.yaml > snippets/snippets.json & js-yaml syntaxes/wikitext.tmLanguage.yaml > syntaxes/wikitext.tmLanguage.json & js-yaml language-configuration.yaml > language-configuration.json &",
280284
"package": "vsce package --yarn"
281285
},
@@ -288,16 +292,35 @@
288292
"@types/node": "^16.11.10",
289293
"@types/node-fetch": "^2.5.12",
290294
"@types/vscode": "^1.64.0",
295+
"@types/webpack-env": "^1.18.0",
291296
"@typescript-eslint/eslint-plugin": "^5.4.0",
292297
"@typescript-eslint/parser": "^5.4.0",
293-
"@vscode/test-electron": "^1.4.1",
298+
"@vscode/test-electron": "^2.2.0",
299+
"@vscode/test-web": "^0.0.32",
300+
"assert": "^2.0.0",
301+
"async-hook-browser": "^0.0.6",
302+
"browser-request": "^0.3.3",
303+
"browserify-fs": "^1.0.0",
304+
"browserify-zlib": "^0.2.0",
305+
"buffer": "^6.0.3",
306+
"crypto-browserify": "^3.12.0",
294307
"eslint": "^8.3.0",
295308
"glob": "^7.2.0",
309+
"https-browserify": "^1.0.0",
296310
"js-yaml": "^4.1.0",
297311
"mocha": "^9.1.3",
298312
"mwbot": "^2.0.0",
313+
"net": "^1.0.2",
314+
"os-browserify": "^0.3.0",
315+
"path-browserify": "^1.0.1",
316+
"process": "^0.11.10",
317+
"querystring-es3": "^0.2.1",
318+
"stream-browserify": "^3.0.0",
319+
"stream-http": "^3.2.0",
320+
"tls-browserify": "^0.2.2",
299321
"ts-loader": "^9.2.3",
300322
"typescript": "^4.5.2",
323+
"url": "^0.11.0",
301324
"webpack": "^5.64.2",
302325
"webpack-cli": "^4.9.1"
303326
},

src/test/runTest.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ async function main(): Promise<void> {
1616

1717
// The path to test runner
1818
// Passed to --extensionTestsPath
19-
const extensionTestsPath = path.resolve(__dirname, './suite/index');
19+
const extensionTestsPath = path.resolve(__dirname, './suite/index-node');
2020
console.log("Runing test.");
2121
// Download VS Code, unzip it and run the integration test
2222
await runTests({

src/test/suite/index.ts renamed to src/test/suite/index-node.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export function run(): Promise<void> {
3636
}
3737
});
3838
} catch (err) {
39+
console.error(err);
3940
e(err);
4041
}
4142
});

src/test/suite/index-web.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
require('mocha/mocha'); // import the mocha web build
2+
3+
export function run(): Promise<void> {
4+
5+
return new Promise((c, e) => {
6+
mocha.setup({
7+
ui: 'tdd',
8+
reporter: undefined
9+
});
10+
11+
// bundles all files in the current directory matching `*.test`
12+
const importAll = (r: __WebpackModuleApi.RequireContext) => r.keys().forEach(r);
13+
14+
importAll(require.context('.', true, /\.test$/));
15+
16+
try {
17+
// Run the mocha test
18+
mocha.run(failures => {
19+
if (failures > 0) {
20+
e(new Error(`${failures} tests failed.`));
21+
} else {
22+
c();
23+
}
24+
});
25+
} catch (err) {
26+
console.error(err);
27+
e(err);
28+
}
29+
});
30+
}

0 commit comments

Comments
 (0)