@next-core/cook 1.6.78 → 1.6.79

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.
Files changed (55) hide show
  1. package/dist/cjs/AnalysisContext.js +2 -11
  2. package/dist/cjs/AnalysisContext.js.map +1 -1
  3. package/dist/cjs/ExecutionContext.js +11 -37
  4. package/dist/cjs/ExecutionContext.js.map +1 -1
  5. package/dist/cjs/context-free.js +30 -71
  6. package/dist/cjs/context-free.js.map +1 -1
  7. package/dist/cjs/cook.js +147 -386
  8. package/dist/cjs/cook.js.map +1 -1
  9. package/dist/cjs/hasOwnProperty.js +0 -1
  10. package/dist/cjs/hasOwnProperty.js.map +1 -1
  11. package/dist/cjs/index.js +0 -14
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/interfaces.js.map +1 -1
  14. package/dist/cjs/lint.js +0 -21
  15. package/dist/cjs/lint.js.map +1 -1
  16. package/dist/cjs/parse.js +0 -8
  17. package/dist/cjs/parse.js.map +1 -1
  18. package/dist/cjs/precook.js +6 -74
  19. package/dist/cjs/precook.js.map +1 -1
  20. package/dist/cjs/precookFunction.js +0 -3
  21. package/dist/cjs/precookFunction.js.map +1 -1
  22. package/dist/cjs/preevaluate.js +2 -6
  23. package/dist/cjs/preevaluate.js.map +1 -1
  24. package/dist/cjs/sanitize.js +9 -13
  25. package/dist/cjs/sanitize.js.map +1 -1
  26. package/dist/cjs/traverse.js +0 -32
  27. package/dist/cjs/traverse.js.map +1 -1
  28. package/dist/esm/AnalysisContext.js +2 -8
  29. package/dist/esm/AnalysisContext.js.map +1 -1
  30. package/dist/esm/ExecutionContext.js +11 -30
  31. package/dist/esm/ExecutionContext.js.map +1 -1
  32. package/dist/esm/context-free.js +32 -53
  33. package/dist/esm/context-free.js.map +1 -1
  34. package/dist/esm/cook.js +145 -411
  35. package/dist/esm/cook.js.map +1 -1
  36. package/dist/esm/hasOwnProperty.js.map +1 -1
  37. package/dist/esm/index.js.map +1 -1
  38. package/dist/esm/interfaces.js.map +1 -1
  39. package/dist/esm/lint.js +0 -19
  40. package/dist/esm/lint.js.map +1 -1
  41. package/dist/esm/parse.js +0 -6
  42. package/dist/esm/parse.js.map +1 -1
  43. package/dist/esm/precook.js +4 -82
  44. package/dist/esm/precook.js.map +1 -1
  45. package/dist/esm/precookFunction.js +4 -5
  46. package/dist/esm/precookFunction.js.map +1 -1
  47. package/dist/esm/preevaluate.js.map +1 -1
  48. package/dist/esm/sanitize.js +9 -9
  49. package/dist/esm/sanitize.js.map +1 -1
  50. package/dist/esm/traverse.js +0 -29
  51. package/dist/esm/traverse.js.map +1 -1
  52. package/dist/types/interfaces.d.ts +2 -0
  53. package/dist/types/lint.d.ts +3 -4
  54. package/dist/types/parse.d.ts +3 -3
  55. package/package.json +6 -6
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.isAllowedConstructor = isAllowedConstructor;
7
7
  exports.sanitize = sanitize;
8
-
9
8
  // Ref https://github.com/tc39/proposal-global
10
9
  // In addition, the es6-shim had to switch from Function('return this')()
11
10
  // due to CSP concerns, such that the current check to handle browsers,
@@ -19,40 +18,37 @@ function getGlobal() {
19
18
  if (typeof self !== "undefined") {
20
19
  return self;
21
20
  }
22
-
23
21
  if (typeof window !== "undefined") {
24
22
  return window;
25
23
  }
26
-
27
24
  if (typeof global !== "undefined") {
28
25
  return global;
29
26
  }
30
-
31
27
  throw new Error("unable to locate global object");
32
28
  }
29
+
33
30
  /**
34
31
  * There are chances to construct a `Function` from a string, etc.
35
32
  * ```
36
33
  * ((a,b)=>a[b])(()=>1, 'constructor')('console.log(`yo`)')()
37
34
  * ```
38
35
  */
39
-
40
-
41
- const reservedObjects = new WeakSet([// `Function("...")` is considered *extremely vulnerable*.
42
- Function, // `Object.assign()` is considered vulnerable.
43
- Object, // `prototype` is considered vulnerable.
44
- Function.prototype, Object.prototype, // Global `window` is considered vulnerable, too.
36
+ const reservedObjects = new WeakSet([
37
+ // `Function("...")` is considered *extremely vulnerable*.
38
+ Function,
39
+ // `Object.assign()` is considered vulnerable.
40
+ Object,
41
+ // `prototype` is considered vulnerable.
42
+ Function.prototype, Object.prototype,
43
+ // Global `window` is considered vulnerable, too.
45
44
  getGlobal()]);
46
-
47
45
  function sanitize(cooked) {
48
46
  // eslint-disable-next-line @typescript-eslint/ban-types
49
47
  if (reservedObjects.has(cooked)) {
50
48
  throw new TypeError("Cannot access reserved objects such as `Function`.");
51
49
  }
52
50
  }
53
-
54
51
  const allowedConstructors = new WeakSet([Array, Map, Set, URLSearchParams, WeakMap, WeakSet]);
55
-
56
52
  function isAllowedConstructor(constructor) {
57
53
  // `Date` maybe mocked when running tests for storyboard functions.
58
54
  return allowedConstructors.has(constructor) || constructor === Date;
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.js","names":["getGlobal","self","window","global","Error","reservedObjects","WeakSet","Function","Object","prototype","sanitize","cooked","has","TypeError","allowedConstructors","Array","Map","Set","URLSearchParams","WeakMap","isAllowedConstructor","constructor","Date"],"sources":["../../src/sanitize.ts"],"sourcesContent":["// Ref https://github.com/tc39/proposal-global\n// In addition, the es6-shim had to switch from Function('return this')()\n// due to CSP concerns, such that the current check to handle browsers,\n// node, web workers, and frames is:\n// istanbul ignore next\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getGlobal(): object {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw new Error(\"unable to locate global object\");\n}\n\n/**\n * There are chances to construct a `Function` from a string, etc.\n * ```\n * ((a,b)=>a[b])(()=>1, 'constructor')('console.log(`yo`)')()\n * ```\n */\nconst reservedObjects = new WeakSet([\n // `Function(\"...\")` is considered *extremely vulnerable*.\n Function,\n // `Object.assign()` is considered vulnerable.\n Object,\n // `prototype` is considered vulnerable.\n Function.prototype,\n Object.prototype,\n // Global `window` is considered vulnerable, too.\n getGlobal(),\n]);\n\nexport function sanitize(cooked: unknown): void {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (reservedObjects.has(cooked as object)) {\n throw new TypeError(\"Cannot access reserved objects such as `Function`.\");\n }\n}\n\nconst allowedConstructors = new WeakSet([\n Array,\n Map,\n Set,\n URLSearchParams,\n WeakMap,\n WeakSet,\n]);\n\nexport function isAllowedConstructor(constructor: unknown): boolean {\n // `Date` maybe mocked when running tests for storyboard functions.\n return (\n allowedConstructors.has(constructor as ArrayConstructor) ||\n constructor === Date\n );\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAT,GAA6B;EAC3B;EACA;EACA;EACA,IAAI,OAAOC,IAAP,KAAgB,WAApB,EAAiC;IAC/B,OAAOA,IAAP;EACD;;EACD,IAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;IACjC,OAAOA,MAAP;EACD;;EACD,IAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;IACjC,OAAOA,MAAP;EACD;;EACD,MAAM,IAAIC,KAAJ,CAAU,gCAAV,CAAN;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,eAAe,GAAG,IAAIC,OAAJ,CAAY,CAClC;AACAC,QAFkC,EAGlC;AACAC,MAJkC,EAKlC;AACAD,QAAQ,CAACE,SANyB,EAOlCD,MAAM,CAACC,SAP2B,EAQlC;AACAT,SAAS,EATyB,CAAZ,CAAxB;;AAYO,SAASU,QAAT,CAAkBC,MAAlB,EAAyC;EAC9C;EACA,IAAIN,eAAe,CAACO,GAAhB,CAAoBD,MAApB,CAAJ,EAA2C;IACzC,MAAM,IAAIE,SAAJ,CAAc,oDAAd,CAAN;EACD;AACF;;AAED,MAAMC,mBAAmB,GAAG,IAAIR,OAAJ,CAAY,CACtCS,KADsC,EAEtCC,GAFsC,EAGtCC,GAHsC,EAItCC,eAJsC,EAKtCC,OALsC,EAMtCb,OANsC,CAAZ,CAA5B;;AASO,SAASc,oBAAT,CAA8BC,WAA9B,EAA6D;EAClE;EACA,OACEP,mBAAmB,CAACF,GAApB,CAAwBS,WAAxB,KACAA,WAAW,KAAKC,IAFlB;AAID"}
1
+ {"version":3,"file":"sanitize.js","names":["getGlobal","self","window","global","Error","reservedObjects","WeakSet","Function","Object","prototype","sanitize","cooked","has","TypeError","allowedConstructors","Array","Map","Set","URLSearchParams","WeakMap","isAllowedConstructor","constructor","Date"],"sources":["../../src/sanitize.ts"],"sourcesContent":["// Ref https://github.com/tc39/proposal-global\n// In addition, the es6-shim had to switch from Function('return this')()\n// due to CSP concerns, such that the current check to handle browsers,\n// node, web workers, and frames is:\n// istanbul ignore next\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getGlobal(): object {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw new Error(\"unable to locate global object\");\n}\n\n/**\n * There are chances to construct a `Function` from a string, etc.\n * ```\n * ((a,b)=>a[b])(()=>1, 'constructor')('console.log(`yo`)')()\n * ```\n */\nconst reservedObjects = new WeakSet([\n // `Function(\"...\")` is considered *extremely vulnerable*.\n Function,\n // `Object.assign()` is considered vulnerable.\n Object,\n // `prototype` is considered vulnerable.\n Function.prototype,\n Object.prototype,\n // Global `window` is considered vulnerable, too.\n getGlobal(),\n]);\n\nexport function sanitize(cooked: unknown): void {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (reservedObjects.has(cooked as object)) {\n throw new TypeError(\"Cannot access reserved objects such as `Function`.\");\n }\n}\n\nconst allowedConstructors = new WeakSet([\n Array,\n Map,\n Set,\n URLSearchParams,\n WeakMap,\n WeakSet,\n]);\n\nexport function isAllowedConstructor(constructor: unknown): boolean {\n // `Date` maybe mocked when running tests for storyboard functions.\n return (\n allowedConstructors.has(constructor as ArrayConstructor) ||\n constructor === Date\n );\n}\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAS,GAAW;EAC3B;EACA;EACA;EACA,IAAI,OAAOC,IAAI,KAAK,WAAW,EAAE;IAC/B,OAAOA,IAAI;EACb;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,MAAM,IAAIC,KAAK,CAAC,gCAAgC,CAAC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG,IAAIC,OAAO,CAAC;AAClC;AACAC,QAAQ;AACR;AACAC,MAAM;AACN;AACAD,QAAQ,CAACE,SAAS,EAClBD,MAAM,CAACC,SAAS;AAChB;AACAT,SAAS,EAAE,CACZ,CAAC;AAEK,SAASU,QAAQ,CAACC,MAAe,EAAQ;EAC9C;EACA,IAAIN,eAAe,CAACO,GAAG,CAACD,MAAM,CAAW,EAAE;IACzC,MAAM,IAAIE,SAAS,CAAC,oDAAoD,CAAC;EAC3E;AACF;AAEA,MAAMC,mBAAmB,GAAG,IAAIR,OAAO,CAAC,CACtCS,KAAK,EACLC,GAAG,EACHC,GAAG,EACHC,eAAe,EACfC,OAAO,EACPb,OAAO,CACR,CAAC;AAEK,SAASc,oBAAoB,CAACC,WAAoB,EAAW;EAClE;EACA,OACEP,mBAAmB,CAACF,GAAG,CAACS,WAAW,CAAqB,IACxDA,WAAW,KAAKC,IAAI;AAExB"}
@@ -6,10 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.collectBoundNames = collectBoundNames;
7
7
  exports.collectScopedDeclarations = collectScopedDeclarations;
8
8
  exports.containsExpression = containsExpression;
9
-
10
9
  function collectBoundNames(root) {
11
10
  const names = new Set();
12
-
13
11
  const collect = node => {
14
12
  if (Array.isArray(node)) {
15
13
  for (const n of node) {
@@ -21,38 +19,28 @@ function collectBoundNames(root) {
21
19
  case "Identifier":
22
20
  names.add(node.name);
23
21
  return;
24
-
25
22
  case "VariableDeclaration":
26
23
  return collect(node.declarations);
27
-
28
24
  case "VariableDeclarator":
29
25
  return collect(node.id);
30
-
31
26
  case "ArrayPattern":
32
27
  return collect(node.elements);
33
-
34
28
  case "AssignmentPattern":
35
29
  return collect(node.left);
36
-
37
30
  case "ObjectPattern":
38
31
  return collect(node.properties);
39
-
40
32
  case "Property":
41
33
  return collect(node.value);
42
-
43
34
  case "RestElement":
44
35
  return collect(node.argument);
45
-
46
36
  case "FunctionDeclaration":
47
37
  return collect(node.id);
48
38
  }
49
39
  }
50
40
  };
51
-
52
41
  collect(root);
53
42
  return Array.from(names);
54
43
  }
55
-
56
44
  function containsExpression(root) {
57
45
  const collect = node => {
58
46
  if (Array.isArray(node)) {
@@ -62,31 +50,24 @@ function containsExpression(root) {
62
50
  switch (node.type) {
63
51
  case "ArrayPattern":
64
52
  return collect(node.elements);
65
-
66
53
  case "AssignmentPattern":
67
54
  return true;
68
-
69
55
  case "ObjectPattern":
70
56
  return collect(node.properties);
71
-
72
57
  case "Property":
73
58
  return node.computed || collect(node.value);
74
-
75
59
  case "RestElement":
76
60
  return collect(node.argument);
77
61
  }
78
62
  }
79
63
  };
80
-
81
64
  return collect(root);
82
65
  }
83
-
84
66
  function collectScopedDeclarations(root, options) {
85
67
  const declarations = [];
86
68
  const nextOptions = {
87
69
  var: options.var
88
70
  };
89
-
90
71
  const collect = (node, options) => {
91
72
  if (Array.isArray(node)) {
92
73
  for (const n of node) {
@@ -102,56 +83,44 @@ function collectScopedDeclarations(root, options) {
102
83
  if (Number(!options.var) ^ Number(options.topLevel)) {
103
84
  declarations.push(node);
104
85
  }
105
-
106
86
  return;
107
-
108
87
  case "VariableDeclaration":
109
88
  if (Number(!options.var) ^ Number(node.kind === "var")) {
110
89
  declarations.push(node);
111
90
  }
112
-
113
91
  return;
114
-
115
92
  case "SwitchCase":
116
93
  collect(node.consequent, nextOptions);
117
94
  return;
118
-
119
95
  case "CatchClause":
120
96
  collect(node.body, nextOptions);
121
97
  return;
122
98
  }
123
-
124
99
  if (options.var) {
125
100
  switch (node.type) {
126
101
  case "BlockStatement":
127
102
  collect(node.body, nextOptions);
128
103
  return;
129
-
130
104
  case "IfStatement":
131
105
  collect(node.consequent, nextOptions);
132
106
  collect(node.alternate, nextOptions);
133
107
  return;
134
-
135
108
  case "DoWhileStatement":
136
109
  case "WhileStatement":
137
110
  collect(node.body, nextOptions);
138
111
  return;
139
-
140
112
  case "ForStatement":
141
113
  collect(node.init, nextOptions);
142
114
  collect(node.body, nextOptions);
143
115
  return;
144
-
145
116
  case "ForInStatement":
146
117
  case "ForOfStatement":
147
118
  collect(node.left, nextOptions);
148
119
  collect(node.body, nextOptions);
149
120
  return;
150
-
151
121
  case "SwitchStatement":
152
122
  collect(node.cases, nextOptions);
153
123
  return;
154
-
155
124
  case "TryStatement":
156
125
  collect(node.block, nextOptions);
157
126
  collect(node.handler, nextOptions);
@@ -161,7 +130,6 @@ function collectScopedDeclarations(root, options) {
161
130
  }
162
131
  }
163
132
  };
164
-
165
133
  collect(root, options);
166
134
  return declarations;
167
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.js","names":["collectBoundNames","root","names","Set","collect","node","Array","isArray","n","type","add","name","declarations","id","elements","left","properties","value","argument","from","containsExpression","some","computed","collectScopedDeclarations","options","nextOptions","var","Number","topLevel","push","kind","consequent","body","alternate","init","cases","block","handler","finalizer"],"sources":["../../src/traverse.ts"],"sourcesContent":["import { FunctionDeclaration, VariableDeclaration } from \"@babel/types\";\nimport { EstreeNode, NodeWithBoundNames } from \"./interfaces\";\n\ntype InternalCollect<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options?: O\n) => T;\ntype InternalCollectWithOptions<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options: O\n) => T;\n\nexport function collectBoundNames(\n root: NodeWithBoundNames | NodeWithBoundNames[]\n): string[] {\n const names = new Set<string>();\n const collect: InternalCollect = (node) => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"Identifier\":\n names.add(node.name);\n return;\n case \"VariableDeclaration\":\n return collect(node.declarations);\n case \"VariableDeclarator\":\n return collect(node.id);\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return collect(node.left);\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n case \"FunctionDeclaration\":\n return collect(node.id);\n }\n }\n };\n collect(root);\n return Array.from(names);\n}\n\nexport function containsExpression(root: EstreeNode | EstreeNode[]): boolean {\n const collect: InternalCollect<boolean> = (node) => {\n if (Array.isArray(node)) {\n return node.some(collect);\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return true;\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return node.computed || collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n }\n }\n };\n return collect(root);\n}\n\ninterface ScopedDeclarationOptions {\n var?: boolean;\n topLevel?: boolean;\n}\n\ntype ScopedDeclaration = VariableDeclaration | FunctionDeclaration;\n\nexport function collectScopedDeclarations(\n root: EstreeNode | EstreeNode[],\n options: ScopedDeclarationOptions\n): ScopedDeclaration[] {\n const declarations: ScopedDeclaration[] = [];\n const nextOptions = { var: options.var };\n const collect: InternalCollectWithOptions<void, ScopedDeclarationOptions> = (\n node,\n options\n ): void => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n, options);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"FunctionDeclaration\":\n // At the top level of a function, or script, function declarations are\n // treated like var declarations rather than like lexical declarations.\n // See https://tc39.es/ecma262/#sec-static-semantics-toplevellexicallydeclarednames\n if (Number(!options.var) ^ Number(options.topLevel)) {\n declarations.push(node);\n }\n return;\n case \"VariableDeclaration\":\n if (Number(!options.var) ^ Number(node.kind === \"var\")) {\n declarations.push(node);\n }\n return;\n case \"SwitchCase\":\n collect(node.consequent, nextOptions);\n return;\n case \"CatchClause\":\n collect(node.body, nextOptions);\n return;\n }\n if (options.var) {\n switch (node.type) {\n case \"BlockStatement\":\n collect(node.body, nextOptions);\n return;\n case \"IfStatement\":\n collect(node.consequent, nextOptions);\n collect(node.alternate, nextOptions);\n return;\n case \"DoWhileStatement\":\n case \"WhileStatement\":\n collect(node.body, nextOptions);\n return;\n case \"ForStatement\":\n collect(node.init, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n collect(node.left, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"SwitchStatement\":\n collect(node.cases, nextOptions);\n return;\n case \"TryStatement\":\n collect(node.block, nextOptions);\n collect(node.handler, nextOptions);\n collect(node.finalizer, nextOptions);\n return;\n }\n }\n }\n };\n collect(root, options);\n return declarations;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"traverse.js","names":["collectBoundNames","root","names","Set","collect","node","Array","isArray","n","type","add","name","declarations","id","elements","left","properties","value","argument","from","containsExpression","some","computed","collectScopedDeclarations","options","nextOptions","var","Number","topLevel","push","kind","consequent","body","alternate","init","cases","block","handler","finalizer"],"sources":["../../src/traverse.ts"],"sourcesContent":["import { FunctionDeclaration, VariableDeclaration } from \"@babel/types\";\nimport { EstreeNode, NodeWithBoundNames } from \"./interfaces\";\n\ntype InternalCollect<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options?: O\n) => T;\ntype InternalCollectWithOptions<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options: O\n) => T;\n\nexport function collectBoundNames(\n root: NodeWithBoundNames | NodeWithBoundNames[]\n): string[] {\n const names = new Set<string>();\n const collect: InternalCollect = (node) => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"Identifier\":\n names.add(node.name);\n return;\n case \"VariableDeclaration\":\n return collect(node.declarations);\n case \"VariableDeclarator\":\n return collect(node.id);\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return collect(node.left);\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n case \"FunctionDeclaration\":\n return collect(node.id);\n }\n }\n };\n collect(root);\n return Array.from(names);\n}\n\nexport function containsExpression(root: EstreeNode | EstreeNode[]): boolean {\n const collect: InternalCollect<boolean> = (node) => {\n if (Array.isArray(node)) {\n return node.some(collect);\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return true;\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return node.computed || collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n }\n }\n };\n return collect(root);\n}\n\ninterface ScopedDeclarationOptions {\n var?: boolean;\n topLevel?: boolean;\n}\n\ntype ScopedDeclaration = VariableDeclaration | FunctionDeclaration;\n\nexport function collectScopedDeclarations(\n root: EstreeNode | EstreeNode[],\n options: ScopedDeclarationOptions\n): ScopedDeclaration[] {\n const declarations: ScopedDeclaration[] = [];\n const nextOptions = { var: options.var };\n const collect: InternalCollectWithOptions<void, ScopedDeclarationOptions> = (\n node,\n options\n ): void => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n, options);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"FunctionDeclaration\":\n // At the top level of a function, or script, function declarations are\n // treated like var declarations rather than like lexical declarations.\n // See https://tc39.es/ecma262/#sec-static-semantics-toplevellexicallydeclarednames\n if (Number(!options.var) ^ Number(options.topLevel)) {\n declarations.push(node);\n }\n return;\n case \"VariableDeclaration\":\n if (Number(!options.var) ^ Number(node.kind === \"var\")) {\n declarations.push(node);\n }\n return;\n case \"SwitchCase\":\n collect(node.consequent, nextOptions);\n return;\n case \"CatchClause\":\n collect(node.body, nextOptions);\n return;\n }\n if (options.var) {\n switch (node.type) {\n case \"BlockStatement\":\n collect(node.body, nextOptions);\n return;\n case \"IfStatement\":\n collect(node.consequent, nextOptions);\n collect(node.alternate, nextOptions);\n return;\n case \"DoWhileStatement\":\n case \"WhileStatement\":\n collect(node.body, nextOptions);\n return;\n case \"ForStatement\":\n collect(node.init, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n collect(node.left, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"SwitchStatement\":\n collect(node.cases, nextOptions);\n return;\n case \"TryStatement\":\n collect(node.block, nextOptions);\n collect(node.handler, nextOptions);\n collect(node.finalizer, nextOptions);\n return;\n }\n }\n }\n };\n collect(root, options);\n return declarations;\n}\n"],"mappings":"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"}
@@ -3,28 +3,22 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  export class AnalysisContext {
4
4
  constructor() {
5
5
  _defineProperty(this, "VariableEnvironment", void 0);
6
-
7
6
  _defineProperty(this, "LexicalEnvironment", void 0);
8
7
  }
8
+ }
9
9
 
10
- } // https://tc39.es/ecma262/#sec-environment-records
11
-
10
+ // https://tc39.es/ecma262/#sec-environment-records
12
11
  export class AnalysisEnvironment {
13
12
  constructor(outer) {
14
13
  _defineProperty(this, "OuterEnv", void 0);
15
-
16
14
  _defineProperty(this, "bindingSet", new Set());
17
-
18
15
  this.OuterEnv = outer;
19
16
  }
20
-
21
17
  HasBinding(name) {
22
18
  return this.bindingSet.has(name);
23
19
  }
24
-
25
20
  CreateBinding(name) {
26
21
  this.bindingSet.add(name);
27
22
  }
28
-
29
23
  }
30
24
  //# sourceMappingURL=AnalysisContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalysisContext.js","names":["AnalysisContext","AnalysisEnvironment","constructor","outer","Set","OuterEnv","HasBinding","name","bindingSet","has","CreateBinding","add"],"sources":["../../src/AnalysisContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class AnalysisContext {\n VariableEnvironment: AnalysisEnvironment;\n LexicalEnvironment: AnalysisEnvironment;\n}\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class AnalysisEnvironment {\n readonly OuterEnv: AnalysisEnvironment;\n private readonly bindingSet = new Set<string>();\n\n constructor(outer: AnalysisEnvironment) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingSet.has(name);\n }\n\n CreateBinding(name: string): void {\n this.bindingSet.add(name);\n }\n}\n\nexport interface AnalysisFunctionObject {\n Function: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;\n FormalParameters: FunctionDeclaration[\"params\"];\n ECMAScriptCode: Statement[] | Expression;\n Environment: AnalysisEnvironment;\n}\n"],"mappings":";AAQA;AACA,OAAO,MAAMA,eAAN,CAAsB;EAAA;IAAA;;IAAA;EAAA;;AAAA,C,CAK7B;;AACA,OAAO,MAAMC,mBAAN,CAA0B;EAI/BC,WAAW,CAACC,KAAD,EAA6B;IAAA;;IAAA,oCAFV,IAAIC,GAAJ,EAEU;;IACtC,KAAKC,QAAL,GAAgBF,KAAhB;EACD;;EAEDG,UAAU,CAACC,IAAD,EAAwB;IAChC,OAAO,KAAKC,UAAL,CAAgBC,GAAhB,CAAoBF,IAApB,CAAP;EACD;;EAEDG,aAAa,CAACH,IAAD,EAAqB;IAChC,KAAKC,UAAL,CAAgBG,GAAhB,CAAoBJ,IAApB;EACD;;AAd8B"}
1
+ {"version":3,"file":"AnalysisContext.js","names":["AnalysisContext","AnalysisEnvironment","constructor","outer","Set","OuterEnv","HasBinding","name","bindingSet","has","CreateBinding","add"],"sources":["../../src/AnalysisContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class AnalysisContext {\n VariableEnvironment: AnalysisEnvironment;\n LexicalEnvironment: AnalysisEnvironment;\n}\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class AnalysisEnvironment {\n readonly OuterEnv: AnalysisEnvironment;\n private readonly bindingSet = new Set<string>();\n\n constructor(outer: AnalysisEnvironment) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingSet.has(name);\n }\n\n CreateBinding(name: string): void {\n this.bindingSet.add(name);\n }\n}\n\nexport interface AnalysisFunctionObject {\n Function: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;\n FormalParameters: FunctionDeclaration[\"params\"];\n ECMAScriptCode: Statement[] | Expression;\n Environment: AnalysisEnvironment;\n}\n"],"mappings":";AAQA;AACA,OAAO,MAAMA,eAAe,CAAC;EAAA;IAAA;IAAA;EAAA;AAG7B;;AAEA;AACA,OAAO,MAAMC,mBAAmB,CAAC;EAI/BC,WAAW,CAACC,KAA0B,EAAE;IAAA;IAAA,oCAFV,IAAIC,GAAG,EAAU;IAG7C,IAAI,CAACC,QAAQ,GAAGF,KAAK;EACvB;EAEAG,UAAU,CAACC,IAAY,EAAW;IAChC,OAAO,IAAI,CAACC,UAAU,CAACC,GAAG,CAACF,IAAI,CAAC;EAClC;EAEAG,aAAa,CAACH,IAAY,EAAQ;IAChC,IAAI,CAACC,UAAU,CAACG,GAAG,CAACJ,IAAI,CAAC;EAC3B;AACF"}
@@ -3,27 +3,20 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  export class ExecutionContext {
4
4
  constructor() {
5
5
  _defineProperty(this, "VariableEnvironment", void 0);
6
-
7
6
  _defineProperty(this, "LexicalEnvironment", void 0);
8
-
9
7
  _defineProperty(this, "Function", void 0);
10
8
  }
11
-
12
9
  }
13
10
  // https://tc39.es/ecma262/#sec-environment-records
14
11
  export class EnvironmentRecord {
15
12
  constructor(outer) {
16
13
  _defineProperty(this, "OuterEnv", void 0);
17
-
18
14
  _defineProperty(this, "bindingMap", new Map());
19
-
20
15
  this.OuterEnv = outer;
21
16
  }
22
-
23
17
  HasBinding(name) {
24
18
  return this.bindingMap.has(name);
25
19
  }
26
-
27
20
  CreateMutableBinding(name, deletable) {
28
21
  // Assert: binding does not exist.
29
22
  this.bindingMap.set(name, {
@@ -32,6 +25,7 @@ export class EnvironmentRecord {
32
25
  });
33
26
  return NormalCompletion(undefined);
34
27
  }
28
+
35
29
  /**
36
30
  * Create an immutable binding.
37
31
  *
@@ -39,8 +33,6 @@ export class EnvironmentRecord {
39
33
  * @param strict - For named function expressions, strict is false, otherwise it's true.
40
34
  * @returns CompletionRecord.
41
35
  */
42
-
43
-
44
36
  CreateImmutableBinding(name, strict) {
45
37
  // Assert: binding does not exist.
46
38
  this.bindingMap.set(name, {
@@ -48,16 +40,16 @@ export class EnvironmentRecord {
48
40
  });
49
41
  return NormalCompletion(undefined);
50
42
  }
51
-
52
43
  InitializeBinding(name, value) {
53
- var binding = this.bindingMap.get(name); // Assert: binding exists and uninitialized.
54
-
44
+ var binding = this.bindingMap.get(name);
45
+ // Assert: binding exists and uninitialized.
55
46
  Object.assign(binding, {
56
47
  initialized: true,
57
48
  value
58
49
  });
59
50
  return NormalCompletion(undefined);
60
51
  }
52
+
61
53
  /**
62
54
  * Update a mutable binding value, including function declarations.
63
55
  *
@@ -66,11 +58,9 @@ export class EnvironmentRecord {
66
58
  * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.
67
59
  * @returns
68
60
  */
69
-
70
-
71
61
  SetMutableBinding(name, value, strict) {
72
- var binding = this.bindingMap.get(name); // Assert: binding exists.
73
-
62
+ var binding = this.bindingMap.get(name);
63
+ // Assert: binding exists.
74
64
  if (!binding.initialized) {
75
65
  throw new ReferenceError("".concat(name, " is not initialized"));
76
66
  } else if (binding.mutable) {
@@ -78,20 +68,16 @@ export class EnvironmentRecord {
78
68
  } else {
79
69
  throw new TypeError("Assignment to constant variable");
80
70
  }
81
-
82
71
  return NormalCompletion(undefined);
83
72
  }
84
-
85
73
  GetBindingValue(name, strict) {
86
- var binding = this.bindingMap.get(name); // Assert: binding exists.
87
-
74
+ var binding = this.bindingMap.get(name);
75
+ // Assert: binding exists.
88
76
  if (!binding.initialized) {
89
77
  throw new ReferenceError("".concat(name, " is not initialized"));
90
78
  }
91
-
92
79
  return binding.value;
93
80
  }
94
-
95
81
  }
96
82
  export class DeclarativeEnvironment extends EnvironmentRecord {}
97
83
  export class FunctionEnvironment extends EnvironmentRecord {}
@@ -103,30 +89,25 @@ export var IsConstructor = Symbol.for("IsConstructor");
103
89
  // https://tc39.es/ecma262/#sec-reference-record-specification-type
104
90
  export class ReferenceRecord {
105
91
  /** Whether the reference is in strict mode. */
92
+
106
93
  constructor(base, referenceName, strict) {
107
94
  _defineProperty(this, "Base", void 0);
108
-
109
95
  _defineProperty(this, "ReferenceName", void 0);
110
-
111
96
  _defineProperty(this, "Strict", void 0);
112
-
113
97
  this.Base = base;
114
98
  this.ReferenceName = referenceName;
115
99
  this.Strict = strict;
116
100
  }
101
+ }
117
102
 
118
- } // https://tc39.es/ecma262/#sec-completion-record-specification-type
119
-
103
+ // https://tc39.es/ecma262/#sec-completion-record-specification-type
120
104
  export class CompletionRecord {
121
105
  constructor(type, value) {
122
106
  _defineProperty(this, "Type", void 0);
123
-
124
107
  _defineProperty(this, "Value", void 0);
125
-
126
108
  this.Type = type;
127
109
  this.Value = value;
128
110
  }
129
-
130
111
  }
131
112
  // https://tc39.es/ecma262/#sec-normalcompletion
132
113
  export function NormalCompletion(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionContext.js","names":["ExecutionContext","EnvironmentRecord","constructor","outer","Map","OuterEnv","HasBinding","name","bindingMap","has","CreateMutableBinding","deletable","set","mutable","NormalCompletion","undefined","CreateImmutableBinding","strict","InitializeBinding","value","binding","get","Object","assign","initialized","SetMutableBinding","ReferenceError","TypeError","GetBindingValue","DeclarativeEnvironment","FunctionEnvironment","SourceNode","Symbol","for","FormalParameters","ECMAScriptCode","Environment","IsConstructor","ReferenceRecord","base","referenceName","Base","ReferenceName","Strict","CompletionRecord","type","Type","Value","Empty"],"sources":["../../src/ExecutionContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class ExecutionContext {\n VariableEnvironment: EnvironmentRecord;\n LexicalEnvironment: EnvironmentRecord;\n Function: FunctionObject;\n}\n\nexport type EnvironmentRecordType = \"function\" | \"declarative\";\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class EnvironmentRecord {\n readonly OuterEnv: EnvironmentRecord;\n private readonly bindingMap = new Map<string, BindingState>();\n\n constructor(outer: EnvironmentRecord) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingMap.has(name);\n }\n\n CreateMutableBinding(name: string, deletable: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n mutable: true,\n deletable,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Create an immutable binding.\n *\n * @param name - The binding name.\n * @param strict - For named function expressions, strict is false, otherwise it's true.\n * @returns CompletionRecord.\n */\n CreateImmutableBinding(name: string, strict: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n strict,\n });\n return NormalCompletion(undefined);\n }\n\n InitializeBinding(name: string, value: unknown): CompletionRecord {\n const binding = this.bindingMap.get(name);\n // Assert: binding exists and uninitialized.\n Object.assign<BindingState, Partial<BindingState>>(binding, {\n initialized: true,\n value,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Update a mutable binding value, including function declarations.\n *\n * @param name - The binding name.\n * @param value - The binding value.\n * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.\n * @returns\n */\n SetMutableBinding(\n name: string,\n value: unknown,\n strict: boolean\n ): CompletionRecord {\n const binding = this.bindingMap.get(name);\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n } else if (binding.mutable) {\n binding.value = value;\n } else {\n throw new TypeError(`Assignment to constant variable`);\n }\n return NormalCompletion(undefined);\n }\n\n GetBindingValue(name: string, strict: boolean): unknown {\n const binding = this.bindingMap.get(name);\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n }\n return binding.value;\n }\n}\n\nexport class DeclarativeEnvironment extends EnvironmentRecord {}\n\nexport class FunctionEnvironment extends EnvironmentRecord {}\n\nexport interface BindingState {\n initialized?: boolean;\n value?: unknown;\n mutable?: boolean;\n\n /** This is used for mutable bindings only. */\n deletable?: boolean;\n\n /**\n * This is used for immutable bindings only.\n * For named function expressions, `strict` is false,\n * otherwise it's true.\n */\n strict?: boolean;\n}\n\nexport const SourceNode = Symbol.for(\"SourceNode\");\nexport const FormalParameters = Symbol.for(\"FormalParameters\");\nexport const ECMAScriptCode = Symbol.for(\"ECMAScriptCode\");\nexport const Environment = Symbol.for(\"Environment\");\nexport const IsConstructor = Symbol.for(\"IsConstructor\");\n\nexport interface FunctionObject {\n (...args: unknown[]): unknown;\n [SourceNode]:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression;\n [FormalParameters]: FunctionDeclaration[\"params\"];\n [ECMAScriptCode]: Statement[] | Expression;\n [Environment]: EnvironmentRecord;\n [IsConstructor]: boolean;\n}\n\n// https://tc39.es/ecma262/#sec-reference-record-specification-type\nexport class ReferenceRecord {\n readonly Base?:\n | Record<PropertyKey, unknown>\n | EnvironmentRecord\n | \"unresolvable\";\n readonly ReferenceName?: PropertyKey;\n /** Whether the reference is in strict mode. */\n readonly Strict?: boolean;\n\n constructor(\n base: Record<PropertyKey, unknown> | EnvironmentRecord | \"unresolvable\",\n referenceName: PropertyKey,\n strict: boolean\n ) {\n this.Base = base;\n this.ReferenceName = referenceName;\n this.Strict = strict;\n }\n}\n\n// https://tc39.es/ecma262/#sec-completion-record-specification-type\nexport class CompletionRecord {\n readonly Type: CompletionRecordType;\n readonly Value: unknown;\n\n constructor(type: CompletionRecordType, value: unknown) {\n this.Type = type;\n this.Value = value;\n }\n}\n\nexport type CompletionRecordType =\n | \"normal\"\n | \"break\"\n | \"continue\"\n | \"return\"\n | \"throw\";\n\n// https://tc39.es/ecma262/#sec-normalcompletion\nexport function NormalCompletion(value: unknown): CompletionRecord {\n return new CompletionRecord(\"normal\", value);\n}\n\nexport const Empty = Symbol(\"empty completion\");\n\nexport interface OptionalChainRef {\n skipped?: boolean;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ExecutionContext.js","names":["ExecutionContext","EnvironmentRecord","constructor","outer","Map","OuterEnv","HasBinding","name","bindingMap","has","CreateMutableBinding","deletable","set","mutable","NormalCompletion","undefined","CreateImmutableBinding","strict","InitializeBinding","value","binding","get","Object","assign","initialized","SetMutableBinding","ReferenceError","TypeError","GetBindingValue","DeclarativeEnvironment","FunctionEnvironment","SourceNode","Symbol","for","FormalParameters","ECMAScriptCode","Environment","IsConstructor","ReferenceRecord","base","referenceName","Base","ReferenceName","Strict","CompletionRecord","type","Type","Value","Empty"],"sources":["../../src/ExecutionContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class ExecutionContext {\n VariableEnvironment: EnvironmentRecord;\n LexicalEnvironment: EnvironmentRecord;\n Function: FunctionObject;\n}\n\nexport type EnvironmentRecordType = \"function\" | \"declarative\";\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class EnvironmentRecord {\n readonly OuterEnv: EnvironmentRecord;\n private readonly bindingMap = new Map<string, BindingState>();\n\n constructor(outer: EnvironmentRecord) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingMap.has(name);\n }\n\n CreateMutableBinding(name: string, deletable: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n mutable: true,\n deletable,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Create an immutable binding.\n *\n * @param name - The binding name.\n * @param strict - For named function expressions, strict is false, otherwise it's true.\n * @returns CompletionRecord.\n */\n CreateImmutableBinding(name: string, strict: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n strict,\n });\n return NormalCompletion(undefined);\n }\n\n InitializeBinding(name: string, value: unknown): CompletionRecord {\n const binding = this.bindingMap.get(name);\n // Assert: binding exists and uninitialized.\n Object.assign<BindingState, Partial<BindingState>>(binding, {\n initialized: true,\n value,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Update a mutable binding value, including function declarations.\n *\n * @param name - The binding name.\n * @param value - The binding value.\n * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.\n * @returns\n */\n SetMutableBinding(\n name: string,\n value: unknown,\n strict: boolean\n ): CompletionRecord {\n const binding = this.bindingMap.get(name);\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n } else if (binding.mutable) {\n binding.value = value;\n } else {\n throw new TypeError(`Assignment to constant variable`);\n }\n return NormalCompletion(undefined);\n }\n\n GetBindingValue(name: string, strict: boolean): unknown {\n const binding = this.bindingMap.get(name);\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n }\n return binding.value;\n }\n}\n\nexport class DeclarativeEnvironment extends EnvironmentRecord {}\n\nexport class FunctionEnvironment extends EnvironmentRecord {}\n\nexport interface BindingState {\n initialized?: boolean;\n value?: unknown;\n mutable?: boolean;\n\n /** This is used for mutable bindings only. */\n deletable?: boolean;\n\n /**\n * This is used for immutable bindings only.\n * For named function expressions, `strict` is false,\n * otherwise it's true.\n */\n strict?: boolean;\n}\n\nexport const SourceNode = Symbol.for(\"SourceNode\");\nexport const FormalParameters = Symbol.for(\"FormalParameters\");\nexport const ECMAScriptCode = Symbol.for(\"ECMAScriptCode\");\nexport const Environment = Symbol.for(\"Environment\");\nexport const IsConstructor = Symbol.for(\"IsConstructor\");\n\nexport interface FunctionObject {\n (...args: unknown[]): unknown;\n [SourceNode]:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression;\n [FormalParameters]: FunctionDeclaration[\"params\"];\n [ECMAScriptCode]: Statement[] | Expression;\n [Environment]: EnvironmentRecord;\n [IsConstructor]: boolean;\n}\n\n// https://tc39.es/ecma262/#sec-reference-record-specification-type\nexport class ReferenceRecord {\n readonly Base?:\n | Record<PropertyKey, unknown>\n | EnvironmentRecord\n | \"unresolvable\";\n readonly ReferenceName?: PropertyKey;\n /** Whether the reference is in strict mode. */\n readonly Strict?: boolean;\n\n constructor(\n base: Record<PropertyKey, unknown> | EnvironmentRecord | \"unresolvable\",\n referenceName: PropertyKey,\n strict: boolean\n ) {\n this.Base = base;\n this.ReferenceName = referenceName;\n this.Strict = strict;\n }\n}\n\n// https://tc39.es/ecma262/#sec-completion-record-specification-type\nexport class CompletionRecord {\n readonly Type: CompletionRecordType;\n readonly Value: unknown;\n\n constructor(type: CompletionRecordType, value: unknown) {\n this.Type = type;\n this.Value = value;\n }\n}\n\nexport type CompletionRecordType =\n | \"normal\"\n | \"break\"\n | \"continue\"\n | \"return\"\n | \"throw\";\n\n// https://tc39.es/ecma262/#sec-normalcompletion\nexport function NormalCompletion(value: unknown): CompletionRecord {\n return new CompletionRecord(\"normal\", value);\n}\n\nexport const Empty = Symbol(\"empty completion\");\n\nexport interface OptionalChainRef {\n skipped?: boolean;\n}\n"],"mappings":"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"}