@next-core/cook 1.6.78 → 1.6.80

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
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.precook = precook;
7
-
8
7
  var _hasOwnProperty = require("./hasOwnProperty");
9
-
10
8
  var _AnalysisContext = require("./AnalysisContext");
11
-
12
9
  var _traverse = require("./traverse");
13
-
14
10
  /**
15
11
  * Analysis an AST of a storyboard function or an evaluation expression.
16
12
  *
@@ -31,17 +27,14 @@ function precook(rootAst, {
31
27
  rootContext.VariableEnvironment = rootEnv;
32
28
  rootContext.LexicalEnvironment = rootEnv;
33
29
  analysisContextStack.push(rootContext);
34
-
35
30
  function getRunningContext() {
36
31
  return analysisContextStack[analysisContextStack.length - 1];
37
32
  }
38
-
39
33
  function visit(node) {
40
34
  if ((0, _hasOwnProperty.hasOwnProperty)(visitors, node.type)) {
41
35
  visitors[node.type](node);
42
36
  }
43
37
  }
44
-
45
38
  function EvaluateChildren(node, keys, parent) {
46
39
  for (const key of keys) {
47
40
  Evaluate(node[key], parent === null || parent === void 0 ? void 0 : parent.concat({
@@ -50,37 +43,32 @@ function precook(rootAst, {
50
43
  }));
51
44
  }
52
45
  }
53
-
54
46
  function Evaluate(node, parent) {
55
47
  if (Array.isArray(node)) {
56
48
  node.forEach((n, index) => {
57
- Evaluate(n, parent ? parent.slice(0, -1).concat({ ...parent[parent.length - 1],
49
+ Evaluate(n, parent ? parent.slice(0, -1).concat({
50
+ ...parent[parent.length - 1],
58
51
  index
59
52
  }) : parent);
60
53
  });
61
54
  } else if (node) {
62
55
  var _hooks$beforeVisit, _hooks$beforeVisitUnk;
63
-
64
56
  // `node` maybe `null` in some cases.
65
57
  (_hooks$beforeVisit = hooks.beforeVisit) === null || _hooks$beforeVisit === void 0 ? void 0 : _hooks$beforeVisit.call(hooks, node, parent);
66
- visitors && visit(node); // Expressions:
67
-
58
+ visitors && visit(node);
59
+ // Expressions:
68
60
  switch (node.type) {
69
61
  case "Identifier":
70
62
  if (!ResolveBinding(node.name)) {
71
63
  var _hooks$beforeVisitGlo;
72
-
73
64
  (_hooks$beforeVisitGlo = hooks.beforeVisitGlobal) === null || _hooks$beforeVisitGlo === void 0 ? void 0 : _hooks$beforeVisitGlo.call(hooks, node, parent);
74
65
  attemptToVisitGlobals.add(node.name);
75
66
  }
76
-
77
67
  return;
78
-
79
68
  case "ArrayExpression":
80
69
  case "ArrayPattern":
81
70
  EvaluateChildren(node, ["elements"], parent);
82
71
  return;
83
-
84
72
  case "ArrowFunctionExpression":
85
73
  {
86
74
  const env = getRunningContext().LexicalEnvironment;
@@ -88,80 +76,63 @@ function precook(rootAst, {
88
76
  CallFunction(closure, parent);
89
77
  return;
90
78
  }
91
-
92
79
  case "AssignmentPattern":
93
80
  case "BinaryExpression":
94
81
  case "LogicalExpression":
95
82
  EvaluateChildren(node, ["left", "right"], parent);
96
83
  return;
97
-
98
84
  case "CallExpression":
99
85
  case "NewExpression":
100
86
  EvaluateChildren(node, ["callee", "arguments"], parent);
101
87
  return;
102
-
103
88
  case "ChainExpression":
104
89
  EvaluateChildren(node, ["expression"], parent);
105
90
  return;
106
-
107
91
  case "ConditionalExpression":
108
92
  EvaluateChildren(node, ["test", "consequent", "alternate"], parent);
109
93
  return;
110
-
111
94
  case "MemberExpression":
112
95
  EvaluateChildren(node, ["object"], parent);
113
-
114
96
  if (node.computed) {
115
97
  EvaluateChildren(node, ["property"], parent);
116
98
  }
117
-
118
99
  return;
119
-
120
100
  case "ObjectExpression":
121
101
  case "ObjectPattern":
122
102
  EvaluateChildren(node, ["properties"], parent);
123
103
  return;
124
-
125
104
  case "Property":
126
105
  if (node.computed) {
127
106
  EvaluateChildren(node, ["key"], parent);
128
107
  }
129
-
130
108
  EvaluateChildren(node, ["value"], parent);
131
109
  return;
132
-
133
110
  case "RestElement":
134
111
  case "SpreadElement":
135
112
  case "UnaryExpression":
136
113
  EvaluateChildren(node, ["argument"], parent);
137
114
  return;
138
-
139
115
  case "SequenceExpression":
140
116
  case "TemplateLiteral":
141
117
  EvaluateChildren(node, ["expressions"], parent);
142
118
  return;
143
-
144
119
  case "TaggedTemplateExpression":
145
120
  EvaluateChildren(node, ["tag", "quasi"], parent);
146
121
  return;
147
-
148
122
  case "Literal":
149
123
  return;
150
124
  }
151
-
152
125
  if (!expressionOnly) {
153
126
  // Statements and assignments:
154
127
  switch (node.type) {
155
128
  case "AssignmentExpression":
156
129
  EvaluateChildren(node, ["right", "left"], parent);
157
130
  return;
158
-
159
131
  case "BlockStatement":
160
132
  {
161
133
  if (!node.body.length) {
162
134
  return;
163
135
  }
164
-
165
136
  const runningContext = getRunningContext();
166
137
  const oldEnv = runningContext.LexicalEnvironment;
167
138
  const blockEnv = new _AnalysisContext.AnalysisEnvironment(oldEnv);
@@ -171,12 +142,10 @@ function precook(rootAst, {
171
142
  runningContext.LexicalEnvironment = oldEnv;
172
143
  return;
173
144
  }
174
-
175
145
  case "BreakStatement":
176
146
  case "ContinueStatement":
177
147
  case "EmptyStatement":
178
148
  return;
179
-
180
149
  case "CatchClause":
181
150
  {
182
151
  const runningContext = getRunningContext();
@@ -188,16 +157,13 @@ function precook(rootAst, {
188
157
  runningContext.LexicalEnvironment = oldEnv;
189
158
  return;
190
159
  }
191
-
192
160
  case "DoWhileStatement":
193
161
  EvaluateChildren(node, ["body", "test"], parent);
194
162
  return;
195
-
196
163
  case "ExpressionStatement":
197
164
  case "TSAsExpression":
198
165
  EvaluateChildren(node, ["expression"], parent);
199
166
  return;
200
-
201
167
  case "ForInStatement":
202
168
  case "ForOfStatement":
203
169
  {
@@ -205,46 +171,39 @@ function precook(rootAst, {
205
171
  const lexicalBinding = node.left.type === "VariableDeclaration" && node.left.kind !== "var";
206
172
  const runningContext = getRunningContext();
207
173
  const oldEnv = runningContext.LexicalEnvironment;
208
-
209
174
  if (lexicalBinding) {
210
175
  const newEnv = new _AnalysisContext.AnalysisEnvironment(oldEnv);
211
176
  BoundNamesInstantiation(node.left, newEnv);
212
177
  runningContext.LexicalEnvironment = newEnv;
213
178
  }
214
-
215
179
  EvaluateChildren(node, ["right"], parent);
216
- runningContext.LexicalEnvironment = oldEnv; // ForIn/OfBodyEvaluation
180
+ runningContext.LexicalEnvironment = oldEnv;
217
181
 
182
+ // ForIn/OfBodyEvaluation
218
183
  if (lexicalBinding) {
219
184
  const iterationEnv = new _AnalysisContext.AnalysisEnvironment(oldEnv);
220
185
  BoundNamesInstantiation(node.left, iterationEnv);
221
186
  runningContext.LexicalEnvironment = iterationEnv;
222
187
  }
223
-
224
188
  EvaluateChildren(node, ["left", "body"], parent);
225
189
  runningContext.LexicalEnvironment = oldEnv;
226
190
  return;
227
191
  }
228
-
229
192
  case "ForStatement":
230
193
  {
231
194
  var _node$init;
232
-
233
195
  const lexicalBinding = ((_node$init = node.init) === null || _node$init === void 0 ? void 0 : _node$init.type) === "VariableDeclaration" && node.init.kind !== "var";
234
196
  const runningContext = getRunningContext();
235
197
  const oldEnv = runningContext.LexicalEnvironment;
236
-
237
198
  if (lexicalBinding) {
238
199
  const loopEnv = new _AnalysisContext.AnalysisEnvironment(oldEnv);
239
200
  BoundNamesInstantiation(node.init, loopEnv);
240
201
  runningContext.LexicalEnvironment = loopEnv;
241
202
  }
242
-
243
203
  EvaluateChildren(node, ["init", "test", "body", "update"], parent);
244
204
  runningContext.LexicalEnvironment = oldEnv;
245
205
  return;
246
206
  }
247
-
248
207
  case "FunctionDeclaration":
249
208
  {
250
209
  const [fn] = (0, _traverse.collectBoundNames)(node);
@@ -254,28 +213,23 @@ function precook(rootAst, {
254
213
  CallFunction(fo, parent);
255
214
  return;
256
215
  }
257
-
258
216
  case "FunctionExpression":
259
217
  {
260
218
  const closure = InstantiateOrdinaryFunctionExpression(node);
261
219
  CallFunction(closure, parent);
262
220
  return;
263
221
  }
264
-
265
222
  case "IfStatement":
266
223
  EvaluateChildren(node, ["test", "consequent", "alternate"], parent);
267
224
  return;
268
-
269
225
  case "ReturnStatement":
270
226
  case "ThrowStatement":
271
227
  case "UpdateExpression":
272
228
  EvaluateChildren(node, ["argument"], parent);
273
229
  return;
274
-
275
230
  case "SwitchCase":
276
231
  EvaluateChildren(node, ["test", "consequent"], parent);
277
232
  return;
278
-
279
233
  case "SwitchStatement":
280
234
  {
281
235
  EvaluateChildren(node, ["discriminant"], parent);
@@ -288,49 +242,39 @@ function precook(rootAst, {
288
242
  runningContext.LexicalEnvironment = oldEnv;
289
243
  return;
290
244
  }
291
-
292
245
  case "TryStatement":
293
246
  EvaluateChildren(node, ["block", "handler", "finalizer"], parent);
294
247
  return;
295
-
296
248
  case "VariableDeclaration":
297
249
  EvaluateChildren(node, ["declarations"], parent);
298
250
  return;
299
-
300
251
  case "VariableDeclarator":
301
252
  EvaluateChildren(node, ["id", "init"], parent);
302
253
  return;
303
-
304
254
  case "WhileStatement":
305
255
  EvaluateChildren(node, ["test", "body"], parent);
306
256
  return;
307
257
  }
308
258
  }
309
-
310
259
  const silent = (_hooks$beforeVisitUnk = hooks.beforeVisitUnknown) === null || _hooks$beforeVisitUnk === void 0 ? void 0 : _hooks$beforeVisitUnk.call(hooks, node, parent);
311
-
312
260
  if (!silent) {
313
261
  // eslint-disable-next-line no-console
314
262
  console.warn(`Unsupported node type \`${node.type}\``);
315
263
  }
316
264
  }
317
265
  }
318
-
319
266
  function BoundNamesInstantiation(declarations, env) {
320
267
  for (const name of (0, _traverse.collectBoundNames)(declarations)) {
321
268
  env.CreateBinding(name);
322
269
  }
323
270
  }
324
-
325
271
  function ResolveBinding(name) {
326
272
  const env = getRunningContext().LexicalEnvironment;
327
273
  return GetIdentifierReference(env, name);
328
274
  }
329
-
330
275
  function GetIdentifierReference(env, name) {
331
276
  return !!env && (env.HasBinding(name) || GetIdentifierReference(env.OuterEnv, name));
332
277
  }
333
-
334
278
  function BlockDeclarationInstantiation(code, env) {
335
279
  const declarations = (0, _traverse.collectScopedDeclarations)(code, {
336
280
  var: false,
@@ -338,7 +282,6 @@ function precook(rootAst, {
338
282
  });
339
283
  BoundNamesInstantiation(declarations, env);
340
284
  }
341
-
342
285
  function CallFunction(closure, parent) {
343
286
  PrepareOrdinaryCall(closure);
344
287
  FunctionDeclarationInstantiation(closure, parent);
@@ -351,7 +294,6 @@ function precook(rootAst, {
351
294
  } : []));
352
295
  analysisContextStack.pop();
353
296
  }
354
-
355
297
  function PrepareOrdinaryCall(F) {
356
298
  const calleeContext = new _AnalysisContext.AnalysisContext();
357
299
  const localEnv = new _AnalysisContext.AnalysisEnvironment(F.Environment);
@@ -359,7 +301,6 @@ function precook(rootAst, {
359
301
  calleeContext.LexicalEnvironment = localEnv;
360
302
  analysisContextStack.push(calleeContext);
361
303
  }
362
-
363
304
  function FunctionDeclarationInstantiation(func, parent) {
364
305
  const calleeContext = getRunningContext();
365
306
  const code = func.ECMAScriptCode;
@@ -377,14 +318,12 @@ function precook(rootAst, {
377
318
  key: "params"
378
319
  }));
379
320
  let varEnv;
380
-
381
321
  if (!hasParameterExpressions) {
382
322
  // NOTE: Only a single Environment Record is needed for the parameters
383
323
  // and top-level vars.
384
324
  for (const n of varNames) {
385
325
  env.CreateBinding(n);
386
326
  }
387
-
388
327
  varEnv = env;
389
328
  } else {
390
329
  // NOTE: A separate Environment Record is needed to ensure that closures
@@ -392,12 +331,10 @@ function precook(rootAst, {
392
331
  // visibility of declarations in the function body.
393
332
  varEnv = new _AnalysisContext.AnalysisEnvironment(env);
394
333
  calleeContext.VariableEnvironment = varEnv;
395
-
396
334
  for (const n of varNames) {
397
335
  varEnv.CreateBinding(n);
398
336
  }
399
337
  }
400
-
401
338
  const lexEnv = varEnv;
402
339
  calleeContext.LexicalEnvironment = lexEnv;
403
340
  const lexDeclarations = (0, _traverse.collectScopedDeclarations)(code, {
@@ -406,20 +343,16 @@ function precook(rootAst, {
406
343
  });
407
344
  BoundNamesInstantiation(lexDeclarations, lexEnv);
408
345
  }
409
-
410
346
  function InstantiateOrdinaryFunctionExpression(functionExpression) {
411
347
  const scope = getRunningContext().LexicalEnvironment;
412
-
413
348
  if (!functionExpression.id) {
414
349
  return OrdinaryFunctionCreate(functionExpression, scope);
415
350
  }
416
-
417
351
  const name = functionExpression.id.name;
418
352
  const funcEnv = new _AnalysisContext.AnalysisEnvironment(scope);
419
353
  funcEnv.CreateBinding(name);
420
354
  return OrdinaryFunctionCreate(functionExpression, funcEnv);
421
355
  }
422
-
423
356
  function OrdinaryFunctionCreate(func, scope) {
424
357
  return {
425
358
  Function: func,
@@ -428,7 +361,6 @@ function precook(rootAst, {
428
361
  Environment: scope
429
362
  };
430
363
  }
431
-
432
364
  Evaluate(rootAst, withParent ? [] : undefined);
433
365
  return attemptToVisitGlobals;
434
366
  }
@@ -1 +1 @@
1
- {"version":3,"file":"precook.js","names":["precook","rootAst","expressionOnly","visitors","withParent","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","AnalysisEnvironment","rootContext","AnalysisContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","hasOwnProperty","type","EvaluateChildren","keys","parent","key","Evaluate","concat","Array","isArray","forEach","n","index","slice","beforeVisit","ResolveBinding","name","beforeVisitGlobal","add","env","closure","OrdinaryFunctionCreate","CallFunction","computed","body","runningContext","oldEnv","blockEnv","BlockDeclarationInstantiation","catchEnv","BoundNamesInstantiation","param","lexicalBinding","left","kind","newEnv","iterationEnv","init","loopEnv","fn","collectBoundNames","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","cases","silent","beforeVisitUnknown","console","warn","declarations","GetIdentifierReference","HasBinding","OuterEnv","code","collectScopedDeclarations","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","Function","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","containsExpression","varDeclarations","varNames","varEnv","lexEnv","lexDeclarations","functionExpression","scope","id","funcEnv","params","undefined"],"sources":["../../src/precook.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext\";\nimport { EstreeNode, EstreeVisitors, NodeWithBoundNames } from \"./interfaces\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse\";\n\nexport interface PrecookOptions {\n expressionOnly?: boolean;\n /** @deprecated Use hooks instead. */\n visitors?: EstreeVisitors;\n hooks?: PrecookHooks;\n withParent?: boolean;\n}\n\nexport type EstreeParent = EstreeParentItem[];\n\nexport interface EstreeParentItem {\n node: EstreeNode;\n key: string;\n index?: number;\n}\n\nexport interface PrecookHooks {\n beforeVisit?(node: EstreeNode, parent?: EstreeParent): void;\n beforeVisitGlobal?(node: Identifier, parent?: EstreeParent): void;\n /** Return true if want to silent warnings for unknown nodes. */\n beforeVisitUnknown?(node: EstreeNode, parent?: EstreeParent): boolean | void;\n}\n\n/**\n * Analysis an AST of a storyboard function or an evaluation expression.\n *\n * @param rootAst - The root AST.\n * @param options - Analysis options.\n * @returns A set of global variables the root AST attempts to access.\n */\nexport function precook(\n rootAst: Expression | FunctionDeclaration,\n { expressionOnly, visitors, withParent, hooks = {} }: PrecookOptions = {}\n): Set<string> {\n const attemptToVisitGlobals = new Set<string>();\n const analysisContextStack: AnalysisContext[] = [];\n const rootEnv = new AnalysisEnvironment(null);\n const rootContext = new AnalysisContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n analysisContextStack.push(rootContext);\n\n function getRunningContext(): AnalysisContext {\n return analysisContextStack[analysisContextStack.length - 1];\n }\n\n function visit(node: EstreeNode): void {\n if (hasOwnProperty(visitors, node.type)) {\n visitors[node.type](node);\n }\n }\n\n function EvaluateChildren<T extends EstreeNode>(\n node: T,\n keys: (keyof T)[],\n parent?: EstreeParent\n ): void {\n for (const key of keys) {\n Evaluate(\n node[key] as unknown as EstreeNode | EstreeNode[],\n parent?.concat({ node, key } as EstreeParentItem)\n );\n }\n }\n\n function Evaluate(\n node: EstreeNode | EstreeNode[],\n parent?: EstreeParent\n ): void {\n if (Array.isArray(node)) {\n node.forEach((n, index) => {\n Evaluate(\n n,\n parent\n ? parent.slice(0, -1).concat({\n ...parent[parent.length - 1],\n index,\n })\n : parent\n );\n });\n } else if (node) {\n // `node` maybe `null` in some cases.\n hooks.beforeVisit?.(node, parent);\n visitors && visit(node);\n // Expressions:\n switch (node.type) {\n case \"Identifier\":\n if (!ResolveBinding(node.name)) {\n hooks.beforeVisitGlobal?.(node, parent);\n attemptToVisitGlobals.add(node.name);\n }\n return;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n EvaluateChildren(node, [\"elements\"], parent);\n return;\n case \"ArrowFunctionExpression\": {\n const env = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(node, env);\n CallFunction(closure, parent);\n return;\n }\n case \"AssignmentPattern\":\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n EvaluateChildren(node, [\"left\", \"right\"], parent);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n EvaluateChildren(node, [\"callee\", \"arguments\"], parent);\n return;\n case \"ChainExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ConditionalExpression\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"MemberExpression\":\n EvaluateChildren(node, [\"object\"], parent);\n if (node.computed) {\n EvaluateChildren(node, [\"property\"], parent);\n }\n return;\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n EvaluateChildren(node, [\"properties\"], parent);\n return;\n case \"Property\":\n if (node.computed) {\n EvaluateChildren(node, [\"key\"], parent);\n }\n EvaluateChildren(node, [\"value\"], parent);\n return;\n case \"RestElement\":\n case \"SpreadElement\":\n case \"UnaryExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SequenceExpression\":\n case \"TemplateLiteral\":\n EvaluateChildren(node, [\"expressions\"], parent);\n return;\n case \"TaggedTemplateExpression\":\n EvaluateChildren(node, [\"tag\", \"quasi\"], parent);\n return;\n case \"Literal\":\n return;\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\":\n EvaluateChildren(node, [\"right\", \"left\"], parent);\n return;\n case \"BlockStatement\": {\n if (!node.body.length) {\n return;\n }\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return;\n case \"CatchClause\": {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const catchEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.param, catchEnv);\n runningContext.LexicalEnvironment = catchEnv;\n EvaluateChildren(node, [\"param\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"DoWhileStatement\":\n EvaluateChildren(node, [\"body\", \"test\"], parent);\n return;\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\": {\n // ForIn/OfHeadEvaluation\n const lexicalBinding =\n node.left.type === \"VariableDeclaration\" &&\n node.left.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const newEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, newEnv);\n runningContext.LexicalEnvironment = newEnv;\n }\n EvaluateChildren(node, [\"right\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n\n // ForIn/OfBodyEvaluation\n if (lexicalBinding) {\n const iterationEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, iterationEnv);\n runningContext.LexicalEnvironment = iterationEnv;\n }\n EvaluateChildren(node, [\"left\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"ForStatement\": {\n const lexicalBinding =\n node.init?.type === \"VariableDeclaration\" &&\n node.init.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const loopEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(\n node.init as VariableDeclaration,\n loopEnv\n );\n runningContext.LexicalEnvironment = loopEnv;\n }\n EvaluateChildren(node, [\"init\", \"test\", \"body\", \"update\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"FunctionDeclaration\": {\n const [fn] = collectBoundNames(node);\n const env = getRunningContext().LexicalEnvironment;\n const fo = OrdinaryFunctionCreate(node, env);\n env.CreateBinding(fn);\n CallFunction(fo, parent);\n return;\n }\n case \"FunctionExpression\": {\n const closure = InstantiateOrdinaryFunctionExpression(node);\n CallFunction(closure, parent);\n return;\n }\n case \"IfStatement\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n case \"UpdateExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SwitchCase\":\n EvaluateChildren(node, [\"test\", \"consequent\"], parent);\n return;\n case \"SwitchStatement\": {\n EvaluateChildren(node, [\"discriminant\"], parent);\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"cases\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"TryStatement\":\n EvaluateChildren(node, [\"block\", \"handler\", \"finalizer\"], parent);\n return;\n case \"VariableDeclaration\":\n EvaluateChildren(node, [\"declarations\"], parent);\n return;\n case \"VariableDeclarator\":\n EvaluateChildren(node, [\"id\", \"init\"], parent);\n return;\n case \"WhileStatement\":\n EvaluateChildren(node, [\"test\", \"body\"], parent);\n return;\n }\n }\n const silent = hooks.beforeVisitUnknown?.(node, parent);\n if (!silent) {\n // eslint-disable-next-line no-console\n console.warn(`Unsupported node type \\`${node.type}\\``);\n }\n }\n }\n\n function BoundNamesInstantiation(\n declarations: NodeWithBoundNames | NodeWithBoundNames[],\n env: AnalysisEnvironment\n ): void {\n for (const name of collectBoundNames(declarations)) {\n env.CreateBinding(name);\n }\n }\n\n function ResolveBinding(name: string): boolean {\n const env = getRunningContext().LexicalEnvironment;\n return GetIdentifierReference(env, name);\n }\n\n function GetIdentifierReference(\n env: AnalysisEnvironment,\n name: string\n ): boolean {\n return (\n !!env &&\n (env.HasBinding(name) || GetIdentifierReference(env.OuterEnv, name))\n );\n }\n\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: AnalysisEnvironment\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n BoundNamesInstantiation(declarations, env);\n }\n\n function CallFunction(\n closure: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n PrepareOrdinaryCall(closure);\n FunctionDeclarationInstantiation(closure, parent);\n Evaluate(\n closure.ECMAScriptCode,\n parent\n ?.concat({\n node: closure.Function,\n key: \"body\",\n })\n .concat(\n closure.Function.body.type === \"BlockStatement\"\n ? {\n node: closure.Function.body,\n key: \"body\",\n }\n : []\n )\n );\n analysisContextStack.pop();\n }\n\n function PrepareOrdinaryCall(F: AnalysisFunctionObject): void {\n const calleeContext = new AnalysisContext();\n const localEnv = new AnalysisEnvironment(F.Environment);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n analysisContextStack.push(calleeContext);\n }\n\n function FunctionDeclarationInstantiation(\n func: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n const calleeContext = getRunningContext();\n const code = func.ECMAScriptCode;\n const formals = func.FormalParameters;\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n const env = calleeContext.LexicalEnvironment;\n BoundNamesInstantiation(formals, env);\n\n Evaluate(formals, parent?.concat({ node: func.Function, key: \"params\" }));\n\n let varEnv: AnalysisEnvironment;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n for (const n of varNames) {\n env.CreateBinding(n);\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new AnalysisEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n for (const n of varNames) {\n varEnv.CreateBinding(n);\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n BoundNamesInstantiation(lexDeclarations, lexEnv);\n }\n\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): AnalysisFunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (!functionExpression.id) {\n return OrdinaryFunctionCreate(functionExpression, scope);\n }\n const name = functionExpression.id.name;\n const funcEnv = new AnalysisEnvironment(scope);\n funcEnv.CreateBinding(name);\n return OrdinaryFunctionCreate(functionExpression, funcEnv);\n }\n\n function OrdinaryFunctionCreate(\n func: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression,\n scope: AnalysisEnvironment\n ): AnalysisFunctionObject {\n return {\n Function: func,\n FormalParameters: func.params,\n ECMAScriptCode:\n func.body.type === \"BlockStatement\" ? func.body.body : func.body,\n Environment: scope,\n };\n }\n\n Evaluate(rootAst, withParent ? [] : undefined);\n\n return attemptToVisitGlobals;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"precook.js","names":["precook","rootAst","expressionOnly","visitors","withParent","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","AnalysisEnvironment","rootContext","AnalysisContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","hasOwnProperty","type","EvaluateChildren","keys","parent","key","Evaluate","concat","Array","isArray","forEach","n","index","slice","beforeVisit","ResolveBinding","name","beforeVisitGlobal","add","env","closure","OrdinaryFunctionCreate","CallFunction","computed","body","runningContext","oldEnv","blockEnv","BlockDeclarationInstantiation","catchEnv","BoundNamesInstantiation","param","lexicalBinding","left","kind","newEnv","iterationEnv","init","loopEnv","fn","collectBoundNames","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","cases","silent","beforeVisitUnknown","console","warn","declarations","GetIdentifierReference","HasBinding","OuterEnv","code","collectScopedDeclarations","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","Function","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","containsExpression","varDeclarations","varNames","varEnv","lexEnv","lexDeclarations","functionExpression","scope","id","funcEnv","params","undefined"],"sources":["../../src/precook.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext\";\nimport { EstreeNode, EstreeVisitors, NodeWithBoundNames } from \"./interfaces\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse\";\n\nexport interface PrecookOptions {\n expressionOnly?: boolean;\n /** @deprecated Use hooks instead. */\n visitors?: EstreeVisitors;\n hooks?: PrecookHooks;\n withParent?: boolean;\n}\n\nexport type EstreeParent = EstreeParentItem[];\n\nexport interface EstreeParentItem {\n node: EstreeNode;\n key: string;\n index?: number;\n}\n\nexport interface PrecookHooks {\n beforeVisit?(node: EstreeNode, parent?: EstreeParent): void;\n beforeVisitGlobal?(node: Identifier, parent?: EstreeParent): void;\n /** Return true if want to silent warnings for unknown nodes. */\n beforeVisitUnknown?(node: EstreeNode, parent?: EstreeParent): boolean | void;\n}\n\n/**\n * Analysis an AST of a storyboard function or an evaluation expression.\n *\n * @param rootAst - The root AST.\n * @param options - Analysis options.\n * @returns A set of global variables the root AST attempts to access.\n */\nexport function precook(\n rootAst: Expression | FunctionDeclaration,\n { expressionOnly, visitors, withParent, hooks = {} }: PrecookOptions = {}\n): Set<string> {\n const attemptToVisitGlobals = new Set<string>();\n const analysisContextStack: AnalysisContext[] = [];\n const rootEnv = new AnalysisEnvironment(null);\n const rootContext = new AnalysisContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n analysisContextStack.push(rootContext);\n\n function getRunningContext(): AnalysisContext {\n return analysisContextStack[analysisContextStack.length - 1];\n }\n\n function visit(node: EstreeNode): void {\n if (hasOwnProperty(visitors, node.type)) {\n visitors[node.type](node);\n }\n }\n\n function EvaluateChildren<T extends EstreeNode>(\n node: T,\n keys: (keyof T)[],\n parent?: EstreeParent\n ): void {\n for (const key of keys) {\n Evaluate(\n node[key] as unknown as EstreeNode | EstreeNode[],\n parent?.concat({ node, key } as EstreeParentItem)\n );\n }\n }\n\n function Evaluate(\n node: EstreeNode | EstreeNode[],\n parent?: EstreeParent\n ): void {\n if (Array.isArray(node)) {\n node.forEach((n, index) => {\n Evaluate(\n n,\n parent\n ? parent.slice(0, -1).concat({\n ...parent[parent.length - 1],\n index,\n })\n : parent\n );\n });\n } else if (node) {\n // `node` maybe `null` in some cases.\n hooks.beforeVisit?.(node, parent);\n visitors && visit(node);\n // Expressions:\n switch (node.type) {\n case \"Identifier\":\n if (!ResolveBinding(node.name)) {\n hooks.beforeVisitGlobal?.(node, parent);\n attemptToVisitGlobals.add(node.name);\n }\n return;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n EvaluateChildren(node, [\"elements\"], parent);\n return;\n case \"ArrowFunctionExpression\": {\n const env = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(node, env);\n CallFunction(closure, parent);\n return;\n }\n case \"AssignmentPattern\":\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n EvaluateChildren(node, [\"left\", \"right\"], parent);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n EvaluateChildren(node, [\"callee\", \"arguments\"], parent);\n return;\n case \"ChainExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ConditionalExpression\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"MemberExpression\":\n EvaluateChildren(node, [\"object\"], parent);\n if (node.computed) {\n EvaluateChildren(node, [\"property\"], parent);\n }\n return;\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n EvaluateChildren(node, [\"properties\"], parent);\n return;\n case \"Property\":\n if (node.computed) {\n EvaluateChildren(node, [\"key\"], parent);\n }\n EvaluateChildren(node, [\"value\"], parent);\n return;\n case \"RestElement\":\n case \"SpreadElement\":\n case \"UnaryExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SequenceExpression\":\n case \"TemplateLiteral\":\n EvaluateChildren(node, [\"expressions\"], parent);\n return;\n case \"TaggedTemplateExpression\":\n EvaluateChildren(node, [\"tag\", \"quasi\"], parent);\n return;\n case \"Literal\":\n return;\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\":\n EvaluateChildren(node, [\"right\", \"left\"], parent);\n return;\n case \"BlockStatement\": {\n if (!node.body.length) {\n return;\n }\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return;\n case \"CatchClause\": {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const catchEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.param, catchEnv);\n runningContext.LexicalEnvironment = catchEnv;\n EvaluateChildren(node, [\"param\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"DoWhileStatement\":\n EvaluateChildren(node, [\"body\", \"test\"], parent);\n return;\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\": {\n // ForIn/OfHeadEvaluation\n const lexicalBinding =\n node.left.type === \"VariableDeclaration\" &&\n node.left.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const newEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, newEnv);\n runningContext.LexicalEnvironment = newEnv;\n }\n EvaluateChildren(node, [\"right\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n\n // ForIn/OfBodyEvaluation\n if (lexicalBinding) {\n const iterationEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, iterationEnv);\n runningContext.LexicalEnvironment = iterationEnv;\n }\n EvaluateChildren(node, [\"left\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"ForStatement\": {\n const lexicalBinding =\n node.init?.type === \"VariableDeclaration\" &&\n node.init.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const loopEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(\n node.init as VariableDeclaration,\n loopEnv\n );\n runningContext.LexicalEnvironment = loopEnv;\n }\n EvaluateChildren(node, [\"init\", \"test\", \"body\", \"update\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"FunctionDeclaration\": {\n const [fn] = collectBoundNames(node);\n const env = getRunningContext().LexicalEnvironment;\n const fo = OrdinaryFunctionCreate(node, env);\n env.CreateBinding(fn);\n CallFunction(fo, parent);\n return;\n }\n case \"FunctionExpression\": {\n const closure = InstantiateOrdinaryFunctionExpression(node);\n CallFunction(closure, parent);\n return;\n }\n case \"IfStatement\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n case \"UpdateExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SwitchCase\":\n EvaluateChildren(node, [\"test\", \"consequent\"], parent);\n return;\n case \"SwitchStatement\": {\n EvaluateChildren(node, [\"discriminant\"], parent);\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"cases\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"TryStatement\":\n EvaluateChildren(node, [\"block\", \"handler\", \"finalizer\"], parent);\n return;\n case \"VariableDeclaration\":\n EvaluateChildren(node, [\"declarations\"], parent);\n return;\n case \"VariableDeclarator\":\n EvaluateChildren(node, [\"id\", \"init\"], parent);\n return;\n case \"WhileStatement\":\n EvaluateChildren(node, [\"test\", \"body\"], parent);\n return;\n }\n }\n const silent = hooks.beforeVisitUnknown?.(node, parent);\n if (!silent) {\n // eslint-disable-next-line no-console\n console.warn(`Unsupported node type \\`${node.type}\\``);\n }\n }\n }\n\n function BoundNamesInstantiation(\n declarations: NodeWithBoundNames | NodeWithBoundNames[],\n env: AnalysisEnvironment\n ): void {\n for (const name of collectBoundNames(declarations)) {\n env.CreateBinding(name);\n }\n }\n\n function ResolveBinding(name: string): boolean {\n const env = getRunningContext().LexicalEnvironment;\n return GetIdentifierReference(env, name);\n }\n\n function GetIdentifierReference(\n env: AnalysisEnvironment,\n name: string\n ): boolean {\n return (\n !!env &&\n (env.HasBinding(name) || GetIdentifierReference(env.OuterEnv, name))\n );\n }\n\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: AnalysisEnvironment\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n BoundNamesInstantiation(declarations, env);\n }\n\n function CallFunction(\n closure: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n PrepareOrdinaryCall(closure);\n FunctionDeclarationInstantiation(closure, parent);\n Evaluate(\n closure.ECMAScriptCode,\n parent\n ?.concat({\n node: closure.Function,\n key: \"body\",\n })\n .concat(\n closure.Function.body.type === \"BlockStatement\"\n ? {\n node: closure.Function.body,\n key: \"body\",\n }\n : []\n )\n );\n analysisContextStack.pop();\n }\n\n function PrepareOrdinaryCall(F: AnalysisFunctionObject): void {\n const calleeContext = new AnalysisContext();\n const localEnv = new AnalysisEnvironment(F.Environment);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n analysisContextStack.push(calleeContext);\n }\n\n function FunctionDeclarationInstantiation(\n func: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n const calleeContext = getRunningContext();\n const code = func.ECMAScriptCode;\n const formals = func.FormalParameters;\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n const env = calleeContext.LexicalEnvironment;\n BoundNamesInstantiation(formals, env);\n\n Evaluate(formals, parent?.concat({ node: func.Function, key: \"params\" }));\n\n let varEnv: AnalysisEnvironment;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n for (const n of varNames) {\n env.CreateBinding(n);\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new AnalysisEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n for (const n of varNames) {\n varEnv.CreateBinding(n);\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n BoundNamesInstantiation(lexDeclarations, lexEnv);\n }\n\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): AnalysisFunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (!functionExpression.id) {\n return OrdinaryFunctionCreate(functionExpression, scope);\n }\n const name = functionExpression.id.name;\n const funcEnv = new AnalysisEnvironment(scope);\n funcEnv.CreateBinding(name);\n return OrdinaryFunctionCreate(functionExpression, funcEnv);\n }\n\n function OrdinaryFunctionCreate(\n func: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression,\n scope: AnalysisEnvironment\n ): AnalysisFunctionObject {\n return {\n Function: func,\n FormalParameters: func.params,\n ECMAScriptCode:\n func.body.type === \"BlockStatement\" ? func.body.body : func.body,\n Environment: scope,\n };\n }\n\n Evaluate(rootAst, withParent ? [] : undefined);\n\n return attemptToVisitGlobals;\n}\n"],"mappings":"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"}
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.precookFunction = precookFunction;
7
-
8
7
  var _parse = require("./parse");
9
-
10
8
  var _precook = require("./precook");
11
-
12
9
  function precookFunction(source, {
13
10
  typescript,
14
11
  ...restOptions
@@ -1 +1 @@
1
- {"version":3,"file":"precookFunction.js","names":["precookFunction","source","typescript","restOptions","func","parseAsEstree","attemptToVisitGlobals","precook","function"],"sources":["../../src/precookFunction.ts"],"sourcesContent":["import { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse\";\nimport { precook, PrecookOptions } from \"./precook\";\n\nexport interface PrecookFunctionOptions extends PrecookOptions {\n typescript?: boolean;\n}\n\nexport interface PrecookFunctionResult {\n function: FunctionDeclaration;\n attemptToVisitGlobals: Set<string>;\n}\n\nexport function precookFunction(\n source: string,\n { typescript, ...restOptions }: PrecookFunctionOptions = {}\n): PrecookFunctionResult {\n const func = parseAsEstree(source, { typescript });\n const attemptToVisitGlobals = precook(func, restOptions);\n return {\n function: func,\n attemptToVisitGlobals,\n };\n}\n"],"mappings":";;;;;;;AACA;;AACA;;AAWO,SAASA,eAAT,CACLC,MADK,EAEL;EAAEC,UAAF;EAAc,GAAGC;AAAjB,IAAyD,EAFpD,EAGkB;EACvB,MAAMC,IAAI,GAAG,IAAAC,oBAAA,EAAcJ,MAAd,EAAsB;IAAEC;EAAF,CAAtB,CAAb;EACA,MAAMI,qBAAqB,GAAG,IAAAC,gBAAA,EAAQH,IAAR,EAAcD,WAAd,CAA9B;EACA,OAAO;IACLK,QAAQ,EAAEJ,IADL;IAELE;EAFK,CAAP;AAID"}
1
+ {"version":3,"file":"precookFunction.js","names":["precookFunction","source","typescript","restOptions","func","parseAsEstree","attemptToVisitGlobals","precook","function"],"sources":["../../src/precookFunction.ts"],"sourcesContent":["import { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse\";\nimport { precook, PrecookOptions } from \"./precook\";\n\nexport interface PrecookFunctionOptions extends PrecookOptions {\n typescript?: boolean;\n}\n\nexport interface PrecookFunctionResult {\n function: FunctionDeclaration;\n attemptToVisitGlobals: Set<string>;\n}\n\nexport function precookFunction(\n source: string,\n { typescript, ...restOptions }: PrecookFunctionOptions = {}\n): PrecookFunctionResult {\n const func = parseAsEstree(source, { typescript });\n const attemptToVisitGlobals = precook(func, restOptions);\n return {\n function: func,\n attemptToVisitGlobals,\n };\n}\n"],"mappings":";;;;;;AACA;AACA;AAWO,SAASA,eAAe,CAC7BC,MAAc,EACd;EAAEC,UAAU;EAAE,GAAGC;AAAoC,CAAC,GAAG,CAAC,CAAC,EACpC;EACvB,MAAMC,IAAI,GAAG,IAAAC,oBAAa,EAACJ,MAAM,EAAE;IAAEC;EAAW,CAAC,CAAC;EAClD,MAAMI,qBAAqB,GAAG,IAAAC,gBAAO,EAACH,IAAI,EAAED,WAAW,CAAC;EACxD,OAAO;IACLK,QAAQ,EAAEJ,IAAI;IACdE;EACF,CAAC;AACH"}
@@ -6,11 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isEvaluable = isEvaluable;
7
7
  exports.preevaluate = preevaluate;
8
8
  exports.shouldAllowRecursiveEvaluations = shouldAllowRecursiveEvaluations;
9
-
10
9
  var _parse = require("./parse");
11
-
12
10
  var _precook = require("./precook");
13
-
14
11
  // `raw` should always be asserted by `isEvaluable`.
15
12
  function preevaluate(raw, options) {
16
13
  const fixes = [];
@@ -19,7 +16,8 @@ function preevaluate(raw, options) {
19
16
  return "";
20
17
  });
21
18
  const expression = (0, _parse.parseAsEstreeExpression)(source);
22
- const attemptToVisitGlobals = (0, _precook.precook)(expression, { ...options,
19
+ const attemptToVisitGlobals = (0, _precook.precook)(expression, {
20
+ ...options,
23
21
  expressionOnly: true
24
22
  });
25
23
  return {
@@ -30,11 +28,9 @@ function preevaluate(raw, options) {
30
28
  suffix: fixes[1]
31
29
  };
32
30
  }
33
-
34
31
  function isEvaluable(raw) {
35
32
  return /^\s*<%~?\s/.test(raw) && /\s%>\s*$/.test(raw);
36
33
  }
37
-
38
34
  function shouldAllowRecursiveEvaluations(raw) {
39
35
  return /^\s*<%~\s/.test(raw);
40
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"preevaluate.js","names":["preevaluate","raw","options","fixes","source","replace","m","push","expression","parseAsEstreeExpression","attemptToVisitGlobals","precook","expressionOnly","prefix","suffix","isEvaluable","test","shouldAllowRecursiveEvaluations"],"sources":["../../src/preevaluate.ts"],"sourcesContent":["import { Expression } from \"@babel/types\";\nimport { parseAsEstreeExpression } from \"./parse\";\nimport { precook, PrecookOptions } from \"./precook\";\n\nexport type PreevaluateOptions = Omit<PrecookOptions, \"expressionOnly\">;\n\nexport interface PreevaluateResult {\n expression: Expression;\n attemptToVisitGlobals: Set<string>;\n source: string;\n prefix: string;\n suffix: string;\n}\n\n// `raw` should always be asserted by `isEvaluable`.\nexport function preevaluate(\n raw: string,\n options?: PreevaluateOptions\n): PreevaluateResult {\n const fixes: string[] = [];\n const source = raw.replace(/^\\s*<%~?\\s|\\s%>\\s*$/g, (m) => {\n fixes.push(m);\n return \"\";\n });\n const expression = parseAsEstreeExpression(source);\n const attemptToVisitGlobals = precook(expression, {\n ...options,\n expressionOnly: true,\n });\n return {\n expression,\n attemptToVisitGlobals,\n source,\n prefix: fixes[0],\n suffix: fixes[1],\n };\n}\n\nexport function isEvaluable(raw: string): boolean {\n return /^\\s*<%~?\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n\nexport function shouldAllowRecursiveEvaluations(raw: string): boolean {\n return /^\\s*<%~\\s/.test(raw);\n}\n"],"mappings":";;;;;;;;;AACA;;AACA;;AAYA;AACO,SAASA,WAAT,CACLC,GADK,EAELC,OAFK,EAGc;EACnB,MAAMC,KAAe,GAAG,EAAxB;EACA,MAAMC,MAAM,GAAGH,GAAG,CAACI,OAAJ,CAAY,sBAAZ,EAAqCC,CAAD,IAAO;IACxDH,KAAK,CAACI,IAAN,CAAWD,CAAX;IACA,OAAO,EAAP;EACD,CAHc,CAAf;EAIA,MAAME,UAAU,GAAG,IAAAC,8BAAA,EAAwBL,MAAxB,CAAnB;EACA,MAAMM,qBAAqB,GAAG,IAAAC,gBAAA,EAAQH,UAAR,EAAoB,EAChD,GAAGN,OAD6C;IAEhDU,cAAc,EAAE;EAFgC,CAApB,CAA9B;EAIA,OAAO;IACLJ,UADK;IAELE,qBAFK;IAGLN,MAHK;IAILS,MAAM,EAAEV,KAAK,CAAC,CAAD,CAJR;IAKLW,MAAM,EAAEX,KAAK,CAAC,CAAD;EALR,CAAP;AAOD;;AAEM,SAASY,WAAT,CAAqBd,GAArB,EAA2C;EAChD,OAAO,aAAae,IAAb,CAAkBf,GAAlB,KAA0B,WAAWe,IAAX,CAAgBf,GAAhB,CAAjC;AACD;;AAEM,SAASgB,+BAAT,CAAyChB,GAAzC,EAA+D;EACpE,OAAO,YAAYe,IAAZ,CAAiBf,GAAjB,CAAP;AACD"}
1
+ {"version":3,"file":"preevaluate.js","names":["preevaluate","raw","options","fixes","source","replace","m","push","expression","parseAsEstreeExpression","attemptToVisitGlobals","precook","expressionOnly","prefix","suffix","isEvaluable","test","shouldAllowRecursiveEvaluations"],"sources":["../../src/preevaluate.ts"],"sourcesContent":["import { Expression } from \"@babel/types\";\nimport { parseAsEstreeExpression } from \"./parse\";\nimport { precook, PrecookOptions } from \"./precook\";\n\nexport type PreevaluateOptions = Omit<PrecookOptions, \"expressionOnly\">;\n\nexport interface PreevaluateResult {\n expression: Expression;\n attemptToVisitGlobals: Set<string>;\n source: string;\n prefix: string;\n suffix: string;\n}\n\n// `raw` should always be asserted by `isEvaluable`.\nexport function preevaluate(\n raw: string,\n options?: PreevaluateOptions\n): PreevaluateResult {\n const fixes: string[] = [];\n const source = raw.replace(/^\\s*<%~?\\s|\\s%>\\s*$/g, (m) => {\n fixes.push(m);\n return \"\";\n });\n const expression = parseAsEstreeExpression(source);\n const attemptToVisitGlobals = precook(expression, {\n ...options,\n expressionOnly: true,\n });\n return {\n expression,\n attemptToVisitGlobals,\n source,\n prefix: fixes[0],\n suffix: fixes[1],\n };\n}\n\nexport function isEvaluable(raw: string): boolean {\n return /^\\s*<%~?\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n\nexport function shouldAllowRecursiveEvaluations(raw: string): boolean {\n return /^\\s*<%~\\s/.test(raw);\n}\n"],"mappings":";;;;;;;;AACA;AACA;AAYA;AACO,SAASA,WAAW,CACzBC,GAAW,EACXC,OAA4B,EACT;EACnB,MAAMC,KAAe,GAAG,EAAE;EAC1B,MAAMC,MAAM,GAAGH,GAAG,CAACI,OAAO,CAAC,sBAAsB,EAAGC,CAAC,IAAK;IACxDH,KAAK,CAACI,IAAI,CAACD,CAAC,CAAC;IACb,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAME,UAAU,GAAG,IAAAC,8BAAuB,EAACL,MAAM,CAAC;EAClD,MAAMM,qBAAqB,GAAG,IAAAC,gBAAO,EAACH,UAAU,EAAE;IAChD,GAAGN,OAAO;IACVU,cAAc,EAAE;EAClB,CAAC,CAAC;EACF,OAAO;IACLJ,UAAU;IACVE,qBAAqB;IACrBN,MAAM;IACNS,MAAM,EAAEV,KAAK,CAAC,CAAC,CAAC;IAChBW,MAAM,EAAEX,KAAK,CAAC,CAAC;EACjB,CAAC;AACH;AAEO,SAASY,WAAW,CAACd,GAAW,EAAW;EAChD,OAAO,YAAY,CAACe,IAAI,CAACf,GAAG,CAAC,IAAI,UAAU,CAACe,IAAI,CAACf,GAAG,CAAC;AACvD;AAEO,SAASgB,+BAA+B,CAAChB,GAAW,EAAW;EACpE,OAAO,WAAW,CAACe,IAAI,CAACf,GAAG,CAAC;AAC9B"}