@next-core/cook 1.6.78 → 1.6.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/esm/precook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"precook.js","names":["hasOwnProperty","AnalysisContext","AnalysisEnvironment","collectBoundNames","collectScopedDeclarations","containsExpression","precook","rootAst","expressionOnly","visitors","withParent","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","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","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","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":["hasOwnProperty","AnalysisContext","AnalysisEnvironment","collectBoundNames","collectScopedDeclarations","containsExpression","precook","rootAst","expressionOnly","visitors","withParent","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","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","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","undefined"],"sources":["../../src/precook.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext\";\nimport { EstreeNode, EstreeVisitors, NodeWithBoundNames } from \"./interfaces\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse\";\n\nexport interface PrecookOptions {\n expressionOnly?: boolean;\n /** @deprecated Use hooks instead. */\n visitors?: EstreeVisitors;\n hooks?: PrecookHooks;\n withParent?: boolean;\n}\n\nexport type EstreeParent = EstreeParentItem[];\n\nexport interface EstreeParentItem {\n node: EstreeNode;\n key: string;\n index?: number;\n}\n\nexport interface PrecookHooks {\n beforeVisit?(node: EstreeNode, parent?: EstreeParent): void;\n beforeVisitGlobal?(node: Identifier, parent?: EstreeParent): void;\n /** Return true if want to silent warnings for unknown nodes. */\n beforeVisitUnknown?(node: EstreeNode, parent?: EstreeParent): boolean | void;\n}\n\n/**\n * Analysis an AST of a storyboard function or an evaluation expression.\n *\n * @param rootAst - The root AST.\n * @param options - Analysis options.\n * @returns A set of global variables the root AST attempts to access.\n */\nexport function precook(\n rootAst: Expression | FunctionDeclaration,\n { expressionOnly, visitors, withParent, hooks = {} }: PrecookOptions = {}\n): Set<string> {\n const attemptToVisitGlobals = new Set<string>();\n const analysisContextStack: AnalysisContext[] = [];\n const rootEnv = new AnalysisEnvironment(null);\n const rootContext = new AnalysisContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n analysisContextStack.push(rootContext);\n\n function getRunningContext(): AnalysisContext {\n return analysisContextStack[analysisContextStack.length - 1];\n }\n\n function visit(node: EstreeNode): void {\n if (hasOwnProperty(visitors, node.type)) {\n visitors[node.type](node);\n }\n }\n\n function EvaluateChildren<T extends EstreeNode>(\n node: T,\n keys: (keyof T)[],\n parent?: EstreeParent\n ): void {\n for (const key of keys) {\n Evaluate(\n node[key] as unknown as EstreeNode | EstreeNode[],\n parent?.concat({ node, key } as EstreeParentItem)\n );\n }\n }\n\n function Evaluate(\n node: EstreeNode | EstreeNode[],\n parent?: EstreeParent\n ): void {\n if (Array.isArray(node)) {\n node.forEach((n, index) => {\n Evaluate(\n n,\n parent\n ? parent.slice(0, -1).concat({\n ...parent[parent.length - 1],\n index,\n })\n : parent\n );\n });\n } else if (node) {\n // `node` maybe `null` in some cases.\n hooks.beforeVisit?.(node, parent);\n visitors && visit(node);\n // Expressions:\n switch (node.type) {\n case \"Identifier\":\n if (!ResolveBinding(node.name)) {\n hooks.beforeVisitGlobal?.(node, parent);\n attemptToVisitGlobals.add(node.name);\n }\n return;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n EvaluateChildren(node, [\"elements\"], parent);\n return;\n case \"ArrowFunctionExpression\": {\n const env = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(node, env);\n CallFunction(closure, parent);\n return;\n }\n case \"AssignmentPattern\":\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n EvaluateChildren(node, [\"left\", \"right\"], parent);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n EvaluateChildren(node, [\"callee\", \"arguments\"], parent);\n return;\n case \"ChainExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ConditionalExpression\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"MemberExpression\":\n EvaluateChildren(node, [\"object\"], parent);\n if (node.computed) {\n EvaluateChildren(node, [\"property\"], parent);\n }\n return;\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n EvaluateChildren(node, [\"properties\"], parent);\n return;\n case \"Property\":\n if (node.computed) {\n EvaluateChildren(node, [\"key\"], parent);\n }\n EvaluateChildren(node, [\"value\"], parent);\n return;\n case \"RestElement\":\n case \"SpreadElement\":\n case \"UnaryExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SequenceExpression\":\n case \"TemplateLiteral\":\n EvaluateChildren(node, [\"expressions\"], parent);\n return;\n case \"TaggedTemplateExpression\":\n EvaluateChildren(node, [\"tag\", \"quasi\"], parent);\n return;\n case \"Literal\":\n return;\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\":\n EvaluateChildren(node, [\"right\", \"left\"], parent);\n return;\n case \"BlockStatement\": {\n if (!node.body.length) {\n return;\n }\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return;\n case \"CatchClause\": {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const catchEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.param, catchEnv);\n runningContext.LexicalEnvironment = catchEnv;\n EvaluateChildren(node, [\"param\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"DoWhileStatement\":\n EvaluateChildren(node, [\"body\", \"test\"], parent);\n return;\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\": {\n // ForIn/OfHeadEvaluation\n const lexicalBinding =\n node.left.type === \"VariableDeclaration\" &&\n node.left.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const newEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, newEnv);\n runningContext.LexicalEnvironment = newEnv;\n }\n EvaluateChildren(node, [\"right\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n\n // ForIn/OfBodyEvaluation\n if (lexicalBinding) {\n const iterationEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, iterationEnv);\n runningContext.LexicalEnvironment = iterationEnv;\n }\n EvaluateChildren(node, [\"left\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"ForStatement\": {\n const lexicalBinding =\n node.init?.type === \"VariableDeclaration\" &&\n node.init.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const loopEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(\n node.init as VariableDeclaration,\n loopEnv\n );\n runningContext.LexicalEnvironment = loopEnv;\n }\n EvaluateChildren(node, [\"init\", \"test\", \"body\", \"update\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"FunctionDeclaration\": {\n const [fn] = collectBoundNames(node);\n const env = getRunningContext().LexicalEnvironment;\n const fo = OrdinaryFunctionCreate(node, env);\n env.CreateBinding(fn);\n CallFunction(fo, parent);\n return;\n }\n case \"FunctionExpression\": {\n const closure = InstantiateOrdinaryFunctionExpression(node);\n CallFunction(closure, parent);\n return;\n }\n case \"IfStatement\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n case \"UpdateExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SwitchCase\":\n EvaluateChildren(node, [\"test\", \"consequent\"], parent);\n return;\n case \"SwitchStatement\": {\n EvaluateChildren(node, [\"discriminant\"], parent);\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"cases\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"TryStatement\":\n EvaluateChildren(node, [\"block\", \"handler\", \"finalizer\"], parent);\n return;\n case \"VariableDeclaration\":\n EvaluateChildren(node, [\"declarations\"], parent);\n return;\n case \"VariableDeclarator\":\n EvaluateChildren(node, [\"id\", \"init\"], parent);\n return;\n case \"WhileStatement\":\n EvaluateChildren(node, [\"test\", \"body\"], parent);\n return;\n }\n }\n const silent = hooks.beforeVisitUnknown?.(node, parent);\n if (!silent) {\n // eslint-disable-next-line no-console\n console.warn(`Unsupported node type \\`${node.type}\\``);\n }\n }\n }\n\n function BoundNamesInstantiation(\n declarations: NodeWithBoundNames | NodeWithBoundNames[],\n env: AnalysisEnvironment\n ): void {\n for (const name of collectBoundNames(declarations)) {\n env.CreateBinding(name);\n }\n }\n\n function ResolveBinding(name: string): boolean {\n const env = getRunningContext().LexicalEnvironment;\n return GetIdentifierReference(env, name);\n }\n\n function GetIdentifierReference(\n env: AnalysisEnvironment,\n name: string\n ): boolean {\n return (\n !!env &&\n (env.HasBinding(name) || GetIdentifierReference(env.OuterEnv, name))\n );\n }\n\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: AnalysisEnvironment\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n BoundNamesInstantiation(declarations, env);\n }\n\n function CallFunction(\n closure: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n PrepareOrdinaryCall(closure);\n FunctionDeclarationInstantiation(closure, parent);\n Evaluate(\n closure.ECMAScriptCode,\n parent\n ?.concat({\n node: closure.Function,\n key: \"body\",\n })\n .concat(\n closure.Function.body.type === \"BlockStatement\"\n ? {\n node: closure.Function.body,\n key: \"body\",\n }\n : []\n )\n );\n analysisContextStack.pop();\n }\n\n function PrepareOrdinaryCall(F: AnalysisFunctionObject): void {\n const calleeContext = new AnalysisContext();\n const localEnv = new AnalysisEnvironment(F.Environment);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n analysisContextStack.push(calleeContext);\n }\n\n function FunctionDeclarationInstantiation(\n func: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n const calleeContext = getRunningContext();\n const code = func.ECMAScriptCode;\n const formals = func.FormalParameters;\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n const env = calleeContext.LexicalEnvironment;\n BoundNamesInstantiation(formals, env);\n\n Evaluate(formals, parent?.concat({ node: func.Function, key: \"params\" }));\n\n let varEnv: AnalysisEnvironment;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n for (const n of varNames) {\n env.CreateBinding(n);\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new AnalysisEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n for (const n of varNames) {\n varEnv.CreateBinding(n);\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n BoundNamesInstantiation(lexDeclarations, lexEnv);\n }\n\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): AnalysisFunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (!functionExpression.id) {\n return OrdinaryFunctionCreate(functionExpression, scope);\n }\n const name = functionExpression.id.name;\n const funcEnv = new AnalysisEnvironment(scope);\n funcEnv.CreateBinding(name);\n return OrdinaryFunctionCreate(functionExpression, funcEnv);\n }\n\n function OrdinaryFunctionCreate(\n func: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression,\n scope: AnalysisEnvironment\n ): AnalysisFunctionObject {\n return {\n Function: func,\n FormalParameters: func.params,\n ECMAScriptCode:\n func.body.type === \"BlockStatement\" ? func.body.body : func.body,\n Environment: scope,\n };\n }\n\n Evaluate(rootAst, withParent ? [] : undefined);\n\n return attemptToVisitGlobals;\n}\n"],"mappings":"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"}
|
|
@@ -4,11 +4,10 @@ import { parseAsEstree } from "./parse";
|
|
|
4
4
|
import { precook } from "./precook";
|
|
5
5
|
export function precookFunction(source) {
|
|
6
6
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
{
|
|
8
|
+
typescript
|
|
9
|
+
} = _ref,
|
|
10
|
+
restOptions = _objectWithoutProperties(_ref, _excluded);
|
|
12
11
|
var func = parseAsEstree(source, {
|
|
13
12
|
typescript
|
|
14
13
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"precookFunction.js","names":["parseAsEstree","precook","precookFunction","source","typescript","restOptions","func","attemptToVisitGlobals","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,SAASA,
|
|
1
|
+
{"version":3,"file":"precookFunction.js","names":["parseAsEstree","precook","precookFunction","source","typescript","restOptions","func","attemptToVisitGlobals","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,SAASA,aAAa,QAAQ,SAAS;AACvC,SAASC,OAAO,QAAwB,WAAW;AAWnD,OAAO,SAASC,eAAe,CAC7BC,MAAc,EAES;EAAA,+EADkC,CAAC,CAAC;IAA3D;MAAEC;IAAmD,CAAC;IAArCC,WAAW;EAE5B,IAAMC,IAAI,GAAGN,aAAa,CAACG,MAAM,EAAE;IAAEC;EAAW,CAAC,CAAC;EAClD,IAAMG,qBAAqB,GAAGN,OAAO,CAACK,IAAI,EAAED,WAAW,CAAC;EACxD,OAAO;IACLG,QAAQ,EAAEF,IAAI;IACdC;EACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preevaluate.js","names":["parseAsEstreeExpression","precook","preevaluate","raw","options","fixes","source","replace","m","push","expression","attemptToVisitGlobals","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,SAASA,
|
|
1
|
+
{"version":3,"file":"preevaluate.js","names":["parseAsEstreeExpression","precook","preevaluate","raw","options","fixes","source","replace","m","push","expression","attemptToVisitGlobals","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,SAASA,uBAAuB,QAAQ,SAAS;AACjD,SAASC,OAAO,QAAwB,WAAW;AAYnD;AACA,OAAO,SAASC,WAAW,CACzBC,GAAW,EACXC,OAA4B,EACT;EACnB,IAAMC,KAAe,GAAG,EAAE;EAC1B,IAAMC,MAAM,GAAGH,GAAG,CAACI,OAAO,CAAC,sBAAsB,EAAGC,CAAC,IAAK;IACxDH,KAAK,CAACI,IAAI,CAACD,CAAC,CAAC;IACb,OAAO,EAAE;EACX,CAAC,CAAC;EACF,IAAME,UAAU,GAAGV,uBAAuB,CAACM,MAAM,CAAC;EAClD,IAAMK,qBAAqB,GAAGV,OAAO,CAACS,UAAU,kCAC3CN,OAAO;IACVQ,cAAc,EAAE;EAAI,GACpB;EACF,OAAO;IACLF,UAAU;IACVC,qBAAqB;IACrBL,MAAM;IACNO,MAAM,EAAER,KAAK,CAAC,CAAC,CAAC;IAChBS,MAAM,EAAET,KAAK,CAAC,CAAC;EACjB,CAAC;AACH;AAEA,OAAO,SAASU,WAAW,CAACZ,GAAW,EAAW;EAChD,OAAO,YAAY,CAACa,IAAI,CAACb,GAAG,CAAC,IAAI,UAAU,CAACa,IAAI,CAACb,GAAG,CAAC;AACvD;AAEA,OAAO,SAASc,+BAA+B,CAACd,GAAW,EAAW;EACpE,OAAO,WAAW,CAACa,IAAI,CAACb,GAAG,CAAC;AAC9B"}
|
package/dist/esm/sanitize.js
CHANGED
|
@@ -11,29 +11,29 @@ function getGlobal() {
|
|
|
11
11
|
if (typeof self !== "undefined") {
|
|
12
12
|
return self;
|
|
13
13
|
}
|
|
14
|
-
|
|
15
14
|
if (typeof window !== "undefined") {
|
|
16
15
|
return window;
|
|
17
16
|
}
|
|
18
|
-
|
|
19
17
|
if (typeof global !== "undefined") {
|
|
20
18
|
return global;
|
|
21
19
|
}
|
|
22
|
-
|
|
23
20
|
throw new Error("unable to locate global object");
|
|
24
21
|
}
|
|
22
|
+
|
|
25
23
|
/**
|
|
26
24
|
* There are chances to construct a `Function` from a string, etc.
|
|
27
25
|
* ```
|
|
28
26
|
* ((a,b)=>a[b])(()=>1, 'constructor')('console.log(`yo`)')()
|
|
29
27
|
* ```
|
|
30
28
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Object,
|
|
36
|
-
|
|
29
|
+
var reservedObjects = new WeakSet([
|
|
30
|
+
// `Function("...")` is considered *extremely vulnerable*.
|
|
31
|
+
Function,
|
|
32
|
+
// `Object.assign()` is considered vulnerable.
|
|
33
|
+
Object,
|
|
34
|
+
// `prototype` is considered vulnerable.
|
|
35
|
+
Function.prototype, Object.prototype,
|
|
36
|
+
// Global `window` is considered vulnerable, too.
|
|
37
37
|
getGlobal()]);
|
|
38
38
|
export function sanitize(cooked) {
|
|
39
39
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
package/dist/esm/sanitize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.js","names":["getGlobal","self","window","global","Error","reservedObjects","WeakSet","Function","Object","prototype","sanitize","cooked","has","TypeError","allowedConstructors","Array","Map","Set","URLSearchParams","WeakMap","isAllowedConstructor","constructor","Date"],"sources":["../../src/sanitize.ts"],"sourcesContent":["// Ref https://github.com/tc39/proposal-global\n// In addition, the es6-shim had to switch from Function('return this')()\n// due to CSP concerns, such that the current check to handle browsers,\n// node, web workers, and frames is:\n// istanbul ignore next\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getGlobal(): object {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw new Error(\"unable to locate global object\");\n}\n\n/**\n * There are chances to construct a `Function` from a string, etc.\n * ```\n * ((a,b)=>a[b])(()=>1, 'constructor')('console.log(`yo`)')()\n * ```\n */\nconst reservedObjects = new WeakSet([\n // `Function(\"...\")` is considered *extremely vulnerable*.\n Function,\n // `Object.assign()` is considered vulnerable.\n Object,\n // `prototype` is considered vulnerable.\n Function.prototype,\n Object.prototype,\n // Global `window` is considered vulnerable, too.\n getGlobal(),\n]);\n\nexport function sanitize(cooked: unknown): void {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (reservedObjects.has(cooked as object)) {\n throw new TypeError(\"Cannot access reserved objects such as `Function`.\");\n }\n}\n\nconst allowedConstructors = new WeakSet([\n Array,\n Map,\n Set,\n URLSearchParams,\n WeakMap,\n WeakSet,\n]);\n\nexport function isAllowedConstructor(constructor: unknown): boolean {\n // `Date` maybe mocked when running tests for storyboard functions.\n return (\n allowedConstructors.has(constructor as ArrayConstructor) ||\n constructor === Date\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,
|
|
1
|
+
{"version":3,"file":"sanitize.js","names":["getGlobal","self","window","global","Error","reservedObjects","WeakSet","Function","Object","prototype","sanitize","cooked","has","TypeError","allowedConstructors","Array","Map","Set","URLSearchParams","WeakMap","isAllowedConstructor","constructor","Date"],"sources":["../../src/sanitize.ts"],"sourcesContent":["// Ref https://github.com/tc39/proposal-global\n// In addition, the es6-shim had to switch from Function('return this')()\n// due to CSP concerns, such that the current check to handle browsers,\n// node, web workers, and frames is:\n// istanbul ignore next\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getGlobal(): object {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw new Error(\"unable to locate global object\");\n}\n\n/**\n * There are chances to construct a `Function` from a string, etc.\n * ```\n * ((a,b)=>a[b])(()=>1, 'constructor')('console.log(`yo`)')()\n * ```\n */\nconst reservedObjects = new WeakSet([\n // `Function(\"...\")` is considered *extremely vulnerable*.\n Function,\n // `Object.assign()` is considered vulnerable.\n Object,\n // `prototype` is considered vulnerable.\n Function.prototype,\n Object.prototype,\n // Global `window` is considered vulnerable, too.\n getGlobal(),\n]);\n\nexport function sanitize(cooked: unknown): void {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (reservedObjects.has(cooked as object)) {\n throw new TypeError(\"Cannot access reserved objects such as `Function`.\");\n }\n}\n\nconst allowedConstructors = new WeakSet([\n Array,\n Map,\n Set,\n URLSearchParams,\n WeakMap,\n WeakSet,\n]);\n\nexport function isAllowedConstructor(constructor: unknown): boolean {\n // `Date` maybe mocked when running tests for storyboard functions.\n return (\n allowedConstructors.has(constructor as ArrayConstructor) ||\n constructor === Date\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAS,GAAW;EAC3B;EACA;EACA;EACA,IAAI,OAAOC,IAAI,KAAK,WAAW,EAAE;IAC/B,OAAOA,IAAI;EACb;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,MAAM,IAAIC,KAAK,CAAC,gCAAgC,CAAC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,eAAe,GAAG,IAAIC,OAAO,CAAC;AAClC;AACAC,QAAQ;AACR;AACAC,MAAM;AACN;AACAD,QAAQ,CAACE,SAAS,EAClBD,MAAM,CAACC,SAAS;AAChB;AACAT,SAAS,EAAE,CACZ,CAAC;AAEF,OAAO,SAASU,QAAQ,CAACC,MAAe,EAAQ;EAC9C;EACA,IAAIN,eAAe,CAACO,GAAG,CAACD,MAAM,CAAW,EAAE;IACzC,MAAM,IAAIE,SAAS,CAAC,oDAAoD,CAAC;EAC3E;AACF;AAEA,IAAMC,mBAAmB,GAAG,IAAIR,OAAO,CAAC,CACtCS,KAAK,EACLC,GAAG,EACHC,GAAG,EACHC,eAAe,EACfC,OAAO,EACPb,OAAO,CACR,CAAC;AAEF,OAAO,SAASc,oBAAoB,CAACC,WAAoB,EAAW;EAClE;EACA,OACEP,mBAAmB,CAACF,GAAG,CAACS,WAAW,CAAqB,IACxDA,WAAW,KAAKC,IAAI;AAExB"}
|
package/dist/esm/traverse.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export function collectBoundNames(root) {
|
|
2
2
|
var names = new Set();
|
|
3
|
-
|
|
4
3
|
var collect = node => {
|
|
5
4
|
if (Array.isArray(node)) {
|
|
6
5
|
for (var n of node) {
|
|
@@ -12,34 +11,25 @@ export function collectBoundNames(root) {
|
|
|
12
11
|
case "Identifier":
|
|
13
12
|
names.add(node.name);
|
|
14
13
|
return;
|
|
15
|
-
|
|
16
14
|
case "VariableDeclaration":
|
|
17
15
|
return collect(node.declarations);
|
|
18
|
-
|
|
19
16
|
case "VariableDeclarator":
|
|
20
17
|
return collect(node.id);
|
|
21
|
-
|
|
22
18
|
case "ArrayPattern":
|
|
23
19
|
return collect(node.elements);
|
|
24
|
-
|
|
25
20
|
case "AssignmentPattern":
|
|
26
21
|
return collect(node.left);
|
|
27
|
-
|
|
28
22
|
case "ObjectPattern":
|
|
29
23
|
return collect(node.properties);
|
|
30
|
-
|
|
31
24
|
case "Property":
|
|
32
25
|
return collect(node.value);
|
|
33
|
-
|
|
34
26
|
case "RestElement":
|
|
35
27
|
return collect(node.argument);
|
|
36
|
-
|
|
37
28
|
case "FunctionDeclaration":
|
|
38
29
|
return collect(node.id);
|
|
39
30
|
}
|
|
40
31
|
}
|
|
41
32
|
};
|
|
42
|
-
|
|
43
33
|
collect(root);
|
|
44
34
|
return Array.from(names);
|
|
45
35
|
}
|
|
@@ -52,22 +42,17 @@ export function containsExpression(root) {
|
|
|
52
42
|
switch (node.type) {
|
|
53
43
|
case "ArrayPattern":
|
|
54
44
|
return collect(node.elements);
|
|
55
|
-
|
|
56
45
|
case "AssignmentPattern":
|
|
57
46
|
return true;
|
|
58
|
-
|
|
59
47
|
case "ObjectPattern":
|
|
60
48
|
return collect(node.properties);
|
|
61
|
-
|
|
62
49
|
case "Property":
|
|
63
50
|
return node.computed || collect(node.value);
|
|
64
|
-
|
|
65
51
|
case "RestElement":
|
|
66
52
|
return collect(node.argument);
|
|
67
53
|
}
|
|
68
54
|
}
|
|
69
55
|
};
|
|
70
|
-
|
|
71
56
|
return collect(root);
|
|
72
57
|
}
|
|
73
58
|
export function collectScopedDeclarations(root, options) {
|
|
@@ -75,7 +60,6 @@ export function collectScopedDeclarations(root, options) {
|
|
|
75
60
|
var nextOptions = {
|
|
76
61
|
var: options.var
|
|
77
62
|
};
|
|
78
|
-
|
|
79
63
|
var collect = (node, options) => {
|
|
80
64
|
if (Array.isArray(node)) {
|
|
81
65
|
for (var n of node) {
|
|
@@ -91,56 +75,44 @@ export function collectScopedDeclarations(root, options) {
|
|
|
91
75
|
if (Number(!options.var) ^ Number(options.topLevel)) {
|
|
92
76
|
declarations.push(node);
|
|
93
77
|
}
|
|
94
|
-
|
|
95
78
|
return;
|
|
96
|
-
|
|
97
79
|
case "VariableDeclaration":
|
|
98
80
|
if (Number(!options.var) ^ Number(node.kind === "var")) {
|
|
99
81
|
declarations.push(node);
|
|
100
82
|
}
|
|
101
|
-
|
|
102
83
|
return;
|
|
103
|
-
|
|
104
84
|
case "SwitchCase":
|
|
105
85
|
collect(node.consequent, nextOptions);
|
|
106
86
|
return;
|
|
107
|
-
|
|
108
87
|
case "CatchClause":
|
|
109
88
|
collect(node.body, nextOptions);
|
|
110
89
|
return;
|
|
111
90
|
}
|
|
112
|
-
|
|
113
91
|
if (options.var) {
|
|
114
92
|
switch (node.type) {
|
|
115
93
|
case "BlockStatement":
|
|
116
94
|
collect(node.body, nextOptions);
|
|
117
95
|
return;
|
|
118
|
-
|
|
119
96
|
case "IfStatement":
|
|
120
97
|
collect(node.consequent, nextOptions);
|
|
121
98
|
collect(node.alternate, nextOptions);
|
|
122
99
|
return;
|
|
123
|
-
|
|
124
100
|
case "DoWhileStatement":
|
|
125
101
|
case "WhileStatement":
|
|
126
102
|
collect(node.body, nextOptions);
|
|
127
103
|
return;
|
|
128
|
-
|
|
129
104
|
case "ForStatement":
|
|
130
105
|
collect(node.init, nextOptions);
|
|
131
106
|
collect(node.body, nextOptions);
|
|
132
107
|
return;
|
|
133
|
-
|
|
134
108
|
case "ForInStatement":
|
|
135
109
|
case "ForOfStatement":
|
|
136
110
|
collect(node.left, nextOptions);
|
|
137
111
|
collect(node.body, nextOptions);
|
|
138
112
|
return;
|
|
139
|
-
|
|
140
113
|
case "SwitchStatement":
|
|
141
114
|
collect(node.cases, nextOptions);
|
|
142
115
|
return;
|
|
143
|
-
|
|
144
116
|
case "TryStatement":
|
|
145
117
|
collect(node.block, nextOptions);
|
|
146
118
|
collect(node.handler, nextOptions);
|
|
@@ -150,7 +122,6 @@ export function collectScopedDeclarations(root, options) {
|
|
|
150
122
|
}
|
|
151
123
|
}
|
|
152
124
|
};
|
|
153
|
-
|
|
154
125
|
collect(root, options);
|
|
155
126
|
return declarations;
|
|
156
127
|
}
|
package/dist/esm/traverse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse.js","names":["collectBoundNames","root","names","Set","collect","node","Array","isArray","n","type","add","name","declarations","id","elements","left","properties","value","argument","from","containsExpression","some","computed","collectScopedDeclarations","options","nextOptions","var","Number","topLevel","push","kind","consequent","body","alternate","init","cases","block","handler","finalizer"],"sources":["../../src/traverse.ts"],"sourcesContent":["import { FunctionDeclaration, VariableDeclaration } from \"@babel/types\";\nimport { EstreeNode, NodeWithBoundNames } from \"./interfaces\";\n\ntype InternalCollect<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options?: O\n) => T;\ntype InternalCollectWithOptions<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options: O\n) => T;\n\nexport function collectBoundNames(\n root: NodeWithBoundNames | NodeWithBoundNames[]\n): string[] {\n const names = new Set<string>();\n const collect: InternalCollect = (node) => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"Identifier\":\n names.add(node.name);\n return;\n case \"VariableDeclaration\":\n return collect(node.declarations);\n case \"VariableDeclarator\":\n return collect(node.id);\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return collect(node.left);\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n case \"FunctionDeclaration\":\n return collect(node.id);\n }\n }\n };\n collect(root);\n return Array.from(names);\n}\n\nexport function containsExpression(root: EstreeNode | EstreeNode[]): boolean {\n const collect: InternalCollect<boolean> = (node) => {\n if (Array.isArray(node)) {\n return node.some(collect);\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return true;\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return node.computed || collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n }\n }\n };\n return collect(root);\n}\n\ninterface ScopedDeclarationOptions {\n var?: boolean;\n topLevel?: boolean;\n}\n\ntype ScopedDeclaration = VariableDeclaration | FunctionDeclaration;\n\nexport function collectScopedDeclarations(\n root: EstreeNode | EstreeNode[],\n options: ScopedDeclarationOptions\n): ScopedDeclaration[] {\n const declarations: ScopedDeclaration[] = [];\n const nextOptions = { var: options.var };\n const collect: InternalCollectWithOptions<void, ScopedDeclarationOptions> = (\n node,\n options\n ): void => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n, options);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"FunctionDeclaration\":\n // At the top level of a function, or script, function declarations are\n // treated like var declarations rather than like lexical declarations.\n // See https://tc39.es/ecma262/#sec-static-semantics-toplevellexicallydeclarednames\n if (Number(!options.var) ^ Number(options.topLevel)) {\n declarations.push(node);\n }\n return;\n case \"VariableDeclaration\":\n if (Number(!options.var) ^ Number(node.kind === \"var\")) {\n declarations.push(node);\n }\n return;\n case \"SwitchCase\":\n collect(node.consequent, nextOptions);\n return;\n case \"CatchClause\":\n collect(node.body, nextOptions);\n return;\n }\n if (options.var) {\n switch (node.type) {\n case \"BlockStatement\":\n collect(node.body, nextOptions);\n return;\n case \"IfStatement\":\n collect(node.consequent, nextOptions);\n collect(node.alternate, nextOptions);\n return;\n case \"DoWhileStatement\":\n case \"WhileStatement\":\n collect(node.body, nextOptions);\n return;\n case \"ForStatement\":\n collect(node.init, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n collect(node.left, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"SwitchStatement\":\n collect(node.cases, nextOptions);\n return;\n case \"TryStatement\":\n collect(node.block, nextOptions);\n collect(node.handler, nextOptions);\n collect(node.finalizer, nextOptions);\n return;\n }\n }\n }\n };\n collect(root, options);\n return declarations;\n}\n"],"mappings":"AAYA,OAAO,SAASA,
|
|
1
|
+
{"version":3,"file":"traverse.js","names":["collectBoundNames","root","names","Set","collect","node","Array","isArray","n","type","add","name","declarations","id","elements","left","properties","value","argument","from","containsExpression","some","computed","collectScopedDeclarations","options","nextOptions","var","Number","topLevel","push","kind","consequent","body","alternate","init","cases","block","handler","finalizer"],"sources":["../../src/traverse.ts"],"sourcesContent":["import { FunctionDeclaration, VariableDeclaration } from \"@babel/types\";\nimport { EstreeNode, NodeWithBoundNames } from \"./interfaces\";\n\ntype InternalCollect<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options?: O\n) => T;\ntype InternalCollectWithOptions<T = void, O = unknown> = (\n node: EstreeNode | EstreeNode[],\n options: O\n) => T;\n\nexport function collectBoundNames(\n root: NodeWithBoundNames | NodeWithBoundNames[]\n): string[] {\n const names = new Set<string>();\n const collect: InternalCollect = (node) => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"Identifier\":\n names.add(node.name);\n return;\n case \"VariableDeclaration\":\n return collect(node.declarations);\n case \"VariableDeclarator\":\n return collect(node.id);\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return collect(node.left);\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n case \"FunctionDeclaration\":\n return collect(node.id);\n }\n }\n };\n collect(root);\n return Array.from(names);\n}\n\nexport function containsExpression(root: EstreeNode | EstreeNode[]): boolean {\n const collect: InternalCollect<boolean> = (node) => {\n if (Array.isArray(node)) {\n return node.some(collect);\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return true;\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return node.computed || collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n }\n }\n };\n return collect(root);\n}\n\ninterface ScopedDeclarationOptions {\n var?: boolean;\n topLevel?: boolean;\n}\n\ntype ScopedDeclaration = VariableDeclaration | FunctionDeclaration;\n\nexport function collectScopedDeclarations(\n root: EstreeNode | EstreeNode[],\n options: ScopedDeclarationOptions\n): ScopedDeclaration[] {\n const declarations: ScopedDeclaration[] = [];\n const nextOptions = { var: options.var };\n const collect: InternalCollectWithOptions<void, ScopedDeclarationOptions> = (\n node,\n options\n ): void => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n, options);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"FunctionDeclaration\":\n // At the top level of a function, or script, function declarations are\n // treated like var declarations rather than like lexical declarations.\n // See https://tc39.es/ecma262/#sec-static-semantics-toplevellexicallydeclarednames\n if (Number(!options.var) ^ Number(options.topLevel)) {\n declarations.push(node);\n }\n return;\n case \"VariableDeclaration\":\n if (Number(!options.var) ^ Number(node.kind === \"var\")) {\n declarations.push(node);\n }\n return;\n case \"SwitchCase\":\n collect(node.consequent, nextOptions);\n return;\n case \"CatchClause\":\n collect(node.body, nextOptions);\n return;\n }\n if (options.var) {\n switch (node.type) {\n case \"BlockStatement\":\n collect(node.body, nextOptions);\n return;\n case \"IfStatement\":\n collect(node.consequent, nextOptions);\n collect(node.alternate, nextOptions);\n return;\n case \"DoWhileStatement\":\n case \"WhileStatement\":\n collect(node.body, nextOptions);\n return;\n case \"ForStatement\":\n collect(node.init, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n collect(node.left, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"SwitchStatement\":\n collect(node.cases, nextOptions);\n return;\n case \"TryStatement\":\n collect(node.block, nextOptions);\n collect(node.handler, nextOptions);\n collect(node.finalizer, nextOptions);\n return;\n }\n }\n }\n };\n collect(root, options);\n return declarations;\n}\n"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parse } from "@babel/parser";
|
|
1
2
|
import { Expression, FunctionDeclaration, LVal, Node, ObjectExpression, ObjectPattern, ObjectProperty, RestElement, SourceLocation, SpreadElement, VariableDeclaration } from "@babel/types";
|
|
2
3
|
export declare type EstreeNode = Node | EstreeObjectExpression | EstreeObjectPattern | EstreeProperty | EstreeChainExpression | EstreeLiteral;
|
|
3
4
|
export declare type EstreeLVal = LVal | EstreeObjectPattern;
|
|
@@ -31,3 +32,4 @@ export declare type EstreeVisitorFn = (node: any) => void;
|
|
|
31
32
|
export interface CookRules {
|
|
32
33
|
noVar?: boolean;
|
|
33
34
|
}
|
|
35
|
+
export declare type ParseResultOfFile = ReturnType<typeof parse>;
|
package/dist/types/lint.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { CookRules } from "./interfaces";
|
|
1
|
+
import { SourceLocation } from "@babel/types";
|
|
2
|
+
import type { CookRules, ParseResultOfFile } from "./interfaces";
|
|
4
3
|
export interface LintOptions {
|
|
5
4
|
typescript?: boolean;
|
|
6
5
|
rules?: CookRules;
|
|
@@ -11,4 +10,4 @@ export interface LintError {
|
|
|
11
10
|
loc: SourceLocation;
|
|
12
11
|
}
|
|
13
12
|
/** For next-core internal or devtools usage only. */
|
|
14
|
-
export declare function lint(source: string |
|
|
13
|
+
export declare function lint(source: string | ParseResultOfFile, { typescript, rules }?: LintOptions): LintError[];
|
package/dist/types/parse.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { Expression, FunctionDeclaration } from "@babel/types";
|
|
2
|
+
import type { ParseResultOfFile } from "./interfaces";
|
|
3
3
|
export declare function parseAsEstreeExpression(source: string): Expression;
|
|
4
4
|
export interface ParseEstreeOptions {
|
|
5
5
|
typescript?: boolean;
|
|
@@ -10,4 +10,4 @@ export interface AnalysisOptions {
|
|
|
10
10
|
tokens?: boolean;
|
|
11
11
|
}
|
|
12
12
|
/** For next-core internal or devtools usage only. */
|
|
13
|
-
export declare function parseForAnalysis(source: string, { typescript, tokens }?: AnalysisOptions):
|
|
13
|
+
export declare function parseForAnalysis(source: string, { typescript, tokens }?: AnalysisOptions): ParseResultOfFile;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/cook",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.79",
|
|
4
4
|
"description": "Cook expressions and storyboard functions",
|
|
5
5
|
"homepage": "https://github.com/easyops-cn/next-core/tree/master/packages/cook",
|
|
6
6
|
"license": "GPL-3.0",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
"sideEffects": false,
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@babel/parser": "^7.
|
|
33
|
-
"@next-core/brick-types": "^2.82.
|
|
32
|
+
"@babel/parser": "^7.20.5",
|
|
33
|
+
"@next-core/brick-types": "^2.82.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@next-core/build-next-libs": "^0.2.
|
|
37
|
-
"@next-core/supply": "^1.0.
|
|
36
|
+
"@next-core/build-next-libs": "^0.2.16",
|
|
37
|
+
"@next-core/supply": "^1.0.89",
|
|
38
38
|
"lodash": "^4.17.21"
|
|
39
39
|
},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "c1040bc38d16aa9fd662bd27ccbcd464b073aa63"
|
|
41
41
|
}
|