@rollup/wasm-node 4.11.0 → 4.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/rollup +9 -3
- package/dist/es/getLogFilter.js +2 -2
- package/dist/es/parseAst.js +2 -2
- package/dist/es/rollup.js +2 -2
- package/dist/es/shared/node-entry.js +975 -141
- package/dist/es/shared/parseAst.js +83 -43
- package/dist/es/shared/watch.js +2 -2
- package/dist/getLogFilter.js +2 -2
- package/dist/loadConfigFile.js +3 -3
- package/dist/parseAst.js +2 -2
- package/dist/rollup.d.ts +13 -4
- package/dist/rollup.js +3 -3
- package/dist/shared/fsevents-importer.js +2 -2
- package/dist/shared/index.js +2 -2
- package/dist/shared/loadConfigFile.js +2 -2
- package/dist/shared/parseAst.js +100 -42
- package/dist/shared/rollup.js +996 -162
- package/dist/shared/watch-cli.js +3 -3
- package/dist/shared/watch.js +2 -2
- package/dist/wasm-node/bindings_wasm_bg.wasm +0 -0
- package/package.json +15 -14
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/*
|
|
2
2
|
@license
|
|
3
|
-
Rollup.js v4.
|
|
4
|
-
|
|
3
|
+
Rollup.js v4.12.0
|
|
4
|
+
Fri, 16 Feb 2024 13:31:42 GMT - commit 0146b84be33a8416b4df4b9382549a7ca19dd64a
|
|
5
5
|
|
|
6
6
|
https://github.com/rollup/rollup
|
|
7
7
|
|
|
8
8
|
Released under the MIT License.
|
|
9
9
|
*/
|
|
10
|
-
import { normalize, getImportPath, LOGLEVEL_WARN, logUnusedExternalImports, ANNOTATION_KEY, INVALID_ANNOTATION_KEY,
|
|
10
|
+
import { normalize, getImportPath, LOGLEVEL_WARN, logUnusedExternalImports, ANNOTATION_KEY, INVALID_ANNOTATION_KEY, Program as Program$1, logRedeclarationError, CatchClause as CatchClause$1, logDuplicateArgumentNameError, CallExpression as CallExpression$1, logIllegalImportReassignment, logModuleLevelDirective, ReturnStatement as ReturnStatement$1, Property as Property$1, logConstVariableReassignError, ExpressionStatement as ExpressionStatement$1, ArrowFunctionExpression as ArrowFunctionExpression$1, logMissingExport, logCannotCallNamespace, logEval, BlockStatement as BlockStatement$1, getRollupEror, logParseError, logModuleParseError, error, LOGLEVEL_INFO, logFirstSideEffect, locate, logInvalidAnnotation, Identifier as Identifier$1, logThisIsUndefined, getReadStringFunction, convertString, convertAnnotations, FIXED_STRINGS, convertNode as convertNode$1, logImportAttributeIsInvalid, logImportOptionsAreInvalid, logSyntheticNamedExportsNeedNamespaceExport, logMissingEntryExport, logInvalidFormatForTopLevelAwait, logDuplicateExportError, logInvalidSourcemapForError, augmentCodeLocation, logInconsistentImportAttributes, logNamespaceConflict, logAmbiguousExternalNamespaces, logShimmedExport, parseAst, logCircularReexport, TemplateLiteral as TemplateLiteral$1, Literal as Literal$1, logMissingNodeBuiltins, logIllegalIdentifierAsName, logMissingNameOptionForIifeExport, logMissingNameOptionForUmdExport, logAddonNotGenerated, logIncompatibleExportOptionValue, logMixedExport, logFailedValidation, isPathFragment, logCyclicCrossChunkReexport, getAliasName, logUnexpectedNamedImport, isAbsolute as isAbsolute$1, relative as relative$1, logUnexpectedNamespaceReexport, logEmptyChunk, logMissingGlobalName, logOptimizeChunkStatus, logSourcemapBroken, logConflictingSourcemapSources, logChunkInvalid, logInvalidOption, URL_OUTPUT_FORMAT, URL_OUTPUT_DIR, URL_OUTPUT_SOURCEMAPFILE, URL_OUTPUT_AMD_ID, logCannotAssignModuleToChunk, logAnonymousPluginCache, logDuplicatePluginName, LOGLEVEL_ERROR, logLevelPriority, relativeId, LOGLEVEL_DEBUG, logUnknownOption, printQuotedStringList, logInvalidSetAssetSourceCall, logPluginError, logNoTransformMapOrAstWithoutCode, logBadLoader, logExternalModulesCannotBeTransformedToModules, logInternalIdCannotBeExternal, isRelative, logUnresolvedImport, logUnresolvedImportTreatedAsExternal, logExternalSyntheticExports, logUnresolvedEntry, logUnresolvedImplicitDependant, logExternalModulesCannotBeIncludedInManualChunks, logEntryCannotBeExternal, logImplicitDependantCannotBeExternal, logNoAssetSourceSet, logFileReferenceIdNotFoundForFilename, logAssetReferenceIdNotFoundForSetSource, logAssetSourceAlreadySet, logInvalidRollupPhaseForChunkEmission, logFileNameConflict, logAssetNotFinalisedForFileName, logChunkNotGeneratedForFileName, logInvalidLogPosition, logInputHookInOutputPlugin, logInvalidFunctionPluginHook, logInvalidAddonPluginHook, logImplicitDependantIsNotIncluded, logCircularDependency, URL_TREESHAKE_MODULESIDEEFFECTS, URL_TREESHAKE, URL_OUTPUT_INLINEDYNAMICIMPORTS, URL_PRESERVEENTRYSIGNATURES, URL_OUTPUT_AMD_BASEPATH, logInvalidExportOptionValue, warnDeprecation, URL_OUTPUT_INTEROP, URL_OUTPUT_MANUALCHUNKS, isValidUrl, addTrailingSlashIfMissed, URL_OUTPUT_SOURCEMAPBASEURL, URL_OUTPUT_GENERATEDCODE, URL_OUTPUT_EXTERNALIMPORTATTRIBUTES, logAlreadyClosed, logMissingFileOrDirOption, logCannotEmitFromOptionsHook, URL_WATCH } from './parseAst.js';
|
|
11
11
|
import { relative, dirname, basename, extname, resolve as resolve$1 } from 'node:path';
|
|
12
12
|
import require$$0$1, { win32, posix, isAbsolute, resolve } from 'path';
|
|
13
|
+
import { parseAsync, xxhashBase64Url, xxhashBase36, xxhashBase16 } from '../../native.js';
|
|
13
14
|
import process$1, { env as env$1 } from 'node:process';
|
|
14
15
|
import { performance } from 'node:perf_hooks';
|
|
15
|
-
import { xxhashBase64Url, xxhashBase36, xxhashBase16 } from '../../native.js';
|
|
16
16
|
import { lstat, realpath, readdir, readFile, mkdir, writeFile } from 'node:fs/promises';
|
|
17
17
|
import * as tty from 'tty';
|
|
18
18
|
|
|
19
|
-
var version = "4.
|
|
19
|
+
var version = "4.12.0";
|
|
20
20
|
|
|
21
21
|
const comma = ','.charCodeAt(0);
|
|
22
22
|
const semicolon = ';'.charCodeAt(0);
|
|
@@ -4617,13 +4617,83 @@ function getMemberReturnExpressionWhenCalled(members, memberName) {
|
|
|
4617
4617
|
return [members[memberName].returns, false];
|
|
4618
4618
|
}
|
|
4619
4619
|
|
|
4620
|
-
|
|
4620
|
+
// This file is generated by scripts/generate-ast-converters.js.
|
|
4621
|
+
// Do not edit this file directly.
|
|
4622
|
+
const childNodeKeys = {
|
|
4623
|
+
ArrayExpression: ['elements'],
|
|
4624
|
+
ArrayPattern: ['elements'],
|
|
4625
|
+
ArrowFunctionExpression: ['params', 'body'],
|
|
4626
|
+
AssignmentExpression: ['left', 'right'],
|
|
4627
|
+
AssignmentPattern: ['left', 'right'],
|
|
4628
|
+
AwaitExpression: ['argument'],
|
|
4629
|
+
BinaryExpression: ['left', 'right'],
|
|
4630
|
+
BlockStatement: ['body'],
|
|
4631
|
+
BreakStatement: ['label'],
|
|
4632
|
+
CallExpression: ['callee', 'arguments'],
|
|
4633
|
+
CatchClause: ['param', 'body'],
|
|
4634
|
+
ChainExpression: ['expression'],
|
|
4635
|
+
ClassBody: ['body'],
|
|
4636
|
+
ClassDeclaration: ['id', 'superClass', 'body'],
|
|
4637
|
+
ClassExpression: ['id', 'superClass', 'body'],
|
|
4638
|
+
ConditionalExpression: ['test', 'consequent', 'alternate'],
|
|
4639
|
+
ContinueStatement: ['label'],
|
|
4640
|
+
DebuggerStatement: [],
|
|
4641
|
+
DoWhileStatement: ['body', 'test'],
|
|
4642
|
+
EmptyStatement: [],
|
|
4643
|
+
ExportAllDeclaration: ['exported', 'source', 'attributes'],
|
|
4644
|
+
ExportDefaultDeclaration: ['declaration'],
|
|
4645
|
+
ExportNamedDeclaration: ['specifiers', 'source', 'attributes', 'declaration'],
|
|
4646
|
+
ExportSpecifier: ['local', 'exported'],
|
|
4647
|
+
ExpressionStatement: ['expression'],
|
|
4648
|
+
ForInStatement: ['left', 'right', 'body'],
|
|
4649
|
+
ForOfStatement: ['left', 'right', 'body'],
|
|
4650
|
+
ForStatement: ['init', 'test', 'update', 'body'],
|
|
4651
|
+
FunctionDeclaration: ['id', 'params', 'body'],
|
|
4652
|
+
FunctionExpression: ['id', 'params', 'body'],
|
|
4653
|
+
Identifier: [],
|
|
4654
|
+
IfStatement: ['test', 'consequent', 'alternate'],
|
|
4655
|
+
ImportAttribute: ['key', 'value'],
|
|
4656
|
+
ImportDeclaration: ['specifiers', 'source', 'attributes'],
|
|
4657
|
+
ImportDefaultSpecifier: ['local'],
|
|
4658
|
+
ImportExpression: ['source', 'options'],
|
|
4659
|
+
ImportNamespaceSpecifier: ['local'],
|
|
4660
|
+
ImportSpecifier: ['imported', 'local'],
|
|
4661
|
+
LabeledStatement: ['label', 'body'],
|
|
4621
4662
|
Literal: [],
|
|
4622
|
-
|
|
4663
|
+
LogicalExpression: ['left', 'right'],
|
|
4664
|
+
MemberExpression: ['object', 'property'],
|
|
4665
|
+
MetaProperty: ['meta', 'property'],
|
|
4666
|
+
MethodDefinition: ['key', 'value'],
|
|
4667
|
+
NewExpression: ['callee', 'arguments'],
|
|
4668
|
+
ObjectExpression: ['properties'],
|
|
4669
|
+
ObjectPattern: ['properties'],
|
|
4670
|
+
PanicError: [],
|
|
4671
|
+
ParseError: [],
|
|
4672
|
+
PrivateIdentifier: [],
|
|
4673
|
+
Program: ['body'],
|
|
4674
|
+
Property: ['key', 'value'],
|
|
4675
|
+
PropertyDefinition: ['key', 'value'],
|
|
4676
|
+
RestElement: ['argument'],
|
|
4677
|
+
ReturnStatement: ['argument'],
|
|
4678
|
+
SequenceExpression: ['expressions'],
|
|
4679
|
+
SpreadElement: ['argument'],
|
|
4680
|
+
StaticBlock: ['body'],
|
|
4681
|
+
Super: [],
|
|
4682
|
+
SwitchCase: ['test', 'consequent'],
|
|
4683
|
+
SwitchStatement: ['discriminant', 'cases'],
|
|
4684
|
+
TaggedTemplateExpression: ['tag', 'quasi'],
|
|
4685
|
+
TemplateElement: [],
|
|
4686
|
+
TemplateLiteral: ['quasis', 'expressions'],
|
|
4687
|
+
ThisExpression: [],
|
|
4688
|
+
ThrowStatement: ['argument'],
|
|
4689
|
+
TryStatement: ['block', 'handler', 'finalizer'],
|
|
4690
|
+
UnaryExpression: ['argument'],
|
|
4691
|
+
UpdateExpression: ['argument'],
|
|
4692
|
+
VariableDeclaration: ['declarations'],
|
|
4693
|
+
VariableDeclarator: ['id', 'init'],
|
|
4694
|
+
WhileStatement: ['test', 'body'],
|
|
4695
|
+
YieldExpression: ['argument']
|
|
4623
4696
|
};
|
|
4624
|
-
function createKeysForNode(esTreeNode) {
|
|
4625
|
-
return Object.keys(esTreeNode).filter(key => typeof esTreeNode[key] === 'object' && key.charCodeAt(0) !== 95 /* _ */);
|
|
4626
|
-
}
|
|
4627
4697
|
|
|
4628
4698
|
const INCLUDE_PARAMETERS = 'variables';
|
|
4629
4699
|
class NodeBase extends ExpressionEntity {
|
|
@@ -4639,22 +4709,11 @@ class NodeBase extends ExpressionEntity {
|
|
|
4639
4709
|
set deoptimized(value) {
|
|
4640
4710
|
this.flags = setFlag(this.flags, 2 /* Flag.deoptimized */, value);
|
|
4641
4711
|
}
|
|
4642
|
-
constructor(
|
|
4712
|
+
constructor(parent, parentScope) {
|
|
4643
4713
|
super();
|
|
4644
|
-
// Nodes can opt-in to keep the AST if needed during the build pipeline.
|
|
4645
|
-
// Avoid true when possible as large AST takes up memory.
|
|
4646
|
-
if (keepEsTreeNode) {
|
|
4647
|
-
this.esTreeNode = esTreeNode;
|
|
4648
|
-
}
|
|
4649
|
-
const { type } = esTreeNode;
|
|
4650
|
-
keys[type] ||= createKeysForNode(esTreeNode);
|
|
4651
4714
|
this.parent = parent;
|
|
4652
4715
|
this.scope = parentScope;
|
|
4653
4716
|
this.createScope(parentScope);
|
|
4654
|
-
this.parseNode(esTreeNode);
|
|
4655
|
-
this.initialise();
|
|
4656
|
-
this.scope.context.magicString.addSourcemapLocation(this.start);
|
|
4657
|
-
this.scope.context.magicString.addSourcemapLocation(this.end);
|
|
4658
4717
|
}
|
|
4659
4718
|
addExportedVariables(_variables, _exportNamesByVariable) { }
|
|
4660
4719
|
/**
|
|
@@ -4662,7 +4721,7 @@ class NodeBase extends ExpressionEntity {
|
|
|
4662
4721
|
* that require the scopes to be populated with variables.
|
|
4663
4722
|
*/
|
|
4664
4723
|
bind() {
|
|
4665
|
-
for (const key of
|
|
4724
|
+
for (const key of childNodeKeys[this.type]) {
|
|
4666
4725
|
const value = this[key];
|
|
4667
4726
|
if (Array.isArray(value)) {
|
|
4668
4727
|
for (const child of value) {
|
|
@@ -4684,7 +4743,7 @@ class NodeBase extends ExpressionEntity {
|
|
|
4684
4743
|
hasEffects(context) {
|
|
4685
4744
|
if (!this.deoptimized)
|
|
4686
4745
|
this.applyDeoptimizations();
|
|
4687
|
-
for (const key of
|
|
4746
|
+
for (const key of childNodeKeys[this.type]) {
|
|
4688
4747
|
const value = this[key];
|
|
4689
4748
|
if (value === null)
|
|
4690
4749
|
continue;
|
|
@@ -4707,7 +4766,7 @@ class NodeBase extends ExpressionEntity {
|
|
|
4707
4766
|
if (!this.deoptimized)
|
|
4708
4767
|
this.applyDeoptimizations();
|
|
4709
4768
|
this.included = true;
|
|
4710
|
-
for (const key of
|
|
4769
|
+
for (const key of childNodeKeys[this.type]) {
|
|
4711
4770
|
const value = this[key];
|
|
4712
4771
|
if (value === null)
|
|
4713
4772
|
continue;
|
|
@@ -4728,8 +4787,11 @@ class NodeBase extends ExpressionEntity {
|
|
|
4728
4787
|
* Override to perform special initialisation steps after the scope is
|
|
4729
4788
|
* initialised
|
|
4730
4789
|
*/
|
|
4731
|
-
initialise() {
|
|
4732
|
-
|
|
4790
|
+
initialise() {
|
|
4791
|
+
this.scope.context.magicString.addSourcemapLocation(this.start);
|
|
4792
|
+
this.scope.context.magicString.addSourcemapLocation(this.end);
|
|
4793
|
+
}
|
|
4794
|
+
parseNode(esTreeNode) {
|
|
4733
4795
|
for (const [key, value] of Object.entries(esTreeNode)) {
|
|
4734
4796
|
// Skip properties defined on the class already.
|
|
4735
4797
|
// This way, we can override this function to add custom initialisation and then call super.parseNode
|
|
@@ -4739,20 +4801,10 @@ class NodeBase extends ExpressionEntity {
|
|
|
4739
4801
|
continue;
|
|
4740
4802
|
if (key.charCodeAt(0) === 95 /* _ */) {
|
|
4741
4803
|
if (key === ANNOTATION_KEY) {
|
|
4742
|
-
|
|
4743
|
-
this.annotations = annotations;
|
|
4744
|
-
if (this.scope.context.options.treeshake.annotations) {
|
|
4745
|
-
this.annotationNoSideEffects = annotations.some(comment => comment.type === 'noSideEffects');
|
|
4746
|
-
this.annotationPure = annotations.some(comment => comment.type === 'pure');
|
|
4747
|
-
}
|
|
4804
|
+
this.annotations = value;
|
|
4748
4805
|
}
|
|
4749
4806
|
else if (key === INVALID_ANNOTATION_KEY) {
|
|
4750
|
-
|
|
4751
|
-
this.scope.context.magicString.remove(start, end);
|
|
4752
|
-
if (type === 'pure' || type === 'noSideEffects') {
|
|
4753
|
-
this.scope.context.log(LOGLEVEL_WARN, logInvalidAnnotation(this.scope.context.code.slice(start, end), this.scope.context.module.id, type), start);
|
|
4754
|
-
}
|
|
4755
|
-
}
|
|
4807
|
+
this.invalidAnnotations = value;
|
|
4756
4808
|
}
|
|
4757
4809
|
}
|
|
4758
4810
|
else if (typeof value !== 'object' || value === null) {
|
|
@@ -4763,13 +4815,17 @@ class NodeBase extends ExpressionEntity {
|
|
|
4763
4815
|
for (const child of value) {
|
|
4764
4816
|
this[key].push(child === null
|
|
4765
4817
|
? null
|
|
4766
|
-
: new (this.scope.context.getNodeConstructor(child.type))(
|
|
4818
|
+
: new (this.scope.context.getNodeConstructor(child.type))(this, this.scope).parseNode(child));
|
|
4767
4819
|
}
|
|
4768
4820
|
}
|
|
4769
4821
|
else {
|
|
4770
|
-
this[key] = new (this.scope.context.getNodeConstructor(value.type))(
|
|
4822
|
+
this[key] = new (this.scope.context.getNodeConstructor(value.type))(this, this.scope).parseNode(value);
|
|
4771
4823
|
}
|
|
4772
4824
|
}
|
|
4825
|
+
// extend child keys for unknown node types
|
|
4826
|
+
childNodeKeys[esTreeNode.type] ||= createChildNodeKeysForNode(esTreeNode);
|
|
4827
|
+
this.initialise();
|
|
4828
|
+
return this;
|
|
4773
4829
|
}
|
|
4774
4830
|
removeAnnotations(code) {
|
|
4775
4831
|
if (this.annotations) {
|
|
@@ -4779,7 +4835,7 @@ class NodeBase extends ExpressionEntity {
|
|
|
4779
4835
|
}
|
|
4780
4836
|
}
|
|
4781
4837
|
render(code, options) {
|
|
4782
|
-
for (const key of
|
|
4838
|
+
for (const key of childNodeKeys[this.type]) {
|
|
4783
4839
|
const value = this[key];
|
|
4784
4840
|
if (value === null)
|
|
4785
4841
|
continue;
|
|
@@ -4806,7 +4862,7 @@ class NodeBase extends ExpressionEntity {
|
|
|
4806
4862
|
*/
|
|
4807
4863
|
applyDeoptimizations() {
|
|
4808
4864
|
this.deoptimized = true;
|
|
4809
|
-
for (const key of
|
|
4865
|
+
for (const key of childNodeKeys[this.type]) {
|
|
4810
4866
|
const value = this[key];
|
|
4811
4867
|
if (value === null)
|
|
4812
4868
|
continue;
|
|
@@ -4822,6 +4878,9 @@ class NodeBase extends ExpressionEntity {
|
|
|
4822
4878
|
this.scope.context.requestTreeshakingPass();
|
|
4823
4879
|
}
|
|
4824
4880
|
}
|
|
4881
|
+
function createChildNodeKeysForNode(esTreeNode) {
|
|
4882
|
+
return Object.keys(esTreeNode).filter(key => typeof esTreeNode[key] === 'object' && key.charCodeAt(0) !== 95 /* _ */);
|
|
4883
|
+
}
|
|
4825
4884
|
|
|
4826
4885
|
class SpreadElement extends NodeBase {
|
|
4827
4886
|
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
@@ -5574,16 +5633,6 @@ class ArrayPattern extends NodeBase {
|
|
|
5574
5633
|
}
|
|
5575
5634
|
}
|
|
5576
5635
|
|
|
5577
|
-
const ArrowFunctionExpression$1 = 'ArrowFunctionExpression';
|
|
5578
|
-
const BlockStatement$1 = 'BlockStatement';
|
|
5579
|
-
const CallExpression$1 = 'CallExpression';
|
|
5580
|
-
const CatchClause$1 = 'CatchClause';
|
|
5581
|
-
const ExpressionStatement$1 = 'ExpressionStatement';
|
|
5582
|
-
const Identifier$1 = 'Identifier';
|
|
5583
|
-
const Program$1 = 'Program';
|
|
5584
|
-
const Property$1 = 'Property';
|
|
5585
|
-
const ReturnStatement$1 = 'ReturnStatement';
|
|
5586
|
-
|
|
5587
5636
|
class LocalVariable extends Variable {
|
|
5588
5637
|
constructor(name, declarator, init, context, kind) {
|
|
5589
5638
|
super(name);
|
|
@@ -5728,7 +5777,7 @@ const EMPTY_PATH_TRACKER = new PathTracker();
|
|
|
5728
5777
|
const UNKNOWN_DEOPTIMIZED_ENTITY = new Set([UNKNOWN_EXPRESSION]);
|
|
5729
5778
|
class ParameterVariable extends LocalVariable {
|
|
5730
5779
|
constructor(name, declarator, context) {
|
|
5731
|
-
super(name, declarator, UNKNOWN_EXPRESSION, context,
|
|
5780
|
+
super(name, declarator, UNKNOWN_EXPRESSION, context, 'parameter');
|
|
5732
5781
|
this.deoptimizationInteractions = [];
|
|
5733
5782
|
this.deoptimizations = new PathTracker();
|
|
5734
5783
|
this.deoptimizedFields = new Set();
|
|
@@ -5865,7 +5914,7 @@ class Scope {
|
|
|
5865
5914
|
const existingVariable = this.hoistedVariables?.get(name) || this.variables.get(name);
|
|
5866
5915
|
if (existingVariable) {
|
|
5867
5916
|
const existingKind = existingVariable.kind;
|
|
5868
|
-
if (kind ===
|
|
5917
|
+
if (kind === 'var' && existingKind === 'var') {
|
|
5869
5918
|
existingVariable.addDeclaration(identifier, init);
|
|
5870
5919
|
return existingVariable;
|
|
5871
5920
|
}
|
|
@@ -5976,12 +6025,12 @@ class CatchBodyScope extends ChildScope {
|
|
|
5976
6025
|
this.parent = parent;
|
|
5977
6026
|
}
|
|
5978
6027
|
addDeclaration(identifier, context, init, kind) {
|
|
5979
|
-
if (kind ===
|
|
6028
|
+
if (kind === 'var') {
|
|
5980
6029
|
const name = identifier.name;
|
|
5981
6030
|
const existingVariable = this.hoistedVariables?.get(name) || this.variables.get(name);
|
|
5982
6031
|
if (existingVariable) {
|
|
5983
6032
|
const existingKind = existingVariable.kind;
|
|
5984
|
-
if (existingKind ===
|
|
6033
|
+
if (existingKind === 'parameter' &&
|
|
5985
6034
|
// If this is a destructured parameter, it is forbidden to redeclare
|
|
5986
6035
|
existingVariable.declarations[0].parent.type === CatchClause$1) {
|
|
5987
6036
|
// If this is a var with the same name as the catch scope parameter,
|
|
@@ -6000,7 +6049,7 @@ class CatchBodyScope extends ChildScope {
|
|
|
6000
6049
|
this.addHoistedVariable(name, declaredVariable);
|
|
6001
6050
|
return declaredVariable;
|
|
6002
6051
|
}
|
|
6003
|
-
if (existingKind ===
|
|
6052
|
+
if (existingKind === 'var') {
|
|
6004
6053
|
existingVariable.addDeclaration(identifier, init);
|
|
6005
6054
|
return existingVariable;
|
|
6006
6055
|
}
|
|
@@ -6030,10 +6079,8 @@ class FunctionBodyScope extends ChildScope {
|
|
|
6030
6079
|
const existingVariable = this.hoistedVariables?.get(name) || this.variables.get(name);
|
|
6031
6080
|
if (existingVariable) {
|
|
6032
6081
|
const existingKind = existingVariable.kind;
|
|
6033
|
-
if ((kind ===
|
|
6034
|
-
(existingKind ===
|
|
6035
|
-
existingKind === "function" /* VariableKind.function */ ||
|
|
6036
|
-
existingKind === "parameter" /* VariableKind.parameter */)) {
|
|
6082
|
+
if ((kind === 'var' || kind === 'function') &&
|
|
6083
|
+
(existingKind === 'var' || existingKind === 'function' || existingKind === 'parameter')) {
|
|
6037
6084
|
existingVariable.addDeclaration(identifier, init);
|
|
6038
6085
|
return existingVariable;
|
|
6039
6086
|
}
|
|
@@ -7254,7 +7301,7 @@ class Identifier extends NodeBase {
|
|
|
7254
7301
|
let variable;
|
|
7255
7302
|
const { treeshake } = this.scope.context.options;
|
|
7256
7303
|
switch (kind) {
|
|
7257
|
-
case
|
|
7304
|
+
case 'var': {
|
|
7258
7305
|
variable = this.scope.addDeclaration(this, this.scope.context, init, kind);
|
|
7259
7306
|
if (treeshake && treeshake.correctVarValueBeforeDeclaration) {
|
|
7260
7307
|
// Necessary to make sure the init is deoptimized. We cannot call deoptimizePath here.
|
|
@@ -7262,18 +7309,18 @@ class Identifier extends NodeBase {
|
|
|
7262
7309
|
}
|
|
7263
7310
|
break;
|
|
7264
7311
|
}
|
|
7265
|
-
case
|
|
7312
|
+
case 'function': {
|
|
7266
7313
|
// in strict mode, functions are only hoisted within a scope but not across block scopes
|
|
7267
7314
|
variable = this.scope.addDeclaration(this, this.scope.context, init, kind);
|
|
7268
7315
|
break;
|
|
7269
7316
|
}
|
|
7270
|
-
case
|
|
7271
|
-
case
|
|
7272
|
-
case
|
|
7317
|
+
case 'let':
|
|
7318
|
+
case 'const':
|
|
7319
|
+
case 'class': {
|
|
7273
7320
|
variable = this.scope.addDeclaration(this, this.scope.context, init, kind);
|
|
7274
7321
|
break;
|
|
7275
7322
|
}
|
|
7276
|
-
case
|
|
7323
|
+
case 'parameter': {
|
|
7277
7324
|
variable = this.scope.addParameterDeclaration(this);
|
|
7278
7325
|
break;
|
|
7279
7326
|
}
|
|
@@ -7306,7 +7353,7 @@ class Identifier extends NodeBase {
|
|
|
7306
7353
|
hasEffects(context) {
|
|
7307
7354
|
if (!this.deoptimized)
|
|
7308
7355
|
this.applyDeoptimizations();
|
|
7309
|
-
if (this.isPossibleTDZ() && this.variable.kind !==
|
|
7356
|
+
if (this.isPossibleTDZ() && this.variable.kind !== 'var') {
|
|
7310
7357
|
return true;
|
|
7311
7358
|
}
|
|
7312
7359
|
return (this.scope.context.options.treeshake
|
|
@@ -7581,12 +7628,12 @@ class BlockScope extends ChildScope {
|
|
|
7581
7628
|
super(parent, parent.context);
|
|
7582
7629
|
}
|
|
7583
7630
|
addDeclaration(identifier, context, init, kind) {
|
|
7584
|
-
if (kind ===
|
|
7631
|
+
if (kind === 'var') {
|
|
7585
7632
|
const name = identifier.name;
|
|
7586
7633
|
const existingVariable = this.hoistedVariables?.get(name) || this.variables.get(name);
|
|
7587
7634
|
if (existingVariable) {
|
|
7588
|
-
if (existingVariable.kind ===
|
|
7589
|
-
(kind ===
|
|
7635
|
+
if (existingVariable.kind === 'var' ||
|
|
7636
|
+
(kind === 'var' && existingVariable.kind === 'parameter')) {
|
|
7590
7637
|
existingVariable.addDeclaration(identifier, init);
|
|
7591
7638
|
return existingVariable;
|
|
7592
7639
|
}
|
|
@@ -7606,6 +7653,7 @@ class BlockScope extends ChildScope {
|
|
|
7606
7653
|
|
|
7607
7654
|
class ExpressionStatement extends NodeBase {
|
|
7608
7655
|
initialise() {
|
|
7656
|
+
super.initialise();
|
|
7609
7657
|
if (this.directive &&
|
|
7610
7658
|
this.directive !== 'use strict' &&
|
|
7611
7659
|
this.parent.type === Program$1) {
|
|
@@ -7679,6 +7727,7 @@ class BlockStatement extends NodeBase {
|
|
|
7679
7727
|
}
|
|
7680
7728
|
}
|
|
7681
7729
|
initialise() {
|
|
7730
|
+
super.initialise();
|
|
7682
7731
|
const firstBodyStatement = this.body[0];
|
|
7683
7732
|
this.deoptimizeBody =
|
|
7684
7733
|
firstBodyStatement instanceof ExpressionStatement &&
|
|
@@ -7742,6 +7791,12 @@ class FunctionBase extends NodeBase {
|
|
|
7742
7791
|
set deoptimizedReturn(value) {
|
|
7743
7792
|
this.flags = setFlag(this.flags, 512 /* Flag.deoptimizedReturn */, value);
|
|
7744
7793
|
}
|
|
7794
|
+
get generator() {
|
|
7795
|
+
return isFlagSet(this.flags, 4194304 /* Flag.generator */);
|
|
7796
|
+
}
|
|
7797
|
+
set generator(value) {
|
|
7798
|
+
this.flags = setFlag(this.flags, 4194304 /* Flag.generator */, value);
|
|
7799
|
+
}
|
|
7745
7800
|
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
7746
7801
|
if (interaction.type === INTERACTION_CALLED) {
|
|
7747
7802
|
const { parameters } = this.scope;
|
|
@@ -7838,12 +7893,17 @@ class FunctionBase extends NodeBase {
|
|
|
7838
7893
|
this.scope.includeCallArguments(context, parameters);
|
|
7839
7894
|
}
|
|
7840
7895
|
initialise() {
|
|
7896
|
+
super.initialise();
|
|
7841
7897
|
if (this.body instanceof BlockStatement) {
|
|
7842
7898
|
this.body.addImplicitReturnExpressionToScope();
|
|
7843
7899
|
}
|
|
7844
7900
|
else {
|
|
7845
7901
|
this.scope.addReturnExpression(this.body);
|
|
7846
7902
|
}
|
|
7903
|
+
if (this.annotations &&
|
|
7904
|
+
this.scope.context.options.treeshake.annotations) {
|
|
7905
|
+
this.annotationNoSideEffects = this.annotations.some(comment => comment.type === 'noSideEffects');
|
|
7906
|
+
}
|
|
7847
7907
|
}
|
|
7848
7908
|
parseNode(esTreeNode) {
|
|
7849
7909
|
const { body, params } = esTreeNode;
|
|
@@ -7854,11 +7914,11 @@ class FunctionBase extends NodeBase {
|
|
|
7854
7914
|
// so that the scope already knows all parameters and can detect conflicts
|
|
7855
7915
|
// when parsing the body.
|
|
7856
7916
|
for (const parameter of params) {
|
|
7857
|
-
parameters.push(new (context.getNodeConstructor(parameter.type))(
|
|
7917
|
+
parameters.push(new (context.getNodeConstructor(parameter.type))(this, scope).parseNode(parameter));
|
|
7858
7918
|
}
|
|
7859
|
-
scope.addParameterVariables(parameters.map(parameter => parameter.declare(
|
|
7860
|
-
this.body = new (context.getNodeConstructor(body.type))(
|
|
7861
|
-
super.parseNode(esTreeNode);
|
|
7919
|
+
scope.addParameterVariables(parameters.map(parameter => parameter.declare('parameter', UNKNOWN_EXPRESSION)), parameters[parameters.length - 1] instanceof RestElement);
|
|
7920
|
+
this.body = new (context.getNodeConstructor(body.type))(this, bodyScope).parseNode(body);
|
|
7921
|
+
return super.parseNode(esTreeNode);
|
|
7862
7922
|
}
|
|
7863
7923
|
addArgumentToBeDeoptimized(_argument) { }
|
|
7864
7924
|
applyDeoptimizations() { }
|
|
@@ -7870,6 +7930,12 @@ class ArrowFunctionExpression extends FunctionBase {
|
|
|
7870
7930
|
super(...arguments);
|
|
7871
7931
|
this.objectEntity = null;
|
|
7872
7932
|
}
|
|
7933
|
+
get expression() {
|
|
7934
|
+
return isFlagSet(this.flags, 8388608 /* Flag.expression */);
|
|
7935
|
+
}
|
|
7936
|
+
set expression(value) {
|
|
7937
|
+
this.flags = setFlag(this.flags, 8388608 /* Flag.expression */, value);
|
|
7938
|
+
}
|
|
7873
7939
|
createScope(parentScope) {
|
|
7874
7940
|
this.scope = new ReturnValueScope(parentScope, false);
|
|
7875
7941
|
}
|
|
@@ -8028,6 +8094,7 @@ class AssignmentExpression extends NodeBase {
|
|
|
8028
8094
|
right.include(context, includeChildrenRecursively);
|
|
8029
8095
|
}
|
|
8030
8096
|
initialise() {
|
|
8097
|
+
super.initialise();
|
|
8031
8098
|
if (this.left instanceof Identifier) {
|
|
8032
8099
|
const variable = this.scope.variables.get(this.left.name);
|
|
8033
8100
|
if (variable?.kind === 'const') {
|
|
@@ -8122,7 +8189,7 @@ class AssignmentPattern extends NodeBase {
|
|
|
8122
8189
|
|
|
8123
8190
|
class ArgumentsVariable extends LocalVariable {
|
|
8124
8191
|
constructor(context) {
|
|
8125
|
-
super('arguments', null, UNKNOWN_EXPRESSION, context,
|
|
8192
|
+
super('arguments', null, UNKNOWN_EXPRESSION, context, 'other');
|
|
8126
8193
|
this.deoptimizedArguments = [];
|
|
8127
8194
|
}
|
|
8128
8195
|
addArgumentToBeDeoptimized(argument) {
|
|
@@ -8245,7 +8312,7 @@ class FunctionNode extends FunctionBase {
|
|
|
8245
8312
|
}
|
|
8246
8313
|
initialise() {
|
|
8247
8314
|
super.initialise();
|
|
8248
|
-
this.id?.declare(
|
|
8315
|
+
this.id?.declare('function', this);
|
|
8249
8316
|
}
|
|
8250
8317
|
addArgumentToBeDeoptimized(argument) {
|
|
8251
8318
|
this.scope.argumentsVariable.addArgumentToBeDeoptimized(argument);
|
|
@@ -8442,12 +8509,13 @@ class Literal extends NodeBase {
|
|
|
8442
8509
|
}
|
|
8443
8510
|
}
|
|
8444
8511
|
initialise() {
|
|
8512
|
+
super.initialise();
|
|
8445
8513
|
this.members = getLiteralMembersForValue(this.value);
|
|
8446
8514
|
}
|
|
8447
8515
|
parseNode(esTreeNode) {
|
|
8448
8516
|
this.value = esTreeNode.value;
|
|
8449
8517
|
this.regex = esTreeNode.regex;
|
|
8450
|
-
super.parseNode(esTreeNode);
|
|
8518
|
+
return super.parseNode(esTreeNode);
|
|
8451
8519
|
}
|
|
8452
8520
|
render(code) {
|
|
8453
8521
|
if (typeof this.value === 'string') {
|
|
@@ -8665,6 +8733,7 @@ class MemberExpression extends NodeBase {
|
|
|
8665
8733
|
}
|
|
8666
8734
|
}
|
|
8667
8735
|
initialise() {
|
|
8736
|
+
super.initialise();
|
|
8668
8737
|
this.propertyKey = getResolvablePropertyKey(this);
|
|
8669
8738
|
this.accessInteraction = { args: [this.object], type: INTERACTION_ACCESSED };
|
|
8670
8739
|
}
|
|
@@ -8944,6 +9013,13 @@ class CallExpression extends CallExpressionBase {
|
|
|
8944
9013
|
}
|
|
8945
9014
|
this.callee.includeCallArguments(context, this.arguments);
|
|
8946
9015
|
}
|
|
9016
|
+
initialise() {
|
|
9017
|
+
super.initialise();
|
|
9018
|
+
if (this.annotations &&
|
|
9019
|
+
this.scope.context.options.treeshake.annotations) {
|
|
9020
|
+
this.annotationPure = this.annotations.some(comment => comment.type === 'pure');
|
|
9021
|
+
}
|
|
9022
|
+
}
|
|
8947
9023
|
isSkippedAsOptional(origin) {
|
|
8948
9024
|
return (this.callee.isSkippedAsOptional?.(origin) ||
|
|
8949
9025
|
(this.optional &&
|
|
@@ -8978,11 +9054,11 @@ class CatchClause extends NodeBase {
|
|
|
8978
9054
|
const { body, param, type } = esTreeNode;
|
|
8979
9055
|
this.type = type;
|
|
8980
9056
|
if (param) {
|
|
8981
|
-
this.param = new (this.scope.context.getNodeConstructor(param.type))(
|
|
8982
|
-
this.param.declare(
|
|
9057
|
+
this.param = new (this.scope.context.getNodeConstructor(param.type))(this, this.scope).parseNode(param);
|
|
9058
|
+
this.param.declare('parameter', UNKNOWN_EXPRESSION);
|
|
8983
9059
|
}
|
|
8984
|
-
this.body = new BlockStatement(
|
|
8985
|
-
super.parseNode(esTreeNode);
|
|
9060
|
+
this.body = new BlockStatement(this, this.scope.bodyScope).parseNode(body);
|
|
9061
|
+
return super.parseNode(esTreeNode);
|
|
8986
9062
|
}
|
|
8987
9063
|
}
|
|
8988
9064
|
CatchClause.prototype.preventChildBlockScope = true;
|
|
@@ -9009,7 +9085,7 @@ class ClassBodyScope extends ChildScope {
|
|
|
9009
9085
|
constructor(parent, classNode) {
|
|
9010
9086
|
const { context } = parent;
|
|
9011
9087
|
super(parent, context);
|
|
9012
|
-
this.variables.set('this', (this.thisVariable = new LocalVariable('this', null, classNode, context,
|
|
9088
|
+
this.variables.set('this', (this.thisVariable = new LocalVariable('this', null, classNode, context, 'other')));
|
|
9013
9089
|
this.instanceScope = new ChildScope(this, context);
|
|
9014
9090
|
this.instanceScope.variables.set('this', new ThisVariable(context));
|
|
9015
9091
|
}
|
|
@@ -9032,9 +9108,9 @@ class ClassBody extends NodeBase {
|
|
|
9032
9108
|
parseNode(esTreeNode) {
|
|
9033
9109
|
const body = (this.body = []);
|
|
9034
9110
|
for (const definition of esTreeNode.body) {
|
|
9035
|
-
body.push(new (this.scope.context.getNodeConstructor(definition.type))(
|
|
9111
|
+
body.push(new (this.scope.context.getNodeConstructor(definition.type))(this, definition.static ? this.scope : this.scope.instanceScope).parseNode(definition));
|
|
9036
9112
|
}
|
|
9037
|
-
super.parseNode(esTreeNode);
|
|
9113
|
+
return super.parseNode(esTreeNode);
|
|
9038
9114
|
}
|
|
9039
9115
|
applyDeoptimizations() { }
|
|
9040
9116
|
}
|
|
@@ -9193,7 +9269,8 @@ class ClassNode extends NodeBase {
|
|
|
9193
9269
|
}
|
|
9194
9270
|
}
|
|
9195
9271
|
initialise() {
|
|
9196
|
-
|
|
9272
|
+
super.initialise();
|
|
9273
|
+
this.id?.declare('class', this);
|
|
9197
9274
|
for (const method of this.body.body) {
|
|
9198
9275
|
if (method instanceof MethodDefinition && method.kind === 'constructor') {
|
|
9199
9276
|
this.classConstructor = method;
|
|
@@ -9263,9 +9340,9 @@ class ClassDeclaration extends ClassNode {
|
|
|
9263
9340
|
}
|
|
9264
9341
|
parseNode(esTreeNode) {
|
|
9265
9342
|
if (esTreeNode.id !== null) {
|
|
9266
|
-
this.id = new Identifier(
|
|
9343
|
+
this.id = new Identifier(this, this.scope.parent).parseNode(esTreeNode.id);
|
|
9267
9344
|
}
|
|
9268
|
-
super.parseNode(esTreeNode);
|
|
9345
|
+
return super.parseNode(esTreeNode);
|
|
9269
9346
|
}
|
|
9270
9347
|
render(code, options) {
|
|
9271
9348
|
const { exportNamesByVariable, format, snippets: { _, getPropertyAccess } } = options;
|
|
@@ -9505,6 +9582,12 @@ class ContinueStatement extends NodeBase {
|
|
|
9505
9582
|
}
|
|
9506
9583
|
}
|
|
9507
9584
|
|
|
9585
|
+
class DebuggerStatement extends NodeBase {
|
|
9586
|
+
hasEffects() {
|
|
9587
|
+
return true;
|
|
9588
|
+
}
|
|
9589
|
+
}
|
|
9590
|
+
|
|
9508
9591
|
function hasLoopBodyEffects(context, body) {
|
|
9509
9592
|
const { brokenFlow, hasBreak, hasContinue, ignore } = context;
|
|
9510
9593
|
const { breaks, continues } = ignore;
|
|
@@ -9555,6 +9638,7 @@ class ExportAllDeclaration extends NodeBase {
|
|
|
9555
9638
|
return false;
|
|
9556
9639
|
}
|
|
9557
9640
|
initialise() {
|
|
9641
|
+
super.initialise();
|
|
9558
9642
|
this.scope.context.addExport(this);
|
|
9559
9643
|
}
|
|
9560
9644
|
render(code, _options, nodeRenderOptions) {
|
|
@@ -9573,9 +9657,9 @@ class FunctionDeclaration extends FunctionNode {
|
|
|
9573
9657
|
}
|
|
9574
9658
|
parseNode(esTreeNode) {
|
|
9575
9659
|
if (esTreeNode.id !== null) {
|
|
9576
|
-
this.id = new Identifier(
|
|
9660
|
+
this.id = new Identifier(this, this.scope.parent).parseNode(esTreeNode.id);
|
|
9577
9661
|
}
|
|
9578
|
-
super.parseNode(esTreeNode);
|
|
9662
|
+
return super.parseNode(esTreeNode);
|
|
9579
9663
|
}
|
|
9580
9664
|
}
|
|
9581
9665
|
|
|
@@ -9600,6 +9684,7 @@ class ExportDefaultDeclaration extends NodeBase {
|
|
|
9600
9684
|
}
|
|
9601
9685
|
}
|
|
9602
9686
|
initialise() {
|
|
9687
|
+
super.initialise();
|
|
9603
9688
|
const declaration = this.declaration;
|
|
9604
9689
|
this.declarationName =
|
|
9605
9690
|
(declaration.id && declaration.id.name) || this.declaration.name;
|
|
@@ -9683,6 +9768,7 @@ class ExportNamedDeclaration extends NodeBase {
|
|
|
9683
9768
|
return !!this.declaration?.hasEffects(context);
|
|
9684
9769
|
}
|
|
9685
9770
|
initialise() {
|
|
9771
|
+
super.initialise();
|
|
9686
9772
|
this.scope.context.addExport(this);
|
|
9687
9773
|
}
|
|
9688
9774
|
removeAnnotations(code) {
|
|
@@ -9728,6 +9814,7 @@ class ForInStatement extends NodeBase {
|
|
|
9728
9814
|
includeLoopBody(context, body, includeChildrenRecursively);
|
|
9729
9815
|
}
|
|
9730
9816
|
initialise() {
|
|
9817
|
+
super.initialise();
|
|
9731
9818
|
this.left.setAssignedValue(UNKNOWN_EXPRESSION);
|
|
9732
9819
|
}
|
|
9733
9820
|
render(code, options) {
|
|
@@ -9772,6 +9859,7 @@ class ForOfStatement extends NodeBase {
|
|
|
9772
9859
|
includeLoopBody(context, body, includeChildrenRecursively);
|
|
9773
9860
|
}
|
|
9774
9861
|
initialise() {
|
|
9862
|
+
super.initialise();
|
|
9775
9863
|
this.left.setAssignedValue(UNKNOWN_EXPRESSION);
|
|
9776
9864
|
}
|
|
9777
9865
|
render(code, options) {
|
|
@@ -9824,9 +9912,9 @@ class FunctionExpression extends FunctionNode {
|
|
|
9824
9912
|
}
|
|
9825
9913
|
parseNode(esTreeNode) {
|
|
9826
9914
|
if (esTreeNode.id !== null) {
|
|
9827
|
-
this.id = new Identifier(
|
|
9915
|
+
this.id = new Identifier(this, this.idScope).parseNode(esTreeNode.id);
|
|
9828
9916
|
}
|
|
9829
|
-
super.parseNode(esTreeNode);
|
|
9917
|
+
return super.parseNode(esTreeNode);
|
|
9830
9918
|
}
|
|
9831
9919
|
render(code, options, { renderedSurroundingElement } = BLANK) {
|
|
9832
9920
|
super.render(code, options);
|
|
@@ -9893,13 +9981,11 @@ class IfStatement extends NodeBase {
|
|
|
9893
9981
|
}
|
|
9894
9982
|
}
|
|
9895
9983
|
parseNode(esTreeNode) {
|
|
9896
|
-
this.consequentScope = new TrackingScope(this.scope);
|
|
9897
|
-
this.consequent = new (this.scope.context.getNodeConstructor(esTreeNode.consequent.type))(esTreeNode.consequent, this, this.consequentScope);
|
|
9984
|
+
this.consequent = new (this.scope.context.getNodeConstructor(esTreeNode.consequent.type))(this, (this.consequentScope = new TrackingScope(this.scope))).parseNode(esTreeNode.consequent);
|
|
9898
9985
|
if (esTreeNode.alternate) {
|
|
9899
|
-
this.alternateScope = new TrackingScope(this.scope);
|
|
9900
|
-
this.alternate = new (this.scope.context.getNodeConstructor(esTreeNode.alternate.type))(esTreeNode.alternate, this, this.alternateScope);
|
|
9986
|
+
this.alternate = new (this.scope.context.getNodeConstructor(esTreeNode.alternate.type))(this, (this.alternateScope = new TrackingScope(this.scope))).parseNode(esTreeNode.alternate);
|
|
9901
9987
|
}
|
|
9902
|
-
super.parseNode(esTreeNode);
|
|
9988
|
+
return super.parseNode(esTreeNode);
|
|
9903
9989
|
}
|
|
9904
9990
|
render(code, options) {
|
|
9905
9991
|
const { snippets: { getPropertyAccess } } = options;
|
|
@@ -10025,6 +10111,7 @@ class ImportDeclaration extends NodeBase {
|
|
|
10025
10111
|
return false;
|
|
10026
10112
|
}
|
|
10027
10113
|
initialise() {
|
|
10114
|
+
super.initialise();
|
|
10028
10115
|
this.scope.context.addImport(this);
|
|
10029
10116
|
}
|
|
10030
10117
|
render(code, _options, nodeRenderOptions) {
|
|
@@ -10415,11 +10502,12 @@ class ImportExpression extends NodeBase {
|
|
|
10415
10502
|
this.source.include(context, includeChildrenRecursively);
|
|
10416
10503
|
}
|
|
10417
10504
|
initialise() {
|
|
10505
|
+
super.initialise();
|
|
10418
10506
|
this.scope.context.addDynamicImport(this);
|
|
10419
10507
|
}
|
|
10420
10508
|
parseNode(esTreeNode) {
|
|
10421
|
-
|
|
10422
|
-
super.parseNode(esTreeNode
|
|
10509
|
+
this.sourceAstNode = esTreeNode.source;
|
|
10510
|
+
return super.parseNode(esTreeNode);
|
|
10423
10511
|
}
|
|
10424
10512
|
render(code, options) {
|
|
10425
10513
|
const { snippets: { _, getDirectReturnFunction, getObject, getPropertyAccess } } = options;
|
|
@@ -10952,11 +11040,16 @@ class NewExpression extends NodeBase {
|
|
|
10952
11040
|
this.callee.includeCallArguments(context, this.arguments);
|
|
10953
11041
|
}
|
|
10954
11042
|
initialise() {
|
|
11043
|
+
super.initialise();
|
|
10955
11044
|
this.interaction = {
|
|
10956
11045
|
args: [null, ...this.arguments],
|
|
10957
11046
|
type: INTERACTION_CALLED,
|
|
10958
11047
|
withNew: true
|
|
10959
11048
|
};
|
|
11049
|
+
if (this.annotations &&
|
|
11050
|
+
this.scope.context.options.treeshake.annotations) {
|
|
11051
|
+
this.annotationPure = this.annotations.some(comment => comment.type === 'pure');
|
|
11052
|
+
}
|
|
10960
11053
|
}
|
|
10961
11054
|
render(code, options) {
|
|
10962
11055
|
this.callee.render(code, options);
|
|
@@ -11042,6 +11135,29 @@ class ObjectExpression extends NodeBase {
|
|
|
11042
11135
|
}
|
|
11043
11136
|
}
|
|
11044
11137
|
|
|
11138
|
+
class PanicError extends NodeBase {
|
|
11139
|
+
initialise() {
|
|
11140
|
+
const id = this.scope.context.module.id;
|
|
11141
|
+
// This simulates the current nested error structure. We could also just
|
|
11142
|
+
// replace it with a flat error.
|
|
11143
|
+
const parseError = getRollupEror(logParseError(this.message));
|
|
11144
|
+
const moduleParseError = logModuleParseError(parseError, id);
|
|
11145
|
+
return error(moduleParseError);
|
|
11146
|
+
}
|
|
11147
|
+
}
|
|
11148
|
+
|
|
11149
|
+
class ParseError extends NodeBase {
|
|
11150
|
+
initialise() {
|
|
11151
|
+
const pos = this.start;
|
|
11152
|
+
const id = this.scope.context.module.id;
|
|
11153
|
+
// This simulates the current nested error structure. We could also just
|
|
11154
|
+
// replace it with a flat error.
|
|
11155
|
+
const parseError = getRollupEror(logParseError(this.message, pos));
|
|
11156
|
+
const moduleParseError = logModuleParseError(parseError, id);
|
|
11157
|
+
this.scope.context.error(moduleParseError, pos);
|
|
11158
|
+
}
|
|
11159
|
+
}
|
|
11160
|
+
|
|
11045
11161
|
class PrivateIdentifier extends NodeBase {
|
|
11046
11162
|
}
|
|
11047
11163
|
|
|
@@ -11080,6 +11196,16 @@ class Program extends NodeBase {
|
|
|
11080
11196
|
}
|
|
11081
11197
|
}
|
|
11082
11198
|
}
|
|
11199
|
+
initialise() {
|
|
11200
|
+
super.initialise();
|
|
11201
|
+
if (this.invalidAnnotations)
|
|
11202
|
+
for (const { start, end, type } of this.invalidAnnotations) {
|
|
11203
|
+
this.scope.context.magicString.remove(start, end);
|
|
11204
|
+
if (type === 'pure' || type === 'noSideEffects') {
|
|
11205
|
+
this.scope.context.log(LOGLEVEL_WARN, logInvalidAnnotation(this.scope.context.code.slice(start, end), this.scope.context.module.id, type), start);
|
|
11206
|
+
}
|
|
11207
|
+
}
|
|
11208
|
+
}
|
|
11083
11209
|
render(code, options) {
|
|
11084
11210
|
let start = this.start;
|
|
11085
11211
|
if (code.original.startsWith('#!')) {
|
|
@@ -11198,6 +11324,7 @@ class ReturnStatement extends NodeBase {
|
|
|
11198
11324
|
context.brokenFlow = true;
|
|
11199
11325
|
}
|
|
11200
11326
|
initialise() {
|
|
11327
|
+
super.initialise();
|
|
11201
11328
|
this.scope.addReturnExpression(this.argument || UNKNOWN_EXPRESSION);
|
|
11202
11329
|
}
|
|
11203
11330
|
render(code, options) {
|
|
@@ -11419,6 +11546,7 @@ class SwitchStatement extends NodeBase {
|
|
|
11419
11546
|
context.hasBreak = hasBreak;
|
|
11420
11547
|
}
|
|
11421
11548
|
initialise() {
|
|
11549
|
+
super.initialise();
|
|
11422
11550
|
for (let caseIndex = 0; caseIndex < this.cases.length; caseIndex++) {
|
|
11423
11551
|
if (this.cases[caseIndex].test === null) {
|
|
11424
11552
|
this.defaultCase = caseIndex;
|
|
@@ -11428,8 +11556,8 @@ class SwitchStatement extends NodeBase {
|
|
|
11428
11556
|
this.defaultCase = null;
|
|
11429
11557
|
}
|
|
11430
11558
|
parseNode(esTreeNode) {
|
|
11431
|
-
this.discriminant = new (this.scope.context.getNodeConstructor(esTreeNode.discriminant.type))(
|
|
11432
|
-
super.parseNode(esTreeNode);
|
|
11559
|
+
this.discriminant = new (this.scope.context.getNodeConstructor(esTreeNode.discriminant.type))(this, this.parentScope).parseNode(esTreeNode.discriminant);
|
|
11560
|
+
return super.parseNode(esTreeNode);
|
|
11433
11561
|
}
|
|
11434
11562
|
render(code, options) {
|
|
11435
11563
|
this.discriminant.render(code, options);
|
|
@@ -11482,6 +11610,7 @@ class TaggedTemplateExpression extends CallExpressionBase {
|
|
|
11482
11610
|
}
|
|
11483
11611
|
}
|
|
11484
11612
|
initialise() {
|
|
11613
|
+
super.initialise();
|
|
11485
11614
|
this.args = [UNKNOWN_EXPRESSION, ...this.quasi.expressions];
|
|
11486
11615
|
this.interaction = {
|
|
11487
11616
|
args: [
|
|
@@ -11527,7 +11656,7 @@ class TemplateElement extends NodeBase {
|
|
|
11527
11656
|
}
|
|
11528
11657
|
parseNode(esTreeNode) {
|
|
11529
11658
|
this.value = esTreeNode.value;
|
|
11530
|
-
super.parseNode(esTreeNode);
|
|
11659
|
+
return super.parseNode(esTreeNode);
|
|
11531
11660
|
}
|
|
11532
11661
|
render() { }
|
|
11533
11662
|
}
|
|
@@ -11572,7 +11701,7 @@ class UndefinedVariable extends Variable {
|
|
|
11572
11701
|
|
|
11573
11702
|
class ExportDefaultVariable extends LocalVariable {
|
|
11574
11703
|
constructor(name, exportDefaultDeclaration, context) {
|
|
11575
|
-
super(name, exportDefaultDeclaration, exportDefaultDeclaration.declaration, context,
|
|
11704
|
+
super(name, exportDefaultDeclaration, exportDefaultDeclaration.declaration, context, 'other');
|
|
11576
11705
|
this.hasId = false;
|
|
11577
11706
|
this.originalId = null;
|
|
11578
11707
|
this.originalVariable = null;
|
|
@@ -11643,7 +11772,7 @@ class ExportDefaultVariable extends LocalVariable {
|
|
|
11643
11772
|
class ModuleScope extends ChildScope {
|
|
11644
11773
|
constructor(parent, context) {
|
|
11645
11774
|
super(parent, context);
|
|
11646
|
-
this.variables.set('this', new LocalVariable('this', null, UNDEFINED_EXPRESSION, context,
|
|
11775
|
+
this.variables.set('this', new LocalVariable('this', null, UNDEFINED_EXPRESSION, context, 'other'));
|
|
11647
11776
|
}
|
|
11648
11777
|
addDeclaration(identifier, context, init, kind) {
|
|
11649
11778
|
if (this.context.module.importDescriptions.has(identifier.name)) {
|
|
@@ -11701,6 +11830,7 @@ class ThisExpression extends NodeBase {
|
|
|
11701
11830
|
}
|
|
11702
11831
|
}
|
|
11703
11832
|
initialise() {
|
|
11833
|
+
super.initialise();
|
|
11704
11834
|
this.alias =
|
|
11705
11835
|
this.scope.findLexicalBoundary() instanceof ModuleScope
|
|
11706
11836
|
? this.scope.context.moduleContext
|
|
@@ -11817,15 +11947,6 @@ class UnaryExpression extends NodeBase {
|
|
|
11817
11947
|
}
|
|
11818
11948
|
}
|
|
11819
11949
|
|
|
11820
|
-
class UnknownNode extends NodeBase {
|
|
11821
|
-
hasEffects() {
|
|
11822
|
-
return true;
|
|
11823
|
-
}
|
|
11824
|
-
include(context) {
|
|
11825
|
-
super.include(context, true);
|
|
11826
|
-
}
|
|
11827
|
-
}
|
|
11828
|
-
|
|
11829
11950
|
class UpdateExpression extends NodeBase {
|
|
11830
11951
|
hasEffects(context) {
|
|
11831
11952
|
if (!this.deoptimized)
|
|
@@ -11842,6 +11963,7 @@ class UpdateExpression extends NodeBase {
|
|
|
11842
11963
|
this.argument.includeAsAssignmentTarget(context, includeChildrenRecursively, true);
|
|
11843
11964
|
}
|
|
11844
11965
|
initialise() {
|
|
11966
|
+
super.initialise();
|
|
11845
11967
|
this.argument.setAssignedValue(UNKNOWN_EXPRESSION);
|
|
11846
11968
|
}
|
|
11847
11969
|
render(code, options) {
|
|
@@ -11921,6 +12043,7 @@ class VariableDeclaration extends NodeBase {
|
|
|
11921
12043
|
}
|
|
11922
12044
|
}
|
|
11923
12045
|
initialise() {
|
|
12046
|
+
super.initialise();
|
|
11924
12047
|
for (const declarator of this.declarations) {
|
|
11925
12048
|
declarator.declareDeclarator(this.kind);
|
|
11926
12049
|
}
|
|
@@ -12086,6 +12209,711 @@ class YieldExpression extends NodeBase {
|
|
|
12086
12209
|
}
|
|
12087
12210
|
}
|
|
12088
12211
|
|
|
12212
|
+
// This file is generated by scripts/generate-ast-converters.js.
|
|
12213
|
+
// Do not edit this file directly.
|
|
12214
|
+
function convertProgram(buffer, parent, parentScope) {
|
|
12215
|
+
return convertNode(parent, parentScope, 0, new Uint32Array(buffer.buffer), getReadStringFunction(buffer));
|
|
12216
|
+
}
|
|
12217
|
+
const nodeTypeStrings = [
|
|
12218
|
+
'PanicError',
|
|
12219
|
+
'ParseError',
|
|
12220
|
+
'ArrayExpression',
|
|
12221
|
+
'ArrayPattern',
|
|
12222
|
+
'ArrowFunctionExpression',
|
|
12223
|
+
'AssignmentExpression',
|
|
12224
|
+
'AssignmentPattern',
|
|
12225
|
+
'AwaitExpression',
|
|
12226
|
+
'BinaryExpression',
|
|
12227
|
+
'BlockStatement',
|
|
12228
|
+
'BreakStatement',
|
|
12229
|
+
'CallExpression',
|
|
12230
|
+
'CatchClause',
|
|
12231
|
+
'ChainExpression',
|
|
12232
|
+
'ClassBody',
|
|
12233
|
+
'ClassDeclaration',
|
|
12234
|
+
'ClassExpression',
|
|
12235
|
+
'ConditionalExpression',
|
|
12236
|
+
'ContinueStatement',
|
|
12237
|
+
'DebuggerStatement',
|
|
12238
|
+
'ExpressionStatement',
|
|
12239
|
+
'DoWhileStatement',
|
|
12240
|
+
'EmptyStatement',
|
|
12241
|
+
'ExportAllDeclaration',
|
|
12242
|
+
'ExportDefaultDeclaration',
|
|
12243
|
+
'ExportNamedDeclaration',
|
|
12244
|
+
'ExportSpecifier',
|
|
12245
|
+
'ExpressionStatement',
|
|
12246
|
+
'ForInStatement',
|
|
12247
|
+
'ForOfStatement',
|
|
12248
|
+
'ForStatement',
|
|
12249
|
+
'FunctionDeclaration',
|
|
12250
|
+
'FunctionExpression',
|
|
12251
|
+
'Identifier',
|
|
12252
|
+
'IfStatement',
|
|
12253
|
+
'ImportAttribute',
|
|
12254
|
+
'ImportDeclaration',
|
|
12255
|
+
'ImportDefaultSpecifier',
|
|
12256
|
+
'ImportExpression',
|
|
12257
|
+
'ImportNamespaceSpecifier',
|
|
12258
|
+
'ImportSpecifier',
|
|
12259
|
+
'LabeledStatement',
|
|
12260
|
+
'Literal',
|
|
12261
|
+
'Literal',
|
|
12262
|
+
'Literal',
|
|
12263
|
+
'Literal',
|
|
12264
|
+
'Literal',
|
|
12265
|
+
'Literal',
|
|
12266
|
+
'LogicalExpression',
|
|
12267
|
+
'MemberExpression',
|
|
12268
|
+
'MetaProperty',
|
|
12269
|
+
'MethodDefinition',
|
|
12270
|
+
'NewExpression',
|
|
12271
|
+
'ObjectExpression',
|
|
12272
|
+
'ObjectPattern',
|
|
12273
|
+
'PrivateIdentifier',
|
|
12274
|
+
'Program',
|
|
12275
|
+
'Property',
|
|
12276
|
+
'PropertyDefinition',
|
|
12277
|
+
'RestElement',
|
|
12278
|
+
'ReturnStatement',
|
|
12279
|
+
'SequenceExpression',
|
|
12280
|
+
'SpreadElement',
|
|
12281
|
+
'StaticBlock',
|
|
12282
|
+
'Super',
|
|
12283
|
+
'SwitchCase',
|
|
12284
|
+
'SwitchStatement',
|
|
12285
|
+
'TaggedTemplateExpression',
|
|
12286
|
+
'TemplateElement',
|
|
12287
|
+
'TemplateLiteral',
|
|
12288
|
+
'ThisExpression',
|
|
12289
|
+
'ThrowStatement',
|
|
12290
|
+
'TryStatement',
|
|
12291
|
+
'UnaryExpression',
|
|
12292
|
+
'UpdateExpression',
|
|
12293
|
+
'VariableDeclaration',
|
|
12294
|
+
'VariableDeclarator',
|
|
12295
|
+
'WhileStatement',
|
|
12296
|
+
'YieldExpression'
|
|
12297
|
+
];
|
|
12298
|
+
const nodeConstructors$1 = [
|
|
12299
|
+
PanicError,
|
|
12300
|
+
ParseError,
|
|
12301
|
+
ArrayExpression,
|
|
12302
|
+
ArrayPattern,
|
|
12303
|
+
ArrowFunctionExpression,
|
|
12304
|
+
AssignmentExpression,
|
|
12305
|
+
AssignmentPattern,
|
|
12306
|
+
AwaitExpression,
|
|
12307
|
+
BinaryExpression,
|
|
12308
|
+
BlockStatement,
|
|
12309
|
+
BreakStatement,
|
|
12310
|
+
CallExpression,
|
|
12311
|
+
CatchClause,
|
|
12312
|
+
ChainExpression,
|
|
12313
|
+
ClassBody,
|
|
12314
|
+
ClassDeclaration,
|
|
12315
|
+
ClassExpression,
|
|
12316
|
+
ConditionalExpression,
|
|
12317
|
+
ContinueStatement,
|
|
12318
|
+
DebuggerStatement,
|
|
12319
|
+
ExpressionStatement,
|
|
12320
|
+
DoWhileStatement,
|
|
12321
|
+
EmptyStatement,
|
|
12322
|
+
ExportAllDeclaration,
|
|
12323
|
+
ExportDefaultDeclaration,
|
|
12324
|
+
ExportNamedDeclaration,
|
|
12325
|
+
ExportSpecifier,
|
|
12326
|
+
ExpressionStatement,
|
|
12327
|
+
ForInStatement,
|
|
12328
|
+
ForOfStatement,
|
|
12329
|
+
ForStatement,
|
|
12330
|
+
FunctionDeclaration,
|
|
12331
|
+
FunctionExpression,
|
|
12332
|
+
Identifier,
|
|
12333
|
+
IfStatement,
|
|
12334
|
+
ImportAttribute,
|
|
12335
|
+
ImportDeclaration,
|
|
12336
|
+
ImportDefaultSpecifier,
|
|
12337
|
+
ImportExpression,
|
|
12338
|
+
ImportNamespaceSpecifier,
|
|
12339
|
+
ImportSpecifier,
|
|
12340
|
+
LabeledStatement,
|
|
12341
|
+
Literal,
|
|
12342
|
+
Literal,
|
|
12343
|
+
Literal,
|
|
12344
|
+
Literal,
|
|
12345
|
+
Literal,
|
|
12346
|
+
Literal,
|
|
12347
|
+
LogicalExpression,
|
|
12348
|
+
MemberExpression,
|
|
12349
|
+
MetaProperty,
|
|
12350
|
+
MethodDefinition,
|
|
12351
|
+
NewExpression,
|
|
12352
|
+
ObjectExpression,
|
|
12353
|
+
ObjectPattern,
|
|
12354
|
+
PrivateIdentifier,
|
|
12355
|
+
Program,
|
|
12356
|
+
Property,
|
|
12357
|
+
PropertyDefinition,
|
|
12358
|
+
RestElement,
|
|
12359
|
+
ReturnStatement,
|
|
12360
|
+
SequenceExpression,
|
|
12361
|
+
SpreadElement,
|
|
12362
|
+
StaticBlock,
|
|
12363
|
+
Super,
|
|
12364
|
+
SwitchCase,
|
|
12365
|
+
SwitchStatement,
|
|
12366
|
+
TaggedTemplateExpression,
|
|
12367
|
+
TemplateElement,
|
|
12368
|
+
TemplateLiteral,
|
|
12369
|
+
ThisExpression,
|
|
12370
|
+
ThrowStatement,
|
|
12371
|
+
TryStatement,
|
|
12372
|
+
UnaryExpression,
|
|
12373
|
+
UpdateExpression,
|
|
12374
|
+
VariableDeclaration,
|
|
12375
|
+
VariableDeclarator,
|
|
12376
|
+
WhileStatement,
|
|
12377
|
+
YieldExpression
|
|
12378
|
+
];
|
|
12379
|
+
const bufferParsers = [
|
|
12380
|
+
function panicError(node, position, buffer, readString) {
|
|
12381
|
+
node.message = convertString(position, buffer, readString);
|
|
12382
|
+
},
|
|
12383
|
+
function parseError(node, position, buffer, readString) {
|
|
12384
|
+
node.message = convertString(position, buffer, readString);
|
|
12385
|
+
},
|
|
12386
|
+
function arrayExpression(node, position, buffer, readString) {
|
|
12387
|
+
const { scope } = node;
|
|
12388
|
+
node.elements = convertNodeList(node, scope, position, buffer, readString);
|
|
12389
|
+
},
|
|
12390
|
+
function arrayPattern(node, position, buffer, readString) {
|
|
12391
|
+
const { scope } = node;
|
|
12392
|
+
node.elements = convertNodeList(node, scope, position, buffer, readString);
|
|
12393
|
+
},
|
|
12394
|
+
function arrowFunctionExpression(node, position, buffer, readString) {
|
|
12395
|
+
const { scope } = node;
|
|
12396
|
+
const flags = buffer[position];
|
|
12397
|
+
node.async = (flags & 1) === 1;
|
|
12398
|
+
node.expression = (flags & 2) === 2;
|
|
12399
|
+
node.generator = (flags & 4) === 4;
|
|
12400
|
+
const parameters = (node.params = convertNodeList(node, scope, buffer[position + 1], buffer, readString));
|
|
12401
|
+
scope.addParameterVariables(parameters.map(parameter => parameter.declare('parameter', UNKNOWN_EXPRESSION)), parameters[parameters.length - 1] instanceof RestElement);
|
|
12402
|
+
node.body = convertNode(node, scope.bodyScope, buffer[position + 2], buffer, readString);
|
|
12403
|
+
const annotations = (node.annotations = convertAnnotations(position + 3, buffer));
|
|
12404
|
+
node.annotationNoSideEffects = annotations.some(comment => comment.type === 'noSideEffects');
|
|
12405
|
+
},
|
|
12406
|
+
function assignmentExpression(node, position, buffer, readString) {
|
|
12407
|
+
const { scope } = node;
|
|
12408
|
+
node.operator = FIXED_STRINGS[buffer[position]];
|
|
12409
|
+
node.right = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12410
|
+
node.left = convertNode(node, scope, position + 2, buffer, readString);
|
|
12411
|
+
},
|
|
12412
|
+
function assignmentPattern(node, position, buffer, readString) {
|
|
12413
|
+
const { scope } = node;
|
|
12414
|
+
node.right = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12415
|
+
node.left = convertNode(node, scope, position + 1, buffer, readString);
|
|
12416
|
+
},
|
|
12417
|
+
function awaitExpression(node, position, buffer, readString) {
|
|
12418
|
+
const { scope } = node;
|
|
12419
|
+
node.argument = convertNode(node, scope, position, buffer, readString);
|
|
12420
|
+
},
|
|
12421
|
+
function binaryExpression(node, position, buffer, readString) {
|
|
12422
|
+
const { scope } = node;
|
|
12423
|
+
node.operator = FIXED_STRINGS[buffer[position]];
|
|
12424
|
+
node.right = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12425
|
+
node.left = convertNode(node, scope, position + 2, buffer, readString);
|
|
12426
|
+
},
|
|
12427
|
+
function blockStatement(node, position, buffer, readString) {
|
|
12428
|
+
const { scope } = node;
|
|
12429
|
+
node.body = convertNodeList(node, scope, position, buffer, readString);
|
|
12430
|
+
},
|
|
12431
|
+
function breakStatement(node, position, buffer, readString) {
|
|
12432
|
+
const { scope } = node;
|
|
12433
|
+
const labelPosition = buffer[position];
|
|
12434
|
+
node.label =
|
|
12435
|
+
labelPosition === 0 ? null : convertNode(node, scope, labelPosition, buffer, readString);
|
|
12436
|
+
},
|
|
12437
|
+
function callExpression(node, position, buffer, readString) {
|
|
12438
|
+
const { scope } = node;
|
|
12439
|
+
const flags = buffer[position];
|
|
12440
|
+
node.optional = (flags & 1) === 1;
|
|
12441
|
+
node.callee = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12442
|
+
node.arguments = convertNodeList(node, scope, buffer[position + 2], buffer, readString);
|
|
12443
|
+
node.annotations = convertAnnotations(position + 3, buffer);
|
|
12444
|
+
},
|
|
12445
|
+
function catchClause(node, position, buffer, readString) {
|
|
12446
|
+
const { scope } = node;
|
|
12447
|
+
const parameterPosition = buffer[position];
|
|
12448
|
+
const parameter = (node.param =
|
|
12449
|
+
parameterPosition === 0
|
|
12450
|
+
? null
|
|
12451
|
+
: convertNode(node, scope, parameterPosition, buffer, readString));
|
|
12452
|
+
parameter?.declare('parameter', UNKNOWN_EXPRESSION);
|
|
12453
|
+
node.body = convertNode(node, scope.bodyScope, buffer[position + 1], buffer, readString);
|
|
12454
|
+
},
|
|
12455
|
+
function chainExpression(node, position, buffer, readString) {
|
|
12456
|
+
const { scope } = node;
|
|
12457
|
+
node.expression = convertNode(node, scope, position, buffer, readString);
|
|
12458
|
+
},
|
|
12459
|
+
function classBody(node, position, buffer, readString) {
|
|
12460
|
+
const { scope } = node;
|
|
12461
|
+
const length = buffer[position];
|
|
12462
|
+
const body = (node.body = []);
|
|
12463
|
+
for (let index = 0; index < length; index++) {
|
|
12464
|
+
const nodePosition = buffer[position + 1 + index];
|
|
12465
|
+
body.push(convertNode(node, (buffer[nodePosition + 3] & 1) === 0 ? scope.instanceScope : scope, nodePosition, buffer, readString));
|
|
12466
|
+
}
|
|
12467
|
+
},
|
|
12468
|
+
function classDeclaration(node, position, buffer, readString) {
|
|
12469
|
+
const { scope } = node;
|
|
12470
|
+
const idPosition = buffer[position];
|
|
12471
|
+
node.id =
|
|
12472
|
+
idPosition === 0
|
|
12473
|
+
? null
|
|
12474
|
+
: convertNode(node, scope.parent, idPosition, buffer, readString);
|
|
12475
|
+
const superClassPosition = buffer[position + 1];
|
|
12476
|
+
node.superClass =
|
|
12477
|
+
superClassPosition === 0
|
|
12478
|
+
? null
|
|
12479
|
+
: convertNode(node, scope, superClassPosition, buffer, readString);
|
|
12480
|
+
node.body = convertNode(node, scope, buffer[position + 2], buffer, readString);
|
|
12481
|
+
},
|
|
12482
|
+
function classExpression(node, position, buffer, readString) {
|
|
12483
|
+
const { scope } = node;
|
|
12484
|
+
const idPosition = buffer[position];
|
|
12485
|
+
node.id = idPosition === 0 ? null : convertNode(node, scope, idPosition, buffer, readString);
|
|
12486
|
+
const superClassPosition = buffer[position + 1];
|
|
12487
|
+
node.superClass =
|
|
12488
|
+
superClassPosition === 0
|
|
12489
|
+
? null
|
|
12490
|
+
: convertNode(node, scope, superClassPosition, buffer, readString);
|
|
12491
|
+
node.body = convertNode(node, scope, buffer[position + 2], buffer, readString);
|
|
12492
|
+
},
|
|
12493
|
+
function conditionalExpression(node, position, buffer, readString) {
|
|
12494
|
+
const { scope } = node;
|
|
12495
|
+
node.consequent = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12496
|
+
node.alternate = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12497
|
+
node.test = convertNode(node, scope, position + 2, buffer, readString);
|
|
12498
|
+
},
|
|
12499
|
+
function continueStatement(node, position, buffer, readString) {
|
|
12500
|
+
const { scope } = node;
|
|
12501
|
+
const labelPosition = buffer[position];
|
|
12502
|
+
node.label =
|
|
12503
|
+
labelPosition === 0 ? null : convertNode(node, scope, labelPosition, buffer, readString);
|
|
12504
|
+
},
|
|
12505
|
+
function debuggerStatement() { },
|
|
12506
|
+
function directive(node, position, buffer, readString) {
|
|
12507
|
+
const { scope } = node;
|
|
12508
|
+
node.expression = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12509
|
+
node.directive = convertString(position + 1, buffer, readString);
|
|
12510
|
+
},
|
|
12511
|
+
function doWhileStatement(node, position, buffer, readString) {
|
|
12512
|
+
const { scope } = node;
|
|
12513
|
+
node.test = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12514
|
+
node.body = convertNode(node, scope, position + 1, buffer, readString);
|
|
12515
|
+
},
|
|
12516
|
+
function emptyStatement() { },
|
|
12517
|
+
function exportAllDeclaration(node, position, buffer, readString) {
|
|
12518
|
+
const { scope } = node;
|
|
12519
|
+
const exportedPosition = buffer[position];
|
|
12520
|
+
node.exported =
|
|
12521
|
+
exportedPosition === 0
|
|
12522
|
+
? null
|
|
12523
|
+
: convertNode(node, scope, exportedPosition, buffer, readString);
|
|
12524
|
+
node.source = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12525
|
+
node.attributes = convertNodeList(node, scope, buffer[position + 2], buffer, readString);
|
|
12526
|
+
},
|
|
12527
|
+
function exportDefaultDeclaration(node, position, buffer, readString) {
|
|
12528
|
+
const { scope } = node;
|
|
12529
|
+
node.declaration = convertNode(node, scope, position, buffer, readString);
|
|
12530
|
+
},
|
|
12531
|
+
function exportNamedDeclaration(node, position, buffer, readString) {
|
|
12532
|
+
const { scope } = node;
|
|
12533
|
+
const sourcePosition = buffer[position];
|
|
12534
|
+
node.source =
|
|
12535
|
+
sourcePosition === 0 ? null : convertNode(node, scope, sourcePosition, buffer, readString);
|
|
12536
|
+
node.attributes = convertNodeList(node, scope, buffer[position + 1], buffer, readString);
|
|
12537
|
+
const declarationPosition = buffer[position + 2];
|
|
12538
|
+
node.declaration =
|
|
12539
|
+
declarationPosition === 0
|
|
12540
|
+
? null
|
|
12541
|
+
: convertNode(node, scope, declarationPosition, buffer, readString);
|
|
12542
|
+
node.specifiers = convertNodeList(node, scope, position + 3, buffer, readString);
|
|
12543
|
+
},
|
|
12544
|
+
function exportSpecifier(node, position, buffer, readString) {
|
|
12545
|
+
const { scope } = node;
|
|
12546
|
+
const exportedPosition = buffer[position];
|
|
12547
|
+
node.local = convertNode(node, scope, position + 1, buffer, readString);
|
|
12548
|
+
node.exported =
|
|
12549
|
+
exportedPosition === 0
|
|
12550
|
+
? node.local
|
|
12551
|
+
: convertNode(node, scope, exportedPosition, buffer, readString);
|
|
12552
|
+
},
|
|
12553
|
+
function expressionStatement(node, position, buffer, readString) {
|
|
12554
|
+
const { scope } = node;
|
|
12555
|
+
node.expression = convertNode(node, scope, position, buffer, readString);
|
|
12556
|
+
},
|
|
12557
|
+
function forInStatement(node, position, buffer, readString) {
|
|
12558
|
+
const { scope } = node;
|
|
12559
|
+
node.right = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12560
|
+
node.body = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12561
|
+
node.left = convertNode(node, scope, position + 2, buffer, readString);
|
|
12562
|
+
},
|
|
12563
|
+
function forOfStatement(node, position, buffer, readString) {
|
|
12564
|
+
const { scope } = node;
|
|
12565
|
+
const flags = buffer[position];
|
|
12566
|
+
node.await = (flags & 1) === 1;
|
|
12567
|
+
node.right = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12568
|
+
node.body = convertNode(node, scope, buffer[position + 2], buffer, readString);
|
|
12569
|
+
node.left = convertNode(node, scope, position + 3, buffer, readString);
|
|
12570
|
+
},
|
|
12571
|
+
function forStatement(node, position, buffer, readString) {
|
|
12572
|
+
const { scope } = node;
|
|
12573
|
+
const initPosition = buffer[position];
|
|
12574
|
+
node.init =
|
|
12575
|
+
initPosition === 0 ? null : convertNode(node, scope, initPosition, buffer, readString);
|
|
12576
|
+
const testPosition = buffer[position + 1];
|
|
12577
|
+
node.test =
|
|
12578
|
+
testPosition === 0 ? null : convertNode(node, scope, testPosition, buffer, readString);
|
|
12579
|
+
const updatePosition = buffer[position + 2];
|
|
12580
|
+
node.update =
|
|
12581
|
+
updatePosition === 0 ? null : convertNode(node, scope, updatePosition, buffer, readString);
|
|
12582
|
+
node.body = convertNode(node, scope, buffer[position + 3], buffer, readString);
|
|
12583
|
+
},
|
|
12584
|
+
function functionDeclaration(node, position, buffer, readString) {
|
|
12585
|
+
const { scope } = node;
|
|
12586
|
+
const flags = buffer[position];
|
|
12587
|
+
node.async = (flags & 1) === 1;
|
|
12588
|
+
node.generator = (flags & 2) === 2;
|
|
12589
|
+
const idPosition = buffer[position + 1];
|
|
12590
|
+
node.id =
|
|
12591
|
+
idPosition === 0
|
|
12592
|
+
? null
|
|
12593
|
+
: convertNode(node, scope.parent, idPosition, buffer, readString);
|
|
12594
|
+
const parameters = (node.params = convertNodeList(node, scope, buffer[position + 2], buffer, readString));
|
|
12595
|
+
scope.addParameterVariables(parameters.map(parameter => parameter.declare('parameter', UNKNOWN_EXPRESSION)), parameters[parameters.length - 1] instanceof RestElement);
|
|
12596
|
+
node.body = convertNode(node, scope.bodyScope, buffer[position + 3], buffer, readString);
|
|
12597
|
+
const annotations = (node.annotations = convertAnnotations(position + 4, buffer));
|
|
12598
|
+
node.annotationNoSideEffects = annotations.some(comment => comment.type === 'noSideEffects');
|
|
12599
|
+
},
|
|
12600
|
+
function functionExpression(node, position, buffer, readString) {
|
|
12601
|
+
const { scope } = node;
|
|
12602
|
+
const flags = buffer[position];
|
|
12603
|
+
node.async = (flags & 1) === 1;
|
|
12604
|
+
node.generator = (flags & 2) === 2;
|
|
12605
|
+
const idPosition = buffer[position + 1];
|
|
12606
|
+
node.id =
|
|
12607
|
+
idPosition === 0 ? null : convertNode(node, node.idScope, idPosition, buffer, readString);
|
|
12608
|
+
const parameters = (node.params = convertNodeList(node, scope, buffer[position + 2], buffer, readString));
|
|
12609
|
+
scope.addParameterVariables(parameters.map(parameter => parameter.declare('parameter', UNKNOWN_EXPRESSION)), parameters[parameters.length - 1] instanceof RestElement);
|
|
12610
|
+
node.body = convertNode(node, scope.bodyScope, buffer[position + 3], buffer, readString);
|
|
12611
|
+
const annotations = (node.annotations = convertAnnotations(position + 4, buffer));
|
|
12612
|
+
node.annotationNoSideEffects = annotations.some(comment => comment.type === 'noSideEffects');
|
|
12613
|
+
},
|
|
12614
|
+
function identifier(node, position, buffer, readString) {
|
|
12615
|
+
node.name = convertString(position, buffer, readString);
|
|
12616
|
+
},
|
|
12617
|
+
function ifStatement(node, position, buffer, readString) {
|
|
12618
|
+
const { scope } = node;
|
|
12619
|
+
node.consequent = convertNode(node, (node.consequentScope = new TrackingScope(scope)), buffer[position], buffer, readString);
|
|
12620
|
+
const alternatePosition = buffer[position + 1];
|
|
12621
|
+
node.alternate =
|
|
12622
|
+
alternatePosition === 0
|
|
12623
|
+
? null
|
|
12624
|
+
: convertNode(node, (node.alternateScope = new TrackingScope(scope)), alternatePosition, buffer, readString);
|
|
12625
|
+
node.test = convertNode(node, scope, position + 2, buffer, readString);
|
|
12626
|
+
},
|
|
12627
|
+
function importAttribute(node, position, buffer, readString) {
|
|
12628
|
+
const { scope } = node;
|
|
12629
|
+
node.value = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12630
|
+
node.key = convertNode(node, scope, position + 1, buffer, readString);
|
|
12631
|
+
},
|
|
12632
|
+
function importDeclaration(node, position, buffer, readString) {
|
|
12633
|
+
const { scope } = node;
|
|
12634
|
+
node.source = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12635
|
+
node.attributes = convertNodeList(node, scope, buffer[position + 1], buffer, readString);
|
|
12636
|
+
node.specifiers = convertNodeList(node, scope, position + 2, buffer, readString);
|
|
12637
|
+
},
|
|
12638
|
+
function importDefaultSpecifier(node, position, buffer, readString) {
|
|
12639
|
+
const { scope } = node;
|
|
12640
|
+
node.local = convertNode(node, scope, position, buffer, readString);
|
|
12641
|
+
},
|
|
12642
|
+
function importExpression(node, position, buffer, readString) {
|
|
12643
|
+
const { scope } = node;
|
|
12644
|
+
const optionsPosition = buffer[position];
|
|
12645
|
+
node.options =
|
|
12646
|
+
optionsPosition === 0 ? null : convertNode(node, scope, optionsPosition, buffer, readString);
|
|
12647
|
+
node.source = convertNode(node, scope, position + 1, buffer, readString);
|
|
12648
|
+
node.sourceAstNode = convertNode$1(position + 1, buffer, readString);
|
|
12649
|
+
},
|
|
12650
|
+
function importNamespaceSpecifier(node, position, buffer, readString) {
|
|
12651
|
+
const { scope } = node;
|
|
12652
|
+
node.local = convertNode(node, scope, position, buffer, readString);
|
|
12653
|
+
},
|
|
12654
|
+
function importSpecifier(node, position, buffer, readString) {
|
|
12655
|
+
const { scope } = node;
|
|
12656
|
+
const importedPosition = buffer[position];
|
|
12657
|
+
node.local = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12658
|
+
node.imported =
|
|
12659
|
+
importedPosition === 0
|
|
12660
|
+
? node.local
|
|
12661
|
+
: convertNode(node, scope, importedPosition, buffer, readString);
|
|
12662
|
+
},
|
|
12663
|
+
function labeledStatement(node, position, buffer, readString) {
|
|
12664
|
+
const { scope } = node;
|
|
12665
|
+
node.body = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12666
|
+
node.label = convertNode(node, scope, position + 1, buffer, readString);
|
|
12667
|
+
},
|
|
12668
|
+
function literalBigInt(node, position, buffer, readString) {
|
|
12669
|
+
node.raw = convertString(buffer[position], buffer, readString);
|
|
12670
|
+
const bigint = (node.bigint = convertString(position + 1, buffer, readString));
|
|
12671
|
+
node.value = BigInt(bigint);
|
|
12672
|
+
},
|
|
12673
|
+
function literalBoolean(node, position, buffer) {
|
|
12674
|
+
const flags = buffer[position];
|
|
12675
|
+
const value = (node.value = (flags & 1) === 1);
|
|
12676
|
+
node.raw = value ? 'true' : 'false';
|
|
12677
|
+
},
|
|
12678
|
+
function literalNull(node) {
|
|
12679
|
+
node.value = null;
|
|
12680
|
+
},
|
|
12681
|
+
function literalNumber(node, position, buffer, readString) {
|
|
12682
|
+
const rawPosition = buffer[position];
|
|
12683
|
+
node.raw = rawPosition === 0 ? undefined : convertString(rawPosition, buffer, readString);
|
|
12684
|
+
node.value = new DataView(buffer.buffer).getFloat64((position + 1) << 2, true);
|
|
12685
|
+
},
|
|
12686
|
+
function literalRegExp(node, position, buffer, readString) {
|
|
12687
|
+
const pattern = convertString(buffer[position], buffer, readString);
|
|
12688
|
+
const flags = convertString(position + 1, buffer, readString);
|
|
12689
|
+
node.raw = `/${pattern}/${flags}`;
|
|
12690
|
+
node.regex = { flags, pattern };
|
|
12691
|
+
node.value = new RegExp(pattern, flags);
|
|
12692
|
+
},
|
|
12693
|
+
function literalString(node, position, buffer, readString) {
|
|
12694
|
+
const rawPosition = buffer[position];
|
|
12695
|
+
node.raw = rawPosition === 0 ? undefined : convertString(rawPosition, buffer, readString);
|
|
12696
|
+
node.value = convertString(position + 1, buffer, readString);
|
|
12697
|
+
},
|
|
12698
|
+
function logicalExpression(node, position, buffer, readString) {
|
|
12699
|
+
const { scope } = node;
|
|
12700
|
+
node.operator = FIXED_STRINGS[buffer[position]];
|
|
12701
|
+
node.right = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12702
|
+
node.left = convertNode(node, scope, position + 2, buffer, readString);
|
|
12703
|
+
},
|
|
12704
|
+
function memberExpression(node, position, buffer, readString) {
|
|
12705
|
+
const { scope } = node;
|
|
12706
|
+
const flags = buffer[position];
|
|
12707
|
+
node.computed = (flags & 1) === 1;
|
|
12708
|
+
node.optional = (flags & 2) === 2;
|
|
12709
|
+
node.property = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12710
|
+
node.object = convertNode(node, scope, position + 2, buffer, readString);
|
|
12711
|
+
},
|
|
12712
|
+
function metaProperty(node, position, buffer, readString) {
|
|
12713
|
+
const { scope } = node;
|
|
12714
|
+
node.property = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12715
|
+
node.meta = convertNode(node, scope, position + 1, buffer, readString);
|
|
12716
|
+
},
|
|
12717
|
+
function methodDefinition(node, position, buffer, readString) {
|
|
12718
|
+
const { scope } = node;
|
|
12719
|
+
const flags = buffer[position];
|
|
12720
|
+
node.static = (flags & 1) === 1;
|
|
12721
|
+
node.computed = (flags & 2) === 2;
|
|
12722
|
+
node.value = convertNode(node, scope, buffer[position + 1], buffer, readString);
|
|
12723
|
+
node.kind = FIXED_STRINGS[buffer[position + 2]];
|
|
12724
|
+
node.key = convertNode(node, scope, position + 3, buffer, readString);
|
|
12725
|
+
},
|
|
12726
|
+
function newExpression(node, position, buffer, readString) {
|
|
12727
|
+
const { scope } = node;
|
|
12728
|
+
node.callee = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12729
|
+
node.arguments = convertNodeList(node, scope, buffer[position + 1], buffer, readString);
|
|
12730
|
+
node.annotations = convertAnnotations(position + 2, buffer);
|
|
12731
|
+
},
|
|
12732
|
+
function objectExpression(node, position, buffer, readString) {
|
|
12733
|
+
const { scope } = node;
|
|
12734
|
+
node.properties = convertNodeList(node, scope, position, buffer, readString);
|
|
12735
|
+
},
|
|
12736
|
+
function objectPattern(node, position, buffer, readString) {
|
|
12737
|
+
const { scope } = node;
|
|
12738
|
+
node.properties = convertNodeList(node, scope, position, buffer, readString);
|
|
12739
|
+
},
|
|
12740
|
+
function privateIdentifier(node, position, buffer, readString) {
|
|
12741
|
+
node.name = convertString(position, buffer, readString);
|
|
12742
|
+
},
|
|
12743
|
+
function program(node, position, buffer, readString) {
|
|
12744
|
+
const { scope } = node;
|
|
12745
|
+
node.invalidAnnotations = convertAnnotations(buffer[position], buffer);
|
|
12746
|
+
node.body = convertNodeList(node, scope, position + 1, buffer, readString);
|
|
12747
|
+
},
|
|
12748
|
+
function property(node, position, buffer, readString) {
|
|
12749
|
+
const { scope } = node;
|
|
12750
|
+
const flags = buffer[position];
|
|
12751
|
+
node.method = (flags & 1) === 1;
|
|
12752
|
+
node.shorthand = (flags & 2) === 2;
|
|
12753
|
+
node.computed = (flags & 4) === 4;
|
|
12754
|
+
const keyPosition = buffer[position + 1];
|
|
12755
|
+
node.value = convertNode(node, scope, buffer[position + 2], buffer, readString);
|
|
12756
|
+
node.kind = FIXED_STRINGS[buffer[position + 3]];
|
|
12757
|
+
node.key =
|
|
12758
|
+
keyPosition === 0 ? node.value : convertNode(node, scope, keyPosition, buffer, readString);
|
|
12759
|
+
},
|
|
12760
|
+
function propertyDefinition(node, position, buffer, readString) {
|
|
12761
|
+
const { scope } = node;
|
|
12762
|
+
const flags = buffer[position];
|
|
12763
|
+
node.static = (flags & 1) === 1;
|
|
12764
|
+
node.computed = (flags & 2) === 2;
|
|
12765
|
+
const valuePosition = buffer[position + 1];
|
|
12766
|
+
node.value =
|
|
12767
|
+
valuePosition === 0 ? null : convertNode(node, scope, valuePosition, buffer, readString);
|
|
12768
|
+
node.key = convertNode(node, scope, position + 2, buffer, readString);
|
|
12769
|
+
},
|
|
12770
|
+
function restElement(node, position, buffer, readString) {
|
|
12771
|
+
const { scope } = node;
|
|
12772
|
+
node.argument = convertNode(node, scope, position, buffer, readString);
|
|
12773
|
+
},
|
|
12774
|
+
function returnStatement(node, position, buffer, readString) {
|
|
12775
|
+
const { scope } = node;
|
|
12776
|
+
const argumentPosition = buffer[position];
|
|
12777
|
+
node.argument =
|
|
12778
|
+
argumentPosition === 0
|
|
12779
|
+
? null
|
|
12780
|
+
: convertNode(node, scope, argumentPosition, buffer, readString);
|
|
12781
|
+
},
|
|
12782
|
+
function sequenceExpression(node, position, buffer, readString) {
|
|
12783
|
+
const { scope } = node;
|
|
12784
|
+
node.expressions = convertNodeList(node, scope, position, buffer, readString);
|
|
12785
|
+
},
|
|
12786
|
+
function spreadElement(node, position, buffer, readString) {
|
|
12787
|
+
const { scope } = node;
|
|
12788
|
+
node.argument = convertNode(node, scope, position, buffer, readString);
|
|
12789
|
+
},
|
|
12790
|
+
function staticBlock(node, position, buffer, readString) {
|
|
12791
|
+
const { scope } = node;
|
|
12792
|
+
node.body = convertNodeList(node, scope, position, buffer, readString);
|
|
12793
|
+
},
|
|
12794
|
+
function superElement() { },
|
|
12795
|
+
function switchCase(node, position, buffer, readString) {
|
|
12796
|
+
const { scope } = node;
|
|
12797
|
+
const testPosition = buffer[position];
|
|
12798
|
+
node.test =
|
|
12799
|
+
testPosition === 0 ? null : convertNode(node, scope, testPosition, buffer, readString);
|
|
12800
|
+
node.consequent = convertNodeList(node, scope, buffer[position + 1], buffer, readString);
|
|
12801
|
+
},
|
|
12802
|
+
function switchStatement(node, position, buffer, readString) {
|
|
12803
|
+
const { scope } = node;
|
|
12804
|
+
node.cases = convertNodeList(node, scope, buffer[position], buffer, readString);
|
|
12805
|
+
node.discriminant = convertNode(node, node.parentScope, position + 1, buffer, readString);
|
|
12806
|
+
},
|
|
12807
|
+
function taggedTemplateExpression(node, position, buffer, readString) {
|
|
12808
|
+
const { scope } = node;
|
|
12809
|
+
node.quasi = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12810
|
+
node.tag = convertNode(node, scope, position + 1, buffer, readString);
|
|
12811
|
+
},
|
|
12812
|
+
function templateElement(node, position, buffer, readString) {
|
|
12813
|
+
const flags = buffer[position];
|
|
12814
|
+
node.tail = (flags & 1) === 1;
|
|
12815
|
+
const cookedPosition = buffer[position + 1];
|
|
12816
|
+
const cooked = cookedPosition === 0 ? undefined : convertString(cookedPosition, buffer, readString);
|
|
12817
|
+
const raw = convertString(position + 2, buffer, readString);
|
|
12818
|
+
node.value = { cooked, raw };
|
|
12819
|
+
},
|
|
12820
|
+
function templateLiteral(node, position, buffer, readString) {
|
|
12821
|
+
const { scope } = node;
|
|
12822
|
+
node.expressions = convertNodeList(node, scope, buffer[position], buffer, readString);
|
|
12823
|
+
node.quasis = convertNodeList(node, scope, position + 1, buffer, readString);
|
|
12824
|
+
},
|
|
12825
|
+
function thisExpression() { },
|
|
12826
|
+
function throwStatement(node, position, buffer, readString) {
|
|
12827
|
+
const { scope } = node;
|
|
12828
|
+
node.argument = convertNode(node, scope, position, buffer, readString);
|
|
12829
|
+
},
|
|
12830
|
+
function tryStatement(node, position, buffer, readString) {
|
|
12831
|
+
const { scope } = node;
|
|
12832
|
+
const handlerPosition = buffer[position];
|
|
12833
|
+
node.handler =
|
|
12834
|
+
handlerPosition === 0 ? null : convertNode(node, scope, handlerPosition, buffer, readString);
|
|
12835
|
+
const finalizerPosition = buffer[position + 1];
|
|
12836
|
+
node.finalizer =
|
|
12837
|
+
finalizerPosition === 0
|
|
12838
|
+
? null
|
|
12839
|
+
: convertNode(node, scope, finalizerPosition, buffer, readString);
|
|
12840
|
+
node.block = convertNode(node, scope, position + 2, buffer, readString);
|
|
12841
|
+
},
|
|
12842
|
+
function unaryExpression(node, position, buffer, readString) {
|
|
12843
|
+
const { scope } = node;
|
|
12844
|
+
node.operator = FIXED_STRINGS[buffer[position]];
|
|
12845
|
+
node.argument = convertNode(node, scope, position + 1, buffer, readString);
|
|
12846
|
+
},
|
|
12847
|
+
function updateExpression(node, position, buffer, readString) {
|
|
12848
|
+
const { scope } = node;
|
|
12849
|
+
const flags = buffer[position];
|
|
12850
|
+
node.prefix = (flags & 1) === 1;
|
|
12851
|
+
node.operator = FIXED_STRINGS[buffer[position + 1]];
|
|
12852
|
+
node.argument = convertNode(node, scope, position + 2, buffer, readString);
|
|
12853
|
+
},
|
|
12854
|
+
function variableDeclaration(node, position, buffer, readString) {
|
|
12855
|
+
const { scope } = node;
|
|
12856
|
+
node.kind = FIXED_STRINGS[buffer[position]];
|
|
12857
|
+
node.declarations = convertNodeList(node, scope, position + 1, buffer, readString);
|
|
12858
|
+
},
|
|
12859
|
+
function variableDeclarator(node, position, buffer, readString) {
|
|
12860
|
+
const { scope } = node;
|
|
12861
|
+
const initPosition = buffer[position];
|
|
12862
|
+
node.init =
|
|
12863
|
+
initPosition === 0 ? null : convertNode(node, scope, initPosition, buffer, readString);
|
|
12864
|
+
node.id = convertNode(node, scope, position + 1, buffer, readString);
|
|
12865
|
+
},
|
|
12866
|
+
function whileStatement(node, position, buffer, readString) {
|
|
12867
|
+
const { scope } = node;
|
|
12868
|
+
node.body = convertNode(node, scope, buffer[position], buffer, readString);
|
|
12869
|
+
node.test = convertNode(node, scope, position + 1, buffer, readString);
|
|
12870
|
+
},
|
|
12871
|
+
function yieldExpression(node, position, buffer, readString) {
|
|
12872
|
+
const { scope } = node;
|
|
12873
|
+
const flags = buffer[position];
|
|
12874
|
+
node.delegate = (flags & 1) === 1;
|
|
12875
|
+
const argumentPosition = buffer[position + 1];
|
|
12876
|
+
node.argument =
|
|
12877
|
+
argumentPosition === 0
|
|
12878
|
+
? null
|
|
12879
|
+
: convertNode(node, scope, argumentPosition, buffer, readString);
|
|
12880
|
+
}
|
|
12881
|
+
];
|
|
12882
|
+
function convertNode(parent, parentScope, position, buffer, readString) {
|
|
12883
|
+
const nodeType = buffer[position];
|
|
12884
|
+
const NodeConstructor = nodeConstructors$1[nodeType];
|
|
12885
|
+
/* istanbul ignore if: This should never be executed but is a safeguard against faulty buffers */
|
|
12886
|
+
if (!NodeConstructor) {
|
|
12887
|
+
console.trace();
|
|
12888
|
+
throw new Error(`Unknown node type: ${nodeType}`);
|
|
12889
|
+
}
|
|
12890
|
+
const node = new NodeConstructor(parent, parentScope);
|
|
12891
|
+
node.type = nodeTypeStrings[nodeType];
|
|
12892
|
+
node.start = buffer[position + 1];
|
|
12893
|
+
node.end = buffer[position + 2];
|
|
12894
|
+
bufferParsers[nodeType](node, position + 3, buffer, readString);
|
|
12895
|
+
node.initialise();
|
|
12896
|
+
return node;
|
|
12897
|
+
}
|
|
12898
|
+
function convertNodeList(parent, parentScope, position, buffer, readString) {
|
|
12899
|
+
const length = buffer[position++];
|
|
12900
|
+
const list = [];
|
|
12901
|
+
for (let index = 0; index < length; index++) {
|
|
12902
|
+
const nodePosition = buffer[position++];
|
|
12903
|
+
list.push(nodePosition ? convertNode(parent, parentScope, nodePosition, buffer, readString) : null);
|
|
12904
|
+
}
|
|
12905
|
+
return list;
|
|
12906
|
+
}
|
|
12907
|
+
|
|
12908
|
+
class UnknownNode extends NodeBase {
|
|
12909
|
+
hasEffects() {
|
|
12910
|
+
return true;
|
|
12911
|
+
}
|
|
12912
|
+
include(context) {
|
|
12913
|
+
super.include(context, true);
|
|
12914
|
+
}
|
|
12915
|
+
}
|
|
12916
|
+
|
|
12089
12917
|
const nodeConstructors = {
|
|
12090
12918
|
ArrayExpression,
|
|
12091
12919
|
ArrayPattern,
|
|
@@ -12133,6 +12961,8 @@ const nodeConstructors = {
|
|
|
12133
12961
|
NewExpression,
|
|
12134
12962
|
ObjectExpression,
|
|
12135
12963
|
ObjectPattern,
|
|
12964
|
+
PanicError,
|
|
12965
|
+
ParseError,
|
|
12136
12966
|
PrivateIdentifier,
|
|
12137
12967
|
Program,
|
|
12138
12968
|
Property,
|
|
@@ -12487,7 +13317,9 @@ function getAttributesFromImportExpression(node) {
|
|
|
12487
13317
|
}
|
|
12488
13318
|
const getPropertyKey = (property) => {
|
|
12489
13319
|
const key = property.key;
|
|
12490
|
-
return (key &&
|
|
13320
|
+
return (key &&
|
|
13321
|
+
!property.computed &&
|
|
13322
|
+
(key.name || key.value));
|
|
12491
13323
|
};
|
|
12492
13324
|
function getAttributesFromImportExportDeclaration(attributes) {
|
|
12493
13325
|
return attributes?.length
|
|
@@ -13135,11 +13967,11 @@ class Module {
|
|
|
13135
13967
|
return { source, usesTopLevelAwait };
|
|
13136
13968
|
}
|
|
13137
13969
|
async setSource({ ast, code, customTransformCache, originalCode, originalSourcemap, resolvedIds, sourcemapChain, transformDependencies, transformFiles, ...moduleOptions }) {
|
|
13970
|
+
timeStart('generate ast', 3);
|
|
13138
13971
|
if (code.startsWith('#!')) {
|
|
13139
13972
|
const shebangEndPosition = code.indexOf('\n');
|
|
13140
13973
|
this.shebang = code.slice(2, shebangEndPosition);
|
|
13141
13974
|
}
|
|
13142
|
-
timeStart('generate ast', 3);
|
|
13143
13975
|
this.info.code = code;
|
|
13144
13976
|
this.originalCode = originalCode;
|
|
13145
13977
|
// We need to call decodedSourcemap on the input in case they were hydrated from json in the cache and don't
|
|
@@ -13155,9 +13987,6 @@ class Module {
|
|
|
13155
13987
|
this.transformDependencies = transformDependencies;
|
|
13156
13988
|
this.customTransformCache = customTransformCache;
|
|
13157
13989
|
this.updateOptions(moduleOptions);
|
|
13158
|
-
const moduleAst = ast ?? (await this.tryParseAsync());
|
|
13159
|
-
timeEnd('generate ast', 3);
|
|
13160
|
-
timeStart('analyze ast', 3);
|
|
13161
13990
|
this.resolvedIds = resolvedIds ?? Object.create(null);
|
|
13162
13991
|
// By default, `id` is the file name. Custom resolvers and loaders
|
|
13163
13992
|
// can change that, but it makes sense to use it for the source file name
|
|
@@ -13197,13 +14026,17 @@ class Module {
|
|
|
13197
14026
|
};
|
|
13198
14027
|
this.scope = new ModuleScope(this.graph.scope, this.astContext);
|
|
13199
14028
|
this.namespace = new NamespaceVariable(this.astContext);
|
|
13200
|
-
|
|
13201
|
-
|
|
13202
|
-
|
|
13203
|
-
|
|
13204
|
-
this.info.ast = moduleAst;
|
|
14029
|
+
const programParent = { context: this.astContext, type: 'Module' };
|
|
14030
|
+
if (ast) {
|
|
14031
|
+
this.ast = new nodeConstructors[ast.type](programParent, this.scope).parseNode(ast);
|
|
14032
|
+
this.info.ast = ast;
|
|
13205
14033
|
}
|
|
13206
14034
|
else {
|
|
14035
|
+
// Measuring asynchronous code does not provide reasonable results
|
|
14036
|
+
timeEnd('generate ast', 3);
|
|
14037
|
+
const astBuffer = await parseAsync(code, false);
|
|
14038
|
+
timeStart('generate ast', 3);
|
|
14039
|
+
this.ast = convertProgram(astBuffer, programParent, this.scope);
|
|
13207
14040
|
// Make lazy and apply LRU cache to not hog the memory
|
|
13208
14041
|
Object.defineProperty(this.info, 'ast', {
|
|
13209
14042
|
get: () => {
|
|
@@ -13212,13 +14045,23 @@ class Module {
|
|
|
13212
14045
|
}
|
|
13213
14046
|
else {
|
|
13214
14047
|
const parsedAst = this.tryParse();
|
|
14048
|
+
// If the cache is not disabled, we need to keep the AST in memory
|
|
14049
|
+
// until the end when the cache is generated
|
|
14050
|
+
if (this.options.cache !== false) {
|
|
14051
|
+
Object.defineProperty(this.info, 'ast', {
|
|
14052
|
+
value: parsedAst
|
|
14053
|
+
});
|
|
14054
|
+
return parsedAst;
|
|
14055
|
+
}
|
|
14056
|
+
// Otherwise, we keep it in a small LRU cache to not hog too much
|
|
14057
|
+
// memory but allow the same AST to be requested several times.
|
|
13215
14058
|
this.graph.astLru.set(fileName, parsedAst);
|
|
13216
14059
|
return parsedAst;
|
|
13217
14060
|
}
|
|
13218
14061
|
}
|
|
13219
14062
|
});
|
|
13220
14063
|
}
|
|
13221
|
-
timeEnd('
|
|
14064
|
+
timeEnd('generate ast', 3);
|
|
13222
14065
|
}
|
|
13223
14066
|
toJSON() {
|
|
13224
14067
|
return {
|
|
@@ -13271,13 +14114,15 @@ class Module {
|
|
|
13271
14114
|
}
|
|
13272
14115
|
}
|
|
13273
14116
|
addDynamicImport(node) {
|
|
13274
|
-
let argument = node.
|
|
13275
|
-
if (argument
|
|
13276
|
-
if (argument.quasis.length === 1 &&
|
|
14117
|
+
let argument = node.sourceAstNode;
|
|
14118
|
+
if (argument.type === TemplateLiteral$1) {
|
|
14119
|
+
if (argument.quasis.length === 1 &&
|
|
14120
|
+
typeof argument.quasis[0].value.cooked === 'string') {
|
|
13277
14121
|
argument = argument.quasis[0].value.cooked;
|
|
13278
14122
|
}
|
|
13279
14123
|
}
|
|
13280
|
-
else if (argument
|
|
14124
|
+
else if (argument.type === Literal$1 &&
|
|
14125
|
+
typeof argument.value === 'string') {
|
|
13281
14126
|
argument = argument.value;
|
|
13282
14127
|
}
|
|
13283
14128
|
this.dynamicImports.push({ argument, id: null, node, resolution: null });
|
|
@@ -13572,14 +14417,6 @@ class Module {
|
|
|
13572
14417
|
return this.error(logModuleParseError(error_, this.id), error_.pos);
|
|
13573
14418
|
}
|
|
13574
14419
|
}
|
|
13575
|
-
async tryParseAsync() {
|
|
13576
|
-
try {
|
|
13577
|
-
return await parseAstAsync(this.info.code);
|
|
13578
|
-
}
|
|
13579
|
-
catch (error_) {
|
|
13580
|
-
return this.error(logModuleParseError(error_, this.id), error_.pos);
|
|
13581
|
-
}
|
|
13582
|
-
}
|
|
13583
14420
|
}
|
|
13584
14421
|
// if there is a cyclic import in the reexport chain, we should not
|
|
13585
14422
|
// import from the original module but from the cyclic module to not
|
|
@@ -17831,7 +18668,6 @@ class ModuleLoader {
|
|
|
17831
18668
|
? source
|
|
17832
18669
|
: error(logBadLoader(id));
|
|
17833
18670
|
const code = sourceDescription.code;
|
|
17834
|
-
/* eslint-disable-next-line unicorn/number-literal-case */
|
|
17835
18671
|
if (code.charCodeAt(0) === 65279) {
|
|
17836
18672
|
sourceDescription.code = code.slice(1);
|
|
17837
18673
|
}
|
|
@@ -18015,9 +18851,7 @@ class ModuleLoader {
|
|
|
18015
18851
|
}
|
|
18016
18852
|
getResolveDynamicImportPromises(module) {
|
|
18017
18853
|
return module.dynamicImports.map(async (dynamicImport) => {
|
|
18018
|
-
const resolvedId = await this.resolveDynamicImport(module,
|
|
18019
|
-
? dynamicImport.argument
|
|
18020
|
-
: dynamicImport.argument.esTreeNode, module.id, getAttributesFromImportExpression(dynamicImport.node));
|
|
18854
|
+
const resolvedId = await this.resolveDynamicImport(module, dynamicImport.argument, module.id, getAttributesFromImportExpression(dynamicImport.node));
|
|
18021
18855
|
if (resolvedId && typeof resolvedId === 'object') {
|
|
18022
18856
|
dynamicImport.id = resolvedId.id;
|
|
18023
18857
|
}
|