@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.
- package/dist/cjs/AnalysisContext.js +2 -11
- package/dist/cjs/AnalysisContext.js.map +1 -1
- package/dist/cjs/ExecutionContext.js +11 -37
- package/dist/cjs/ExecutionContext.js.map +1 -1
- package/dist/cjs/context-free.js +30 -71
- package/dist/cjs/context-free.js.map +1 -1
- package/dist/cjs/cook.js +147 -386
- package/dist/cjs/cook.js.map +1 -1
- package/dist/cjs/hasOwnProperty.js +0 -1
- package/dist/cjs/hasOwnProperty.js.map +1 -1
- package/dist/cjs/index.js +0 -14
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces.js.map +1 -1
- package/dist/cjs/lint.js +0 -21
- package/dist/cjs/lint.js.map +1 -1
- package/dist/cjs/parse.js +0 -8
- package/dist/cjs/parse.js.map +1 -1
- package/dist/cjs/precook.js +6 -74
- package/dist/cjs/precook.js.map +1 -1
- package/dist/cjs/precookFunction.js +0 -3
- package/dist/cjs/precookFunction.js.map +1 -1
- package/dist/cjs/preevaluate.js +2 -6
- package/dist/cjs/preevaluate.js.map +1 -1
- package/dist/cjs/sanitize.js +9 -13
- package/dist/cjs/sanitize.js.map +1 -1
- package/dist/cjs/traverse.js +0 -32
- package/dist/cjs/traverse.js.map +1 -1
- package/dist/esm/AnalysisContext.js +2 -8
- package/dist/esm/AnalysisContext.js.map +1 -1
- package/dist/esm/ExecutionContext.js +11 -30
- package/dist/esm/ExecutionContext.js.map +1 -1
- package/dist/esm/context-free.js +32 -53
- package/dist/esm/context-free.js.map +1 -1
- package/dist/esm/cook.js +145 -411
- package/dist/esm/cook.js.map +1 -1
- package/dist/esm/hasOwnProperty.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces.js.map +1 -1
- package/dist/esm/lint.js +0 -19
- package/dist/esm/lint.js.map +1 -1
- package/dist/esm/parse.js +0 -6
- package/dist/esm/parse.js.map +1 -1
- package/dist/esm/precook.js +4 -82
- package/dist/esm/precook.js.map +1 -1
- package/dist/esm/precookFunction.js +4 -5
- package/dist/esm/precookFunction.js.map +1 -1
- package/dist/esm/preevaluate.js.map +1 -1
- package/dist/esm/sanitize.js +9 -9
- package/dist/esm/sanitize.js.map +1 -1
- package/dist/esm/traverse.js +0 -29
- package/dist/esm/traverse.js.map +1 -1
- package/dist/types/interfaces.d.ts +2 -0
- package/dist/types/lint.d.ts +3 -4
- package/dist/types/parse.d.ts +3 -3
- package/package.json +6 -6
package/dist/cjs/precook.js
CHANGED
|
@@ -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({
|
|
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);
|
|
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;
|
|
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
|
}
|
package/dist/cjs/precook.js.map
CHANGED
|
@@ -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":";;;;;;AAUA;AACA;AAMA;AA6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,OAAO,CACrBC,OAAyC,EACzC;EAAEC,cAAc;EAAEC,QAAQ;EAAEC,UAAU;EAAEC,KAAK,GAAG,CAAC;AAAkB,CAAC,GAAG,CAAC,CAAC,EAC5D;EACb,MAAMC,qBAAqB,GAAG,IAAIC,GAAG,EAAU;EAC/C,MAAMC,oBAAuC,GAAG,EAAE;EAClD,MAAMC,OAAO,GAAG,IAAIC,oCAAmB,CAAC,IAAI,CAAC;EAC7C,MAAMC,WAAW,GAAG,IAAIC,gCAAe,EAAE;EACzCD,WAAW,CAACE,mBAAmB,GAAGJ,OAAO;EACzCE,WAAW,CAACG,kBAAkB,GAAGL,OAAO;EACxCD,oBAAoB,CAACO,IAAI,CAACJ,WAAW,CAAC;EAEtC,SAASK,iBAAiB,GAAoB;IAC5C,OAAOR,oBAAoB,CAACA,oBAAoB,CAACS,MAAM,GAAG,CAAC,CAAC;EAC9D;EAEA,SAASC,KAAK,CAACC,IAAgB,EAAQ;IACrC,IAAI,IAAAC,8BAAc,EAACjB,QAAQ,EAAEgB,IAAI,CAACE,IAAI,CAAC,EAAE;MACvClB,QAAQ,CAACgB,IAAI,CAACE,IAAI,CAAC,CAACF,IAAI,CAAC;IAC3B;EACF;EAEA,SAASG,gBAAgB,CACvBH,IAAO,EACPI,IAAiB,EACjBC,MAAqB,EACf;IACN,KAAK,MAAMC,GAAG,IAAIF,IAAI,EAAE;MACtBG,QAAQ,CACNP,IAAI,CAACM,GAAG,CAAC,EACTD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,MAAM,CAAC;QAAER,IAAI;QAAEM;MAAI,CAAC,CAAqB,CAClD;IACH;EACF;EAEA,SAASC,QAAQ,CACfP,IAA+B,EAC/BK,MAAqB,EACf;IACN,IAAII,KAAK,CAACC,OAAO,CAACV,IAAI,CAAC,EAAE;MACvBA,IAAI,CAACW,OAAO,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;QACzBN,QAAQ,CACNK,CAAC,EACDP,MAAM,GACFA,MAAM,CAACS,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAACN,MAAM,CAAC;UACzB,GAAGH,MAAM,CAACA,MAAM,CAACP,MAAM,GAAG,CAAC,CAAC;UAC5Be;QACF,CAAC,CAAC,GACFR,MAAM,CACX;MACH,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIL,IAAI,EAAE;MAAA;MACf;MACA,sBAAAd,KAAK,CAAC6B,WAAW,uDAAjB,wBAAA7B,KAAK,EAAec,IAAI,EAAEK,MAAM,CAAC;MACjCrB,QAAQ,IAAIe,KAAK,CAACC,IAAI,CAAC;MACvB;MACA,QAAQA,IAAI,CAACE,IAAI;QACf,KAAK,YAAY;UACf,IAAI,CAACc,cAAc,CAAChB,IAAI,CAACiB,IAAI,CAAC,EAAE;YAAA;YAC9B,yBAAA/B,KAAK,CAACgC,iBAAiB,0DAAvB,2BAAAhC,KAAK,EAAqBc,IAAI,EAAEK,MAAM,CAAC;YACvClB,qBAAqB,CAACgC,GAAG,CAACnB,IAAI,CAACiB,IAAI,CAAC;UACtC;UACA;QACF,KAAK,iBAAiB;QACtB,KAAK,cAAc;UACjBd,gBAAgB,CAACH,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEK,MAAM,CAAC;UAC5C;QACF,KAAK,yBAAyB;UAAE;YAC9B,MAAMe,GAAG,GAAGvB,iBAAiB,EAAE,CAACF,kBAAkB;YAClD,MAAM0B,OAAO,GAAGC,sBAAsB,CAACtB,IAAI,EAAEoB,GAAG,CAAC;YACjDG,YAAY,CAACF,OAAO,EAAEhB,MAAM,CAAC;YAC7B;UACF;QACA,KAAK,mBAAmB;QACxB,KAAK,kBAAkB;QACvB,KAAK,mBAAmB;UACtBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAEK,MAAM,CAAC;UACjD;QACF,KAAK,gBAAgB;QACrB,KAAK,eAAe;UAClBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAEK,MAAM,CAAC;UACvD;QACF,KAAK,iBAAiB;UACpBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEK,MAAM,CAAC;UAC9C;QACF,KAAK,uBAAuB;UAC1BF,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAEK,MAAM,CAAC;UACnE;QACF,KAAK,kBAAkB;UACrBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAEK,MAAM,CAAC;UAC1C,IAAIL,IAAI,CAACwB,QAAQ,EAAE;YACjBrB,gBAAgB,CAACH,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEK,MAAM,CAAC;UAC9C;UACA;QACF,KAAK,kBAAkB;QACvB,KAAK,eAAe;UAClBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEK,MAAM,CAAC;UAC9C;QACF,KAAK,UAAU;UACb,IAAIL,IAAI,CAACwB,QAAQ,EAAE;YACjBrB,gBAAgB,CAACH,IAAI,EAAE,CAAC,KAAK,CAAC,EAAEK,MAAM,CAAC;UACzC;UACAF,gBAAgB,CAACH,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEK,MAAM,CAAC;UACzC;QACF,KAAK,aAAa;QAClB,KAAK,eAAe;QACpB,KAAK,iBAAiB;UACpBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEK,MAAM,CAAC;UAC5C;QACF,KAAK,oBAAoB;QACzB,KAAK,iBAAiB;UACpBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,aAAa,CAAC,EAAEK,MAAM,CAAC;UAC/C;QACF,KAAK,0BAA0B;UAC7BF,gBAAgB,CAACH,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAEK,MAAM,CAAC;UAChD;QACF,KAAK,SAAS;UACZ;MAAO;MAEX,IAAI,CAACtB,cAAc,EAAE;QACnB;QACA,QAAQiB,IAAI,CAACE,IAAI;UACf,KAAK,sBAAsB;YACzBC,gBAAgB,CAACH,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAEK,MAAM,CAAC;YACjD;UACF,KAAK,gBAAgB;YAAE;cACrB,IAAI,CAACL,IAAI,CAACyB,IAAI,CAAC3B,MAAM,EAAE;gBACrB;cACF;cACA,MAAM4B,cAAc,GAAG7B,iBAAiB,EAAE;cAC1C,MAAM8B,MAAM,GAAGD,cAAc,CAAC/B,kBAAkB;cAChD,MAAMiC,QAAQ,GAAG,IAAIrC,oCAAmB,CAACoC,MAAM,CAAC;cAChDE,6BAA6B,CAAC7B,IAAI,CAACyB,IAAI,EAAEG,QAAQ,CAAC;cAClDF,cAAc,CAAC/B,kBAAkB,GAAGiC,QAAQ;cAC5CzB,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,CAAC,EAAEK,MAAM,CAAC;cACxCqB,cAAc,CAAC/B,kBAAkB,GAAGgC,MAAM;cAC1C;YACF;UACA,KAAK,gBAAgB;UACrB,KAAK,mBAAmB;UACxB,KAAK,gBAAgB;YACnB;UACF,KAAK,aAAa;YAAE;cAClB,MAAMD,cAAc,GAAG7B,iBAAiB,EAAE;cAC1C,MAAM8B,MAAM,GAAGD,cAAc,CAAC/B,kBAAkB;cAChD,MAAMmC,QAAQ,GAAG,IAAIvC,oCAAmB,CAACoC,MAAM,CAAC;cAChDI,uBAAuB,CAAC/B,IAAI,CAACgC,KAAK,EAAEF,QAAQ,CAAC;cAC7CJ,cAAc,CAAC/B,kBAAkB,GAAGmC,QAAQ;cAC5C3B,gBAAgB,CAACH,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAEK,MAAM,CAAC;cACjDqB,cAAc,CAAC/B,kBAAkB,GAAGgC,MAAM;cAC1C;YACF;UACA,KAAK,kBAAkB;YACrBxB,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEK,MAAM,CAAC;YAChD;UACF,KAAK,qBAAqB;UAC1B,KAAK,gBAAgB;YACnBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEK,MAAM,CAAC;YAC9C;UACF,KAAK,gBAAgB;UACrB,KAAK,gBAAgB;YAAE;cACrB;cACA,MAAM4B,cAAc,GAClBjC,IAAI,CAACkC,IAAI,CAAChC,IAAI,KAAK,qBAAqB,IACxCF,IAAI,CAACkC,IAAI,CAACC,IAAI,KAAK,KAAK;cAC1B,MAAMT,cAAc,GAAG7B,iBAAiB,EAAE;cAC1C,MAAM8B,MAAM,GAAGD,cAAc,CAAC/B,kBAAkB;cAChD,IAAIsC,cAAc,EAAE;gBAClB,MAAMG,MAAM,GAAG,IAAI7C,oCAAmB,CAACoC,MAAM,CAAC;gBAC9CI,uBAAuB,CAAC/B,IAAI,CAACkC,IAAI,EAAEE,MAAM,CAAC;gBAC1CV,cAAc,CAAC/B,kBAAkB,GAAGyC,MAAM;cAC5C;cACAjC,gBAAgB,CAACH,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEK,MAAM,CAAC;cACzCqB,cAAc,CAAC/B,kBAAkB,GAAGgC,MAAM;;cAE1C;cACA,IAAIM,cAAc,EAAE;gBAClB,MAAMI,YAAY,GAAG,IAAI9C,oCAAmB,CAACoC,MAAM,CAAC;gBACpDI,uBAAuB,CAAC/B,IAAI,CAACkC,IAAI,EAAEG,YAAY,CAAC;gBAChDX,cAAc,CAAC/B,kBAAkB,GAAG0C,YAAY;cAClD;cACAlC,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEK,MAAM,CAAC;cAChDqB,cAAc,CAAC/B,kBAAkB,GAAGgC,MAAM;cAC1C;YACF;UACA,KAAK,cAAc;YAAE;cAAA;cACnB,MAAMM,cAAc,GAClB,eAAAjC,IAAI,CAACsC,IAAI,+CAAT,WAAWpC,IAAI,MAAK,qBAAqB,IACzCF,IAAI,CAACsC,IAAI,CAACH,IAAI,KAAK,KAAK;cAC1B,MAAMT,cAAc,GAAG7B,iBAAiB,EAAE;cAC1C,MAAM8B,MAAM,GAAGD,cAAc,CAAC/B,kBAAkB;cAChD,IAAIsC,cAAc,EAAE;gBAClB,MAAMM,OAAO,GAAG,IAAIhD,oCAAmB,CAACoC,MAAM,CAAC;gBAC/CI,uBAAuB,CACrB/B,IAAI,CAACsC,IAAI,EACTC,OAAO,CACR;gBACDb,cAAc,CAAC/B,kBAAkB,GAAG4C,OAAO;cAC7C;cACApC,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAEK,MAAM,CAAC;cAClEqB,cAAc,CAAC/B,kBAAkB,GAAGgC,MAAM;cAC1C;YACF;UACA,KAAK,qBAAqB;YAAE;cAC1B,MAAM,CAACa,EAAE,CAAC,GAAG,IAAAC,2BAAiB,EAACzC,IAAI,CAAC;cACpC,MAAMoB,GAAG,GAAGvB,iBAAiB,EAAE,CAACF,kBAAkB;cAClD,MAAM+C,EAAE,GAAGpB,sBAAsB,CAACtB,IAAI,EAAEoB,GAAG,CAAC;cAC5CA,GAAG,CAACuB,aAAa,CAACH,EAAE,CAAC;cACrBjB,YAAY,CAACmB,EAAE,EAAErC,MAAM,CAAC;cACxB;YACF;UACA,KAAK,oBAAoB;YAAE;cACzB,MAAMgB,OAAO,GAAGuB,qCAAqC,CAAC5C,IAAI,CAAC;cAC3DuB,YAAY,CAACF,OAAO,EAAEhB,MAAM,CAAC;cAC7B;YACF;UACA,KAAK,aAAa;YAChBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAEK,MAAM,CAAC;YACnE;UACF,KAAK,iBAAiB;UACtB,KAAK,gBAAgB;UACrB,KAAK,kBAAkB;YACrBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEK,MAAM,CAAC;YAC5C;UACF,KAAK,YAAY;YACfF,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAEK,MAAM,CAAC;YACtD;UACF,KAAK,iBAAiB;YAAE;cACtBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,cAAc,CAAC,EAAEK,MAAM,CAAC;cAChD,MAAMqB,cAAc,GAAG7B,iBAAiB,EAAE;cAC1C,MAAM8B,MAAM,GAAGD,cAAc,CAAC/B,kBAAkB;cAChD,MAAMiC,QAAQ,GAAG,IAAIrC,oCAAmB,CAACoC,MAAM,CAAC;cAChDE,6BAA6B,CAAC7B,IAAI,CAAC6C,KAAK,EAAEjB,QAAQ,CAAC;cACnDF,cAAc,CAAC/B,kBAAkB,GAAGiC,QAAQ;cAC5CzB,gBAAgB,CAACH,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEK,MAAM,CAAC;cACzCqB,cAAc,CAAC/B,kBAAkB,GAAGgC,MAAM;cAC1C;YACF;UACA,KAAK,cAAc;YACjBxB,gBAAgB,CAACH,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,EAAEK,MAAM,CAAC;YACjE;UACF,KAAK,qBAAqB;YACxBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,cAAc,CAAC,EAAEK,MAAM,CAAC;YAChD;UACF,KAAK,oBAAoB;YACvBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAEK,MAAM,CAAC;YAC9C;UACF,KAAK,gBAAgB;YACnBF,gBAAgB,CAACH,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEK,MAAM,CAAC;YAChD;QAAO;MAEb;MACA,MAAMyC,MAAM,4BAAG5D,KAAK,CAAC6D,kBAAkB,0DAAxB,2BAAA7D,KAAK,EAAsBc,IAAI,EAAEK,MAAM,CAAC;MACvD,IAAI,CAACyC,MAAM,EAAE;QACX;QACAE,OAAO,CAACC,IAAI,CAAE,2BAA0BjD,IAAI,CAACE,IAAK,IAAG,CAAC;MACxD;IACF;EACF;EAEA,SAAS6B,uBAAuB,CAC9BmB,YAAuD,EACvD9B,GAAwB,EAClB;IACN,KAAK,MAAMH,IAAI,IAAI,IAAAwB,2BAAiB,EAACS,YAAY,CAAC,EAAE;MAClD9B,GAAG,CAACuB,aAAa,CAAC1B,IAAI,CAAC;IACzB;EACF;EAEA,SAASD,cAAc,CAACC,IAAY,EAAW;IAC7C,MAAMG,GAAG,GAAGvB,iBAAiB,EAAE,CAACF,kBAAkB;IAClD,OAAOwD,sBAAsB,CAAC/B,GAAG,EAAEH,IAAI,CAAC;EAC1C;EAEA,SAASkC,sBAAsB,CAC7B/B,GAAwB,EACxBH,IAAY,EACH;IACT,OACE,CAAC,CAACG,GAAG,KACJA,GAAG,CAACgC,UAAU,CAACnC,IAAI,CAAC,IAAIkC,sBAAsB,CAAC/B,GAAG,CAACiC,QAAQ,EAAEpC,IAAI,CAAC,CAAC;EAExE;EAEA,SAASY,6BAA6B,CACpCyB,IAAgC,EAChClC,GAAwB,EAClB;IACN,MAAM8B,YAAY,GAAG,IAAAK,mCAAyB,EAACD,IAAI,EAAE;MACnDE,GAAG,EAAE,KAAK;MACVC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF1B,uBAAuB,CAACmB,YAAY,EAAE9B,GAAG,CAAC;EAC5C;EAEA,SAASG,YAAY,CACnBF,OAA+B,EAC/BhB,MAAqB,EACf;IACNqD,mBAAmB,CAACrC,OAAO,CAAC;IAC5BsC,gCAAgC,CAACtC,OAAO,EAAEhB,MAAM,CAAC;IACjDE,QAAQ,CACNc,OAAO,CAACuC,cAAc,EACtBvD,MAAM,aAANA,MAAM,uBAANA,MAAM,CACFG,MAAM,CAAC;MACPR,IAAI,EAAEqB,OAAO,CAACwC,QAAQ;MACtBvD,GAAG,EAAE;IACP,CAAC,CAAC,CACDE,MAAM,CACLa,OAAO,CAACwC,QAAQ,CAACpC,IAAI,CAACvB,IAAI,KAAK,gBAAgB,GAC3C;MACEF,IAAI,EAAEqB,OAAO,CAACwC,QAAQ,CAACpC,IAAI;MAC3BnB,GAAG,EAAE;IACP,CAAC,GACD,EAAE,CACP,CACJ;IACDjB,oBAAoB,CAACyE,GAAG,EAAE;EAC5B;EAEA,SAASJ,mBAAmB,CAACK,CAAyB,EAAQ;IAC5D,MAAMC,aAAa,GAAG,IAAIvE,gCAAe,EAAE;IAC3C,MAAMwE,QAAQ,GAAG,IAAI1E,oCAAmB,CAACwE,CAAC,CAACG,WAAW,CAAC;IACvDF,aAAa,CAACtE,mBAAmB,GAAGuE,QAAQ;IAC5CD,aAAa,CAACrE,kBAAkB,GAAGsE,QAAQ;IAC3C5E,oBAAoB,CAACO,IAAI,CAACoE,aAAa,CAAC;EAC1C;EAEA,SAASL,gCAAgC,CACvCQ,IAA4B,EAC5B9D,MAAqB,EACf;IACN,MAAM2D,aAAa,GAAGnE,iBAAiB,EAAE;IACzC,MAAMyD,IAAI,GAAGa,IAAI,CAACP,cAAc;IAChC,MAAMQ,OAAO,GAAGD,IAAI,CAACE,gBAAgB;IACrC,MAAMC,uBAAuB,GAAG,IAAAC,4BAAkB,EAACH,OAAO,CAAC;IAC3D,MAAMI,eAAe,GAAG,IAAAjB,mCAAyB,EAACD,IAAI,EAAE;MACtDE,GAAG,EAAE,IAAI;MACTC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,MAAMgB,QAAQ,GAAG,IAAAhC,2BAAiB,EAAC+B,eAAe,CAAC;IAEnD,MAAMpD,GAAG,GAAG4C,aAAa,CAACrE,kBAAkB;IAC5CoC,uBAAuB,CAACqC,OAAO,EAAEhD,GAAG,CAAC;IAErCb,QAAQ,CAAC6D,OAAO,EAAE/D,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,MAAM,CAAC;MAAER,IAAI,EAAEmE,IAAI,CAACN,QAAQ;MAAEvD,GAAG,EAAE;IAAS,CAAC,CAAC,CAAC;IAEzE,IAAIoE,MAA2B;IAC/B,IAAI,CAACJ,uBAAuB,EAAE;MAC5B;MACA;MACA,KAAK,MAAM1D,CAAC,IAAI6D,QAAQ,EAAE;QACxBrD,GAAG,CAACuB,aAAa,CAAC/B,CAAC,CAAC;MACtB;MACA8D,MAAM,GAAGtD,GAAG;IACd,CAAC,MAAM;MACL;MACA;MACA;MACAsD,MAAM,GAAG,IAAInF,oCAAmB,CAAC6B,GAAG,CAAC;MACrC4C,aAAa,CAACtE,mBAAmB,GAAGgF,MAAM;MAC1C,KAAK,MAAM9D,CAAC,IAAI6D,QAAQ,EAAE;QACxBC,MAAM,CAAC/B,aAAa,CAAC/B,CAAC,CAAC;MACzB;IACF;IACA,MAAM+D,MAAM,GAAGD,MAAM;IACrBV,aAAa,CAACrE,kBAAkB,GAAGgF,MAAM;IAEzC,MAAMC,eAAe,GAAG,IAAArB,mCAAyB,EAACD,IAAI,EAAE;MACtDE,GAAG,EAAE,KAAK;MACVC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF1B,uBAAuB,CAAC6C,eAAe,EAAED,MAAM,CAAC;EAClD;EAEA,SAAS/B,qCAAqC,CAC5CiC,kBAAsC,EACd;IACxB,MAAMC,KAAK,GAAGjF,iBAAiB,EAAE,CAACF,kBAAkB;IACpD,IAAI,CAACkF,kBAAkB,CAACE,EAAE,EAAE;MAC1B,OAAOzD,sBAAsB,CAACuD,kBAAkB,EAAEC,KAAK,CAAC;IAC1D;IACA,MAAM7D,IAAI,GAAG4D,kBAAkB,CAACE,EAAE,CAAC9D,IAAI;IACvC,MAAM+D,OAAO,GAAG,IAAIzF,oCAAmB,CAACuF,KAAK,CAAC;IAC9CE,OAAO,CAACrC,aAAa,CAAC1B,IAAI,CAAC;IAC3B,OAAOK,sBAAsB,CAACuD,kBAAkB,EAAEG,OAAO,CAAC;EAC5D;EAEA,SAAS1D,sBAAsB,CAC7B6C,IAAwE,EACxEW,KAA0B,EACF;IACxB,OAAO;MACLjB,QAAQ,EAAEM,IAAI;MACdE,gBAAgB,EAAEF,IAAI,CAACc,MAAM;MAC7BrB,cAAc,EACZO,IAAI,CAAC1C,IAAI,CAACvB,IAAI,KAAK,gBAAgB,GAAGiE,IAAI,CAAC1C,IAAI,CAACA,IAAI,GAAG0C,IAAI,CAAC1C,IAAI;MAClEyC,WAAW,EAAEY;IACf,CAAC;EACH;EAEAvE,QAAQ,CAACzB,OAAO,EAAEG,UAAU,GAAG,EAAE,GAAGiG,SAAS,CAAC;EAE9C,OAAO/F,qBAAqB;AAC9B"}
|
|
@@ -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":"
|
|
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"}
|
package/dist/cjs/preevaluate.js
CHANGED
|
@@ -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, {
|
|
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":"
|
|
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"}
|