@next-core/cook 2.2.13 → 2.2.15

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.
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","names":["_parseForAnalysis","require","_precook","lint","source","typescript","rules","errors","file","parseForAnalysis","body","program","jsNodes","node","type","startsWith","test","push","message","loc","func","isFunctionDeclaration","unshift","start","line","column","end","precook","hooks","beforeVisit","async","generator","regex","value","flags","includes","prop","properties","kind","computed","key","name","noVar","beforeVisitGlobal","beforeVisitUnknown"],"sources":["../../src/lint.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { type FunctionDeclaration, Statement } from \"@babel/types\";\nimport type { CookRules, ParseResultOfFile } from \"./interfaces.js\";\nimport { parseForAnalysis } from \"./parseForAnalysis.js\";\nimport { precook } from \"./precook.js\";\n\nexport interface LintOptions {\n typescript?: boolean;\n rules?: CookRules;\n}\n\nexport interface LintError {\n type: \"SyntaxError\" | \"TypeError\";\n message: string;\n loc: {\n start: {\n line: number;\n column: number;\n };\n end: {\n line: number;\n column: number;\n };\n };\n}\n\n/** For next-core internal or devtools usage only. */\nexport function lint(\n source: string | ParseResultOfFile | null,\n { typescript, rules }: LintOptions = {}\n): LintError[] {\n const errors: LintError[] = [];\n const file =\n typeof source === \"string\"\n ? parseForAnalysis(source, { typescript })\n : source;\n if (!file) {\n // Return no errors if parse failed.\n return errors;\n }\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported TypeScript syntax: \\`${node.type}\\``,\n loc: node.loc!,\n });\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n let func: FunctionDeclaration | undefined;\n for (const node of jsNodes) {\n const isFunctionDeclaration = node.type === \"FunctionDeclaration\";\n if (isFunctionDeclaration && !func) {\n func = node;\n } else {\n errors.push({\n type: \"SyntaxError\",\n message: isFunctionDeclaration\n ? \"Expect a single function declaration\"\n : `\\`${node.type}\\` is not allowed in top level`,\n loc: node.loc!,\n });\n }\n }\n if (!func) {\n errors.unshift({\n type: \"SyntaxError\",\n message: \"Function declaration not found\",\n loc: {\n start: { line: 1, column: 0 },\n end: { line: 1, column: 0 },\n },\n });\n } else {\n precook(func, {\n hooks: {\n beforeVisit(node) {\n switch (node.type) {\n case \"ArrowFunctionExpression\":\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n if (node.async || node.generator) {\n errors.push({\n type: \"SyntaxError\",\n message: `${\n node.async ? \"Async\" : \"Generator\"\n } function is not allowed`,\n loc: node.loc!,\n });\n }\n break;\n case \"Literal\":\n if (node.regex) {\n if (node.value === null) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Invalid regular expression\",\n loc: node.loc,\n });\n } else if (node.regex.flags.includes(\"u\")) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported unicode flag in regular expression\",\n loc: node.loc,\n });\n }\n }\n break;\n case \"ObjectExpression\":\n for (const prop of node.properties) {\n if (prop.type === \"Property\") {\n if (prop.kind !== \"init\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported object getter/setter property\",\n loc: prop.loc!,\n });\n } else if (\n !prop.computed &&\n prop.key.type === \"Identifier\" &&\n prop.key.name === \"__proto__\"\n ) {\n errors.push({\n type: \"TypeError\",\n message: \"Setting '__proto__' property is not allowed\",\n loc: prop.key.loc!,\n });\n }\n }\n }\n break;\n case \"VariableDeclaration\":\n if (node.kind === \"var\" && rules?.noVar) {\n errors.push({\n type: \"SyntaxError\",\n message:\n \"Var declaration is not recommended, use `let` or `const` instead\",\n loc: {\n start: node.loc!.start,\n end: {\n line: node.loc!.start.line,\n // Only decorate the \"var\".\n column: node.loc!.start.column + 3,\n },\n },\n });\n }\n break;\n }\n },\n beforeVisitGlobal(node) {\n if (node.name === \"arguments\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Use the rest parameters instead of 'arguments'\",\n loc: node.loc!,\n });\n }\n },\n beforeVisitUnknown(node) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported syntax: \\`${node.type}\\``,\n loc: node.loc!,\n });\n return true;\n },\n },\n });\n }\n return errors;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"lint.js","names":["_parseForAnalysis","require","_precook","lint","source","typescript","rules","errors","file","parseForAnalysis","body","program","jsNodes","node","type","startsWith","test","push","message","loc","func","isFunctionDeclaration","unshift","start","line","column","end","precook","hooks","beforeVisit","async","generator","regex","value","flags","includes","prop","properties","kind","computed","key","name","noVar","beforeVisitGlobal","beforeVisitUnknown"],"sources":["../../src/lint.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { type FunctionDeclaration, Statement } from \"@babel/types\";\nimport type { CookRules, ParseResultOfFile } from \"./interfaces.js\";\nimport { parseForAnalysis } from \"./parseForAnalysis.js\";\nimport { precook } from \"./precook.js\";\n\nexport interface LintOptions {\n typescript?: boolean;\n rules?: CookRules;\n}\n\nexport interface LintError {\n type: \"SyntaxError\" | \"TypeError\";\n message: string;\n loc: {\n start: {\n line: number;\n column: number;\n };\n end: {\n line: number;\n column: number;\n };\n };\n}\n\n/** For next-core internal or devtools usage only. */\nexport function lint(\n source: string | ParseResultOfFile | null,\n { typescript, rules }: LintOptions = {}\n): LintError[] {\n const errors: LintError[] = [];\n const file =\n typeof source === \"string\"\n ? parseForAnalysis(source, { typescript })\n : source;\n if (!file) {\n // Return no errors if parse failed.\n return errors;\n }\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported TypeScript syntax: \\`${node.type}\\``,\n loc: node.loc!,\n });\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n let func: FunctionDeclaration | undefined;\n for (const node of jsNodes) {\n const isFunctionDeclaration = node.type === \"FunctionDeclaration\";\n if (isFunctionDeclaration && !func) {\n func = node;\n } else {\n errors.push({\n type: \"SyntaxError\",\n message: isFunctionDeclaration\n ? \"Expect a single function declaration\"\n : `\\`${node.type}\\` is not allowed in top level`,\n loc: node.loc!,\n });\n }\n }\n if (!func) {\n errors.unshift({\n type: \"SyntaxError\",\n message: \"Function declaration not found\",\n loc: {\n start: { line: 1, column: 0 },\n end: { line: 1, column: 0 },\n },\n });\n } else {\n precook(func, {\n hooks: {\n beforeVisit(node) {\n switch (node.type) {\n case \"ArrowFunctionExpression\":\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n if (node.async || node.generator) {\n errors.push({\n type: \"SyntaxError\",\n message: `${\n node.async ? \"Async\" : \"Generator\"\n } function is not allowed`,\n loc: node.loc!,\n });\n }\n break;\n case \"Literal\":\n if (node.regex) {\n if (node.value === null) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Invalid regular expression\",\n loc: node.loc,\n });\n } else if (node.regex.flags.includes(\"u\")) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported unicode flag in regular expression\",\n loc: node.loc,\n });\n }\n }\n break;\n case \"ObjectExpression\":\n for (const prop of node.properties) {\n if (prop.type === \"Property\") {\n if (prop.kind !== \"init\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported object getter/setter property\",\n loc: prop.loc!,\n });\n } else if (\n !prop.computed &&\n prop.key.type === \"Identifier\" &&\n prop.key.name === \"__proto__\"\n ) {\n errors.push({\n type: \"TypeError\",\n message: \"Setting '__proto__' property is not allowed\",\n loc: prop.key.loc!,\n });\n }\n }\n }\n break;\n case \"VariableDeclaration\":\n if (node.kind === \"var\" && rules?.noVar) {\n errors.push({\n type: \"SyntaxError\",\n message:\n \"Var declaration is not recommended, use `let` or `const` instead\",\n loc: {\n start: node.loc!.start,\n end: {\n line: node.loc!.start.line,\n // Only decorate the \"var\".\n column: node.loc!.start.column + 3,\n },\n },\n });\n }\n break;\n }\n },\n beforeVisitGlobal(node) {\n if (node.name === \"arguments\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Use the rest parameters instead of 'arguments'\",\n loc: node.loc!,\n });\n }\n },\n beforeVisitUnknown(node) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported syntax: \\`${node.type}\\``,\n loc: node.loc!,\n });\n return true;\n },\n },\n });\n }\n return errors;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","names":["_parser","require","parseAsEstreeExpression","source","parseExpression","plugins","proposal","attachComment","parseAsEstree","typescript","file","parse","filter","Boolean","strictMode","body","program","jsNodes","node","type","startsWith","test","SyntaxError","push","length","map","join"],"sources":["../../src/parse.ts"],"sourcesContent":["import { parse, parseExpression, type ParserPlugin } from \"@babel/parser\";\nimport type { Expression, FunctionDeclaration, Statement } from \"@babel/types\";\n\nexport function parseAsEstreeExpression(source: string): Expression {\n return parseExpression(source, {\n plugins: [\"estree\", [\"pipelineOperator\", { proposal: \"minimal\" }]],\n attachComment: false,\n });\n}\n\nexport interface ParseEstreeOptions {\n typescript?: boolean;\n}\n\nexport function parseAsEstree(\n source: string,\n { typescript }: ParseEstreeOptions = {}\n): FunctionDeclaration {\n const file = parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n });\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n throw new SyntaxError(`Unsupported TypeScript syntax: ${node.type}`);\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n if (jsNodes.length === 0) {\n throw new SyntaxError(\"Function declaration not found\");\n }\n if (jsNodes.length > 1 || jsNodes[0].type !== \"FunctionDeclaration\") {\n throw new SyntaxError(\n `Expect a single function declaration at top level, but received: ${jsNodes\n .map((node) => `\"${node.type}\"`)\n .join(\", \")}`\n );\n }\n return jsNodes[0] as FunctionDeclaration;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAGO,SAASC,uBAAuBA,CAACC,MAAc,EAAc;EAClE,OAAO,IAAAC,uBAAe,EAACD,MAAM,EAAE;IAC7BE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,kBAAkB,EAAE;MAAEC,QAAQ,EAAE;IAAU,CAAC,CAAC,CAAC;IAClEC,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAMO,SAASC,aAAaA,CAC3BL,MAAc,EACd;EAAEM;AAA+B,CAAC,GAAG,CAAC,CAAC,EAClB;EACrB,MAAMC,IAAI,GAAG,IAAAC,aAAK,EAACR,MAAM,EAAE;IACzBE,OAAO,EAAE,CAAC,QAAQ,EAAEI,UAAU,IAAI,YAAY,CAAC,CAACG,MAAM,CACpDC,OACF,CAAmB;IACnBC,UAAU,EAAE,IAAI;IAChBP,aAAa,EAAE;EACjB,CAAC,CAAC;EACF,MAAMQ,IAAI,GAAGL,IAAI,CAACM,OAAO,CAACD,IAAI;EAC9B,MAAME,OAAoB,GAAGR,UAAU,GAAG,EAAE,GAAGM,IAAI;EACnD,IAAIN,UAAU,EAAE;IACd,KAAK,MAAMS,IAAI,IAAIH,IAAI,EAAE;MACvB,IAAIG,IAAI,CAACC,IAAI,CAACC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC9B,IAAI,oBAAoB,CAACC,IAAI,CAACH,IAAI,CAACC,IAAI,CAAC,EAAE;UACxC,MAAM,IAAIG,WAAW,CAAE,kCAAiCJ,IAAI,CAACC,IAAK,EAAC,CAAC;QACtE;MACF,CAAC,MAAM;QACLF,OAAO,CAACM,IAAI,CAACL,IAAI,CAAC;MACpB;IACF;EACF;EACA,IAAID,OAAO,CAACO,MAAM,KAAK,CAAC,EAAE;IACxB,MAAM,IAAIF,WAAW,CAAC,gCAAgC,CAAC;EACzD;EACA,IAAIL,OAAO,CAACO,MAAM,GAAG,CAAC,IAAIP,OAAO,CAAC,CAAC,CAAC,CAACE,IAAI,KAAK,qBAAqB,EAAE;IACnE,MAAM,IAAIG,WAAW,CAClB,oEAAmEL,OAAO,CACxEQ,GAAG,CAAEP,IAAI,IAAM,IAAGA,IAAI,CAACC,IAAK,GAAE,CAAC,CAC/BO,IAAI,CAAC,IAAI,CAAE,EAChB,CAAC;EACH;EACA,OAAOT,OAAO,CAAC,CAAC,CAAC;AACnB"}
1
+ {"version":3,"file":"parse.js","names":["_parser","require","parseAsEstreeExpression","source","parseExpression","plugins","proposal","attachComment","parseAsEstree","typescript","file","parse","filter","Boolean","strictMode","body","program","jsNodes","node","type","startsWith","test","SyntaxError","push","length","map","join"],"sources":["../../src/parse.ts"],"sourcesContent":["import { parse, parseExpression, type ParserPlugin } from \"@babel/parser\";\nimport type { Expression, FunctionDeclaration, Statement } from \"@babel/types\";\n\nexport function parseAsEstreeExpression(source: string): Expression {\n return parseExpression(source, {\n plugins: [\"estree\", [\"pipelineOperator\", { proposal: \"minimal\" }]],\n attachComment: false,\n });\n}\n\nexport interface ParseEstreeOptions {\n typescript?: boolean;\n}\n\nexport function parseAsEstree(\n source: string,\n { typescript }: ParseEstreeOptions = {}\n): FunctionDeclaration {\n const file = parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n });\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n throw new SyntaxError(`Unsupported TypeScript syntax: ${node.type}`);\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n if (jsNodes.length === 0) {\n throw new SyntaxError(\"Function declaration not found\");\n }\n if (jsNodes.length > 1 || jsNodes[0].type !== \"FunctionDeclaration\") {\n throw new SyntaxError(\n `Expect a single function declaration at top level, but received: ${jsNodes\n .map((node) => `\"${node.type}\"`)\n .join(\", \")}`\n );\n }\n return jsNodes[0] as FunctionDeclaration;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAGO,SAASC,uBAAuBA,CAACC,MAAc,EAAc;EAClE,OAAO,IAAAC,uBAAe,EAACD,MAAM,EAAE;IAC7BE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,kBAAkB,EAAE;MAAEC,QAAQ,EAAE;IAAU,CAAC,CAAC,CAAC;IAClEC,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAMO,SAASC,aAAaA,CAC3BL,MAAc,EACd;EAAEM;AAA+B,CAAC,GAAG,CAAC,CAAC,EAClB;EACrB,MAAMC,IAAI,GAAG,IAAAC,aAAK,EAACR,MAAM,EAAE;IACzBE,OAAO,EAAE,CAAC,QAAQ,EAAEI,UAAU,IAAI,YAAY,CAAC,CAACG,MAAM,CACpDC,OACF,CAAmB;IACnBC,UAAU,EAAE,IAAI;IAChBP,aAAa,EAAE;EACjB,CAAC,CAAC;EACF,MAAMQ,IAAI,GAAGL,IAAI,CAACM,OAAO,CAACD,IAAI;EAC9B,MAAME,OAAoB,GAAGR,UAAU,GAAG,EAAE,GAAGM,IAAI;EACnD,IAAIN,UAAU,EAAE;IACd,KAAK,MAAMS,IAAI,IAAIH,IAAI,EAAE;MACvB,IAAIG,IAAI,CAACC,IAAI,CAACC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC9B,IAAI,oBAAoB,CAACC,IAAI,CAACH,IAAI,CAACC,IAAI,CAAC,EAAE;UACxC,MAAM,IAAIG,WAAW,CAAE,kCAAiCJ,IAAI,CAACC,IAAK,EAAC,CAAC;QACtE;MACF,CAAC,MAAM;QACLF,OAAO,CAACM,IAAI,CAACL,IAAI,CAAC;MACpB;IACF;EACF;EACA,IAAID,OAAO,CAACO,MAAM,KAAK,CAAC,EAAE;IACxB,MAAM,IAAIF,WAAW,CAAC,gCAAgC,CAAC;EACzD;EACA,IAAIL,OAAO,CAACO,MAAM,GAAG,CAAC,IAAIP,OAAO,CAAC,CAAC,CAAC,CAACE,IAAI,KAAK,qBAAqB,EAAE;IACnE,MAAM,IAAIG,WAAW,CAClB,oEAAmEL,OAAO,CACxEQ,GAAG,CAAEP,IAAI,IAAM,IAAGA,IAAI,CAACC,IAAK,GAAE,CAAC,CAC/BO,IAAI,CAAC,IAAI,CAAE,EAChB,CAAC;EACH;EACA,OAAOT,OAAO,CAAC,CAAC,CAAC;AACnB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"parseForAnalysis.js","names":["_parser","require","parseForAnalysis","source","typescript","tokens","parse","plugins","filter","Boolean","strictMode","attachComment","sourceType","e"],"sources":["../../src/parseForAnalysis.ts"],"sourcesContent":["import { parse, type ParserPlugin } from \"@babel/parser\";\nimport { ParseResultOfFile } from \"./interfaces.js\";\n\nexport interface AnalysisOptions {\n typescript?: boolean;\n tokens?: boolean;\n}\n\n/** For next-core internal or devtools usage only. */\nexport function parseForAnalysis(\n source: string,\n { typescript, tokens }: AnalysisOptions = {}\n): ParseResultOfFile | null {\n try {\n return parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n // Allow export/import declarations to make analyser handle errors.\n sourceType: \"unambiguous\",\n tokens,\n });\n } catch (e) {\n // Return no errors if parse failed.\n return null;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAQA;AACO,SAASC,gBAAgBA,CAC9BC,MAAc,EACd;EAAEC,UAAU;EAAEC;AAAwB,CAAC,GAAG,CAAC,CAAC,EAClB;EAC1B,IAAI;IACF,OAAO,IAAAC,aAAK,EAACH,MAAM,EAAE;MACnBI,OAAO,EAAE,CAAC,QAAQ,EAAEH,UAAU,IAAI,YAAY,CAAC,CAACI,MAAM,CACpDC,OACF,CAAmB;MACnBC,UAAU,EAAE,IAAI;MAChBC,aAAa,EAAE,KAAK;MACpB;MACAC,UAAU,EAAE,aAAa;MACzBP;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOQ,CAAC,EAAE;IACV;IACA,OAAO,IAAI;EACb;AACF"}
1
+ {"version":3,"file":"parseForAnalysis.js","names":["_parser","require","parseForAnalysis","source","typescript","tokens","parse","plugins","filter","Boolean","strictMode","attachComment","sourceType","e"],"sources":["../../src/parseForAnalysis.ts"],"sourcesContent":["import { parse, type ParserPlugin } from \"@babel/parser\";\nimport { ParseResultOfFile } from \"./interfaces.js\";\n\nexport interface AnalysisOptions {\n typescript?: boolean;\n tokens?: boolean;\n}\n\n/** For next-core internal or devtools usage only. */\nexport function parseForAnalysis(\n source: string,\n { typescript, tokens }: AnalysisOptions = {}\n): ParseResultOfFile | null {\n try {\n return parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n // Allow export/import declarations to make analyser handle errors.\n sourceType: \"unambiguous\",\n tokens,\n });\n } catch (e) {\n // Return no errors if parse failed.\n return null;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAQA;AACO,SAASC,gBAAgBA,CAC9BC,MAAc,EACd;EAAEC,UAAU;EAAEC;AAAwB,CAAC,GAAG,CAAC,CAAC,EAClB;EAC1B,IAAI;IACF,OAAO,IAAAC,aAAK,EAACH,MAAM,EAAE;MACnBI,OAAO,EAAE,CAAC,QAAQ,EAAEH,UAAU,IAAI,YAAY,CAAC,CAACI,MAAM,CACpDC,OACF,CAAmB;MACnBC,UAAU,EAAE,IAAI;MAChBC,aAAa,EAAE,KAAK;MACpB;MACAC,UAAU,EAAE,aAAa;MACzBP;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOQ,CAAC,EAAE;IACV;IACA,OAAO,IAAI;EACb;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"precook.js","names":["_hasOwnProperty","require","_AnalysisContext","_traverse","precook","rootAst","expressionOnly","visitors","withParent","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","AnalysisEnvironment","rootContext","AnalysisContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","hasOwnProperty","type","EvaluateChildren","keys","parent","key","Evaluate","concat","Array","isArray","forEach","n","index","slice","_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","collectBoundNames","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","cases","silent","beforeVisitUnknown","console","warn","declarations","GetIdentifierReference","HasBinding","OuterEnv","code","collectScopedDeclarations","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","Function","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","containsExpression","varDeclarations","varNames","varEnv","lexEnv","lexDeclarations","functionExpression","scope","id","funcEnv","params","undefined"],"sources":["../../src/precook.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty.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":"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"}
1
+ {"version":3,"file":"precook.js","names":["_hasOwnProperty","require","_AnalysisContext","_traverse","precook","rootAst","expressionOnly","visitors","withParent","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","AnalysisEnvironment","rootContext","AnalysisContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","hasOwnProperty","type","EvaluateChildren","keys","parent","key","Evaluate","concat","Array","isArray","forEach","n","index","slice","_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","collectBoundNames","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","cases","silent","beforeVisitUnknown","console","warn","declarations","GetIdentifierReference","HasBinding","OuterEnv","code","collectScopedDeclarations","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","Function","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","containsExpression","varDeclarations","varNames","varEnv","lexEnv","lexDeclarations","functionExpression","scope","id","funcEnv","params","undefined"],"sources":["../../src/precook.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty.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":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"precookFunction.js","names":["_parse","require","_precook","precookFunction","source","typescript","restOptions","func","parseAsEstree","attemptToVisitGlobals","precook","function"],"sources":["../../src/precookFunction.ts"],"sourcesContent":["import { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\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,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAWO,SAASE,eAAeA,CAC7BC,MAAc,EACd;EAAEC,UAAU;EAAE,GAAGC;AAAoC,CAAC,GAAG,CAAC,CAAC,EACpC;EACvB,MAAMC,IAAI,GAAG,IAAAC,oBAAa,EAACJ,MAAM,EAAE;IAAEC;EAAW,CAAC,CAAC;EAClD,MAAMI,qBAAqB,GAAG,IAAAC,gBAAO,EAACH,IAAI,EAAED,WAAW,CAAC;EACxD,OAAO;IACLK,QAAQ,EAAEJ,IAAI;IACdE;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"precookFunction.js","names":["_parse","require","_precook","precookFunction","source","typescript","restOptions","func","parseAsEstree","attemptToVisitGlobals","precook","function"],"sources":["../../src/precookFunction.ts"],"sourcesContent":["import { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\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,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAWO,SAASE,eAAeA,CAC7BC,MAAc,EACd;EAAEC,UAAU;EAAE,GAAGC;AAAoC,CAAC,GAAG,CAAC,CAAC,EACpC;EACvB,MAAMC,IAAI,GAAG,IAAAC,oBAAa,EAACJ,MAAM,EAAE;IAAEC;EAAW,CAAC,CAAC;EAClD,MAAMI,qBAAqB,GAAG,IAAAC,gBAAO,EAACH,IAAI,EAAED,WAAW,CAAC;EACxD,OAAO;IACLK,QAAQ,EAAEJ,IAAI;IACdE;EACF,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"preevaluate.js","names":["_parse","require","_precook","preevaluate","raw","options","fixes","source","replace","m","push","expression","parseAsEstreeExpression","attemptToVisitGlobals","precook","expressionOnly","prefix","suffix","isEvaluable","test","shouldAllowRecursiveEvaluations","isTrackAll"],"sources":["../../src/preevaluate.ts"],"sourcesContent":["import { Expression } from \"@babel/types\";\nimport { parseAsEstreeExpression } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\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\nexport function isTrackAll(raw: string): boolean {\n return /^\\s*<%=\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAYA;AACO,SAASE,WAAWA,CACzBC,GAAW,EACXC,OAA4B,EACT;EACnB,MAAMC,KAAe,GAAG,EAAE;EAC1B,MAAMC,MAAM,GAAGH,GAAG,CAACI,OAAO,CAAC,yBAAyB,EAAGC,CAAC,IAAK;IAC3DH,KAAK,CAACI,IAAI,CAACD,CAAC,CAAC;IACb,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAME,UAAU,GAAG,IAAAC,8BAAuB,EAACL,MAAM,CAAC;EAClD,MAAMM,qBAAqB,GAAG,IAAAC,gBAAO,EAACH,UAAU,EAAE;IAChD,GAAGN,OAAO;IACVU,cAAc,EAAE;EAClB,CAAC,CAAC;EACF,OAAO;IACLJ,UAAU;IACVE,qBAAqB;IACrBN,MAAM;IACNS,MAAM,EAAEV,KAAK,CAAC,CAAC,CAAC;IAChBW,MAAM,EAAEX,KAAK,CAAC,CAAC;EACjB,CAAC;AACH;AAEO,SAASY,WAAWA,CAACd,GAAW,EAAW;EAChD,OAAO,eAAe,CAACe,IAAI,CAACf,GAAG,CAAC,IAAI,UAAU,CAACe,IAAI,CAACf,GAAG,CAAC;AAC1D;AAEO,SAASgB,+BAA+BA,CAAChB,GAAW,EAAW;EACpE,OAAO,WAAW,CAACe,IAAI,CAACf,GAAG,CAAC;AAC9B;AAEO,SAASiB,UAAUA,CAACjB,GAAW,EAAW;EAC/C,OAAO,WAAW,CAACe,IAAI,CAACf,GAAG,CAAC,IAAI,UAAU,CAACe,IAAI,CAACf,GAAG,CAAC;AACtD"}
1
+ {"version":3,"file":"preevaluate.js","names":["_parse","require","_precook","preevaluate","raw","options","fixes","source","replace","m","push","expression","parseAsEstreeExpression","attemptToVisitGlobals","precook","expressionOnly","prefix","suffix","isEvaluable","test","shouldAllowRecursiveEvaluations","isTrackAll"],"sources":["../../src/preevaluate.ts"],"sourcesContent":["import { Expression } from \"@babel/types\";\nimport { parseAsEstreeExpression } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\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\nexport function isTrackAll(raw: string): boolean {\n return /^\\s*<%=\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAYA;AACO,SAASE,WAAWA,CACzBC,GAAW,EACXC,OAA4B,EACT;EACnB,MAAMC,KAAe,GAAG,EAAE;EAC1B,MAAMC,MAAM,GAAGH,GAAG,CAACI,OAAO,CAAC,yBAAyB,EAAGC,CAAC,IAAK;IAC3DH,KAAK,CAACI,IAAI,CAACD,CAAC,CAAC;IACb,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAME,UAAU,GAAG,IAAAC,8BAAuB,EAACL,MAAM,CAAC;EAClD,MAAMM,qBAAqB,GAAG,IAAAC,gBAAO,EAACH,UAAU,EAAE;IAChD,GAAGN,OAAO;IACVU,cAAc,EAAE;EAClB,CAAC,CAAC;EACF,OAAO;IACLJ,UAAU;IACVE,qBAAqB;IACrBN,MAAM;IACNS,MAAM,EAAEV,KAAK,CAAC,CAAC,CAAC;IAChBW,MAAM,EAAEX,KAAK,CAAC,CAAC;EACjB,CAAC;AACH;AAEO,SAASY,WAAWA,CAACd,GAAW,EAAW;EAChD,OAAO,eAAe,CAACe,IAAI,CAACf,GAAG,CAAC,IAAI,UAAU,CAACe,IAAI,CAACf,GAAG,CAAC;AAC1D;AAEO,SAASgB,+BAA+BA,CAAChB,GAAW,EAAW;EACpE,OAAO,WAAW,CAACe,IAAI,CAACf,GAAG,CAAC;AAC9B;AAEO,SAASiB,UAAUA,CAACjB,GAAW,EAAW;EAC/C,OAAO,WAAW,CAACe,IAAI,CAACf,GAAG,CAAC,IAAI,UAAU,CAACe,IAAI,CAACf,GAAG,CAAC;AACtD","ignoreList":[]}
@@ -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","RegExp","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 RegExp,\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,SAASA,CAAA,EAAW;EAC3B;EACA;EACA;EACA,IAAI,OAAOC,IAAI,KAAK,WAAW,EAAE;IAC/B,OAAOA,IAAI;EACb;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,MAAM,IAAIC,KAAK,CAAC,gCAAgC,CAAC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG,IAAIC,OAAO,CAAC;AAClC;AACAC,QAAQ;AACR;AACAC,MAAM;AACN;AACAD,QAAQ,CAACE,SAAS,EAClBD,MAAM,CAACC,SAAS;AAChB;AACAT,SAAS,CAAC,CAAC,CACZ,CAAC;AAEK,SAASU,QAAQA,CAACC,MAAe,EAAQ;EAC9C;EACA,IAAIN,eAAe,CAACO,GAAG,CAACD,MAAgB,CAAC,EAAE;IACzC,MAAM,IAAIE,SAAS,CAAC,oDAAoD,CAAC;EAC3E;AACF;AAEA,MAAMC,mBAAmB,GAAG,IAAIR,OAAO,CAAC,CACtCS,KAAK,EACLC,GAAG,EACHC,GAAG,EACHC,eAAe,EACfC,OAAO,EACPb,OAAO,EACPc,MAAM,CACP,CAAC;AAEK,SAASC,oBAAoBA,CAACC,WAAoB,EAAW;EAClE;EACA,OACER,mBAAmB,CAACF,GAAG,CAACU,WAA+B,CAAC,IACxDA,WAAW,KAAKC,IAAI;AAExB"}
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","RegExp","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 RegExp,\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,SAASA,CAAA,EAAW;EAC3B;EACA;EACA;EACA,IAAI,OAAOC,IAAI,KAAK,WAAW,EAAE;IAC/B,OAAOA,IAAI;EACb;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EACA,MAAM,IAAIC,KAAK,CAAC,gCAAgC,CAAC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG,IAAIC,OAAO,CAAC;AAClC;AACAC,QAAQ;AACR;AACAC,MAAM;AACN;AACAD,QAAQ,CAACE,SAAS,EAClBD,MAAM,CAACC,SAAS;AAChB;AACAT,SAAS,CAAC,CAAC,CACZ,CAAC;AAEK,SAASU,QAAQA,CAACC,MAAe,EAAQ;EAC9C;EACA,IAAIN,eAAe,CAACO,GAAG,CAACD,MAAgB,CAAC,EAAE;IACzC,MAAM,IAAIE,SAAS,CAAC,oDAAoD,CAAC;EAC3E;AACF;AAEA,MAAMC,mBAAmB,GAAG,IAAIR,OAAO,CAAC,CACtCS,KAAK,EACLC,GAAG,EACHC,GAAG,EACHC,eAAe,EACfC,OAAO,EACPb,OAAO,EACPc,MAAM,CACP,CAAC;AAEK,SAASC,oBAAoBA,CAACC,WAAoB,EAAW;EAClE;EACA,OACER,mBAAmB,CAACF,GAAG,CAACU,WAA+B,CAAC,IACxDA,WAAW,KAAKC,IAAI;AAExB","ignoreList":[]}
@@ -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.js\";\n\ntype InternalCollect<T = void, O = unknown> = (\n node: EstreeNode | null | undefined | (EstreeNode | null)[],\n options?: O\n) => T;\ntype InternalCollectWithOptions<T = void, O = unknown> = (\n node: EstreeNode | null | undefined | (EstreeNode | null)[],\n options: O\n) => T;\n\nexport function collectBoundNames(\n root: NodeWithBoundNames | NodeWithBoundNames[] | null | undefined\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(\n root: EstreeNode | EstreeNode[]\n): boolean | undefined {\n const collect: InternalCollect<boolean | undefined> = (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":";;;;;;;;AAYO,SAASA,iBAAiBA,CAC/BC,IAAkE,EACxD;EACV,MAAMC,KAAK,GAAG,IAAIC,GAAG,CAAS,CAAC;EAC/B,MAAMC,OAAwB,GAAIC,IAAI,IAAK;IACzC,IAAIC,KAAK,CAACC,OAAO,CAACF,IAAI,CAAC,EAAE;MACvB,KAAK,MAAMG,CAAC,IAAIH,IAAI,EAAE;QACpBD,OAAO,CAACI,CAAC,CAAC;MACZ;IACF,CAAC,MAAM,IAAIH,IAAI,EAAE;MACf;MACA,QAAQA,IAAI,CAACI,IAAI;QACf,KAAK,YAAY;UACfP,KAAK,CAACQ,GAAG,CAACL,IAAI,CAACM,IAAI,CAAC;UACpB;QACF,KAAK,qBAAqB;UACxB,OAAOP,OAAO,CAACC,IAAI,CAACO,YAAY,CAAC;QACnC,KAAK,oBAAoB;UACvB,OAAOR,OAAO,CAACC,IAAI,CAACQ,EAAE,CAAC;QACzB,KAAK,cAAc;UACjB,OAAOT,OAAO,CAACC,IAAI,CAACS,QAAQ,CAAC;QAC/B,KAAK,mBAAmB;UACtB,OAAOV,OAAO,CAACC,IAAI,CAACU,IAAI,CAAC;QAC3B,KAAK,eAAe;UAClB,OAAOX,OAAO,CAACC,IAAI,CAACW,UAAU,CAAC;QACjC,KAAK,UAAU;UACb,OAAOZ,OAAO,CAACC,IAAI,CAACY,KAAK,CAAC;QAC5B,KAAK,aAAa;UAChB,OAAOb,OAAO,CAACC,IAAI,CAACa,QAAQ,CAAC;QAC/B,KAAK,qBAAqB;UACxB,OAAOd,OAAO,CAACC,IAAI,CAACQ,EAAE,CAAC;MAC3B;IACF;EACF,CAAC;EACDT,OAAO,CAACH,IAAI,CAAC;EACb,OAAOK,KAAK,CAACa,IAAI,CAACjB,KAAK,CAAC;AAC1B;AAEO,SAASkB,kBAAkBA,CAChCnB,IAA+B,EACV;EACrB,MAAMG,OAA6C,GAAIC,IAAI,IAAK;IAC9D,IAAIC,KAAK,CAACC,OAAO,CAACF,IAAI,CAAC,EAAE;MACvB,OAAOA,IAAI,CAACgB,IAAI,CAACjB,OAAO,CAAC;IAC3B,CAAC,MAAM,IAAIC,IAAI,EAAE;MACf;MACA,QAAQA,IAAI,CAACI,IAAI;QACf,KAAK,cAAc;UACjB,OAAOL,OAAO,CAACC,IAAI,CAACS,QAAQ,CAAC;QAC/B,KAAK,mBAAmB;UACtB,OAAO,IAAI;QACb,KAAK,eAAe;UAClB,OAAOV,OAAO,CAACC,IAAI,CAACW,UAAU,CAAC;QACjC,KAAK,UAAU;UACb,OAAOX,IAAI,CAACiB,QAAQ,IAAIlB,OAAO,CAACC,IAAI,CAACY,KAAK,CAAC;QAC7C,KAAK,aAAa;UAChB,OAAOb,OAAO,CAACC,IAAI,CAACa,QAAQ,CAAC;MACjC;IACF;EACF,CAAC;EACD,OAAOd,OAAO,CAACH,IAAI,CAAC;AACtB;AASO,SAASsB,yBAAyBA,CACvCtB,IAA+B,EAC/BuB,OAAiC,EACZ;EACrB,MAAMZ,YAAiC,GAAG,EAAE;EAC5C,MAAMa,WAAW,GAAG;IAAEC,GAAG,EAAEF,OAAO,CAACE;EAAI,CAAC;EACxC,MAAMtB,OAAmE,GAAGA,CAC1EC,IAAI,EACJmB,OAAO,KACE;IACT,IAAIlB,KAAK,CAACC,OAAO,CAACF,IAAI,CAAC,EAAE;MACvB,KAAK,MAAMG,CAAC,IAAIH,IAAI,EAAE;QACpBD,OAAO,CAACI,CAAC,EAAEgB,OAAO,CAAC;MACrB;IACF,CAAC,MAAM,IAAInB,IAAI,EAAE;MACf;MACA,QAAQA,IAAI,CAACI,IAAI;QACf,KAAK,qBAAqB;UACxB;UACA;UACA;UACA,IAAIkB,MAAM,CAAC,CAACH,OAAO,CAACE,GAAG,CAAC,GAAGC,MAAM,CAACH,OAAO,CAACI,QAAQ,CAAC,EAAE;YACnDhB,YAAY,CAACiB,IAAI,CAACxB,IAAI,CAAC;UACzB;UACA;QACF,KAAK,qBAAqB;UACxB,IAAIsB,MAAM,CAAC,CAACH,OAAO,CAACE,GAAG,CAAC,GAAGC,MAAM,CAACtB,IAAI,CAACyB,IAAI,KAAK,KAAK,CAAC,EAAE;YACtDlB,YAAY,CAACiB,IAAI,CAACxB,IAAI,CAAC;UACzB;UACA;QACF,KAAK,YAAY;UACfD,OAAO,CAACC,IAAI,CAAC0B,UAAU,EAAEN,WAAW,CAAC;UACrC;QACF,KAAK,aAAa;UAChBrB,OAAO,CAACC,IAAI,CAAC2B,IAAI,EAAEP,WAAW,CAAC;UAC/B;MACJ;MACA,IAAID,OAAO,CAACE,GAAG,EAAE;QACf,QAAQrB,IAAI,CAACI,IAAI;UACf,KAAK,gBAAgB;YACnBL,OAAO,CAACC,IAAI,CAAC2B,IAAI,EAAEP,WAAW,CAAC;YAC/B;UACF,KAAK,aAAa;YAChBrB,OAAO,CAACC,IAAI,CAAC0B,UAAU,EAAEN,WAAW,CAAC;YACrCrB,OAAO,CAACC,IAAI,CAAC4B,SAAS,EAAER,WAAW,CAAC;YACpC;UACF,KAAK,kBAAkB;UACvB,KAAK,gBAAgB;YACnBrB,OAAO,CAACC,IAAI,CAAC2B,IAAI,EAAEP,WAAW,CAAC;YAC/B;UACF,KAAK,cAAc;YACjBrB,OAAO,CAACC,IAAI,CAAC6B,IAAI,EAAET,WAAW,CAAC;YAC/BrB,OAAO,CAACC,IAAI,CAAC2B,IAAI,EAAEP,WAAW,CAAC;YAC/B;UACF,KAAK,gBAAgB;UACrB,KAAK,gBAAgB;YACnBrB,OAAO,CAACC,IAAI,CAACU,IAAI,EAAEU,WAAW,CAAC;YAC/BrB,OAAO,CAACC,IAAI,CAAC2B,IAAI,EAAEP,WAAW,CAAC;YAC/B;UACF,KAAK,iBAAiB;YACpBrB,OAAO,CAACC,IAAI,CAAC8B,KAAK,EAAEV,WAAW,CAAC;YAChC;UACF,KAAK,cAAc;YACjBrB,OAAO,CAACC,IAAI,CAAC+B,KAAK,EAAEX,WAAW,CAAC;YAChCrB,OAAO,CAACC,IAAI,CAACgC,OAAO,EAAEZ,WAAW,CAAC;YAClCrB,OAAO,CAACC,IAAI,CAACiC,SAAS,EAAEb,WAAW,CAAC;YACpC;QACJ;MACF;IACF;EACF,CAAC;EACDrB,OAAO,CAACH,IAAI,EAAEuB,OAAO,CAAC;EACtB,OAAOZ,YAAY;AACrB"}
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.js\";\n\ntype InternalCollect<T = void, O = unknown> = (\n node: EstreeNode | null | undefined | (EstreeNode | null)[],\n options?: O\n) => T;\ntype InternalCollectWithOptions<T = void, O = unknown> = (\n node: EstreeNode | null | undefined | (EstreeNode | null)[],\n options: O\n) => T;\n\nexport function collectBoundNames(\n root: NodeWithBoundNames | NodeWithBoundNames[] | null | undefined\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(\n root: EstreeNode | EstreeNode[]\n): boolean | undefined {\n const collect: InternalCollect<boolean | undefined> = (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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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"AnalysisContext.js","names":["AnalysisContext","constructor","_defineProperty","AnalysisEnvironment","outer","Set","OuterEnv","HasBinding","name","bindingSet","has","CreateBinding","add"],"sources":["../../src/AnalysisContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class AnalysisContext {\n VariableEnvironment?: AnalysisEnvironment;\n LexicalEnvironment?: AnalysisEnvironment;\n}\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class AnalysisEnvironment {\n readonly OuterEnv: AnalysisEnvironment | null | undefined;\n private readonly bindingSet = new Set<string>();\n\n constructor(outer: AnalysisEnvironment | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingSet.has(name);\n }\n\n CreateBinding(name: string): void {\n this.bindingSet.add(name);\n }\n}\n\nexport interface AnalysisFunctionObject {\n Function: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;\n FormalParameters: FunctionDeclaration[\"params\"];\n ECMAScriptCode: Statement[] | Expression;\n Environment?: AnalysisEnvironment;\n}\n"],"mappings":";AAQA;AACA,OAAO,MAAMA,eAAe,CAAC;EAAAC,YAAA;IAAAC,eAAA;IAAAA,eAAA;EAAA;AAG7B;;AAEA;AACA,OAAO,MAAMC,mBAAmB,CAAC;EAI/BF,WAAWA,CAACG,KAA6C,EAAE;IAAAF,eAAA;IAAAA,eAAA,qBAF7B,IAAIG,GAAG,CAAS,CAAC;IAG7C,IAAI,CAACC,QAAQ,GAAGF,KAAK;EACvB;EAEAG,UAAUA,CAACC,IAAY,EAAW;IAChC,OAAO,IAAI,CAACC,UAAU,CAACC,GAAG,CAACF,IAAI,CAAC;EAClC;EAEAG,aAAaA,CAACH,IAAY,EAAQ;IAChC,IAAI,CAACC,UAAU,CAACG,GAAG,CAACJ,IAAI,CAAC;EAC3B;AACF"}
1
+ {"version":3,"file":"AnalysisContext.js","names":["AnalysisContext","constructor","_defineProperty","AnalysisEnvironment","outer","Set","OuterEnv","HasBinding","name","bindingSet","has","CreateBinding","add"],"sources":["../../src/AnalysisContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class AnalysisContext {\n VariableEnvironment?: AnalysisEnvironment;\n LexicalEnvironment?: AnalysisEnvironment;\n}\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class AnalysisEnvironment {\n readonly OuterEnv: AnalysisEnvironment | null | undefined;\n private readonly bindingSet = new Set<string>();\n\n constructor(outer: AnalysisEnvironment | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingSet.has(name);\n }\n\n CreateBinding(name: string): void {\n this.bindingSet.add(name);\n }\n}\n\nexport interface AnalysisFunctionObject {\n Function: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;\n FormalParameters: FunctionDeclaration[\"params\"];\n ECMAScriptCode: Statement[] | Expression;\n Environment?: AnalysisEnvironment;\n}\n"],"mappings":";AAQA;AACA,OAAO,MAAMA,eAAe,CAAC;EAAAC,YAAA;IAAAC,eAAA;IAAAA,eAAA;EAAA;AAG7B;;AAEA;AACA,OAAO,MAAMC,mBAAmB,CAAC;EAI/BF,WAAWA,CAACG,KAA6C,EAAE;IAAAF,eAAA;IAAAA,eAAA,qBAF7B,IAAIG,GAAG,CAAS,CAAC;IAG7C,IAAI,CAACC,QAAQ,GAAGF,KAAK;EACvB;EAEAG,UAAUA,CAACC,IAAY,EAAW;IAChC,OAAO,IAAI,CAACC,UAAU,CAACC,GAAG,CAACF,IAAI,CAAC;EAClC;EAEAG,aAAaA,CAACH,IAAY,EAAQ;IAChC,IAAI,CAACC,UAAU,CAACG,GAAG,CAACJ,IAAI,CAAC;EAC3B;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionContext.js","names":["ExecutionContext","constructor","_defineProperty","EnvironmentRecord","outer","Map","OuterEnv","HasBinding","name","bindingMap","has","CreateMutableBinding","deletable","set","mutable","NormalCompletion","undefined","CreateImmutableBinding","strict","InitializeBinding","value","binding","get","Object","assign","initialized","SetMutableBinding","ReferenceError","concat","TypeError","GetBindingValue","DeclarativeEnvironment","FunctionEnvironment","SourceNode","Symbol","for","FormalParameters","ECMAScriptCode","Environment","IsConstructor","ReferenceRecord","base","referenceName","Base","ReferenceName","Strict","CompletionRecord","type","Type","Value","Empty"],"sources":["../../src/ExecutionContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class ExecutionContext {\n VariableEnvironment?: EnvironmentRecord;\n LexicalEnvironment?: EnvironmentRecord;\n Function?: FunctionObject;\n}\n\nexport type EnvironmentRecordType = \"function\" | \"declarative\";\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class EnvironmentRecord {\n readonly OuterEnv: EnvironmentRecord | null | undefined;\n private readonly bindingMap = new Map<string, BindingState>();\n\n constructor(outer: EnvironmentRecord | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingMap.has(name);\n }\n\n CreateMutableBinding(name: string, deletable: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n mutable: true,\n deletable,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Create an immutable binding.\n *\n * @param name - The binding name.\n * @param strict - For named function expressions, strict is false, otherwise it's true.\n * @returns CompletionRecord.\n */\n CreateImmutableBinding(name: string, strict: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n strict,\n });\n return NormalCompletion(undefined);\n }\n\n InitializeBinding(name: string, value: unknown): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists and uninitialized.\n Object.assign<BindingState, Partial<BindingState>>(binding, {\n initialized: true,\n value,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Update a mutable binding value, including function declarations.\n *\n * @param name - The binding name.\n * @param value - The binding value.\n * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.\n * @returns\n */\n SetMutableBinding(\n name: string,\n value: unknown,\n strict?: boolean\n ): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n } else if (binding.mutable) {\n binding.value = value;\n } else {\n throw new TypeError(`Assignment to constant variable`);\n }\n return NormalCompletion(undefined);\n }\n\n GetBindingValue(name: string, strict?: boolean): unknown {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n }\n return binding.value;\n }\n}\n\nexport class DeclarativeEnvironment extends EnvironmentRecord {}\n\nexport class FunctionEnvironment extends EnvironmentRecord {}\n\nexport interface BindingState {\n initialized?: boolean;\n value?: unknown;\n mutable?: boolean;\n\n /** This is used for mutable bindings only. */\n deletable?: boolean;\n\n /**\n * This is used for immutable bindings only.\n * For named function expressions, `strict` is false,\n * otherwise it's true.\n */\n strict?: boolean;\n}\n\nexport const SourceNode = Symbol.for(\"SourceNode\");\nexport const FormalParameters = Symbol.for(\"FormalParameters\");\nexport const ECMAScriptCode = Symbol.for(\"ECMAScriptCode\");\nexport const Environment = Symbol.for(\"Environment\");\nexport const IsConstructor = Symbol.for(\"IsConstructor\");\n\nexport interface FunctionObject {\n (...args: unknown[]): unknown;\n [SourceNode]:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression;\n [FormalParameters]: FunctionDeclaration[\"params\"];\n [ECMAScriptCode]: Statement[] | Expression;\n [Environment]: EnvironmentRecord;\n [IsConstructor]: boolean;\n}\n\n// https://tc39.es/ecma262/#sec-reference-record-specification-type\nexport class ReferenceRecord {\n readonly Base:\n | Record<PropertyKey, unknown>\n | EnvironmentRecord\n | \"unresolvable\";\n readonly ReferenceName: PropertyKey;\n /** Whether the reference is in strict mode. */\n readonly Strict?: boolean;\n\n constructor(\n base: Record<PropertyKey, unknown> | EnvironmentRecord | \"unresolvable\",\n referenceName: PropertyKey,\n strict: boolean\n ) {\n this.Base = base;\n this.ReferenceName = referenceName;\n this.Strict = strict;\n }\n}\n\n// https://tc39.es/ecma262/#sec-completion-record-specification-type\nexport class CompletionRecord {\n readonly Type: CompletionRecordType;\n readonly Value: unknown;\n\n constructor(type: CompletionRecordType, value: unknown) {\n this.Type = type;\n this.Value = value;\n }\n}\n\nexport type CompletionRecordType =\n | \"normal\"\n | \"break\"\n | \"continue\"\n | \"return\"\n | \"throw\";\n\n// https://tc39.es/ecma262/#sec-normalcompletion\nexport function NormalCompletion(value: unknown): CompletionRecord {\n return new CompletionRecord(\"normal\", value);\n}\n\nexport const Empty = Symbol(\"empty completion\");\n\nexport interface OptionalChainRef {\n skipped?: boolean;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ExecutionContext.js","names":["ExecutionContext","constructor","_defineProperty","EnvironmentRecord","outer","Map","OuterEnv","HasBinding","name","bindingMap","has","CreateMutableBinding","deletable","set","mutable","NormalCompletion","undefined","CreateImmutableBinding","strict","InitializeBinding","value","binding","get","Object","assign","initialized","SetMutableBinding","ReferenceError","concat","TypeError","GetBindingValue","DeclarativeEnvironment","FunctionEnvironment","SourceNode","Symbol","for","FormalParameters","ECMAScriptCode","Environment","IsConstructor","ReferenceRecord","base","referenceName","Base","ReferenceName","Strict","CompletionRecord","type","Type","Value","Empty"],"sources":["../../src/ExecutionContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class ExecutionContext {\n VariableEnvironment?: EnvironmentRecord;\n LexicalEnvironment?: EnvironmentRecord;\n Function?: FunctionObject;\n}\n\nexport type EnvironmentRecordType = \"function\" | \"declarative\";\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class EnvironmentRecord {\n readonly OuterEnv: EnvironmentRecord | null | undefined;\n private readonly bindingMap = new Map<string, BindingState>();\n\n constructor(outer: EnvironmentRecord | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingMap.has(name);\n }\n\n CreateMutableBinding(name: string, deletable: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n mutable: true,\n deletable,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Create an immutable binding.\n *\n * @param name - The binding name.\n * @param strict - For named function expressions, strict is false, otherwise it's true.\n * @returns CompletionRecord.\n */\n CreateImmutableBinding(name: string, strict: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n strict,\n });\n return NormalCompletion(undefined);\n }\n\n InitializeBinding(name: string, value: unknown): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists and uninitialized.\n Object.assign<BindingState, Partial<BindingState>>(binding, {\n initialized: true,\n value,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Update a mutable binding value, including function declarations.\n *\n * @param name - The binding name.\n * @param value - The binding value.\n * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.\n * @returns\n */\n SetMutableBinding(\n name: string,\n value: unknown,\n strict?: boolean\n ): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n } else if (binding.mutable) {\n binding.value = value;\n } else {\n throw new TypeError(`Assignment to constant variable`);\n }\n return NormalCompletion(undefined);\n }\n\n GetBindingValue(name: string, strict?: boolean): unknown {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n }\n return binding.value;\n }\n}\n\nexport class DeclarativeEnvironment extends EnvironmentRecord {}\n\nexport class FunctionEnvironment extends EnvironmentRecord {}\n\nexport interface BindingState {\n initialized?: boolean;\n value?: unknown;\n mutable?: boolean;\n\n /** This is used for mutable bindings only. */\n deletable?: boolean;\n\n /**\n * This is used for immutable bindings only.\n * For named function expressions, `strict` is false,\n * otherwise it's true.\n */\n strict?: boolean;\n}\n\nexport const SourceNode = Symbol.for(\"SourceNode\");\nexport const FormalParameters = Symbol.for(\"FormalParameters\");\nexport const ECMAScriptCode = Symbol.for(\"ECMAScriptCode\");\nexport const Environment = Symbol.for(\"Environment\");\nexport const IsConstructor = Symbol.for(\"IsConstructor\");\n\nexport interface FunctionObject {\n (...args: unknown[]): unknown;\n [SourceNode]:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression;\n [FormalParameters]: FunctionDeclaration[\"params\"];\n [ECMAScriptCode]: Statement[] | Expression;\n [Environment]: EnvironmentRecord;\n [IsConstructor]: boolean;\n}\n\n// https://tc39.es/ecma262/#sec-reference-record-specification-type\nexport class ReferenceRecord {\n readonly Base:\n | Record<PropertyKey, unknown>\n | EnvironmentRecord\n | \"unresolvable\";\n readonly ReferenceName: PropertyKey;\n /** Whether the reference is in strict mode. */\n readonly Strict?: boolean;\n\n constructor(\n base: Record<PropertyKey, unknown> | EnvironmentRecord | \"unresolvable\",\n referenceName: PropertyKey,\n strict: boolean\n ) {\n this.Base = base;\n this.ReferenceName = referenceName;\n this.Strict = strict;\n }\n}\n\n// https://tc39.es/ecma262/#sec-completion-record-specification-type\nexport class CompletionRecord {\n readonly Type: CompletionRecordType;\n readonly Value: unknown;\n\n constructor(type: CompletionRecordType, value: unknown) {\n this.Type = type;\n this.Value = value;\n }\n}\n\nexport type CompletionRecordType =\n | \"normal\"\n | \"break\"\n | \"continue\"\n | \"return\"\n | \"throw\";\n\n// https://tc39.es/ecma262/#sec-normalcompletion\nexport function NormalCompletion(value: unknown): CompletionRecord {\n return new CompletionRecord(\"normal\", value);\n}\n\nexport const Empty = Symbol(\"empty completion\");\n\nexport interface OptionalChainRef {\n skipped?: boolean;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"context-free.js","names":["CompletionRecord","Empty","EnvironmentRecord","NormalCompletion","ReferenceRecord","collectBoundNames","IsPropertyReference","V","Base","InitializeReferencedBinding","W","base","InitializeBinding","ReferenceName","CopyDataProperties","target","source","excludedItems","undefined","keys","Object","getOwnPropertyNames","concat","getOwnPropertySymbols","nextKey","has","desc","getOwnPropertyDescriptor","enumerable","ForDeclarationBindingInstantiation","forDeclaration","env","isConst","kind","name","CreateImmutableBinding","CreateMutableBinding","LoopContinues","completion","Type","UpdateEmpty","value","Value","GetValue","ReferenceError","GetBindingValue","Strict","ToPropertyKey","arg","String","GetV","P","PutValue","SetMutableBinding","CreateListIteratorRecord","args","isIterable","TypeError","Symbol","iterator","RequireObjectCoercible","GetIdentifierReference","strict","HasBinding","OuterEnv","ApplyStringOrNumericBinaryOperator","leftValue","operator","rightValue","SyntaxError","ApplyStringOrNumericAssignment","substr","length","ApplyUnaryOperator","cooked","Array","isArray"],"sources":["../../src/context-free.ts"],"sourcesContent":["import {\n BinaryExpression,\n UnaryExpression,\n VariableDeclaration,\n} from \"@babel/types\";\nimport {\n CompletionRecord,\n Empty,\n EnvironmentRecord,\n NormalCompletion,\n ReferenceRecord,\n} from \"./ExecutionContext.js\";\nimport { collectBoundNames } from \"./traverse.js\";\n\n// https://tc39.es/ecma262/#sec-ispropertyreference\nexport function IsPropertyReference(V: ReferenceRecord): boolean {\n return V.Base !== \"unresolvable\" && !(V.Base instanceof EnvironmentRecord);\n}\n\n// https://tc39.es/ecma262/#sec-initializereferencedbinding\nexport function InitializeReferencedBinding(\n V: ReferenceRecord,\n W: unknown\n): CompletionRecord {\n const base = V.Base as EnvironmentRecord;\n return base.InitializeBinding(V.ReferenceName as string, W);\n}\n\n// https://tc39.es/ecma262/#sec-copydataproperties\nexport function CopyDataProperties(\n target: Record<PropertyKey, unknown>,\n source: unknown,\n excludedItems: Set<PropertyKey>\n): Record<PropertyKey, unknown> {\n if (source === undefined || source === null) {\n return target;\n }\n const keys = (Object.getOwnPropertyNames(source) as PropertyKey[]).concat(\n Object.getOwnPropertySymbols(source)\n );\n for (const nextKey of keys) {\n if (!excludedItems.has(nextKey)) {\n const desc = Object.getOwnPropertyDescriptor(source, nextKey);\n if (desc?.enumerable) {\n target[nextKey] = (source as Record<PropertyKey, unknown>)[nextKey];\n }\n }\n }\n return target;\n}\n\n// https://tc39.es/ecma262/#sec-runtime-semantics-fordeclarationbindinginstantiation\nexport function ForDeclarationBindingInstantiation(\n forDeclaration: VariableDeclaration,\n env: EnvironmentRecord\n): void {\n const isConst = forDeclaration.kind === \"const\";\n for (const name of collectBoundNames(forDeclaration)) {\n if (isConst) {\n env.CreateImmutableBinding(name, true);\n } else {\n env.CreateMutableBinding(name, false);\n }\n }\n}\n\n// https://tc39.es/ecma262/#sec-loopcontinues\nexport function LoopContinues(completion: CompletionRecord): boolean {\n return completion.Type === \"normal\" || completion.Type == \"continue\";\n}\n\n// https://tc39.es/ecma262/#sec-updateempty\nexport function UpdateEmpty(\n completion: CompletionRecord,\n value: unknown\n): CompletionRecord {\n if (completion.Value !== Empty) {\n return completion;\n }\n return new CompletionRecord(completion.Type, value);\n}\n\n// https://tc39.es/ecma262/#sec-getvalue\nexport function GetValue(V: unknown): unknown {\n if (V instanceof CompletionRecord) {\n // Assert: V.Type is normal.\n V = V.Value;\n }\n if (!(V instanceof ReferenceRecord)) {\n return V;\n }\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n const base = V.Base as EnvironmentRecord;\n return base.GetBindingValue(V.ReferenceName as string, V.Strict);\n }\n return V.Base[V.ReferenceName];\n}\n\n// https://tc39.es/ecma262/#sec-topropertykey\nexport function ToPropertyKey(arg: unknown): string | symbol {\n if (typeof arg === \"symbol\") {\n return arg;\n }\n return String(arg);\n}\n\n// https://tc39.es/ecma262/#sec-getv\nexport function GetV(V: unknown, P: PropertyKey): unknown {\n return (V as Record<PropertyKey, unknown>)[P];\n}\n\n// https://tc39.es/ecma262/#sec-putvalue\nexport function PutValue(V: ReferenceRecord, W: unknown): CompletionRecord {\n // Assert: V is a ReferenceRecord.\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n return V.Base.SetMutableBinding(V.ReferenceName as string, W, V.Strict);\n }\n V.Base[V.ReferenceName] = W;\n return NormalCompletion(undefined);\n}\n\n// https://tc39.es/ecma262/#sec-createlistiteratorRecord\nexport function CreateListIteratorRecord(\n args: Iterable<unknown>\n): Iterator<unknown> {\n if (!isIterable(args)) {\n throw new TypeError(`${typeof args} is not iterable`);\n }\n return args[Symbol.iterator]();\n}\n\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nexport function RequireObjectCoercible(arg: unknown): void {\n if (arg === null || arg === undefined) {\n throw new TypeError(\"Cannot destructure properties of undefined or null\");\n }\n}\n\n// https://tc39.es/ecma262/#sec-getidentifierreference\nexport function GetIdentifierReference(\n env: EnvironmentRecord | null | undefined,\n name: string,\n strict: boolean\n): ReferenceRecord {\n if (!env) {\n return new ReferenceRecord(\"unresolvable\", name, strict);\n }\n if (env.HasBinding(name)) {\n return new ReferenceRecord(env, name, strict);\n }\n return GetIdentifierReference(env.OuterEnv, name, strict);\n}\n\n// https://tc39.es/ecma262/#sec-applystringornumericbinaryoperator\nexport function ApplyStringOrNumericBinaryOperator(\n leftValue: number,\n operator: BinaryExpression[\"operator\"] | \"|>\",\n rightValue: number\n): unknown {\n switch (operator) {\n case \"+\":\n return leftValue + rightValue;\n case \"-\":\n return leftValue - rightValue;\n case \"/\":\n return leftValue / rightValue;\n case \"%\":\n return leftValue % rightValue;\n case \"*\":\n return leftValue * rightValue;\n case \"**\":\n return leftValue ** rightValue;\n case \"==\":\n return leftValue == rightValue;\n case \"===\":\n return leftValue === rightValue;\n case \"!=\":\n return leftValue != rightValue;\n case \"!==\":\n return leftValue !== rightValue;\n case \">\":\n return leftValue > rightValue;\n case \"<\":\n return leftValue < rightValue;\n case \">=\":\n return leftValue >= rightValue;\n case \"<=\":\n return leftValue <= rightValue;\n }\n throw new SyntaxError(`Unsupported binary operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-assignment-operators\nexport function ApplyStringOrNumericAssignment(\n leftValue: string | number,\n operator: string,\n rightValue: string | number\n): unknown {\n switch (operator) {\n case \"+=\":\n case \"-=\":\n case \"*=\":\n case \"/=\":\n case \"%=\":\n case \"**=\":\n return ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n operator.substr(0, operator.length - 1) as BinaryExpression[\"operator\"],\n rightValue as number\n );\n }\n\n throw new SyntaxError(`Unsupported assignment operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-unary-operators\nexport function ApplyUnaryOperator(\n target: unknown,\n operator: UnaryExpression[\"operator\"]\n): unknown {\n switch (operator) {\n case \"!\":\n return !target;\n case \"+\":\n return +(target as string | number);\n case \"-\":\n return -(target as string | number);\n case \"void\":\n return undefined;\n }\n throw new SyntaxError(`Unsupported unary operator \\`${operator}\\``);\n}\n\nexport function isIterable(cooked: unknown): boolean {\n if (Array.isArray(cooked)) {\n return true;\n }\n if (cooked === null || cooked === undefined) {\n return false;\n }\n return typeof (cooked as Iterable<unknown>)[Symbol.iterator] === \"function\";\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"context-free.js","names":["CompletionRecord","Empty","EnvironmentRecord","NormalCompletion","ReferenceRecord","collectBoundNames","IsPropertyReference","V","Base","InitializeReferencedBinding","W","base","InitializeBinding","ReferenceName","CopyDataProperties","target","source","excludedItems","undefined","keys","Object","getOwnPropertyNames","concat","getOwnPropertySymbols","nextKey","has","desc","getOwnPropertyDescriptor","enumerable","ForDeclarationBindingInstantiation","forDeclaration","env","isConst","kind","name","CreateImmutableBinding","CreateMutableBinding","LoopContinues","completion","Type","UpdateEmpty","value","Value","GetValue","ReferenceError","GetBindingValue","Strict","ToPropertyKey","arg","String","GetV","P","PutValue","SetMutableBinding","CreateListIteratorRecord","args","isIterable","TypeError","Symbol","iterator","RequireObjectCoercible","GetIdentifierReference","strict","HasBinding","OuterEnv","ApplyStringOrNumericBinaryOperator","leftValue","operator","rightValue","SyntaxError","ApplyStringOrNumericAssignment","substr","length","ApplyUnaryOperator","cooked","Array","isArray"],"sources":["../../src/context-free.ts"],"sourcesContent":["import {\n BinaryExpression,\n UnaryExpression,\n VariableDeclaration,\n} from \"@babel/types\";\nimport {\n CompletionRecord,\n Empty,\n EnvironmentRecord,\n NormalCompletion,\n ReferenceRecord,\n} from \"./ExecutionContext.js\";\nimport { collectBoundNames } from \"./traverse.js\";\n\n// https://tc39.es/ecma262/#sec-ispropertyreference\nexport function IsPropertyReference(V: ReferenceRecord): boolean {\n return V.Base !== \"unresolvable\" && !(V.Base instanceof EnvironmentRecord);\n}\n\n// https://tc39.es/ecma262/#sec-initializereferencedbinding\nexport function InitializeReferencedBinding(\n V: ReferenceRecord,\n W: unknown\n): CompletionRecord {\n const base = V.Base as EnvironmentRecord;\n return base.InitializeBinding(V.ReferenceName as string, W);\n}\n\n// https://tc39.es/ecma262/#sec-copydataproperties\nexport function CopyDataProperties(\n target: Record<PropertyKey, unknown>,\n source: unknown,\n excludedItems: Set<PropertyKey>\n): Record<PropertyKey, unknown> {\n if (source === undefined || source === null) {\n return target;\n }\n const keys = (Object.getOwnPropertyNames(source) as PropertyKey[]).concat(\n Object.getOwnPropertySymbols(source)\n );\n for (const nextKey of keys) {\n if (!excludedItems.has(nextKey)) {\n const desc = Object.getOwnPropertyDescriptor(source, nextKey);\n if (desc?.enumerable) {\n target[nextKey] = (source as Record<PropertyKey, unknown>)[nextKey];\n }\n }\n }\n return target;\n}\n\n// https://tc39.es/ecma262/#sec-runtime-semantics-fordeclarationbindinginstantiation\nexport function ForDeclarationBindingInstantiation(\n forDeclaration: VariableDeclaration,\n env: EnvironmentRecord\n): void {\n const isConst = forDeclaration.kind === \"const\";\n for (const name of collectBoundNames(forDeclaration)) {\n if (isConst) {\n env.CreateImmutableBinding(name, true);\n } else {\n env.CreateMutableBinding(name, false);\n }\n }\n}\n\n// https://tc39.es/ecma262/#sec-loopcontinues\nexport function LoopContinues(completion: CompletionRecord): boolean {\n return completion.Type === \"normal\" || completion.Type == \"continue\";\n}\n\n// https://tc39.es/ecma262/#sec-updateempty\nexport function UpdateEmpty(\n completion: CompletionRecord,\n value: unknown\n): CompletionRecord {\n if (completion.Value !== Empty) {\n return completion;\n }\n return new CompletionRecord(completion.Type, value);\n}\n\n// https://tc39.es/ecma262/#sec-getvalue\nexport function GetValue(V: unknown): unknown {\n if (V instanceof CompletionRecord) {\n // Assert: V.Type is normal.\n V = V.Value;\n }\n if (!(V instanceof ReferenceRecord)) {\n return V;\n }\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n const base = V.Base as EnvironmentRecord;\n return base.GetBindingValue(V.ReferenceName as string, V.Strict);\n }\n return V.Base[V.ReferenceName];\n}\n\n// https://tc39.es/ecma262/#sec-topropertykey\nexport function ToPropertyKey(arg: unknown): string | symbol {\n if (typeof arg === \"symbol\") {\n return arg;\n }\n return String(arg);\n}\n\n// https://tc39.es/ecma262/#sec-getv\nexport function GetV(V: unknown, P: PropertyKey): unknown {\n return (V as Record<PropertyKey, unknown>)[P];\n}\n\n// https://tc39.es/ecma262/#sec-putvalue\nexport function PutValue(V: ReferenceRecord, W: unknown): CompletionRecord {\n // Assert: V is a ReferenceRecord.\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n return V.Base.SetMutableBinding(V.ReferenceName as string, W, V.Strict);\n }\n V.Base[V.ReferenceName] = W;\n return NormalCompletion(undefined);\n}\n\n// https://tc39.es/ecma262/#sec-createlistiteratorRecord\nexport function CreateListIteratorRecord(\n args: Iterable<unknown>\n): Iterator<unknown> {\n if (!isIterable(args)) {\n throw new TypeError(`${typeof args} is not iterable`);\n }\n return args[Symbol.iterator]();\n}\n\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nexport function RequireObjectCoercible(arg: unknown): void {\n if (arg === null || arg === undefined) {\n throw new TypeError(\"Cannot destructure properties of undefined or null\");\n }\n}\n\n// https://tc39.es/ecma262/#sec-getidentifierreference\nexport function GetIdentifierReference(\n env: EnvironmentRecord | null | undefined,\n name: string,\n strict: boolean\n): ReferenceRecord {\n if (!env) {\n return new ReferenceRecord(\"unresolvable\", name, strict);\n }\n if (env.HasBinding(name)) {\n return new ReferenceRecord(env, name, strict);\n }\n return GetIdentifierReference(env.OuterEnv, name, strict);\n}\n\n// https://tc39.es/ecma262/#sec-applystringornumericbinaryoperator\nexport function ApplyStringOrNumericBinaryOperator(\n leftValue: number,\n operator: BinaryExpression[\"operator\"] | \"|>\",\n rightValue: number\n): unknown {\n switch (operator) {\n case \"+\":\n return leftValue + rightValue;\n case \"-\":\n return leftValue - rightValue;\n case \"/\":\n return leftValue / rightValue;\n case \"%\":\n return leftValue % rightValue;\n case \"*\":\n return leftValue * rightValue;\n case \"**\":\n return leftValue ** rightValue;\n case \"==\":\n return leftValue == rightValue;\n case \"===\":\n return leftValue === rightValue;\n case \"!=\":\n return leftValue != rightValue;\n case \"!==\":\n return leftValue !== rightValue;\n case \">\":\n return leftValue > rightValue;\n case \"<\":\n return leftValue < rightValue;\n case \">=\":\n return leftValue >= rightValue;\n case \"<=\":\n return leftValue <= rightValue;\n }\n throw new SyntaxError(`Unsupported binary operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-assignment-operators\nexport function ApplyStringOrNumericAssignment(\n leftValue: string | number,\n operator: string,\n rightValue: string | number\n): unknown {\n switch (operator) {\n case \"+=\":\n case \"-=\":\n case \"*=\":\n case \"/=\":\n case \"%=\":\n case \"**=\":\n return ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n operator.substr(0, operator.length - 1) as BinaryExpression[\"operator\"],\n rightValue as number\n );\n }\n\n throw new SyntaxError(`Unsupported assignment operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-unary-operators\nexport function ApplyUnaryOperator(\n target: unknown,\n operator: UnaryExpression[\"operator\"]\n): unknown {\n switch (operator) {\n case \"!\":\n return !target;\n case \"+\":\n return +(target as string | number);\n case \"-\":\n return -(target as string | number);\n case \"void\":\n return undefined;\n }\n throw new SyntaxError(`Unsupported unary operator \\`${operator}\\``);\n}\n\nexport function isIterable(cooked: unknown): boolean {\n if (Array.isArray(cooked)) {\n return true;\n }\n if (cooked === null || cooked === undefined) {\n return false;\n }\n return typeof (cooked as Iterable<unknown>)[Symbol.iterator] === \"function\";\n}\n"],"mappings":"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","ignoreList":[]}