Skip to content

Commit 1bdeca5

Browse files
Bump vm2 from 3.10.2 to 3.11.3 (#2168)
* Bump vm2 from 3.10.2 to 3.11.3 Bumps [vm2](https://github.com/patriksimek/vm2) from 3.10.2 to 3.11.3. - [Release notes](https://github.com/patriksimek/vm2/releases) - [Changelog](https://github.com/patriksimek/vm2/blob/main/CHANGELOG.md) - [Commits](patriksimek/vm2@v3.10.2...v3.11.3) --- updated-dependencies: - dependency-name: vm2 dependency-version: 3.11.3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> * Fix vm2 sandbox execution errors and CallSite path stripping The upgrade of vm2 to 3.11.3 tightened sandbox security, stripping file path information from V8 CallSite objects during Error.prepareStackTrace and breaking the resolution of symlinked modules. This caused critical test failures ("Unable to find valid caller file") during Dataform compilation. This commit resolves these issues by: * Resolving `projectDir` to its absolute realpath before sandbox compilation to circumvent symlink boundaries (especially important for bazel runfiles). * Injecting `global.__dataform_current_file` into the NodeVM compiler configuration with a try-finally block to track cross-boundary macro scopes. * Adding a fallback in `core/utils.ts:getCallerFile` to read the injected global file path when the V8 stack trace path is stripped or undefined. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Rafal Hawrylak <hawrylak@google.com>
1 parent 433e852 commit 1bdeca5

7 files changed

Lines changed: 103 additions & 78 deletions

File tree

cli/vm/compile.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { encode64 } from "df/common/protos";
88
import { dataform } from "df/protos/ts";
99

1010
export function compile(compileConfig: dataform.ICompileConfig) {
11+
compileConfig.projectDir = fs.realpathSync(path.resolve(compileConfig.projectDir));
1112
if (
1213
!fs.existsSync(
1314
path.join(compileConfig.projectDir, "node_modules", "@dataform", "core", "bundle.js")
@@ -49,7 +50,23 @@ export function compile(compileConfig: dataform.ICompileConfig) {
4950
path.join(parentDirName, path.relative(parentDirName, compileConfig.projectDir), moduleName)
5051
},
5152
sourceExtensions: ["js", "sql", "sqlx", "yaml", "yml"],
52-
compiler
53+
// vm2 3.11.3 strips file paths from V8 CallSite objects inside the sandbox,
54+
// which breaks getCallerFile() in @dataform/core. Wrap each compiled module so
55+
// the current file path is exposed via a global, used as a fallback when the
56+
// stack-trace path is unavailable. The try/finally restores the previous value
57+
// to keep nested requires (macros) consistent.
58+
compiler: (code, filePath) => {
59+
const compiledCode = compiler(code, filePath);
60+
return `
61+
var __old_file = global.__dataform_current_file;
62+
global.__dataform_current_file = ${JSON.stringify(filePath)};
63+
try {
64+
${compiledCode}
65+
} finally {
66+
global.__dataform_current_file = __old_file;
67+
}
68+
`;
69+
}
5370
});
5471

5572
const dataformCoreVersion: string = userCodeVm.run(
@@ -61,7 +78,11 @@ export function compile(compileConfig: dataform.ICompileConfig) {
6178
}
6279

6380
return userCodeVm.run(
64-
`return require("@dataform/core").main("${createCoreExecutionRequest(compileConfig)}")`,
81+
`
82+
global.workflowSettingsYaml = (function() { try { return require("./workflow_settings.yaml"); } catch(e) { console.error("YAML require failed:", e); } })();
83+
global.dataformJson = (function() { try { return require("./dataform.json"); } catch(e) {} })();
84+
return require("@dataform/core").main("${createCoreExecutionRequest(compileConfig)}")
85+
`,
6586
vmIndexFileName
6687
);
6788
}

core/utils.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,13 @@ export function getCallerFile(rootDir: string) {
7575
break;
7676
}
7777
if (!lastfile) {
78-
// This is likely caused by Session.compileError() being called inside Session.compile().
79-
// If so, explicitly pass the filename to Session.compileError().
80-
throw new Error("Unable to find valid caller file; please report this issue.");
78+
if ((global as any).__dataform_current_file) {
79+
lastfile = (global as any).__dataform_current_file;
80+
} else {
81+
// This is likely caused by Session.compileError() being called inside Session.compile().
82+
// If so, explicitly pass the filename to Session.compileError().
83+
throw new Error("Unable to find valid caller file; please report this issue.");
84+
}
8185
}
8286
return Path.relativePath(lastfile, rootDir);
8387
}

core/workflow_settings.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ declare var __non_webpack_require__: any;
1010
const nativeRequire = typeof __webpack_require__ === "function" ? __non_webpack_require__ : require;
1111

1212
export function readWorkflowSettings(failIfMissing: boolean = true): dataform.ProjectConfig {
13-
const workflowSettingsYaml = maybeRequire("workflow_settings.yaml");
13+
const globalAny = global as any;
14+
const workflowSettingsYaml = globalAny.workflowSettingsYaml || maybeRequire("workflow_settings.yaml");
1415
// `dataform.json` is deprecated; new versions of Dataform Core prefer `workflow_settings.yaml`.
15-
const dataformJson = maybeRequire("dataform.json");
16+
const dataformJson = globalAny.dataformJson || maybeRequire("dataform.json");
1617

1718
if (workflowSettingsYaml && dataformJson) {
1819
throw Error(

examples/examples_test.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ suite("examples", { parallel: true }, () => {
1111

1212
["stackoverflow_reporter", "extreme_weather_programming"].forEach(exampleProject => {
1313
test(`${exampleProject} runs`, async () => {
14-
const projectDir = `examples/${exampleProject}`;
14+
// compile() calls realpath on projectDir, which would jump out of bazel's
15+
// symlinked runfiles tree and leave the project without its sibling
16+
// node_modules. Materialize a real copy (dereference symlinks) so the
17+
// project and node_modules below resolve under a single real path.
18+
const originalProjectDir = `examples/${exampleProject}`;
19+
const projectDir = `examples/${exampleProject}_copy`;
20+
fs.copySync(originalProjectDir, projectDir, { dereference: true });
1521
fs.copySync(
1622
"examples/node_modules/@dataform/core",
1723
`${projectDir}/node_modules/@dataform/core`

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"uglify-js": "^3.7.7",
7373
"untildify": "^4.0.0",
7474
"url": "^0.11.0",
75-
"vm2": "3.10.2",
75+
"vm2": "3.11.3",
7676
"vsce": "^1.79.5",
7777
"vscode-jsonrpc": "^5.0.1",
7878
"vscode-languageclient": "^6.1.3",

testing/run_core.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ export function coreExecutionRequestFromPath(
5454
projectDir: string,
5555
projectConfigOverride?: dataform.ProjectConfig
5656
): dataform.CoreExecutionRequest {
57+
const resolvedProjectDir = fs.realpathSync(path.resolve(projectDir));
5758
return dataform.CoreExecutionRequest.create({
5859
compile: {
5960
compileConfig: {
60-
projectDir,
61-
filePaths: walkDirectoryForFilenames(projectDir),
61+
projectDir: resolvedProjectDir,
62+
filePaths: walkDirectoryForFilenames(resolvedProjectDir),
6263
projectConfigOverride
6364
}
6465
}
@@ -90,13 +91,28 @@ export function runMainInVm(
9091
path.join(parentDirName, path.relative(parentDirName, projectDir), moduleName)
9192
},
9293
sourceExtensions: SOURCE_EXTENSIONS,
93-
compiler
94+
compiler: (code, filePath) => {
95+
const compiledCode = compiler(code, filePath);
96+
return `
97+
var __old_file = global.__dataform_current_file;
98+
global.__dataform_current_file = ${JSON.stringify(filePath)};
99+
try {
100+
${compiledCode}
101+
} finally {
102+
global.__dataform_current_file = __old_file;
103+
}
104+
`;
105+
}
94106
});
95107

96108
const encodedCoreExecutionRequest = encode64(dataform.CoreExecutionRequest, coreExecutionRequest);
97109
const vmIndexFileName = path.resolve(path.join(projectDir, "index.js"));
98110
const encodedCoreExecutionResponse = nodeVm.run(
99-
`return require("@dataform/core").main("${encodedCoreExecutionRequest}")`,
111+
`
112+
global.workflowSettingsYaml = (function() { try { return require("./workflow_settings.yaml"); } catch(e) { console.error("YAML require failed run_core:", e); } })();
113+
global.dataformJson = (function() { try { return require("./dataform.json"); } catch(e) {} })();
114+
return require("@dataform/core").main("${encodedCoreExecutionRequest}")
115+
`,
100116
vmIndexFileName
101117
);
102118
return decode64(dataform.CoreExecutionResponse, encodedCoreExecutionResponse);

yarn.lock

Lines changed: 42 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -95,21 +95,6 @@
9595
stream-events "^1.0.5"
9696
teeny-request "^10.0.0"
9797

98-
"@google-cloud/common@^3.6.0":
99-
version "3.6.0"
100-
resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.6.0.tgz#c2f6da5f79279a4a9ac7c71fc02d582beab98e8b"
101-
integrity "sha1-wvbaX3knmkqax8cfwC1YK+q5jos= sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q=="
102-
dependencies:
103-
"@google-cloud/projectify" "^2.0.0"
104-
"@google-cloud/promisify" "^2.0.0"
105-
arrify "^2.0.1"
106-
duplexify "^4.1.1"
107-
ent "^2.2.0"
108-
extend "^3.0.2"
109-
google-auth-library "^7.0.2"
110-
retry-request "^4.1.1"
111-
teeny-request "^7.0.0"
112-
11398
"@google-cloud/common@^6.0.0":
11499
version "6.0.0"
115100
resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-6.0.0.tgz#776d4f747f0a3844f4ce13e06a2268743064b563"
@@ -155,11 +140,6 @@
155140
resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1"
156141
integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==
157142

158-
"@google-cloud/projectify@^4.0.0":
159-
version "4.0.0"
160-
resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be"
161-
integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==
162-
163143
"@google-cloud/promisify@^4.0.0":
164144
version "4.1.0"
165145
resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.1.0.tgz#df8b060f0121c6462233f5420738dcda09c6df4a"
@@ -479,16 +459,6 @@
479459
resolved "https://registry.yarnpkg.com/@types/readline-sync/-/readline-sync-1.4.3.tgz#eac55a39d5a349912062c9e5216cd550c07fd9c8"
480460
integrity "sha1-6sVaOdWjSZEgYsnlIWzVUMB/2cg= sha512-YP9NVli96E+qQLAF2db+VjnAUEeZcFVg4YnMgr8kpDUFwQBnj31rPLOVHmazbKQhaIkJ9cMHsZhpKdzUeL0KTg=="
481461

482-
"@types/request@^2.48.12":
483-
version "2.48.13"
484-
resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.13.tgz#abdf4256524e801ea8fdda54320f083edb5a6b80"
485-
integrity sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==
486-
dependencies:
487-
"@types/caseless" "*"
488-
"@types/node" "*"
489-
"@types/tough-cookie" "*"
490-
form-data "^2.5.5"
491-
492462
"@types/request@^2.48.3":
493463
version "2.48.4"
494464
resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.4.tgz#df3d43d7b9ed3550feaa1286c6eabf0738e6cf7e"
@@ -738,7 +708,7 @@ acorn@^7.4.0:
738708
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
739709
integrity "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
740710

741-
acorn@^8.11.0, acorn@^8.14.1, acorn@^8.15.0, acorn@^8.7.1, acorn@^8.8.2:
711+
acorn@^8.11.0, acorn@^8.15.0, acorn@^8.7.1, acorn@^8.8.2:
742712
version "8.15.0"
743713
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
744714
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
@@ -1491,13 +1461,6 @@ domutils@^1.5.1:
14911461
dom-serializer "0"
14921462
domelementtype "1"
14931463

1494-
dot-prop@^5.2.0:
1495-
version "5.2.0"
1496-
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"
1497-
integrity "sha1-w07MKVVtxF8fTCJpe29JBODMT8s= sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A=="
1498-
dependencies:
1499-
is-obj "^2.0.0"
1500-
15011464
dunder-proto@^1.0.1:
15021465
version "1.0.1"
15031466
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
@@ -1517,16 +1480,6 @@ duplexify@^4.1.3:
15171480
readable-stream "^3.1.1"
15181481
stream-shift "^1.0.2"
15191482

1520-
duplexify@^4.1.3:
1521-
version "4.1.3"
1522-
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f"
1523-
integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==
1524-
dependencies:
1525-
end-of-stream "^1.4.1"
1526-
inherits "^2.0.3"
1527-
readable-stream "^3.1.1"
1528-
stream-shift "^1.0.2"
1529-
15301483
ecc-jsbn@~0.1.1:
15311484
version "0.1.2"
15321485
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@@ -2091,11 +2044,6 @@ get-proto@^1.0.1:
20912044
dunder-proto "^1.0.1"
20922045
es-object-atoms "^1.0.0"
20932046

2094-
get-stream@^6.0.0:
2095-
version "6.0.0"
2096-
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718"
2097-
integrity "sha1-PgASy2gnMZ2icG5gGhWD6GKaZxg= sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg=="
2098-
20992047
get-value@^2.0.3, get-value@^2.0.6:
21002048
version "2.0.6"
21012049
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
@@ -2177,6 +2125,23 @@ google-auth-library@^10.0.0-rc.1:
21772125
gtoken "^8.0.0"
21782126
jws "^4.0.0"
21792127

2128+
google-auth-library@^9.6.3:
2129+
version "9.15.1"
2130+
resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.1.tgz#0c5d84ed1890b2375f1cd74f03ac7b806b392928"
2131+
integrity sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==
2132+
dependencies:
2133+
base64-js "^1.3.0"
2134+
ecdsa-sig-formatter "^1.0.11"
2135+
gaxios "^6.1.1"
2136+
gcp-metadata "^6.1.0"
2137+
gtoken "^7.0.0"
2138+
jws "^4.0.0"
2139+
2140+
google-logging-utils@^0.0.2:
2141+
version "0.0.2"
2142+
resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-0.0.2.tgz#5fd837e06fa334da450433b9e3e1870c1594466a"
2143+
integrity sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==
2144+
21802145
google-logging-utils@^1.0.0:
21812146
version "1.1.3"
21822147
resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-1.1.3.tgz#17b71f1f95d266d2ddd356b8f00178433f041b17"
@@ -3965,11 +3930,6 @@ stream-shift@^1.0.2:
39653930
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b"
39663931
integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==
39673932

3968-
stream-shift@^1.0.2:
3969-
version "1.0.3"
3970-
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b"
3971-
integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==
3972-
39733933
"string-width-cjs@npm:string-width@^4.2.0":
39743934
version "4.2.3"
39753935
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -4002,8 +3962,7 @@ string_decoder@~1.1.1:
40023962
dependencies:
40033963
safe-buffer "~5.1.0"
40043964

4005-
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
4006-
name strip-ansi-cjs
3965+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
40073966
version "6.0.1"
40083967
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
40093968
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -4017,6 +3976,13 @@ strip-ansi@^5.2.0:
40173976
dependencies:
40183977
ansi-regex "^4.1.0"
40193978

3979+
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
3980+
version "6.0.1"
3981+
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
3982+
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
3983+
dependencies:
3984+
ansi-regex "^5.0.1"
3985+
40203986
strip-ansi@^7.0.1:
40213987
version "7.2.0"
40223988
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3"
@@ -4095,6 +4061,17 @@ teeny-request@^10.0.0:
40954061
node-fetch "^3.3.2"
40964062
stream-events "^1.0.5"
40974063

4064+
teeny-request@^9.0.0:
4065+
version "9.0.0"
4066+
resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d"
4067+
integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==
4068+
dependencies:
4069+
http-proxy-agent "^5.0.0"
4070+
https-proxy-agent "^5.0.0"
4071+
node-fetch "^2.6.9"
4072+
stream-events "^1.0.5"
4073+
uuid "^9.0.0"
4074+
40984075
terser-webpack-plugin@^5.3.16:
40994076
version "5.3.16"
41004077
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330"
@@ -4460,12 +4437,12 @@ verror@1.10.0:
44604437
core-util-is "1.0.2"
44614438
extsprintf "^1.2.0"
44624439

4463-
vm2@3.10.2:
4464-
version "3.10.2"
4465-
resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.10.2.tgz#b41dbe9c928b03e8a83c9b0a973f60dc7c80c5be"
4466-
integrity sha512-qTnbvpada8qlEEyIPFwhTcF5Ns+k83fVlOSE8XvAtHkhcQ+okMnbvryVQBfP/ExRT1CRsQpYusdATR+FBJfrnQ==
4440+
vm2@3.11.3:
4441+
version "3.11.3"
4442+
resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.11.3.tgz#5323018a93ae2862c9d52b07b658ebb8d74903f0"
4443+
integrity sha512-DO1TTKuOc+veL11VNOvJwRab80mghFKE40Av3bl6pdXs11bdiDMuR73owy+dS2EsTZEvRUeBkkBuDVRjV/RgEw==
44674444
dependencies:
4468-
acorn "^8.14.1"
4445+
acorn "^8.15.0"
44694446
acorn-walk "^8.3.4"
44704447

44714448
vsce@^1.79.5:

0 commit comments

Comments
 (0)