Restore traversal context after enter / traverse (#13813)

This commit is contained in:
Huáng Jùnliàng 2021-10-11 13:04:01 -04:00 committed by GitHub
parent 6880898510
commit 21eeb8e7a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 3353 additions and 143 deletions

View File

@ -0,0 +1,42 @@
import Benchmark from "benchmark";
import baseline from "@babel-baseline/core";
import current from "@babel/core";
import parser from "@babel-baseline/parser";
import { report } from "../../util.mjs";
import { readFileSync } from "fs";
const suite = new Benchmark.Suite();
const fixtureName = "babel-parser-expression.txt";
function createInput() {
return parser.parse(
readFileSync(new URL("./" + fixtureName, import.meta.url), {
encoding: "utf-8",
}),
{ sourceType: "module", plugins: ["flow"] }
);
}
function benchCases(name, implementation, options) {
const input = createInput();
suite.add(
`${name} ${fixtureName}`,
() => {
implementation(input, {
plugins: ["@babel/preset-env", "@babel/preset-flow"],
targets: "ie 11",
configFile: false,
babelrc: false,
...options,
});
},
{
// increase minSamples for accuracy
minSamples: 100,
}
);
}
benchCases("baseline", baseline.transformFromAstSync, {});
benchCases("current", current.transformFromAstSync, {});
suite.on("cycle", report).run();

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
import Benchmark from "benchmark";
import baseline from "@babel-baseline/traverse";
import current from "@babel/traverse";
import parser from "@babel-baseline/parser";
import { report } from "../../util.mjs";
const suite = new Benchmark.Suite();
function createInput(length) {
return parser.parse(";".repeat(length));
}
function benchCases(name, implementation, options) {
for (const length of [256, 512, 1024, 2048]) {
const input = createInput(length);
suite.add(`${name} ${length} empty statements`, () => {
implementation(input, options);
});
}
}
benchCases("baseline", baseline.default, {
enter() {},
});
benchCases("baseline mutating context", baseline.default, {
enter(path) {
path.context = undefined;
},
});
benchCases("current", current.default, {
enter() {},
});
benchCases("current mutating context", current.default, {
enter(path) {
path.context = undefined;
},
});
suite.on("cycle", report).run();

View File

@ -3,12 +3,18 @@
"private": true,
"type": "module",
"devDependencies": {
"@babel-baseline/core": "npm:@babel/core@7.15.8",
"@babel-baseline/generator": "npm:@babel/generator@7.14.5",
"@babel-baseline/helper-validator-identifier": "npm:@babel/helper-validator-identifier@7.10.4",
"@babel-baseline/parser": "npm:@babel/parser@7.14.8",
"@babel-baseline/traverse": "npm:@babel/traverse@7.15.4",
"@babel/core": "workspace:*",
"@babel/generator": "workspace:*",
"@babel/helper-validator-identifier": "workspace:*",
"@babel/parser": "workspace:*",
"@babel/preset-env": "workspace:*",
"@babel/preset-flow": "workspace:*",
"@babel/traverse": "workspace:*",
"benchmark": "^2.1.4"
},
"version": "7.15.0"

View File

@ -0,0 +1,11 @@
async function main() {
async () => {
// IIFE: required for babel to crash
for await (const string of async_iterable) {
// for await: required for babel to crash
console.log(string);
}
};
const [one] = [1]; // array destructuring: required for babel to crash
}

View File

@ -0,0 +1,8 @@
{
"plugins": [
"transform-destructuring",
"transform-regenerator",
"proposal-async-generator-functions"
],
"externalHelpers": false
}

View File

@ -0,0 +1,91 @@
function _asyncIterator(iterable) { var method; if (typeof Symbol !== "undefined") { if (Symbol.asyncIterator) method = iterable[Symbol.asyncIterator]; if (method == null && Symbol.iterator) method = iterable[Symbol.iterator]; } if (method == null) method = iterable["@@asyncIterator"]; if (method == null) method = iterable["@@iterator"]; if (method == null) throw new TypeError("Object is not async iterable"); return method.call(iterable); }
function main() {
var one;
return regeneratorRuntime.async(function main$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
() => {
var _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, string;
return regeneratorRuntime.async(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
// IIFE: required for babel to crash
_iteratorAbruptCompletion = false;
_didIteratorError = false;
_context.prev = 2;
_iterator = _asyncIterator(async_iterable);
case 4:
_context.next = 6;
return regeneratorRuntime.awrap(_iterator.next());
case 6:
if (!(_iteratorAbruptCompletion = !(_step = _context.sent).done)) {
_context.next = 12;
break;
}
string = _step.value;
// for await: required for babel to crash
console.log(string);
case 9:
_iteratorAbruptCompletion = false;
_context.next = 4;
break;
case 12:
_context.next = 18;
break;
case 14:
_context.prev = 14;
_context.t0 = _context["catch"](2);
_didIteratorError = true;
_iteratorError = _context.t0;
case 18:
_context.prev = 18;
_context.prev = 19;
if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
_context.next = 23;
break;
}
_context.next = 23;
return regeneratorRuntime.awrap(_iterator.return());
case 23:
_context.prev = 23;
if (!_didIteratorError) {
_context.next = 26;
break;
}
throw _iteratorError;
case 26:
return _context.finish(23);
case 27:
return _context.finish(18);
case 28:
case "end":
return _context.stop();
}
}, null, null, [[2, 14, 18, 28], [19,, 23, 27]], Promise);
};
one = 1; // array destructuring: required for babel to crash
case 2:
case "end":
return _context2.stop();
}
}, null, null, null, Promise);
}

View File

@ -61,6 +61,14 @@ export function isDenylisted(this: NodePath): boolean {
// TODO: Remove in Babel 8
export { isDenylisted as isBlacklisted };
function restoreContext(path: NodePath, context: TraversalContext) {
if (path.context !== context) {
path.context = context;
path.state = context.state;
path.opts = context.opts;
}
}
export function visit(this: NodePath): boolean {
if (!this.node) {
return false;
@ -74,15 +82,17 @@ export function visit(this: NodePath): boolean {
return false;
}
// Note: We need to check "this.shouldSkip" twice because
// the visitor can set it to true. Usually .shouldSkip is false
const currentContext = this.context;
// Note: We need to check "this.shouldSkip" first because
// another visitor can set it to true. Usually .shouldSkip is false
// before calling the enter visitor, but it can be true in case of
// a requeued node (e.g. by .replaceWith()) that is then marked
// with .skip().
if (this.shouldSkip || this.call("enter") || this.shouldSkip) {
if (this.shouldSkip || this.call("enter")) {
this.debug("Skip...");
return this.shouldStop;
}
restoreContext(this, currentContext);
this.debug("Recursing into...");
traverse.node(
@ -94,6 +104,8 @@ export function visit(this: NodePath): boolean {
this.skipKeys,
);
restoreContext(this, currentContext);
this.call("exit");
return this.shouldStop;

View File

@ -216,4 +216,63 @@ describe("traverse", function () {
expect(visited).toBe(true);
});
});
describe("path.visit()", () => {
it("should preserve traversal context after enter hook is executed", () => {
const ast = parse("{;}");
// The test initiates a sub-traverse from program. When the `enter` hook of BlockStatement
// is called, the unshiftContainer will change the traversal context of the BlockStatement
// to the one of Program which has an EmptyStatement visitor. If the traversal context
// is not restored after the `enter` hook is executed, the `EmptyStatement` visitor will
// be run twice: one in the sub-traverse and the other in the top level traverse.
let emptyStatementVisitedCounter = 0;
traverse(ast, {
noScope: true,
Program(path) {
path.traverse({
noScope: true,
BlockStatement: {
enter(path) {
path.parentPath.unshiftContainer("body", [t.numericLiteral(0)]);
},
},
});
},
EmptyStatement() {
++emptyStatementVisitedCounter;
},
});
expect(emptyStatementVisitedCounter).toBe(1);
});
it("should preserve traversal context after visitor is executed", () => {
const ast = parse("{;}");
// The test initiates a sub-traverse from program. During the BlockStatement is traversed,
// the EmptyStatement visitor will be called and the unshiftContainer will change the
// traversal context of the BlockStatement to that of Program which has an EmptyStatement
// visitor. If the traversal context is not restored after `enter` hook is executed,
// the `BlockStatement:exit` visitor will be run twice: one in the sub-traverse and the other
// in the top level traverse.
let blockStatementVisitedCounter = 0;
traverse(ast, {
noScope: true,
Program(path) {
path.traverse({
noScope: true,
EmptyStatement: {
enter(path) {
path.parentPath.parentPath.unshiftContainer("body", [
t.numericLiteral(0),
]);
},
},
});
},
BlockStatement: {
exit() {
++blockStatementVisitedCounter;
},
},
});
expect(blockStatementVisitedCounter).toBe(1);
});
});
});

286
yarn.lock
View File

@ -5,6 +5,29 @@ __metadata:
version: 4
cacheKey: 8
"@babel-baseline/core@npm:@babel/core@7.15.8, @babel/core@npm:7.15.8, @babel/core@npm:^7.1.0, @babel/core@npm:^7.15.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5":
version: 7.15.8
resolution: "@babel/core@npm:7.15.8"
dependencies:
"@babel/code-frame": ^7.15.8
"@babel/generator": ^7.15.8
"@babel/helper-compilation-targets": ^7.15.4
"@babel/helper-module-transforms": ^7.15.8
"@babel/helpers": ^7.15.4
"@babel/parser": ^7.15.8
"@babel/template": ^7.15.4
"@babel/traverse": ^7.15.4
"@babel/types": ^7.15.6
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.1.2
semver: ^6.3.0
source-map: ^0.5.0
checksum: 61e5050580a2808344f23161c971e917fe711a546e3afa4d022be4ec5325f8bdf559cc9afd962e39ecc3643d9cdcbbac7abc7b8dd05330020475317564c8d290
languageName: node
linkType: hard
"@babel-baseline/generator@npm:@babel/generator@7.14.5":
version: 7.14.5
resolution: "@babel/generator@npm:7.14.5"
@ -32,6 +55,23 @@ __metadata:
languageName: node
linkType: hard
"@babel-baseline/traverse@npm:@babel/traverse@7.15.4, @babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.5, @babel/traverse@npm:^7.15.4, @babel/traverse@npm:^7.7.2":
version: 7.15.4
resolution: "@babel/traverse@npm:7.15.4"
dependencies:
"@babel/code-frame": ^7.14.5
"@babel/generator": ^7.15.4
"@babel/helper-function-name": ^7.15.4
"@babel/helper-hoist-variables": ^7.15.4
"@babel/helper-split-export-declaration": ^7.15.4
"@babel/parser": ^7.15.4
"@babel/types": ^7.15.4
debug: ^4.1.0
globals: ^11.1.0
checksum: 831506a92c8ed76dc60504de37663bf5a553d7b1b009a94defc082cddb6c380c5487a1aa9438bcd7b9891a2a72758a63e4f878154aa70699d09b388b1445d774
languageName: node
linkType: hard
"@babel-internal/runtime-integration-rollup@workspace:test/runtime-integration/rollup":
version: 0.0.0-use.local
resolution: "@babel-internal/runtime-integration-rollup@workspace:test/runtime-integration/rollup"
@ -85,12 +125,18 @@ __metadata:
version: 0.0.0-use.local
resolution: "@babel/benchmark@workspace:benchmark"
dependencies:
"@babel-baseline/core": "npm:@babel/core@7.15.8"
"@babel-baseline/generator": "npm:@babel/generator@7.14.5"
"@babel-baseline/helper-validator-identifier": "npm:@babel/helper-validator-identifier@7.10.4"
"@babel-baseline/parser": "npm:@babel/parser@7.14.8"
"@babel-baseline/traverse": "npm:@babel/traverse@7.15.4"
"@babel/core": "workspace:*"
"@babel/generator": "workspace:*"
"@babel/helper-validator-identifier": "workspace:*"
"@babel/parser": "workspace:*"
"@babel/preset-env": "workspace:*"
"@babel/preset-flow": "workspace:*"
"@babel/traverse": "workspace:*"
benchmark: ^2.1.4
languageName: unknown
linkType: soft
@ -160,12 +206,12 @@ __metadata:
languageName: node
linkType: hard
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/code-frame@npm:7.14.5"
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.14.5, @babel/code-frame@npm:^7.15.8":
version: 7.15.8
resolution: "@babel/code-frame@npm:7.15.8"
dependencies:
"@babel/highlight": ^7.14.5
checksum: 0adbe4f8d91586f764f524e57631f582ab988b2ef504391a5d89db29bfaaf7c67c237798ed4a249b6a2d7135852cf94d3d07ce6b9739dd1df1f271d5ed069565
checksum: d75950f0e0925b33ab5e870079134509c13bcdbf96c8bf4d0dea91606775bc044258c762104ab20882fda3b07cbff24176ed77dfb57af5a901bde33ddfe690bb
languageName: node
linkType: hard
@ -221,29 +267,6 @@ __metadata:
languageName: node
linkType: hard
"@babel/core@npm:7.15.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.15.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5":
version: 7.15.0
resolution: "@babel/core@npm:7.15.0"
dependencies:
"@babel/code-frame": ^7.14.5
"@babel/generator": ^7.15.0
"@babel/helper-compilation-targets": ^7.15.0
"@babel/helper-module-transforms": ^7.15.0
"@babel/helpers": ^7.14.8
"@babel/parser": ^7.15.0
"@babel/template": ^7.14.5
"@babel/traverse": ^7.15.0
"@babel/types": ^7.15.0
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.1.2
semver: ^6.3.0
source-map: ^0.5.0
checksum: 6f7ac97d2d2eebe62a431ce55b37753aa443b762da0524640caa2f7d4417750f8e21f3eb30d62f25e479f93dac505c868d24011b124cfa6905abebb23b44715c
languageName: node
linkType: hard
"@babel/core@workspace:*, @babel/core@workspace:^7.14.5, @babel/core@workspace:^7.15.5, @babel/core@workspace:packages/babel-core":
version: 0.0.0-use.local
resolution: "@babel/core@workspace:packages/babel-core"
@ -363,14 +386,14 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.15.0, @babel/generator@npm:^7.7.2":
version: 7.15.0
resolution: "@babel/generator@npm:7.15.0"
"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.15.4, @babel/generator@npm:^7.15.8, @babel/generator@npm:^7.7.2":
version: 7.15.8
resolution: "@babel/generator@npm:7.15.8"
dependencies:
"@babel/types": ^7.15.0
"@babel/types": ^7.15.6
jsesc: ^2.5.1
source-map: ^0.5.0
checksum: ef227c4c39ab810616b1d76cf9fa7b452b3a36ae1f26d52c2a7c68edcba29d6dd3cd3e88c58f6e3969a58dadee7b73016d3cabbd6f0040ff832f686db4679628
checksum: 3afc4d50280352125b6f1bca01fd1e4b272e1cf26248879fb38b74f8c67d7f9304c650e182623f9e7855d8154c6f05f66df81817a71de66e7dfe6670785eb344
languageName: node
linkType: hard
@ -434,9 +457,9 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.14.5, @babel/helper-compilation-targets@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/helper-compilation-targets@npm:7.15.0"
"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.14.5, @babel/helper-compilation-targets@npm:^7.15.0, @babel/helper-compilation-targets@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-compilation-targets@npm:7.15.4"
dependencies:
"@babel/compat-data": ^7.15.0
"@babel/helper-validator-option": ^7.14.5
@ -444,7 +467,7 @@ __metadata:
semver: ^6.3.0
peerDependencies:
"@babel/core": ^7.0.0
checksum: 82a1f5d8041d39454fe5d7d109e32e90f5c6c13f0e87c7ac94332ac79a1fb62ab135b2f8ceba07ba307bb0db792c1f64796aec68bb258a13aa69a56ee65e2427
checksum: a2b9767d5658da90bd79170b4b0d2987930fb6708d48428619f9f4664c47e3f9409801b76c7603446404b453c67e54682cc86840cb1c29aa06c956533ebaf5ba
languageName: node
linkType: hard
@ -578,14 +601,14 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-function-name@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-function-name@npm:7.14.5"
"@babel/helper-function-name@npm:^7.14.5, @babel/helper-function-name@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-function-name@npm:7.15.4"
dependencies:
"@babel/helper-get-function-arity": ^7.14.5
"@babel/template": ^7.14.5
"@babel/types": ^7.14.5
checksum: fd8ffa82f7622b6e9a6294fb3b98b42e743ab2a8e3c329367667a960b5b98b48bc5ebf8be7308981f1985b9f3c69e1a3b4a91c8944ae97c31803240da92fb3c8
"@babel/helper-get-function-arity": ^7.15.4
"@babel/template": ^7.15.4
"@babel/types": ^7.15.4
checksum: 0500e8e40753fdc25252b30609b12df8ebb997a4e5b4c2145774855c026a4338c0510fc7b819035d5f9d76cf3bd63417c0b7b58f0836a10996300f2f925c4e0f
languageName: node
linkType: hard
@ -599,12 +622,12 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-get-function-arity@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-get-function-arity@npm:7.14.5"
"@babel/helper-get-function-arity@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-get-function-arity@npm:7.15.4"
dependencies:
"@babel/types": ^7.14.5
checksum: a60779918b677a35e177bb4f46babfd54e9790587b6a4f076092a9eff2a940cbeacdeb10c94331b26abfe838769554d72293d16df897246cfccd1444e5e27cb7
"@babel/types": ^7.15.4
checksum: 1a3dba8700ec69b5b120401769897a1a0ca2edcf6b546659d49946dcc8b0755c4c58dd8f15739f5cf851d4ca1db76f56759897c6f5b9f76f2fef989dc4f8fd54
languageName: node
linkType: hard
@ -616,12 +639,12 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-hoist-variables@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-hoist-variables@npm:7.14.5"
"@babel/helper-hoist-variables@npm:^7.14.5, @babel/helper-hoist-variables@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-hoist-variables@npm:7.15.4"
dependencies:
"@babel/types": ^7.14.5
checksum: 35af58eebffca10988de7003e044ce2d27212aea72ac6d2c4604137da7f1e193cc694d8d60805d0d0beaf3d990f6f2dcc2622c52e3d3148e37017a29cacf2e56
"@babel/types": ^7.15.4
checksum: 1a9ae0a27112b5f4e4ab91da2a1b40a8f91d8ce195e965d900ec3f13b583a1ab36834fb3edc2812523fa1d586ce21c3e6d8ce437d168e23a5d8e7e2e46b50f6f
languageName: node
linkType: hard
@ -634,12 +657,12 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-member-expression-to-functions@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/helper-member-expression-to-functions@npm:7.15.0"
"@babel/helper-member-expression-to-functions@npm:^7.15.0, @babel/helper-member-expression-to-functions@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-member-expression-to-functions@npm:7.15.4"
dependencies:
"@babel/types": ^7.15.0
checksum: 63b4824839990fbf3fe38b5c8a7b002a73bb2161e72b7146b1dc256671bcf36f34587a927e597a556dd496b49089cf13ea77877482aef1f35f628899042127ae
"@babel/types": ^7.15.4
checksum: 30cf27e2afbaf1d58d189c5f36951a6af7d2bfccdfdb7d57e91749620d9c3c37d78324a1725079d3ab4a0e5c4e5f3d5f19a275d5dd269baa2aa8852835b05d6d
languageName: node
linkType: hard
@ -652,12 +675,12 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-module-imports@npm:7.14.5"
"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.14.5, @babel/helper-module-imports@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-module-imports@npm:7.15.4"
dependencies:
"@babel/types": ^7.14.5
checksum: b98279908698a50a22634e683924cb25eb93edf1bf28ac65691dfa82d7a1a4dae4e6b12b8ef9f9a50171ca484620bce544f270873c53505d8a45364c5b665c0c
"@babel/types": ^7.15.4
checksum: 519681cb9c27fcacd85ef13534020db3a2bac1d53a4d988fd9f3cf1ec223854311d4193c961cc2031c4d1df3b1a35a849b38237302752ae3d29eb00e5b9a904a
languageName: node
linkType: hard
@ -695,28 +718,28 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.14.5, @babel/helper-module-transforms@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/helper-module-transforms@npm:7.15.0"
"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.14.5, @babel/helper-module-transforms@npm:^7.15.0, @babel/helper-module-transforms@npm:^7.15.8":
version: 7.15.8
resolution: "@babel/helper-module-transforms@npm:7.15.8"
dependencies:
"@babel/helper-module-imports": ^7.14.5
"@babel/helper-replace-supers": ^7.15.0
"@babel/helper-simple-access": ^7.14.8
"@babel/helper-split-export-declaration": ^7.14.5
"@babel/helper-validator-identifier": ^7.14.9
"@babel/template": ^7.14.5
"@babel/traverse": ^7.15.0
"@babel/types": ^7.15.0
checksum: 65eca31a9571d43c454cad13b26e17a0909e1fb439a939d2f17268f016ec85cec2fe7a9abcadea863d1b80b448f89647ac9be0abd76265c0e274205794031f33
"@babel/helper-module-imports": ^7.15.4
"@babel/helper-replace-supers": ^7.15.4
"@babel/helper-simple-access": ^7.15.4
"@babel/helper-split-export-declaration": ^7.15.4
"@babel/helper-validator-identifier": ^7.15.7
"@babel/template": ^7.15.4
"@babel/traverse": ^7.15.4
"@babel/types": ^7.15.6
checksum: 67aea0ba226e066ef04ba642325cf39b1c517945b7e7d5596755f4eef9b81865522553b75deec77b30edd3d5069c866b71c30f4f8aa8d93077eabc0e0c603da0
languageName: node
linkType: hard
"@babel/helper-optimise-call-expression@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-optimise-call-expression@npm:7.14.5"
"@babel/helper-optimise-call-expression@npm:^7.14.5, @babel/helper-optimise-call-expression@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-optimise-call-expression@npm:7.15.4"
dependencies:
"@babel/types": ^7.14.5
checksum: c7af558c63eb5449bf2249f1236d892ed54a400cb6c721756cde573b996c12c64dee6b57fa18ad1a0025d152e6f689444f7ea32997a1d56e1af66c3eda18843d
"@babel/types": ^7.15.4
checksum: 7c929d1a3dbed7ee776dd8a4502b92433bb14ce6217372581db117de294edcf7b8678b1f703b8309c769bb46f2e4f005cdb3958dec508a486b2b03a9a919b542
languageName: node
linkType: hard
@ -773,15 +796,15 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-replace-supers@npm:^7.14.5, @babel/helper-replace-supers@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/helper-replace-supers@npm:7.15.0"
"@babel/helper-replace-supers@npm:^7.14.5, @babel/helper-replace-supers@npm:^7.15.0, @babel/helper-replace-supers@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-replace-supers@npm:7.15.4"
dependencies:
"@babel/helper-member-expression-to-functions": ^7.15.0
"@babel/helper-optimise-call-expression": ^7.14.5
"@babel/traverse": ^7.15.0
"@babel/types": ^7.15.0
checksum: e1fce39b88ac32058a6fad15f0840cc40a63af7d60ef1d3bca0fcda3e4d88422d164a165c3b1efbcbda3b80ac68165fa79005fe27fc5569d2b9582a8cc002db3
"@babel/helper-member-expression-to-functions": ^7.15.4
"@babel/helper-optimise-call-expression": ^7.15.4
"@babel/traverse": ^7.15.4
"@babel/types": ^7.15.4
checksum: b08a23914a5f7f964aefa4518255006d3a58e4c0cf972527c1fe3c79ebff4d6d50c9f1d370b8d62e0085766a654910e39ba196fab522d794142d2219eea8430d
languageName: node
linkType: hard
@ -796,12 +819,12 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-simple-access@npm:^7.14.8":
version: 7.14.8
resolution: "@babel/helper-simple-access@npm:7.14.8"
"@babel/helper-simple-access@npm:^7.14.8, @babel/helper-simple-access@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-simple-access@npm:7.15.4"
dependencies:
"@babel/types": ^7.14.8
checksum: c1dae88c956154c854bb1679d19b9158ff1c8241329a4a70026ec16c594b9637e73647e5a1a0f9b7c47b2309201f633c259fb41d06a800496283debce6a67fab
"@babel/types": ^7.15.4
checksum: 8c3462264d6755c1e190a709fa90667c1691cb61cdca2d3f9119dd93adfd9fbcb292bcc48dbd7e065b8c27d9371f2793799a92aec124a3260288ed112e00c839
languageName: node
linkType: hard
@ -832,12 +855,12 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-split-export-declaration@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-split-export-declaration@npm:7.14.5"
"@babel/helper-split-export-declaration@npm:^7.14.5, @babel/helper-split-export-declaration@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helper-split-export-declaration@npm:7.15.4"
dependencies:
"@babel/types": ^7.14.5
checksum: 93437025a33747bfd37d6d5a9cdac8f4b6b3e5c0c53c0e24c5444575e731ea64fd5471a51a039fd74ff3378f916ea2d69d9f10274d253ed6f832952be2fd65f0
"@babel/types": ^7.15.4
checksum: 6baf45996e1323fdfc30666e9c0b3219d74c54dc71e9130acfa4d9d4c53faa95618ac383a1c82a156555908323384a416b4a29e88b337de98fdb476212134f99
languageName: node
linkType: hard
@ -864,10 +887,10 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helper-validator-identifier@npm:^7.14.5, @babel/helper-validator-identifier@npm:^7.14.9":
version: 7.14.9
resolution: "@babel/helper-validator-identifier@npm:7.14.9"
checksum: 58552531a7674363e74672434c312ddaf1545b8a43308e1a7f38db58bf79c796c095a6dab6a6105eb0d783b97441f6cbb525bb887f29a35f232fcdbd8cb240dc
"@babel/helper-validator-identifier@npm:^7.14.5, @babel/helper-validator-identifier@npm:^7.14.9, @babel/helper-validator-identifier@npm:^7.15.7":
version: 7.15.7
resolution: "@babel/helper-validator-identifier@npm:7.15.7"
checksum: f041c28c531d1add5cc345b25d5df3c29c62bce3205b4d4a93dcd164ccf630350acba252d374fad8f5d8ea526995a215829f27183ba7ce7ce141843bf23068a6
languageName: node
linkType: hard
@ -916,14 +939,14 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.14.8":
version: 7.14.8
resolution: "@babel/helpers@npm:7.14.8"
"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.15.4":
version: 7.15.4
resolution: "@babel/helpers@npm:7.15.4"
dependencies:
"@babel/template": ^7.14.5
"@babel/traverse": ^7.14.8
"@babel/types": ^7.14.8
checksum: 2f1358c19fc1ee744c183f81b499b73977da7d3d3f7a881d457b235754394a503e4717353f29364bd5feb7fa406b1edd1aab92b5ab0765dba945fb559eeb1c65
"@babel/template": ^7.15.4
"@babel/traverse": ^7.15.4
"@babel/types": ^7.15.4
checksum: e60738110086c183d0ce369ad56949d5dceeb7d73d8fdb892f36d5b8525192e6b97f4563eb77334f47ac27ac43a21f3c4cd53bff342c2a0d5f4008a2b0169c89
languageName: node
linkType: hard
@ -984,12 +1007,12 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.5, @babel/parser@npm:^7.15.0, @babel/parser@npm:^7.7.2":
version: 7.15.0
resolution: "@babel/parser@npm:7.15.0"
"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.15.4, @babel/parser@npm:^7.15.8, @babel/parser@npm:^7.7.2":
version: 7.15.8
resolution: "@babel/parser@npm:7.15.8"
bin:
parser: ./bin/babel-parser.js
checksum: f9739478b91d2c151246b5d61399d22ba2139897e979d7bfe62d9cafce6337f007ebf662933c950ad4f18858d1d25a44a9ad22157ce1870dbe6b356f0cdebe8f
checksum: a26c91967655f3961bc0c2565f7b9ac870ee3db86c9a0f00b96a7fb65210687be023431c79b3ed2a13b9c945e6afa09c36542ee508741e7ce3039a5b0f18c4b2
languageName: node
linkType: hard
@ -3515,14 +3538,14 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/template@npm:^7.12.7, @babel/template@npm:^7.14.5, @babel/template@npm:^7.3.3":
version: 7.14.5
resolution: "@babel/template@npm:7.14.5"
"@babel/template@npm:^7.12.7, @babel/template@npm:^7.14.5, @babel/template@npm:^7.15.4, @babel/template@npm:^7.3.3":
version: 7.15.4
resolution: "@babel/template@npm:7.15.4"
dependencies:
"@babel/code-frame": ^7.14.5
"@babel/parser": ^7.14.5
"@babel/types": ^7.14.5
checksum: 4939199c5b1ca8940e14c87f30f4fab5f35c909bef88447131075349027546927b4e3e08e50db5c2db2024f2c6585a4fe571c739c835ac980f7a4ada2dd8a623
"@babel/parser": ^7.15.4
"@babel/types": ^7.15.4
checksum: 58ca51fdd40bbaaddf2e46513dd05d5823f214cb2877b3f353abf5541a033a1b6570c29c2c80e60f2b55966326e40bebbf53666b261646ccf410b3d984af42ce
languageName: node
linkType: hard
@ -3546,23 +3569,6 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.5, @babel/traverse@npm:^7.14.8, @babel/traverse@npm:^7.15.0, @babel/traverse@npm:^7.7.2":
version: 7.15.0
resolution: "@babel/traverse@npm:7.15.0"
dependencies:
"@babel/code-frame": ^7.14.5
"@babel/generator": ^7.15.0
"@babel/helper-function-name": ^7.14.5
"@babel/helper-hoist-variables": ^7.14.5
"@babel/helper-split-export-declaration": ^7.14.5
"@babel/parser": ^7.15.0
"@babel/types": ^7.15.0
debug: ^4.1.0
globals: ^11.1.0
checksum: e13056690a2a4a4dd699e241b89d4f7cf701ceef2f4ee0efc32a8cc4e07e1bbd397423868ecfec8aa98a769486f7d08778420d48f981b4f5dbb1b2f211daf656
languageName: node
linkType: hard
"@babel/traverse@workspace:*, @babel/traverse@workspace:^7.15.4, @babel/traverse@workspace:packages/babel-traverse":
version: 0.0.0-use.local
resolution: "@babel/traverse@workspace:packages/babel-traverse"
@ -3580,13 +3586,13 @@ __metadata:
languageName: unknown
linkType: soft
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.7, @babel/types@npm:^7.14.5, @babel/types@npm:^7.14.8, @babel/types@npm:^7.15.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
version: 7.15.0
resolution: "@babel/types@npm:7.15.0"
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.7, @babel/types@npm:^7.14.5, @babel/types@npm:^7.15.0, @babel/types@npm:^7.15.4, @babel/types@npm:^7.15.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
version: 7.15.6
resolution: "@babel/types@npm:7.15.6"
dependencies:
"@babel/helper-validator-identifier": ^7.14.9
to-fast-properties: ^2.0.0
checksum: 6d6bcdfce94b5446520a24087c6dede453e28425af092965b304d4028e9bca79712fd691cdad031e3570c7667bf3206e5f642bcccbfccb33d42ca4a8203587f9
checksum: 37f497dde10d238b5eb184efab83b415a86611e3d73dc0434de0cfb851b20ee606a3b7e1525e5b2d522fac1248d0345fea0468006f246262511b80cd3ed2419f
languageName: node
linkType: hard