@next-core/cook 2.4.1 → 2.4.3

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.
@@ -13,6 +13,7 @@ export function precook(rootAst) {
13
13
  expressionOnly,
14
14
  visitors,
15
15
  withParent,
16
+ externalSourceForDebug,
16
17
  hooks = {}
17
18
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
18
19
  const attemptToVisitGlobals = new Set();
@@ -67,7 +68,7 @@ export function precook(rootAst) {
67
68
  case "ArrowFunctionExpression":
68
69
  {
69
70
  const env = getRunningContext().LexicalEnvironment;
70
- const closure = OrdinaryFunctionCreate(node, env);
71
+ const closure = OrdinaryFunctionCreate(node, env, true);
71
72
  CallFunction(closure, parent);
72
73
  return;
73
74
  }
@@ -237,6 +238,13 @@ export function precook(rootAst) {
237
238
  runningContext.LexicalEnvironment = oldEnv;
238
239
  return;
239
240
  }
241
+ case "ThisExpression":
242
+ {
243
+ if (!externalSourceForDebug) {
244
+ break;
245
+ }
246
+ return;
247
+ }
240
248
  case "TryStatement":
241
249
  EvaluateChildren(node, ["block", "handler", "finalizer"], parent);
242
250
  return;
@@ -306,8 +314,12 @@ export function precook(rootAst) {
306
314
  topLevel: true
307
315
  });
308
316
  const varNames = collectBoundNames(varDeclarations);
317
+ const argumentsObjectNeeded = !!externalSourceForDebug && func.ThisMode !== "LEXICAL";
309
318
  const env = calleeContext.LexicalEnvironment;
310
319
  BoundNamesInstantiation(formals, env);
320
+ if (argumentsObjectNeeded) {
321
+ env.CreateBinding("arguments");
322
+ }
311
323
  Evaluate(formals, parent === null || parent === void 0 ? void 0 : parent.concat({
312
324
  node: func.Function,
313
325
  key: "params"
@@ -348,12 +360,13 @@ export function precook(rootAst) {
348
360
  funcEnv.CreateBinding(name);
349
361
  return OrdinaryFunctionCreate(functionExpression, funcEnv);
350
362
  }
351
- function OrdinaryFunctionCreate(func, scope) {
363
+ function OrdinaryFunctionCreate(func, scope, lexicalThis) {
352
364
  return {
353
365
  Function: func,
354
366
  FormalParameters: func.params,
355
367
  ECMAScriptCode: func.body.type === "BlockStatement" ? func.body.body : func.body,
356
- Environment: scope
368
+ Environment: scope,
369
+ ThisMode: lexicalThis ? "LEXICAL" : "STRICT"
357
370
  };
358
371
  }
359
372
  Evaluate(rootAst, withParent ? [] : undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"precook.js","names":["hasOwnProperty","AnalysisContext","AnalysisEnvironment","collectBoundNames","collectScopedDeclarations","containsExpression","precook","rootAst","expressionOnly","visitors","withParent","hooks","arguments","length","undefined","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","visit","node","type","EvaluateChildren","keys","parent","key","Evaluate","concat","Array","isArray","forEach","n","index","slice","_hooks$beforeVisit","_hooks$beforeVisitUnk","beforeVisit","call","ResolveBinding","name","_hooks$beforeVisitGlo","beforeVisitGlobal","add","env","closure","OrdinaryFunctionCreate","CallFunction","computed","body","runningContext","oldEnv","blockEnv","BlockDeclarationInstantiation","catchEnv","BoundNamesInstantiation","param","lexicalBinding","left","kind","newEnv","iterationEnv","_node$init","init","loopEnv","fn","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","cases","silent","beforeVisitUnknown","console","warn","declarations","GetIdentifierReference","HasBinding","OuterEnv","code","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","Function","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","varDeclarations","varNames","varEnv","lexEnv","lexDeclarations","functionExpression","scope","id","funcEnv","params"],"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.js\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext.js\";\nimport {\n EstreeNode,\n EstreeVisitors,\n NodeWithBoundNames,\n} from \"./interfaces.js\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse.js\";\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 (visitors && 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 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[] | null | undefined,\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 | null | undefined,\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,SAASA,cAAc,QAAQ,qBAAqB;AACpD,SACEC,eAAe,EACfC,mBAAmB,QAEd,sBAAsB;AAM7B,SACEC,iBAAiB,EACjBC,yBAAyB,EACzBC,kBAAkB,QACb,eAAe;AAyBtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CACrBC,OAAyC,EAE5B;EAAA,IADb;IAAEC,cAAc;IAAEC,QAAQ;IAAEC,UAAU;IAAEC,KAAK,GAAG,CAAC;EAAkB,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEzE,MAAMG,qBAAqB,GAAG,IAAIC,GAAG,CAAS,CAAC;EAC/C,MAAMC,oBAAuC,GAAG,EAAE;EAClD,MAAMC,OAAO,GAAG,IAAIhB,mBAAmB,CAAC,IAAI,CAAC;EAC7C,MAAMiB,WAAW,GAAG,IAAIlB,eAAe,CAAC,CAAC;EACzCkB,WAAW,CAACC,mBAAmB,GAAGF,OAAO;EACzCC,WAAW,CAACE,kBAAkB,GAAGH,OAAO;EACxCD,oBAAoB,CAACK,IAAI,CAACH,WAAW,CAAC;EAEtC,SAASI,iBAAiBA,CAAA,EAAoB;IAC5C,OAAON,oBAAoB,CAACA,oBAAoB,CAACJ,MAAM,GAAG,CAAC,CAAC;EAC9D;EAEA,SAASW,KAAKA,CAACC,IAAgB,EAAQ;IACrC,IAAIhB,QAAQ,IAAIT,cAAc,CAACS,QAAQ,EAAEgB,IAAI,CAACC,IAAI,CAAC,EAAE;MACnDjB,QAAQ,CAACgB,IAAI,CAACC,IAAI,CAAC,CAACD,IAAI,CAAC;IAC3B;EACF;EAEA,SAASE,gBAAgBA,CACvBF,IAAO,EACPG,IAAiB,EACjBC,MAAqB,EACf;IACN,KAAK,MAAMC,GAAG,IAAIF,IAAI,EAAE;MACtBG,QAAQ,CACNN,IAAI,CAACK,GAAG,CAAC,EACTD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,MAAM,CAAC;QAAEP,IAAI;QAAEK;MAAI,CAAqB,CAClD,CAAC;IACH;EACF;EAEA,SAASC,QAAQA,CACfN,IAA+B,EAC/BI,MAAqB,EACf;IACN,IAAII,KAAK,CAACC,OAAO,CAACT,IAAI,CAAC,EAAE;MACvBA,IAAI,CAACU,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,CAAChB,MAAM,GAAG,CAAC,CAAC;UAC5BwB;QACF,CAAC,CAAC,GACFR,MACN,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIJ,IAAI,EAAE;MAAA,IAAAc,kBAAA,EAAAC,qBAAA;MACf;MACA,CAAAD,kBAAA,GAAA5B,KAAK,CAAC8B,WAAW,cAAAF,kBAAA,eAAjBA,kBAAA,CAAAG,IAAA,CAAA/B,KAAK,EAAec,IAAI,EAAEI,MAAM,CAAC;MACjCL,KAAK,CAACC,IAAI,CAAC;MACX;MACA,QAAQA,IAAI,CAACC,IAAI;QACf,KAAK,YAAY;UACf,IAAI,CAACiB,cAAc,CAAClB,IAAI,CAACmB,IAAI,CAAC,EAAE;YAAA,IAAAC,qBAAA;YAC9B,CAAAA,qBAAA,GAAAlC,KAAK,CAACmC,iBAAiB,cAAAD,qBAAA,eAAvBA,qBAAA,CAAAH,IAAA,CAAA/B,KAAK,EAAqBc,IAAI,EAAEI,MAAM,CAAC;YACvCd,qBAAqB,CAACgC,GAAG,CAACtB,IAAI,CAACmB,IAAI,CAAC;UACtC;UACA;QACF,KAAK,iBAAiB;QACtB,KAAK,cAAc;UACjBjB,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;UAC5C;QACF,KAAK,yBAAyB;UAAE;YAC9B,MAAMmB,GAAG,GAAGzB,iBAAiB,CAAC,CAAC,CAACF,kBAAkB;YAClD,MAAM4B,OAAO,GAAGC,sBAAsB,CAACzB,IAAI,EAAEuB,GAAG,CAAC;YACjDG,YAAY,CAACF,OAAO,EAAEpB,MAAM,CAAC;YAC7B;UACF;QACA,KAAK,mBAAmB;QACxB,KAAK,kBAAkB;QACvB,KAAK,mBAAmB;UACtBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAEI,MAAM,CAAC;UACjD;QACF,KAAK,gBAAgB;QACrB,KAAK,eAAe;UAClBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;UACvD;QACF,KAAK,iBAAiB;UACpBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEI,MAAM,CAAC;UAC9C;QACF,KAAK,uBAAuB;UAC1BF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;UACnE;QACF,KAAK,kBAAkB;UACrBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAEI,MAAM,CAAC;UAC1C,IAAIJ,IAAI,CAAC2B,QAAQ,EAAE;YACjBzB,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;UAC9C;UACA;QACF,KAAK,kBAAkB;QACvB,KAAK,eAAe;UAClBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEI,MAAM,CAAC;UAC9C;QACF,KAAK,UAAU;UACb,IAAIJ,IAAI,CAAC2B,QAAQ,EAAE;YACjBzB,gBAAgB,CAACF,IAAI,EAAE,CAAC,KAAK,CAAC,EAAEI,MAAM,CAAC;UACzC;UACAF,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEI,MAAM,CAAC;UACzC;QACF,KAAK,aAAa;QAClB,KAAK,eAAe;QACpB,KAAK,iBAAiB;UACpBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;UAC5C;QACF,KAAK,oBAAoB;QACzB,KAAK,iBAAiB;UACpBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,aAAa,CAAC,EAAEI,MAAM,CAAC;UAC/C;QACF,KAAK,0BAA0B;UAC7BF,gBAAgB,CAACF,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAEI,MAAM,CAAC;UAChD;QACF,KAAK,SAAS;UACZ;MACJ;MACA,IAAI,CAACrB,cAAc,EAAE;QACnB;QACA,QAAQiB,IAAI,CAACC,IAAI;UACf,KAAK,sBAAsB;YACzBC,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YACjD;UACF,KAAK,gBAAgB;YAAE;cACrB,IAAI,CAACJ,IAAI,CAAC4B,IAAI,CAACxC,MAAM,EAAE;gBACrB;cACF;cACA,MAAMyC,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,MAAMmC,QAAQ,GAAG,IAAItD,mBAAmB,CAACqD,MAAM,CAAC;cAChDE,6BAA6B,CAAChC,IAAI,CAAC4B,IAAI,EAAEG,QAAQ,CAAC;cAClDF,cAAc,CAACjC,kBAAkB,GAAGmC,QAAQ;cAC5C7B,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,CAAC,EAAEI,MAAM,CAAC;cACxCyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,gBAAgB;UACrB,KAAK,mBAAmB;UACxB,KAAK,gBAAgB;YACnB;UACF,KAAK,aAAa;YAAE;cAClB,MAAMD,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,MAAMqC,QAAQ,GAAG,IAAIxD,mBAAmB,CAACqD,MAAM,CAAC;cAChDI,uBAAuB,CAAClC,IAAI,CAACmC,KAAK,EAAEF,QAAQ,CAAC;cAC7CJ,cAAc,CAACjC,kBAAkB,GAAGqC,QAAQ;cAC5C/B,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;cACjDyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,kBAAkB;YACrB5B,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YAChD;UACF,KAAK,qBAAqB;UAC1B,KAAK,gBAAgB;YACnBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEI,MAAM,CAAC;YAC9C;UACF,KAAK,gBAAgB;UACrB,KAAK,gBAAgB;YAAE;cACrB;cACA,MAAMgC,cAAc,GAClBpC,IAAI,CAACqC,IAAI,CAACpC,IAAI,KAAK,qBAAqB,IACxCD,IAAI,CAACqC,IAAI,CAACC,IAAI,KAAK,KAAK;cAC1B,MAAMT,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,IAAIwC,cAAc,EAAE;gBAClB,MAAMG,MAAM,GAAG,IAAI9D,mBAAmB,CAACqD,MAAM,CAAC;gBAC9CI,uBAAuB,CAAClC,IAAI,CAACqC,IAAI,EAAEE,MAAM,CAAC;gBAC1CV,cAAc,CAACjC,kBAAkB,GAAG2C,MAAM;cAC5C;cACArC,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEI,MAAM,CAAC;cACzCyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;;cAE1C;cACA,IAAIM,cAAc,EAAE;gBAClB,MAAMI,YAAY,GAAG,IAAI/D,mBAAmB,CAACqD,MAAM,CAAC;gBACpDI,uBAAuB,CAAClC,IAAI,CAACqC,IAAI,EAAEG,YAAY,CAAC;gBAChDX,cAAc,CAACjC,kBAAkB,GAAG4C,YAAY;cAClD;cACAtC,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;cAChDyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,cAAc;YAAE;cAAA,IAAAW,UAAA;cACnB,MAAML,cAAc,GAClB,EAAAK,UAAA,GAAAzC,IAAI,CAAC0C,IAAI,cAAAD,UAAA,uBAATA,UAAA,CAAWxC,IAAI,MAAK,qBAAqB,IACzCD,IAAI,CAAC0C,IAAI,CAACJ,IAAI,KAAK,KAAK;cAC1B,MAAMT,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,IAAIwC,cAAc,EAAE;gBAClB,MAAMO,OAAO,GAAG,IAAIlE,mBAAmB,CAACqD,MAAM,CAAC;gBAC/CI,uBAAuB,CACrBlC,IAAI,CAAC0C,IAAI,EACTC,OACF,CAAC;gBACDd,cAAc,CAACjC,kBAAkB,GAAG+C,OAAO;cAC7C;cACAzC,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAEI,MAAM,CAAC;cAClEyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,qBAAqB;YAAE;cAC1B,MAAM,CAACc,EAAE,CAAC,GAAGlE,iBAAiB,CAACsB,IAAI,CAAC;cACpC,MAAMuB,GAAG,GAAGzB,iBAAiB,CAAC,CAAC,CAACF,kBAAmB;cACnD,MAAMiD,EAAE,GAAGpB,sBAAsB,CAACzB,IAAI,EAAEuB,GAAG,CAAC;cAC5CA,GAAG,CAACuB,aAAa,CAACF,EAAE,CAAC;cACrBlB,YAAY,CAACmB,EAAE,EAAEzC,MAAM,CAAC;cACxB;YACF;UACA,KAAK,oBAAoB;YAAE;cACzB,MAAMoB,OAAO,GAAGuB,qCAAqC,CAAC/C,IAAI,CAAC;cAC3D0B,YAAY,CAACF,OAAO,EAAEpB,MAAM,CAAC;cAC7B;YACF;UACA,KAAK,aAAa;YAChBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;YACnE;UACF,KAAK,iBAAiB;UACtB,KAAK,gBAAgB;UACrB,KAAK,kBAAkB;YACrBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;YAC5C;UACF,KAAK,YAAY;YACfF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAEI,MAAM,CAAC;YACtD;UACF,KAAK,iBAAiB;YAAE;cACtBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,cAAc,CAAC,EAAEI,MAAM,CAAC;cAChD,MAAMyB,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,MAAMmC,QAAQ,GAAG,IAAItD,mBAAmB,CAACqD,MAAM,CAAC;cAChDE,6BAA6B,CAAChC,IAAI,CAACgD,KAAK,EAAEjB,QAAQ,CAAC;cACnDF,cAAc,CAACjC,kBAAkB,GAAGmC,QAAQ;cAC5C7B,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEI,MAAM,CAAC;cACzCyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,cAAc;YACjB5B,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;YACjE;UACF,KAAK,qBAAqB;YACxBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,cAAc,CAAC,EAAEI,MAAM,CAAC;YAChD;UACF,KAAK,oBAAoB;YACvBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YAC9C;UACF,KAAK,gBAAgB;YACnBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YAChD;QACJ;MACF;MACA,MAAM6C,MAAM,IAAAlC,qBAAA,GAAG7B,KAAK,CAACgE,kBAAkB,cAAAnC,qBAAA,uBAAxBA,qBAAA,CAAAE,IAAA,CAAA/B,KAAK,EAAsBc,IAAI,EAAEI,MAAM,CAAC;MACvD,IAAI,CAAC6C,MAAM,EAAE;QACX;QACAE,OAAO,CAACC,IAAI,CAAC,2BAA2BpD,IAAI,CAACC,IAAI,IAAI,CAAC;MACxD;IACF;EACF;EAEA,SAASiC,uBAAuBA,CAC9BmB,YAA0E,EAC1E9B,GAAwB,EAClB;IACN,KAAK,MAAMJ,IAAI,IAAIzC,iBAAiB,CAAC2E,YAAY,CAAC,EAAE;MAClD9B,GAAG,CAACuB,aAAa,CAAC3B,IAAI,CAAC;IACzB;EACF;EAEA,SAASD,cAAcA,CAACC,IAAY,EAAW;IAC7C,MAAMI,GAAG,GAAGzB,iBAAiB,CAAC,CAAC,CAACF,kBAAkB;IAClD,OAAO0D,sBAAsB,CAAC/B,GAAG,EAAEJ,IAAI,CAAC;EAC1C;EAEA,SAASmC,sBAAsBA,CAC7B/B,GAA2C,EAC3CJ,IAAY,EACH;IACT,OACE,CAAC,CAACI,GAAG,KACJA,GAAG,CAACgC,UAAU,CAACpC,IAAI,CAAC,IAAImC,sBAAsB,CAAC/B,GAAG,CAACiC,QAAQ,EAAErC,IAAI,CAAC,CAAC;EAExE;EAEA,SAASa,6BAA6BA,CACpCyB,IAAgC,EAChClC,GAAwB,EAClB;IACN,MAAM8B,YAAY,GAAG1E,yBAAyB,CAAC8E,IAAI,EAAE;MACnDC,GAAG,EAAE,KAAK;MACVC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACFzB,uBAAuB,CAACmB,YAAY,EAAE9B,GAAG,CAAC;EAC5C;EAEA,SAASG,YAAYA,CACnBF,OAA+B,EAC/BpB,MAAqB,EACf;IACNwD,mBAAmB,CAACpC,OAAO,CAAC;IAC5BqC,gCAAgC,CAACrC,OAAO,EAAEpB,MAAM,CAAC;IACjDE,QAAQ,CACNkB,OAAO,CAACsC,cAAc,EACtB1D,MAAM,aAANA,MAAM,uBAANA,MAAM,CACFG,MAAM,CAAC;MACPP,IAAI,EAAEwB,OAAO,CAACuC,QAAQ;MACtB1D,GAAG,EAAE;IACP,CAAC,CAAC,CACDE,MAAM,CACLiB,OAAO,CAACuC,QAAQ,CAACnC,IAAI,CAAC3B,IAAI,KAAK,gBAAgB,GAC3C;MACED,IAAI,EAAEwB,OAAO,CAACuC,QAAQ,CAACnC,IAAI;MAC3BvB,GAAG,EAAE;IACP,CAAC,GACD,EACN,CACJ,CAAC;IACDb,oBAAoB,CAACwE,GAAG,CAAC,CAAC;EAC5B;EAEA,SAASJ,mBAAmBA,CAACK,CAAyB,EAAQ;IAC5D,MAAMC,aAAa,GAAG,IAAI1F,eAAe,CAAC,CAAC;IAC3C,MAAM2F,QAAQ,GAAG,IAAI1F,mBAAmB,CAACwF,CAAC,CAACG,WAAW,CAAC;IACvDF,aAAa,CAACvE,mBAAmB,GAAGwE,QAAQ;IAC5CD,aAAa,CAACtE,kBAAkB,GAAGuE,QAAQ;IAC3C3E,oBAAoB,CAACK,IAAI,CAACqE,aAAa,CAAC;EAC1C;EAEA,SAASL,gCAAgCA,CACvCQ,IAA4B,EAC5BjE,MAAqB,EACf;IACN,MAAM8D,aAAa,GAAGpE,iBAAiB,CAAC,CAAC;IACzC,MAAM2D,IAAI,GAAGY,IAAI,CAACP,cAAc;IAChC,MAAMQ,OAAO,GAAGD,IAAI,CAACE,gBAAgB;IACrC,MAAMC,uBAAuB,GAAG5F,kBAAkB,CAAC0F,OAAO,CAAC;IAC3D,MAAMG,eAAe,GAAG9F,yBAAyB,CAAC8E,IAAI,EAAE;MACtDC,GAAG,EAAE,IAAI;MACTC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,MAAMe,QAAQ,GAAGhG,iBAAiB,CAAC+F,eAAe,CAAC;IAEnD,MAAMlD,GAAG,GAAG2C,aAAa,CAACtE,kBAAmB;IAC7CsC,uBAAuB,CAACoC,OAAO,EAAE/C,GAAG,CAAC;IAErCjB,QAAQ,CAACgE,OAAO,EAAElE,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,MAAM,CAAC;MAAEP,IAAI,EAAEqE,IAAI,CAACN,QAAQ;MAAE1D,GAAG,EAAE;IAAS,CAAC,CAAC,CAAC;IAEzE,IAAIsE,MAA2B;IAC/B,IAAI,CAACH,uBAAuB,EAAE;MAC5B;MACA;MACA,KAAK,MAAM7D,CAAC,IAAI+D,QAAQ,EAAE;QACxBnD,GAAG,CAACuB,aAAa,CAACnC,CAAC,CAAC;MACtB;MACAgE,MAAM,GAAGpD,GAAG;IACd,CAAC,MAAM;MACL;MACA;MACA;MACAoD,MAAM,GAAG,IAAIlG,mBAAmB,CAAC8C,GAAG,CAAC;MACrC2C,aAAa,CAACvE,mBAAmB,GAAGgF,MAAM;MAC1C,KAAK,MAAMhE,CAAC,IAAI+D,QAAQ,EAAE;QACxBC,MAAM,CAAC7B,aAAa,CAACnC,CAAC,CAAC;MACzB;IACF;IACA,MAAMiE,MAAM,GAAGD,MAAM;IACrBT,aAAa,CAACtE,kBAAkB,GAAGgF,MAAM;IAEzC,MAAMC,eAAe,GAAGlG,yBAAyB,CAAC8E,IAAI,EAAE;MACtDC,GAAG,EAAE,KAAK;MACVC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACFzB,uBAAuB,CAAC2C,eAAe,EAAED,MAAM,CAAC;EAClD;EAEA,SAAS7B,qCAAqCA,CAC5C+B,kBAAsC,EACd;IACxB,MAAMC,KAAK,GAAGjF,iBAAiB,CAAC,CAAC,CAACF,kBAAkB;IACpD,IAAI,CAACkF,kBAAkB,CAACE,EAAE,EAAE;MAC1B,OAAOvD,sBAAsB,CAACqD,kBAAkB,EAAEC,KAAK,CAAC;IAC1D;IACA,MAAM5D,IAAI,GAAG2D,kBAAkB,CAACE,EAAE,CAAC7D,IAAI;IACvC,MAAM8D,OAAO,GAAG,IAAIxG,mBAAmB,CAACsG,KAAK,CAAC;IAC9CE,OAAO,CAACnC,aAAa,CAAC3B,IAAI,CAAC;IAC3B,OAAOM,sBAAsB,CAACqD,kBAAkB,EAAEG,OAAO,CAAC;EAC5D;EAEA,SAASxD,sBAAsBA,CAC7B4C,IAAwE,EACxEU,KAA2B,EACH;IACxB,OAAO;MACLhB,QAAQ,EAAEM,IAAI;MACdE,gBAAgB,EAAEF,IAAI,CAACa,MAAM;MAC7BpB,cAAc,EACZO,IAAI,CAACzC,IAAI,CAAC3B,IAAI,KAAK,gBAAgB,GAAGoE,IAAI,CAACzC,IAAI,CAACA,IAAI,GAAGyC,IAAI,CAACzC,IAAI;MAClEwC,WAAW,EAAEW;IACf,CAAC;EACH;EAEAzE,QAAQ,CAACxB,OAAO,EAAEG,UAAU,GAAG,EAAE,GAAGI,SAAS,CAAC;EAE9C,OAAOC,qBAAqB;AAC9B","ignoreList":[]}
1
+ {"version":3,"file":"precook.js","names":["hasOwnProperty","AnalysisContext","AnalysisEnvironment","collectBoundNames","collectScopedDeclarations","containsExpression","precook","rootAst","expressionOnly","visitors","withParent","externalSourceForDebug","hooks","arguments","length","undefined","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","visit","node","type","EvaluateChildren","keys","parent","key","Evaluate","concat","Array","isArray","forEach","n","index","slice","_hooks$beforeVisit","_hooks$beforeVisitUnk","beforeVisit","call","ResolveBinding","name","_hooks$beforeVisitGlo","beforeVisitGlobal","add","env","closure","OrdinaryFunctionCreate","CallFunction","computed","body","runningContext","oldEnv","blockEnv","BlockDeclarationInstantiation","catchEnv","BoundNamesInstantiation","param","lexicalBinding","left","kind","newEnv","iterationEnv","_node$init","init","loopEnv","fn","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","cases","silent","beforeVisitUnknown","console","warn","declarations","GetIdentifierReference","HasBinding","OuterEnv","code","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","Function","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","varDeclarations","varNames","argumentsObjectNeeded","ThisMode","varEnv","lexEnv","lexDeclarations","functionExpression","scope","id","funcEnv","lexicalThis","params"],"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.js\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext.js\";\nimport {\n EstreeNode,\n EstreeVisitors,\n NodeWithBoundNames,\n} from \"./interfaces.js\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse.js\";\n\nexport interface PrecookOptions {\n expressionOnly?: boolean;\n /** @deprecated Use hooks instead. */\n visitors?: EstreeVisitors;\n hooks?: PrecookHooks;\n withParent?: boolean;\n externalSourceForDebug?: 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 {\n expressionOnly,\n visitors,\n withParent,\n externalSourceForDebug,\n hooks = {},\n }: 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 (visitors && 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 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, true);\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 \"ThisExpression\": {\n if (!externalSourceForDebug) {\n break;\n }\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[] | null | undefined,\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 | null | undefined,\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 argumentsObjectNeeded =\n !!externalSourceForDebug && func.ThisMode !== \"LEXICAL\";\n\n const env = calleeContext.LexicalEnvironment!;\n BoundNamesInstantiation(formals, env);\n\n if (argumentsObjectNeeded) {\n env.CreateBinding(\"arguments\");\n }\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 lexicalThis?: boolean\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 ThisMode: lexicalThis ? \"LEXICAL\" : \"STRICT\",\n };\n }\n\n Evaluate(rootAst, withParent ? [] : undefined);\n\n return attemptToVisitGlobals;\n}\n"],"mappings":"AAUA,SAASA,cAAc,QAAQ,qBAAqB;AACpD,SACEC,eAAe,EACfC,mBAAmB,QAEd,sBAAsB;AAM7B,SACEC,iBAAiB,EACjBC,yBAAyB,EACzBC,kBAAkB,QACb,eAAe;AA0BtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CACrBC,OAAyC,EAQ5B;EAAA,IAPb;IACEC,cAAc;IACdC,QAAQ;IACRC,UAAU;IACVC,sBAAsB;IACtBC,KAAK,GAAG,CAAC;EACK,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEtB,MAAMG,qBAAqB,GAAG,IAAIC,GAAG,CAAS,CAAC;EAC/C,MAAMC,oBAAuC,GAAG,EAAE;EAClD,MAAMC,OAAO,GAAG,IAAIjB,mBAAmB,CAAC,IAAI,CAAC;EAC7C,MAAMkB,WAAW,GAAG,IAAInB,eAAe,CAAC,CAAC;EACzCmB,WAAW,CAACC,mBAAmB,GAAGF,OAAO;EACzCC,WAAW,CAACE,kBAAkB,GAAGH,OAAO;EACxCD,oBAAoB,CAACK,IAAI,CAACH,WAAW,CAAC;EAEtC,SAASI,iBAAiBA,CAAA,EAAoB;IAC5C,OAAON,oBAAoB,CAACA,oBAAoB,CAACJ,MAAM,GAAG,CAAC,CAAC;EAC9D;EAEA,SAASW,KAAKA,CAACC,IAAgB,EAAQ;IACrC,IAAIjB,QAAQ,IAAIT,cAAc,CAACS,QAAQ,EAAEiB,IAAI,CAACC,IAAI,CAAC,EAAE;MACnDlB,QAAQ,CAACiB,IAAI,CAACC,IAAI,CAAC,CAACD,IAAI,CAAC;IAC3B;EACF;EAEA,SAASE,gBAAgBA,CACvBF,IAAO,EACPG,IAAiB,EACjBC,MAAqB,EACf;IACN,KAAK,MAAMC,GAAG,IAAIF,IAAI,EAAE;MACtBG,QAAQ,CACNN,IAAI,CAACK,GAAG,CAAC,EACTD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,MAAM,CAAC;QAAEP,IAAI;QAAEK;MAAI,CAAqB,CAClD,CAAC;IACH;EACF;EAEA,SAASC,QAAQA,CACfN,IAA+B,EAC/BI,MAAqB,EACf;IACN,IAAII,KAAK,CAACC,OAAO,CAACT,IAAI,CAAC,EAAE;MACvBA,IAAI,CAACU,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,CAAChB,MAAM,GAAG,CAAC,CAAC;UAC5BwB;QACF,CAAC,CAAC,GACFR,MACN,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIJ,IAAI,EAAE;MAAA,IAAAc,kBAAA,EAAAC,qBAAA;MACf;MACA,CAAAD,kBAAA,GAAA5B,KAAK,CAAC8B,WAAW,cAAAF,kBAAA,eAAjBA,kBAAA,CAAAG,IAAA,CAAA/B,KAAK,EAAec,IAAI,EAAEI,MAAM,CAAC;MACjCL,KAAK,CAACC,IAAI,CAAC;MACX;MACA,QAAQA,IAAI,CAACC,IAAI;QACf,KAAK,YAAY;UACf,IAAI,CAACiB,cAAc,CAAClB,IAAI,CAACmB,IAAI,CAAC,EAAE;YAAA,IAAAC,qBAAA;YAC9B,CAAAA,qBAAA,GAAAlC,KAAK,CAACmC,iBAAiB,cAAAD,qBAAA,eAAvBA,qBAAA,CAAAH,IAAA,CAAA/B,KAAK,EAAqBc,IAAI,EAAEI,MAAM,CAAC;YACvCd,qBAAqB,CAACgC,GAAG,CAACtB,IAAI,CAACmB,IAAI,CAAC;UACtC;UACA;QACF,KAAK,iBAAiB;QACtB,KAAK,cAAc;UACjBjB,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;UAC5C;QACF,KAAK,yBAAyB;UAAE;YAC9B,MAAMmB,GAAG,GAAGzB,iBAAiB,CAAC,CAAC,CAACF,kBAAkB;YAClD,MAAM4B,OAAO,GAAGC,sBAAsB,CAACzB,IAAI,EAAEuB,GAAG,EAAE,IAAI,CAAC;YACvDG,YAAY,CAACF,OAAO,EAAEpB,MAAM,CAAC;YAC7B;UACF;QACA,KAAK,mBAAmB;QACxB,KAAK,kBAAkB;QACvB,KAAK,mBAAmB;UACtBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAEI,MAAM,CAAC;UACjD;QACF,KAAK,gBAAgB;QACrB,KAAK,eAAe;UAClBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;UACvD;QACF,KAAK,iBAAiB;UACpBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEI,MAAM,CAAC;UAC9C;QACF,KAAK,uBAAuB;UAC1BF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;UACnE;QACF,KAAK,kBAAkB;UACrBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAEI,MAAM,CAAC;UAC1C,IAAIJ,IAAI,CAAC2B,QAAQ,EAAE;YACjBzB,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;UAC9C;UACA;QACF,KAAK,kBAAkB;QACvB,KAAK,eAAe;UAClBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEI,MAAM,CAAC;UAC9C;QACF,KAAK,UAAU;UACb,IAAIJ,IAAI,CAAC2B,QAAQ,EAAE;YACjBzB,gBAAgB,CAACF,IAAI,EAAE,CAAC,KAAK,CAAC,EAAEI,MAAM,CAAC;UACzC;UACAF,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEI,MAAM,CAAC;UACzC;QACF,KAAK,aAAa;QAClB,KAAK,eAAe;QACpB,KAAK,iBAAiB;UACpBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;UAC5C;QACF,KAAK,oBAAoB;QACzB,KAAK,iBAAiB;UACpBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,aAAa,CAAC,EAAEI,MAAM,CAAC;UAC/C;QACF,KAAK,0BAA0B;UAC7BF,gBAAgB,CAACF,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAEI,MAAM,CAAC;UAChD;QACF,KAAK,SAAS;UACZ;MACJ;MACA,IAAI,CAACtB,cAAc,EAAE;QACnB;QACA,QAAQkB,IAAI,CAACC,IAAI;UACf,KAAK,sBAAsB;YACzBC,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YACjD;UACF,KAAK,gBAAgB;YAAE;cACrB,IAAI,CAACJ,IAAI,CAAC4B,IAAI,CAACxC,MAAM,EAAE;gBACrB;cACF;cACA,MAAMyC,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,MAAMmC,QAAQ,GAAG,IAAIvD,mBAAmB,CAACsD,MAAM,CAAC;cAChDE,6BAA6B,CAAChC,IAAI,CAAC4B,IAAI,EAAEG,QAAQ,CAAC;cAClDF,cAAc,CAACjC,kBAAkB,GAAGmC,QAAQ;cAC5C7B,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,CAAC,EAAEI,MAAM,CAAC;cACxCyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,gBAAgB;UACrB,KAAK,mBAAmB;UACxB,KAAK,gBAAgB;YACnB;UACF,KAAK,aAAa;YAAE;cAClB,MAAMD,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,MAAMqC,QAAQ,GAAG,IAAIzD,mBAAmB,CAACsD,MAAM,CAAC;cAChDI,uBAAuB,CAAClC,IAAI,CAACmC,KAAK,EAAEF,QAAQ,CAAC;cAC7CJ,cAAc,CAACjC,kBAAkB,GAAGqC,QAAQ;cAC5C/B,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;cACjDyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,kBAAkB;YACrB5B,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YAChD;UACF,KAAK,qBAAqB;UAC1B,KAAK,gBAAgB;YACnBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,YAAY,CAAC,EAAEI,MAAM,CAAC;YAC9C;UACF,KAAK,gBAAgB;UACrB,KAAK,gBAAgB;YAAE;cACrB;cACA,MAAMgC,cAAc,GAClBpC,IAAI,CAACqC,IAAI,CAACpC,IAAI,KAAK,qBAAqB,IACxCD,IAAI,CAACqC,IAAI,CAACC,IAAI,KAAK,KAAK;cAC1B,MAAMT,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,IAAIwC,cAAc,EAAE;gBAClB,MAAMG,MAAM,GAAG,IAAI/D,mBAAmB,CAACsD,MAAM,CAAC;gBAC9CI,uBAAuB,CAAClC,IAAI,CAACqC,IAAI,EAAEE,MAAM,CAAC;gBAC1CV,cAAc,CAACjC,kBAAkB,GAAG2C,MAAM;cAC5C;cACArC,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEI,MAAM,CAAC;cACzCyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;;cAE1C;cACA,IAAIM,cAAc,EAAE;gBAClB,MAAMI,YAAY,GAAG,IAAIhE,mBAAmB,CAACsD,MAAM,CAAC;gBACpDI,uBAAuB,CAAClC,IAAI,CAACqC,IAAI,EAAEG,YAAY,CAAC;gBAChDX,cAAc,CAACjC,kBAAkB,GAAG4C,YAAY;cAClD;cACAtC,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;cAChDyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,cAAc;YAAE;cAAA,IAAAW,UAAA;cACnB,MAAML,cAAc,GAClB,EAAAK,UAAA,GAAAzC,IAAI,CAAC0C,IAAI,cAAAD,UAAA,uBAATA,UAAA,CAAWxC,IAAI,MAAK,qBAAqB,IACzCD,IAAI,CAAC0C,IAAI,CAACJ,IAAI,KAAK,KAAK;cAC1B,MAAMT,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,IAAIwC,cAAc,EAAE;gBAClB,MAAMO,OAAO,GAAG,IAAInE,mBAAmB,CAACsD,MAAM,CAAC;gBAC/CI,uBAAuB,CACrBlC,IAAI,CAAC0C,IAAI,EACTC,OACF,CAAC;gBACDd,cAAc,CAACjC,kBAAkB,GAAG+C,OAAO;cAC7C;cACAzC,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAEI,MAAM,CAAC;cAClEyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,qBAAqB;YAAE;cAC1B,MAAM,CAACc,EAAE,CAAC,GAAGnE,iBAAiB,CAACuB,IAAI,CAAC;cACpC,MAAMuB,GAAG,GAAGzB,iBAAiB,CAAC,CAAC,CAACF,kBAAmB;cACnD,MAAMiD,EAAE,GAAGpB,sBAAsB,CAACzB,IAAI,EAAEuB,GAAG,CAAC;cAC5CA,GAAG,CAACuB,aAAa,CAACF,EAAE,CAAC;cACrBlB,YAAY,CAACmB,EAAE,EAAEzC,MAAM,CAAC;cACxB;YACF;UACA,KAAK,oBAAoB;YAAE;cACzB,MAAMoB,OAAO,GAAGuB,qCAAqC,CAAC/C,IAAI,CAAC;cAC3D0B,YAAY,CAACF,OAAO,EAAEpB,MAAM,CAAC;cAC7B;YACF;UACA,KAAK,aAAa;YAChBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;YACnE;UACF,KAAK,iBAAiB;UACtB,KAAK,gBAAgB;UACrB,KAAK,kBAAkB;YACrBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,UAAU,CAAC,EAAEI,MAAM,CAAC;YAC5C;UACF,KAAK,YAAY;YACfF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAEI,MAAM,CAAC;YACtD;UACF,KAAK,iBAAiB;YAAE;cACtBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,cAAc,CAAC,EAAEI,MAAM,CAAC;cAChD,MAAMyB,cAAc,GAAG/B,iBAAiB,CAAC,CAAC;cAC1C,MAAMgC,MAAM,GAAGD,cAAc,CAACjC,kBAAkB;cAChD,MAAMmC,QAAQ,GAAG,IAAIvD,mBAAmB,CAACsD,MAAM,CAAC;cAChDE,6BAA6B,CAAChC,IAAI,CAACgD,KAAK,EAAEjB,QAAQ,CAAC;cACnDF,cAAc,CAACjC,kBAAkB,GAAGmC,QAAQ;cAC5C7B,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,CAAC,EAAEI,MAAM,CAAC;cACzCyB,cAAc,CAACjC,kBAAkB,GAAGkC,MAAM;cAC1C;YACF;UACA,KAAK,gBAAgB;YAAE;cACrB,IAAI,CAAC7C,sBAAsB,EAAE;gBAC3B;cACF;cACA;YACF;UACA,KAAK,cAAc;YACjBiB,gBAAgB,CAACF,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,EAAEI,MAAM,CAAC;YACjE;UACF,KAAK,qBAAqB;YACxBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,cAAc,CAAC,EAAEI,MAAM,CAAC;YAChD;UACF,KAAK,oBAAoB;YACvBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YAC9C;UACF,KAAK,gBAAgB;YACnBF,gBAAgB,CAACF,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAEI,MAAM,CAAC;YAChD;QACJ;MACF;MACA,MAAM6C,MAAM,IAAAlC,qBAAA,GAAG7B,KAAK,CAACgE,kBAAkB,cAAAnC,qBAAA,uBAAxBA,qBAAA,CAAAE,IAAA,CAAA/B,KAAK,EAAsBc,IAAI,EAAEI,MAAM,CAAC;MACvD,IAAI,CAAC6C,MAAM,EAAE;QACX;QACAE,OAAO,CAACC,IAAI,CAAC,2BAA2BpD,IAAI,CAACC,IAAI,IAAI,CAAC;MACxD;IACF;EACF;EAEA,SAASiC,uBAAuBA,CAC9BmB,YAA0E,EAC1E9B,GAAwB,EAClB;IACN,KAAK,MAAMJ,IAAI,IAAI1C,iBAAiB,CAAC4E,YAAY,CAAC,EAAE;MAClD9B,GAAG,CAACuB,aAAa,CAAC3B,IAAI,CAAC;IACzB;EACF;EAEA,SAASD,cAAcA,CAACC,IAAY,EAAW;IAC7C,MAAMI,GAAG,GAAGzB,iBAAiB,CAAC,CAAC,CAACF,kBAAkB;IAClD,OAAO0D,sBAAsB,CAAC/B,GAAG,EAAEJ,IAAI,CAAC;EAC1C;EAEA,SAASmC,sBAAsBA,CAC7B/B,GAA2C,EAC3CJ,IAAY,EACH;IACT,OACE,CAAC,CAACI,GAAG,KACJA,GAAG,CAACgC,UAAU,CAACpC,IAAI,CAAC,IAAImC,sBAAsB,CAAC/B,GAAG,CAACiC,QAAQ,EAAErC,IAAI,CAAC,CAAC;EAExE;EAEA,SAASa,6BAA6BA,CACpCyB,IAAgC,EAChClC,GAAwB,EAClB;IACN,MAAM8B,YAAY,GAAG3E,yBAAyB,CAAC+E,IAAI,EAAE;MACnDC,GAAG,EAAE,KAAK;MACVC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACFzB,uBAAuB,CAACmB,YAAY,EAAE9B,GAAG,CAAC;EAC5C;EAEA,SAASG,YAAYA,CACnBF,OAA+B,EAC/BpB,MAAqB,EACf;IACNwD,mBAAmB,CAACpC,OAAO,CAAC;IAC5BqC,gCAAgC,CAACrC,OAAO,EAAEpB,MAAM,CAAC;IACjDE,QAAQ,CACNkB,OAAO,CAACsC,cAAc,EACtB1D,MAAM,aAANA,MAAM,uBAANA,MAAM,CACFG,MAAM,CAAC;MACPP,IAAI,EAAEwB,OAAO,CAACuC,QAAQ;MACtB1D,GAAG,EAAE;IACP,CAAC,CAAC,CACDE,MAAM,CACLiB,OAAO,CAACuC,QAAQ,CAACnC,IAAI,CAAC3B,IAAI,KAAK,gBAAgB,GAC3C;MACED,IAAI,EAAEwB,OAAO,CAACuC,QAAQ,CAACnC,IAAI;MAC3BvB,GAAG,EAAE;IACP,CAAC,GACD,EACN,CACJ,CAAC;IACDb,oBAAoB,CAACwE,GAAG,CAAC,CAAC;EAC5B;EAEA,SAASJ,mBAAmBA,CAACK,CAAyB,EAAQ;IAC5D,MAAMC,aAAa,GAAG,IAAI3F,eAAe,CAAC,CAAC;IAC3C,MAAM4F,QAAQ,GAAG,IAAI3F,mBAAmB,CAACyF,CAAC,CAACG,WAAW,CAAC;IACvDF,aAAa,CAACvE,mBAAmB,GAAGwE,QAAQ;IAC5CD,aAAa,CAACtE,kBAAkB,GAAGuE,QAAQ;IAC3C3E,oBAAoB,CAACK,IAAI,CAACqE,aAAa,CAAC;EAC1C;EAEA,SAASL,gCAAgCA,CACvCQ,IAA4B,EAC5BjE,MAAqB,EACf;IACN,MAAM8D,aAAa,GAAGpE,iBAAiB,CAAC,CAAC;IACzC,MAAM2D,IAAI,GAAGY,IAAI,CAACP,cAAc;IAChC,MAAMQ,OAAO,GAAGD,IAAI,CAACE,gBAAgB;IACrC,MAAMC,uBAAuB,GAAG7F,kBAAkB,CAAC2F,OAAO,CAAC;IAC3D,MAAMG,eAAe,GAAG/F,yBAAyB,CAAC+E,IAAI,EAAE;MACtDC,GAAG,EAAE,IAAI;MACTC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,MAAMe,QAAQ,GAAGjG,iBAAiB,CAACgG,eAAe,CAAC;IAEnD,MAAME,qBAAqB,GACzB,CAAC,CAAC1F,sBAAsB,IAAIoF,IAAI,CAACO,QAAQ,KAAK,SAAS;IAEzD,MAAMrD,GAAG,GAAG2C,aAAa,CAACtE,kBAAmB;IAC7CsC,uBAAuB,CAACoC,OAAO,EAAE/C,GAAG,CAAC;IAErC,IAAIoD,qBAAqB,EAAE;MACzBpD,GAAG,CAACuB,aAAa,CAAC,WAAW,CAAC;IAChC;IAEAxC,QAAQ,CAACgE,OAAO,EAAElE,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,MAAM,CAAC;MAAEP,IAAI,EAAEqE,IAAI,CAACN,QAAQ;MAAE1D,GAAG,EAAE;IAAS,CAAC,CAAC,CAAC;IAEzE,IAAIwE,MAA2B;IAC/B,IAAI,CAACL,uBAAuB,EAAE;MAC5B;MACA;MACA,KAAK,MAAM7D,CAAC,IAAI+D,QAAQ,EAAE;QACxBnD,GAAG,CAACuB,aAAa,CAACnC,CAAC,CAAC;MACtB;MACAkE,MAAM,GAAGtD,GAAG;IACd,CAAC,MAAM;MACL;MACA;MACA;MACAsD,MAAM,GAAG,IAAIrG,mBAAmB,CAAC+C,GAAG,CAAC;MACrC2C,aAAa,CAACvE,mBAAmB,GAAGkF,MAAM;MAC1C,KAAK,MAAMlE,CAAC,IAAI+D,QAAQ,EAAE;QACxBG,MAAM,CAAC/B,aAAa,CAACnC,CAAC,CAAC;MACzB;IACF;IACA,MAAMmE,MAAM,GAAGD,MAAM;IACrBX,aAAa,CAACtE,kBAAkB,GAAGkF,MAAM;IAEzC,MAAMC,eAAe,GAAGrG,yBAAyB,CAAC+E,IAAI,EAAE;MACtDC,GAAG,EAAE,KAAK;MACVC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACFzB,uBAAuB,CAAC6C,eAAe,EAAED,MAAM,CAAC;EAClD;EAEA,SAAS/B,qCAAqCA,CAC5CiC,kBAAsC,EACd;IACxB,MAAMC,KAAK,GAAGnF,iBAAiB,CAAC,CAAC,CAACF,kBAAkB;IACpD,IAAI,CAACoF,kBAAkB,CAACE,EAAE,EAAE;MAC1B,OAAOzD,sBAAsB,CAACuD,kBAAkB,EAAEC,KAAK,CAAC;IAC1D;IACA,MAAM9D,IAAI,GAAG6D,kBAAkB,CAACE,EAAE,CAAC/D,IAAI;IACvC,MAAMgE,OAAO,GAAG,IAAI3G,mBAAmB,CAACyG,KAAK,CAAC;IAC9CE,OAAO,CAACrC,aAAa,CAAC3B,IAAI,CAAC;IAC3B,OAAOM,sBAAsB,CAACuD,kBAAkB,EAAEG,OAAO,CAAC;EAC5D;EAEA,SAAS1D,sBAAsBA,CAC7B4C,IAAwE,EACxEY,KAA2B,EAC3BG,WAAqB,EACG;IACxB,OAAO;MACLrB,QAAQ,EAAEM,IAAI;MACdE,gBAAgB,EAAEF,IAAI,CAACgB,MAAM;MAC7BvB,cAAc,EACZO,IAAI,CAACzC,IAAI,CAAC3B,IAAI,KAAK,gBAAgB,GAAGoE,IAAI,CAACzC,IAAI,CAACA,IAAI,GAAGyC,IAAI,CAACzC,IAAI;MAClEwC,WAAW,EAAEa,KAAK;MAClBL,QAAQ,EAAEQ,WAAW,GAAG,SAAS,GAAG;IACtC,CAAC;EACH;EAEA9E,QAAQ,CAACzB,OAAO,EAAEG,UAAU,GAAG,EAAE,GAAGK,SAAS,CAAC;EAE9C,OAAOC,qBAAqB;AAC9B","ignoreList":[]}
@@ -15,4 +15,5 @@ export interface AnalysisFunctionObject {
15
15
  FormalParameters: FunctionDeclaration["params"];
16
16
  ECMAScriptCode: Statement[] | Expression;
17
17
  Environment?: AnalysisEnvironment;
18
+ ThisMode: "LEXICAL" | "STRICT";
18
19
  }
@@ -1,4 +1,5 @@
1
1
  import type { Expression, FunctionDeclaration } from "@babel/types";
2
+ import { ExecutionContext } from "./ExecutionContext.js";
2
3
  import type { EstreeNode, CookRules } from "./interfaces.js";
3
4
  export interface CookOptions {
4
5
  rules?: CookRules;
@@ -13,5 +14,7 @@ export interface CookHooks {
13
14
  beforeCall?(node: EstreeNode): void;
14
15
  beforeBranch?(node: EstreeNode, branch: "if" | "else"): void;
15
16
  }
17
+ export declare function __dev_only_clearGlobalExecutionContextStack(): void;
18
+ export declare function __dev_only_getGlobalExecutionContextStack(): ExecutionContext[];
16
19
  /** For next-core internal usage only. */
17
20
  export declare function cook(rootAst: FunctionDeclaration | Expression, codeSource: string, { rules, debug, externalSourceForDebug, globalVariables, ArrayConstructor, hooks, }?: CookOptions): unknown;
@@ -6,6 +6,7 @@ export interface PrecookOptions {
6
6
  visitors?: EstreeVisitors;
7
7
  hooks?: PrecookHooks;
8
8
  withParent?: boolean;
9
+ externalSourceForDebug?: boolean;
9
10
  }
10
11
  export type EstreeParent = EstreeParentItem[];
11
12
  export interface EstreeParentItem {
@@ -26,4 +27,4 @@ export interface PrecookHooks {
26
27
  * @param options - Analysis options.
27
28
  * @returns A set of global variables the root AST attempts to access.
28
29
  */
29
- export declare function precook(rootAst: Expression | FunctionDeclaration, { expressionOnly, visitors, withParent, hooks }?: PrecookOptions): Set<string>;
30
+ export declare function precook(rootAst: Expression | FunctionDeclaration, { expressionOnly, visitors, withParent, externalSourceForDebug, hooks, }?: PrecookOptions): Set<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/cook",
3
- "version": "2.4.1",
3
+ "version": "2.4.3",
4
4
  "description": "Cook expressions and storyboard functions",
5
5
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/cook",
6
6
  "license": "GPL-3.0",
@@ -57,5 +57,5 @@
57
57
  "@next-core/test-next": "^1.1.3",
58
58
  "lodash": "^4.17.21"
59
59
  },
60
- "gitHead": "aec9d60454930de541f57f1eee2382e8d20a326c"
60
+ "gitHead": "a8e1b7d906e4653035ceda76bf09a16afcb02a7a"
61
61
  }