Skip to content

Commit 2678f5a

Browse files
committedNov 29, 2021
replace jsdom
Signed-off-by: shmck <shawn.j.mckay@gmail.com>
1 parent d74bcb1 commit 2678f5a

File tree

5 files changed

+75
-195
lines changed

5 files changed

+75
-195
lines changed
 

‎.vscodeignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ vsc-extension-quickstart.md
99
## Modules
1010
node_modules/**
1111
!node_modules/fsevents/**
12-
!node_modules/jsdom/**
1312

1413
## TypeScript
1514
**/tsconfig.json

‎package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"package": "./scripts/package.sh",
3232
"storybook": "yarn --cwd web-app storybook",
3333
"test": "jest",
34-
"esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=build/extension.js --external:vscode --external:fsevents --external:jsdom --format=cjs --platform=node",
34+
"esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=build/extension.js --external:vscode --external:fsevents --format=cjs --platform=node",
3535
"esbuild": "npm run esbuild-base -- --sourcemap",
3636
"esbuild-watch": "npm run esbuild-base -- --sourcemap --watch",
3737
"test-compile": "tsc -watch -p ./"
@@ -42,7 +42,6 @@
4242
"eslint": "7.32.0",
4343
"git-url-parse": "11.6.0",
4444
"jest": "27.3.1",
45-
"jsdom": "18.1.1",
4645
"node-fetch": "2.6.6",
4746
"semver": "7.3.5",
4847
"ts-jest": "27.0.7",

‎src/services/webview/render.ts

Lines changed: 69 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { JSDOM } from 'jsdom'
21
import * as path from 'path'
32
import * as vscode from 'vscode'
43
import { asyncReadFile } from '../node'
@@ -14,39 +13,64 @@ const getNonce = (): string => {
1413
return text
1514
}
1615

16+
/**
17+
* render
18+
* configures the index.html into a webview panel
19+
*
20+
* React + webpack generate a number of files that are injected on build time
21+
* and must be accommodated for the webview using a vscode:// path.
22+
*
23+
* Modified paths include
24+
* - /static/js/x.chunk.js
25+
* - /static/js/main.chunk.js
26+
* - runtime-main.js
27+
* - /static/css/x.chunk.css
28+
* - /static/css/main.chunk.css
29+
*
30+
* This function also:
31+
* - modifies the base href of the index.html to be the root of the workspace
32+
* - manages the CSP policy for all the loaded files
33+
*/
1734
async function render(panel: vscode.WebviewPanel, rootPath: string): Promise<void> {
35+
// generate vscode-resource build path uri
36+
const createUri = (_filePath: string): any => {
37+
const filePath = (_filePath.startsWith('vscode') ? _filePath.substr(16) : _filePath).replace('///', '\\')
38+
39+
// @ts-ignore
40+
return panel.webview.asWebviewUri(vscode.Uri.file(path.join(rootPath, filePath)))
41+
}
42+
1843
try {
1944
// load copied index.html from web app build
20-
const dom = await JSDOM.fromFile(path.join(rootPath, 'index.html'))
21-
const { document } = dom.window
45+
let html = await asyncReadFile(path.join(rootPath, 'index.html'), 'utf8')
2246

23-
// set base href
24-
const base: HTMLBaseElement = document.createElement('base')
25-
base.href = `${vscode.Uri.file(path.join(rootPath, 'build')).with({ scheme: 'vscode-resource' })}`
26-
27-
document.head.appendChild(base)
47+
// set base href at top of <head>
48+
const baseHref = `${vscode.Uri.file(path.join(rootPath, 'build')).with({ scheme: 'vscode-resource' })}`
49+
html = html.replace('<head>', `<head><base href="${baseHref}" />`)
2850

2951
// used for CSP
3052
const nonces: string[] = []
3153
const hashes: string[] = []
3254

33-
// generate vscode-resource build path uri
34-
const createUri = (_filePath: string): any => {
35-
const filePath = (_filePath.startsWith('vscode') ? _filePath.substr(16) : _filePath).replace('///', '\\')
36-
37-
// @ts-ignore
38-
return panel.webview.asWebviewUri(vscode.Uri.file(path.join(rootPath, filePath)))
55+
// fix paths for react static scripts to use vscode-resource paths
56+
var jsBundleChunkRegex = /\/static\/js\/[\d].[^"]*\.js/g
57+
var jsBundleChunk: RegExpExecArray | null = jsBundleChunkRegex.exec(html)
58+
if (jsBundleChunk) {
59+
const nonce: string = getNonce()
60+
nonces.push(nonce)
61+
const src = createUri(jsBundleChunk[0])
62+
// replace script src, add nonce
63+
html = html.replace(jsBundleChunk[0], `${src}" nonce="${nonce}`)
3964
}
4065

41-
// fix paths for scripts
42-
const scripts: HTMLScriptElement[] = Array.from(document.getElementsByTagName('script'))
43-
for (const script of scripts) {
44-
if (script.src) {
45-
const nonce: string = getNonce()
46-
nonces.push(nonce)
47-
script.nonce = nonce
48-
script.src = createUri(script.src)
49-
}
66+
var mainBundleChunkRegex = /\/static\/js\/main.[^"]*\.js/g
67+
var mainBundleChunk: RegExpExecArray | null = mainBundleChunkRegex.exec(html)
68+
if (mainBundleChunk) {
69+
const nonce: string = getNonce()
70+
nonces.push(nonce)
71+
const src = createUri(mainBundleChunk[0])
72+
// replace script src, add nonce
73+
html = html.replace(mainBundleChunk[0], `${src}" nonce="${nonce}`)
5074
}
5175

5276
// support additional CSP exemptions when CodeRoad is embedded
@@ -61,43 +85,45 @@ async function render(panel: vscode.WebviewPanel, rootPath: string): Promise<voi
6185
}
6286
}
6387

64-
// add run-time script from webpack
65-
const runTimeScript = document.createElement('script')
66-
runTimeScript.nonce = getNonce()
67-
nonces.push(runTimeScript.nonce)
68-
6988
// note: file cannot be imported or results in esbuild error. Easier to read it.
7089
let manifest
7190
try {
7291
const manifestPath = path.join(rootPath, 'asset-manifest.json')
73-
console.log(manifestPath)
7492
const manifestFile = await asyncReadFile(manifestPath, 'utf8')
7593
manifest = JSON.parse(manifestFile)
7694
} catch (e) {
7795
throw new Error('Failed to read manifest file')
7896
}
7997

80-
runTimeScript.src = createUri(manifest.files['runtime-main.js'])
81-
document.body.appendChild(runTimeScript)
98+
// add run-time script from webpack at top of <body>
99+
const runtimeNonce = getNonce()
100+
nonces.push(runtimeNonce)
101+
const runtimeSrc = createUri(manifest.files['runtime-main.js'])
102+
html = html.replace('<body>', `<body><script src="${runtimeSrc}" nonce="${runtimeNonce}"></script>`)
103+
104+
var cssBundleChunkRegex = /\/static\/css\/[\d].[^"]*\.css/g
105+
var cssBundleChunk: RegExpExecArray | null = cssBundleChunkRegex.exec(html)
106+
if (cssBundleChunk) {
107+
const href = createUri(cssBundleChunk[0])
108+
// replace script src, add nonce
109+
html = html.replace(cssBundleChunk[0], href)
110+
}
82111

83-
// fix paths for links
84-
const styles: HTMLLinkElement[] = Array.from(document.getElementsByTagName('link'))
85-
for (const style of styles) {
86-
if (style.href) {
87-
style.href = createUri(style.href)
88-
}
112+
var mainCssBundleChunkRegex = /\/static\/css\/main.[^"]*\.css/g
113+
var mainCssBundleChunk: RegExpExecArray | null = mainCssBundleChunkRegex.exec(html)
114+
if (mainCssBundleChunk) {
115+
const href = createUri(mainCssBundleChunk[0])
116+
// replace script src, add nonce
117+
html = html.replace(mainCssBundleChunk[0], href)
89118
}
90119

91120
// set CSP (content security policy) to grant permission to local files
92121
// while blocking unexpected malicious network requests
93-
const cspMeta: HTMLMetaElement = document.createElement('meta')
94-
cspMeta.httpEquiv = 'Content-Security-Policy'
95-
96122
const wrapInQuotes = (str: string) => `'${str}'`
97123
const nonceString = nonces.map((nonce: string) => wrapInQuotes(`nonce-${nonce}`)).join(' ')
98124
const hashString = hashes.map(wrapInQuotes).join(' ')
99125

100-
cspMeta.content =
126+
const cspMetaString =
101127
[
102128
`default-src 'self'`,
103129
`manifest-src ${hashString} 'self'`,
@@ -110,10 +136,8 @@ async function render(panel: vscode.WebviewPanel, rootPath: string): Promise<voi
110136
// @ts-ignore
111137
`style-src ${panel.webview.cspSource} https: 'self' 'unsafe-inline'`,
112138
].join('; ') + ';'
113-
document.head.appendChild(cspMeta)
114-
115-
// stringify dom
116-
const html = dom.serialize()
139+
// add CSP to end of <head>
140+
html = html.replace('</head>', `<meta http-equiv="Content-Security-Policy" content="${cspMetaString}" /></head>`)
117141

118142
// set view
119143
panel.webview.html = html

‎web-app/public/index.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<!DOCTYPE html>
22
<html lang="en">
33
<head>
4+
<!-- INJECT_BASE -->
45
<meta charset="utf-8" />
56
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
67
<meta name="theme-color" content="#000000" />
@@ -47,6 +48,7 @@
4748
}
4849
}
4950
</script>
51+
<!-- INJECT_CSP -->
5052
</head>
5153

5254
<body>
@@ -68,5 +70,6 @@ <h3 id="coderoad-message">
6870
To begin the development, run `npm start` or `yarn start`.
6971
To create a production bundle, use `npm run build` or `yarn build`.
7072
-->
73+
<!-- INJECT_SCRIPT -->
7174
</body>
7275
</html>

‎yarn.lock

Lines changed: 2 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -792,11 +792,6 @@
792792
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
793793
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
794794

795-
"@tootallnate/once@2":
796-
version "2.0.0"
797-
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
798-
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
799-
800795
"@types/assert@^1.5.6":
801796
version "1.5.6"
802797
resolved "https://registry.yarnpkg.com/@types/assert/-/assert-1.5.6.tgz#a8b5a94ce5fb8f4ba65fdc37fc9507609114189e"
@@ -1084,7 +1079,7 @@ acorn@^7.4.0:
10841079
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
10851080
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
10861081

1087-
acorn@^8.2.4, acorn@^8.5.0:
1082+
acorn@^8.2.4:
10881083
version "8.6.0"
10891084
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
10901085
integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
@@ -1664,11 +1659,6 @@ cssom@^0.4.4:
16641659
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
16651660
integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
16661661

1667-
cssom@^0.5.0:
1668-
version "0.5.0"
1669-
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36"
1670-
integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==
1671-
16721662
cssom@~0.3.6:
16731663
version "0.3.8"
16741664
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
@@ -1695,15 +1685,6 @@ data-urls@^2.0.0:
16951685
whatwg-mimetype "^2.3.0"
16961686
whatwg-url "^8.0.0"
16971687

1698-
data-urls@^3.0.1:
1699-
version "3.0.1"
1700-
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.1.tgz#597fc2ae30f8bc4dbcf731fcd1b1954353afc6f8"
1701-
integrity sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==
1702-
dependencies:
1703-
abab "^2.0.3"
1704-
whatwg-mimetype "^3.0.0"
1705-
whatwg-url "^10.0.0"
1706-
17071688
debug@3.1.0:
17081689
version "3.1.0"
17091690
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
@@ -1751,11 +1732,6 @@ decimal.js@^10.2.1:
17511732
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3"
17521733
integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==
17531734

1754-
decimal.js@^10.3.1:
1755-
version "10.3.1"
1756-
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
1757-
integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
1758-
17591735
dedent@^0.7.0:
17601736
version "0.7.0"
17611737
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
@@ -1838,13 +1814,6 @@ domexception@^2.0.1:
18381814
dependencies:
18391815
webidl-conversions "^5.0.0"
18401816

1841-
domexception@^4.0.0:
1842-
version "4.0.0"
1843-
resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
1844-
integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
1845-
dependencies:
1846-
webidl-conversions "^7.0.0"
1847-
18481817
dotenv@^8.2.0:
18491818
version "8.2.0"
18501819
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
@@ -2525,15 +2494,6 @@ form-data@^3.0.0:
25252494
combined-stream "^1.0.8"
25262495
mime-types "^2.1.12"
25272496

2528-
form-data@^4.0.0:
2529-
version "4.0.0"
2530-
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
2531-
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
2532-
dependencies:
2533-
asynckit "^0.4.0"
2534-
combined-stream "^1.0.8"
2535-
mime-types "^2.1.12"
2536-
25372497
fs.realpath@^1.0.0:
25382498
version "1.0.0"
25392499
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -2753,13 +2713,6 @@ html-encoding-sniffer@^2.0.1:
27532713
dependencies:
27542714
whatwg-encoding "^1.0.5"
27552715

2756-
html-encoding-sniffer@^3.0.0:
2757-
version "3.0.0"
2758-
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
2759-
integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
2760-
dependencies:
2761-
whatwg-encoding "^2.0.0"
2762-
27632716
html-escaper@^2.0.0:
27642717
version "2.0.2"
27652718
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
@@ -2782,15 +2735,6 @@ http-proxy-agent@^4.0.1:
27822735
agent-base "6"
27832736
debug "4"
27842737

2785-
http-proxy-agent@^5.0.0:
2786-
version "5.0.0"
2787-
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
2788-
integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
2789-
dependencies:
2790-
"@tootallnate/once" "2"
2791-
agent-base "6"
2792-
debug "4"
2793-
27942738
https-proxy-agent@^2.2.1:
27952739
version "2.2.4"
27962740
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
@@ -2819,13 +2763,6 @@ iconv-lite@0.4.24:
28192763
dependencies:
28202764
safer-buffer ">= 2.1.2 < 3"
28212765

2822-
iconv-lite@0.6.3:
2823-
version "0.6.3"
2824-
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
2825-
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
2826-
dependencies:
2827-
safer-buffer ">= 2.1.2 < 3.0.0"
2828-
28292766
ignore@^4.0.6:
28302767
version "4.0.6"
28312768
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -3563,39 +3500,6 @@ js-yaml@^3.13.1:
35633500
argparse "^1.0.7"
35643501
esprima "^4.0.0"
35653502

3566-
jsdom@18.1.1:
3567-
version "18.1.1"
3568-
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-18.1.1.tgz#15ec896f5ab7df9669a62375606f47c8c09551aa"
3569-
integrity sha512-NmJQbjQ/gpS/1at/ce3nCx89HbXL/f5OcenBe8wU1Eik0ROhyUc3LtmG3567dEHAGXkN8rmILW/qtCOPxPHQJw==
3570-
dependencies:
3571-
abab "^2.0.5"
3572-
acorn "^8.5.0"
3573-
acorn-globals "^6.0.0"
3574-
cssom "^0.5.0"
3575-
cssstyle "^2.3.0"
3576-
data-urls "^3.0.1"
3577-
decimal.js "^10.3.1"
3578-
domexception "^4.0.0"
3579-
escodegen "^2.0.0"
3580-
form-data "^4.0.0"
3581-
html-encoding-sniffer "^3.0.0"
3582-
http-proxy-agent "^5.0.0"
3583-
https-proxy-agent "^5.0.0"
3584-
is-potential-custom-element-name "^1.0.1"
3585-
nwsapi "^2.2.0"
3586-
parse5 "6.0.1"
3587-
saxes "^5.0.1"
3588-
symbol-tree "^3.2.4"
3589-
tough-cookie "^4.0.0"
3590-
w3c-hr-time "^1.0.2"
3591-
w3c-xmlserializer "^3.0.0"
3592-
webidl-conversions "^7.0.0"
3593-
whatwg-encoding "^2.0.0"
3594-
whatwg-mimetype "^3.0.0"
3595-
whatwg-url "^10.0.0"
3596-
ws "^8.2.3"
3597-
xml-name-validator "^4.0.0"
3598-
35993503
jsdom@^16.6.0:
36003504
version "16.7.0"
36013505
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@@ -4413,7 +4317,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
44134317
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
44144318
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
44154319

4416-
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
4320+
"safer-buffer@>= 2.1.2 < 3":
44174321
version "2.1.2"
44184322
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
44194323
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -4784,13 +4688,6 @@ tr46@^2.0.0, tr46@^2.0.2:
47844688
dependencies:
47854689
punycode "^2.1.1"
47864690

4787-
tr46@^3.0.0:
4788-
version "3.0.0"
4789-
resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
4790-
integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
4791-
dependencies:
4792-
punycode "^2.1.1"
4793-
47944691
tr46@~0.0.3:
47954692
version "0.0.3"
47964693
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
@@ -4987,13 +4884,6 @@ w3c-xmlserializer@^2.0.0:
49874884
dependencies:
49884885
xml-name-validator "^3.0.0"
49894886

4990-
w3c-xmlserializer@^3.0.0:
4991-
version "3.0.0"
4992-
resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923"
4993-
integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==
4994-
dependencies:
4995-
xml-name-validator "^4.0.0"
4996-
49974887
walker@^1.0.7:
49984888
version "1.0.7"
49994889
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
@@ -5016,43 +4906,18 @@ webidl-conversions@^6.1.0:
50164906
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
50174907
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
50184908

5019-
webidl-conversions@^7.0.0:
5020-
version "7.0.0"
5021-
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
5022-
integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
5023-
50244909
whatwg-encoding@^1.0.5:
50254910
version "1.0.5"
50264911
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
50274912
integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
50284913
dependencies:
50294914
iconv-lite "0.4.24"
50304915

5031-
whatwg-encoding@^2.0.0:
5032-
version "2.0.0"
5033-
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
5034-
integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
5035-
dependencies:
5036-
iconv-lite "0.6.3"
5037-
50384916
whatwg-mimetype@^2.3.0:
50394917
version "2.3.0"
50404918
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
50414919
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
50424920

5043-
whatwg-mimetype@^3.0.0:
5044-
version "3.0.0"
5045-
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
5046-
integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
5047-
5048-
whatwg-url@^10.0.0:
5049-
version "10.0.0"
5050-
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da"
5051-
integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==
5052-
dependencies:
5053-
tr46 "^3.0.0"
5054-
webidl-conversions "^7.0.0"
5055-
50564921
whatwg-url@^5.0.0:
50574922
version "5.0.0"
50584923
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
@@ -5131,21 +4996,11 @@ ws@^7.4.6:
51314996
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
51324997
integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==
51334998

5134-
ws@^8.2.3:
5135-
version "8.2.3"
5136-
resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba"
5137-
integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==
5138-
51394999
xml-name-validator@^3.0.0:
51405000
version "3.0.0"
51415001
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
51425002
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
51435003

5144-
xml-name-validator@^4.0.0:
5145-
version "4.0.0"
5146-
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
5147-
integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
5148-
51495004
xmlchars@^2.2.0:
51505005
version "2.2.0"
51515006
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"

0 commit comments

Comments
 (0)
Please sign in to comment.