astronomical 2.0.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/{cjs/types/index.d.ts → index.d.mts} +16 -15
- package/lib/{esm/types/index.d.ts → index.d.ts} +16 -15
- package/lib/index.js +1355 -0
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +1325 -0
- package/lib/index.mjs.map +1 -0
- package/package.json +11 -13
- package/lib/cjs/index.js +0 -738
- package/lib/cjs/nodeutils.js +0 -260
- package/lib/cjs/parseQuery.js +0 -296
- package/lib/cjs/types/index.d.ts.map +0 -1
- package/lib/cjs/types/nodeutils.d.ts +0 -21
- package/lib/cjs/types/nodeutils.d.ts.map +0 -1
- package/lib/cjs/types/parseQuery.d.ts +0 -42
- package/lib/cjs/types/parseQuery.d.ts.map +0 -1
- package/lib/cjs/types/utils.d.ts +0 -3
- package/lib/cjs/types/utils.d.ts.map +0 -1
- package/lib/cjs/utils.js +0 -10
- package/lib/esm/index.mjs +0 -738
- package/lib/esm/nodeutils.js +0 -260
- package/lib/esm/parseQuery.js +0 -296
- package/lib/esm/types/index.d.ts.map +0 -1
- package/lib/esm/types/nodeutils.d.ts +0 -21
- package/lib/esm/types/nodeutils.d.ts.map +0 -1
- package/lib/esm/types/parseQuery.d.ts +0 -42
- package/lib/esm/types/parseQuery.d.ts.map +0 -1
- package/lib/esm/types/utils.d.ts +0 -3
- package/lib/esm/types/utils.d.ts.map +0 -1
- package/lib/esm/utils.js +0 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/nodeutils.ts","../src/parseQuery.ts","../src/index.ts","../src/utils.ts"],"sourcesContent":["import { ESTree } from \"meriyah\";\nimport type { ASTNode, NodePath, PrimitiveValue } from \".\";\n\nexport const isNode = (candidate: unknown) : candidate is ASTNode => {\n return typeof candidate === \"object\" && candidate != null && \"type\" in candidate;\n}\n\nexport const isNodePath = (candidate: unknown) : candidate is NodePath => {\n return typeof candidate === \"object\" && candidate != null && \"node\" in candidate;\n}\n\nexport const isLiteral = (candidate: unknown) : candidate is ESTree.Literal => {\n return isNode(candidate) && candidate.type === \"Literal\";\n}\n\nexport const isPrimitive = (value: unknown) : value is PrimitiveValue => {\n return typeof value == \"string\" || typeof value == \"number\" || typeof value == \"boolean\";\n}\n\nexport const isUpdateExpression = (value: unknown) : value is ESTree.UpdateExpression => {\n return isNode(value) && value.type === \"UpdateExpression\";\n}\n\nexport const isAssignmentExpression = (node: ESTree.Node): node is ESTree.AssignmentExpression => {\n return node.type === \"AssignmentExpression\";\n}\n\nexport const isMemberExpression = (node: ESTree.Node): node is ESTree.MemberExpression => {\n return node.type === \"MemberExpression\";\n}\n\nexport const isIdentifier = (node: ESTree.Node): node is ESTree.Identifier => {\n return node.type === \"Identifier\";\n}\n\nexport const isFunctionDeclaration = (node: ESTree.Node): node is ESTree.FunctionDeclaration => {\n return node.type === \"FunctionDeclaration\";\n}\nexport const isFunctionExpression = (node: ESTree.Node): node is ESTree.FunctionExpression => {\n return node.type === \"FunctionExpression\";\n}\n\nexport const isVariableDeclarator = (node: ESTree.Node): node is ESTree.VariableDeclarator => {\n return node.type === \"VariableDeclarator\";\n}\nexport const isVariableDeclaration = (node: ESTree.Node): node is ESTree.VariableDeclaration => {\n return node.type === \"VariableDeclaration\";\n}\nexport const isBinding = (node: ESTree.Node, parentNode: ESTree.Node, grandParentNode: ESTree.Node | undefined): boolean => {\n if (\n grandParentNode &&\n node.type === \"Identifier\" &&\n parentNode.type === \"Property\" &&\n grandParentNode.type === \"ObjectExpression\"\n ) {\n return false;\n }\n\n const keys: string[] = bindingIdentifiersKeys[parentNode.type] ?? [];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const val =\n // @ts-expect-error key must present in parent\n parentNode[key];\n if (Array.isArray(val)) {\n if (val.indexOf(node) >= 0) return true;\n } else {\n if (val === node) return true;\n }\n }\n\n return false;\n}\n\n\nconst bindingIdentifiersKeys: Record<string, string[]> = {\n DeclareClass: [\"id\"],\n DeclareFunction: [\"id\"],\n DeclareModule: [\"id\"],\n DeclareVariable: [\"id\"],\n DeclareInterface: [\"id\"],\n DeclareTypeAlias: [\"id\"],\n DeclareOpaqueType: [\"id\"],\n InterfaceDeclaration: [\"id\"],\n TypeAlias: [\"id\"],\n OpaqueType: [\"id\"],\n\n CatchClause: [\"param\"],\n LabeledStatement: [\"label\"],\n UnaryExpression: [\"argument\"],\n AssignmentExpression: [\"left\"],\n\n ImportSpecifier: [\"local\"],\n ImportNamespaceSpecifier: [\"local\"],\n ImportDefaultSpecifier: [\"local\"],\n ImportDeclaration: [\"specifiers\"],\n\n ExportSpecifier: [\"exported\"],\n ExportNamespaceSpecifier: [\"exported\"],\n ExportDefaultSpecifier: [\"exported\"],\n\n FunctionDeclaration: [\"id\", \"params\"],\n FunctionExpression: [\"id\", \"params\"],\n ArrowFunctionExpression: [\"params\"],\n ObjectMethod: [\"params\"],\n ClassMethod: [\"params\"],\n ClassPrivateMethod: [\"params\"],\n\n ForInStatement: [\"left\"],\n ForOfStatement: [\"left\"],\n\n ClassDeclaration: [\"id\"],\n ClassExpression: [\"id\"],\n\n RestElement: [\"argument\"],\n UpdateExpression: [\"argument\"],\n\n ObjectProperty: [\"value\"],\n\n AssignmentPattern: [\"left\"],\n ArrayPattern: [\"elements\"],\n ObjectPattern: [\"properties\"],\n\n VariableDeclaration: [\"declarations\"],\n VariableDeclarator: [\"id\"],\n};\n\nexport const VISITOR_KEYS: Record<ESTree.Node[\"type\"], string[]> = {\n ArrayExpression: [\"elements\"],\n ArrayPattern: [\"elements\"],\n ArrowFunctionExpression: [\"params\", \"body\"],\n AssignmentExpression: [\"left\", \"right\"],\n AssignmentPattern: [\"left\", \"right\"],\n AwaitExpression: [\"argument\"],\n BinaryExpression: [\"left\", \"right\"],\n BlockStatement: [\"body\"],\n BreakStatement: [],\n CallExpression: [\"callee\", \"arguments\"],\n CatchClause: [\"param\", \"body\"],\n ChainExpression: [\"expression\"],\n ClassBody: [\"body\"],\n ClassDeclaration: [\"id\", \"superClass\", \"body\"],\n ClassExpression: [\"id\", \"superClass\", \"body\"],\n ConditionalExpression: [\"test\", \"consequent\", \"alternate\"],\n ContinueStatement: [],\n DebuggerStatement: [],\n DoWhileStatement: [\"body\", \"test\"],\n EmptyStatement: [],\n ExportAllDeclaration: [\"source\"],\n ExportDefaultDeclaration: [\"declaration\"],\n ExportNamedDeclaration: [\"declaration\", \"specifiers\", \"source\"],\n ExportSpecifier: [\"local\", \"exported\"],\n ExpressionStatement: [\"expression\"],\n ForInStatement: [\"left\", \"right\", \"body\"],\n ForOfStatement: [\"left\", \"right\", \"body\"],\n ForStatement: [\"init\", \"test\", \"update\", \"body\"],\n FunctionDeclaration: [\"id\", \"params\", \"body\"],\n FunctionExpression: [\"id\", \"params\", \"body\"],\n Identifier: [],\n IfStatement: [\"test\", \"consequent\", \"alternate\"],\n ImportAttribute: [\"key\", \"value\"],\n ImportDeclaration: [\"specifiers\", \"source\"],\n ImportDefaultSpecifier: [\"local\"],\n ImportNamespaceSpecifier: [\"local\"],\n ImportSpecifier: [\"local\", \"imported\"],\n LabeledStatement: [\"label\", \"body\"],\n Literal: [],\n LogicalExpression: [\"left\", \"right\"],\n MemberExpression: [\"object\", \"property\"],\n MetaProperty: [\"meta\", \"property\"],\n MethodDefinition: [\"key\", \"value\"],\n NewExpression: [\"callee\", \"arguments\"],\n ObjectExpression: [\"properties\"],\n ObjectPattern: [\"properties\"],\n Program: [\"body\"],\n Property: [\"key\", \"value\"],\n RestElement: [\"argument\"],\n ReturnStatement: [\"argument\"],\n SequenceExpression: [\"expressions\"],\n SpreadElement: [\"argument\"],\n Super: [],\n SwitchCase: [\"test\", \"consequent\"],\n SwitchStatement: [\"discriminant\", \"cases\"],\n TaggedTemplateExpression: [\"tag\", \"quasi\"],\n TemplateElement: [],\n TemplateLiteral: [\"quasis\", \"expressions\"],\n ThisExpression: [],\n ThrowStatement: [\"argument\"],\n TryStatement: [\"block\", \"handler\", \"finalizer\"],\n UnaryExpression: [\"argument\"],\n UpdateExpression: [\"argument\"],\n VariableDeclaration: [\"declarations\"],\n VariableDeclarator: [\"id\", \"init\"],\n WhileStatement: [\"test\", \"body\"],\n WithStatement: [\"object\", \"body\"],\n YieldExpression: [\"argument\"],\n ImportExpression: [\"source\"],\n Decorator: [\"expression\"],\n PropertyDefinition: [\"key\", \"value\"],\n Import: [\"source\"],\n JSXAttribute: [\"name\", \"value\"],\n JSXNamespacedName: [\"namespace\", \"name\"],\n JSXElement: [\"openingElement\", \"closingElement\", \"children\"],\n JSXClosingElement: [\"name\"],\n JSXOpeningElement: [\"name\", \"attributes\"],\n JSXFragment: [\"openingFragment\", \"closingFragment\", \"children\"],\n JSXOpeningFragment: [],\n JSXClosingFragment: [],\n JSXText: [],\n JSXExpressionContainer: [\"expression\"],\n JSXSpreadChild: [\"expression\"],\n JSXEmptyExpression: [],\n JSXSpreadAttribute: [\"argument\"],\n JSXIdentifier: [],\n PrivateIdentifier: [],\n JSXMemberExpression: [\"object\", \"property\"],\n ParenthesizedExpression: [\"expression\"],\n StaticBlock: [\"body\"],\n};\n\n\n\nfunction isBlockStatement(node: ESTree.Node): node is ESTree.BlockStatement { return node.type === \"BlockStatement\"; }\n\nfunction isFunction(node: ESTree.Node): boolean {\n return node.type === \"FunctionDeclaration\" || node.type === \"FunctionExpression\";\n}\nfunction isCatchClause(node: ESTree.Node): node is ESTree.CatchClause { return node.type === \"CatchClause\"; }\n\nfunction isPattern(node: ESTree.Node): boolean {\n switch (node.type) {\n case \"AssignmentPattern\":\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n return true;\n }\n return false;\n}\n\nexport function isScope(node: ESTree.Node, parentNode: ESTree.Node): boolean {\n if (isBlockStatement(node) && (isFunction(parentNode) || isCatchClause(parentNode))) {\n return false;\n }\n if (isPattern(node) && (isFunction(parentNode) || isCatchClause(parentNode))) {\n return true;\n }\n\n return isFunctionDeclaration(parentNode) || isFunctionExpression(parentNode) || isScopable(node);\n}\n\nexport function isScopable(node: ESTree.Node): boolean {\n switch (node.type) {\n case \"BlockStatement\":\n case \"CatchClause\":\n case \"DoWhileStatement\":\n case \"ForInStatement\":\n case \"ForStatement\":\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"Program\":\n case \"MethodDefinition\":\n case \"SwitchStatement\":\n case \"WhileStatement\":\n case \"ArrowFunctionExpression\":\n case \"ClassExpression\":\n case \"ClassDeclaration\":\n case \"ForOfStatement\":\n case \"StaticBlock\":\n return true;\n }\n return false;\n}\n\nexport function isExportSpecifier(node: ESTree.Node): node is ESTree.ExportSpecifier {\n return node.type === \"ExportSpecifier\";\n}\n\n\n","import type { AvailableFunction } from \".\";\nimport { isAvailableFunction } from \".\";\nimport { VISITOR_KEYS } from \"./nodeutils\";\n\nconst debugLogEnabled = false;\n\nconst log = debugLogEnabled ? {\n debug: (...args: unknown[]) => {\n console.debug(...args);\n }\n} : undefined;\n\n// Optimize: create supportedIdentifiers directly instead of Object.fromEntries + map\nconst visitorKeys = Object.keys(VISITOR_KEYS);\nconst supportedIdentifiers: Record<string, keyof typeof VISITOR_KEYS> = {};\nfor (let i = 0; i < visitorKeys.length; i++) {\n const k = visitorKeys[i];\n supportedIdentifiers[k] = k as keyof typeof VISITOR_KEYS;\n}\n\nexport enum TokenType {\n IDENTIFIER,\n WILDCARD,\n DESCENDANT,\n CHILD,\n PARENT,\n AND,\n OR,\n EQUALS,\n LITERAL,\n ATTRIBUTESELECTOR,\n RESOLVESELECTOR,\n BINDINGSELECTOR,\n FILTERBEGIN,\n FILTEREND,\n SEPARATOR,\n PARAMETERSBEGIN,\n PARAMETERSEND,\n FUNCTION \n}\n\nexport const NodeType = { \n PARENT : 0xf1, \n CHILD : 0xf2, \n DESCENDANT : 0xf3,\n AND : 0xf4,\n OR : 0xf5,\n EQUALS : 0xf6,\n LITERAL : 0xf7,\n FUNCTION : 0xf8\n} as const;\n\n\n\ntype Token = {\n tokenType: TokenType;\n value?: string;\n}\ntype IdentifierToken = {\n tokenType: TokenType.IDENTIFIER;\n value: string;\n}\n\nfunction isIdentifierToken(token: Token | undefined) : token is IdentifierToken {\n if (token == undefined) return false;\n if (token.tokenType != TokenType.IDENTIFIER && token.tokenType != TokenType.WILDCARD) return false;\n if (!token.value) return false;\n if (!(token.value in supportedIdentifiers) && token.value != \"*\") {\n throw new Error(\"Unsupported identifier: \" + token.value);\n };\n return true;\n}\n\nconst whitespace = \" \\n\\r\\t\";\n\nfunction isCharacter(charcode: number) : boolean {\n return (charcode >= 65 && charcode <= 90) || (charcode >= 97 && charcode <= 122);\n}\nfunction isInteger(charcode: number) : boolean {\n return (charcode >= 48 && charcode <= 57);\n}\n\nexport function tokenize(input: string) : Token[] {\n let s = 0;\n const result = [] as Token[];\n while (s < input.length) {\n while (whitespace.includes(input[s])) s++;\n if (s >= input.length) break;\n if (input[s] == \"/\") {\n if (input[s+1] == \"/\") {\n result.push({tokenType: TokenType.DESCENDANT});\n s += 2;\n continue;\n }\n result.push({tokenType: TokenType.CHILD});\n s++;\n continue;\n }\n if (input[s] == \":\") {\n result.push({ tokenType : TokenType.ATTRIBUTESELECTOR });\n s++;\n continue;\n }\n if (input[s] == \"$\" && input[s+1] == \"$\") {\n result.push({ tokenType : TokenType.RESOLVESELECTOR });\n s+=2;\n continue;\n }\n if (input[s] == \"$\") {\n result.push({ tokenType : TokenType.BINDINGSELECTOR });\n s++;\n continue;\n }\n if (input[s] == \"[\") {\n result.push({ tokenType : TokenType.FILTERBEGIN });\n s++;\n continue;\n }\n if (input[s] == \"]\") {\n result.push({ tokenType : TokenType.FILTEREND });\n s++;\n continue;\n }\n if (input[s] == \",\") {\n result.push({ tokenType : TokenType.SEPARATOR });\n s++;\n continue;\n }\n if (input[s] == \"(\") {\n result.push({ tokenType : TokenType.PARAMETERSBEGIN });\n s++;\n continue;\n }\n if (input[s] == \"f\" && input[s+1] == \"n\" && input[s+2] == \":\") {\n result.push({ tokenType : TokenType.FUNCTION });\n s += 3;\n continue;\n }\n if (input[s] == \")\") {\n result.push({ tokenType : TokenType.PARAMETERSEND });\n s++;\n continue;\n }\n if (input[s] == \"&\" && input[s+1] == \"&\") {\n result.push({ tokenType : TokenType.AND });\n s += 2;\n continue;\n }\n if (input[s] == \"|\" && input[s+1] == \"|\") {\n result.push({ tokenType : TokenType.OR });\n s += 2;\n continue;\n }\n if (input[s] == \"=\" && input[s+1] == \"=\") {\n result.push({ tokenType : TokenType.EQUALS });\n s += 2;\n continue;\n }\n if (input[s] == \"'\" || input[s] == '\"') {\n const begin = input[s];\n const start = s;\n s++;\n while (s < input.length && input[s] != begin) s++;\n result.push({ tokenType: TokenType.LITERAL, value: input.slice(start + 1, s)});\n s++;\n continue;\n }\n if (input[s] == \".\" && input[s+1] == \".\") {\n result.push({ tokenType: TokenType.PARENT});\n s += 2;\n continue;\n }\n if (input[s] == \"*\") {\n result.push({ tokenType: TokenType.WILDCARD, value: \"*\"});\n s++;\n continue;\n }\n const charCode = input.charCodeAt(s);\n if (isCharacter(charCode)) {\n const start = s;\n while (s < input.length && isCharacter(input.charCodeAt(s))) s++;\n result.push({ tokenType: TokenType.IDENTIFIER, value: input.slice(start, s)});\n continue;\n }\n if (isInteger(charCode)) {\n const start = s;\n while (s < input.length && isInteger(input.charCodeAt(s))) s++;\n result.push({ tokenType: TokenType.LITERAL, value: input.slice(start, s)});\n continue;\n }\n throw new Error(\"Unexpected token: \" + input[s]);\n }\n return result;\n}\ntype BaseNode = {\n attribute?: boolean;\n binding?: boolean;\n resolve?: boolean;\n filter?: QNode;\n value?: string;\n child?: QNode;\n}\n\n\n\n\nexport type Selector = BaseNode & ({\n type: typeof NodeType.CHILD | typeof NodeType.DESCENDANT;\n attribute: boolean;\n binding: boolean;\n value: string;\n resolve: boolean;\n} | {\n type: typeof NodeType.PARENT\n});\n\nexport type Condition = BaseNode & {\n type: typeof NodeType.AND | typeof NodeType.OR | typeof NodeType.EQUALS;\n left: QNode;\n right: QNode;\n}\nexport type Literal = BaseNode & {\n type: typeof NodeType.LITERAL;\n value: string;\n}\n\nexport type FunctionCall = BaseNode & {\n type: typeof NodeType.FUNCTION;\n function: AvailableFunction;\n parameters: QNode[];\n}\n\nexport type QNode = Selector | Condition | Literal | FunctionCall ;\n\n\nfunction buildFilter(tokens: Token[]) : Condition | QNode {\n log?.debug(\"BUILD FILTER\", tokens);\n tokens.shift();\n const p = buildTree(tokens);\n const next = tokens[0];\n if (next.tokenType == TokenType.AND) {\n return {\n type: NodeType.AND,\n left: p,\n right: buildFilter(tokens)\n };\n }\n if (next.tokenType == TokenType.OR) {\n return {\n type: NodeType.OR,\n left: p,\n right: buildFilter(tokens)\n }\n }\n if (next.tokenType == TokenType.EQUALS) {\n const right = buildFilter(tokens);\n if (right.type == NodeType.OR || right.type == NodeType.AND) {\n return {\n type: right.type,\n left: {\n type: NodeType.EQUALS,\n left: p,\n right: right.left\n },\n right: right.right\n }\n }\n if (right.type == NodeType.EQUALS) throw new Error(\"Unexpected equals in equals\");\n return {\n type: NodeType.EQUALS,\n left: p,\n right: right\n }\n }\n if (next.tokenType == TokenType.FILTEREND) {\n tokens.shift();\n return p;\n }\n throw new Error(\"Unexpected token in filter: \" + next?.tokenType);\n}\n\n\n\nconst subNodes = [TokenType.CHILD, TokenType.DESCENDANT];\n\nfunction buildTree(tokens: Token[]) : QNode {\n log?.debug(\"BUILD TREE\", tokens);\n if (tokens.length == 0) throw new Error(\"Unexpected end of input\");\n const token = tokens.shift();\n if (token == undefined) throw new Error(\"Unexpected end of input\");\n if (token.tokenType == TokenType.PARENT) {\n return {\n type: NodeType.PARENT,\n child: buildTree(tokens)\n }\n }\n if (subNodes.includes(token.tokenType)) {\n let next = tokens.shift();\n if (next?.tokenType == TokenType.FUNCTION) {\n const name = tokens.shift();\n if (name == undefined || name.tokenType != TokenType.IDENTIFIER || name.value == undefined || typeof(name.value) != \"string\") throw new Error(\"Unexpected token: \" + name?.tokenType + \". Expecting function name\");\n const value = name.value;\n if (!isAvailableFunction(value)) {\n throw new Error(\"Unsupported function: \" + name.value);\n }\n return buildFunctionCall(value, tokens);\n }\n\n if (next?.tokenType == TokenType.PARENT) {\n return { type: NodeType.PARENT, child: buildTree(tokens) };\n }\n const modifiers: Token[] = [];\n while(next && (next?.tokenType == TokenType.ATTRIBUTESELECTOR || next?.tokenType == TokenType.BINDINGSELECTOR || next?.tokenType == TokenType.RESOLVESELECTOR)) {\n modifiers.push(next);\n next = tokens.shift();\n }\n const isAttribute = modifiers.some(m => m.tokenType == TokenType.ATTRIBUTESELECTOR);\n const isBinding = modifiers.some(m => m.tokenType == TokenType.BINDINGSELECTOR);\n const isResolve = modifiers.some(m => m.tokenType == TokenType.RESOLVESELECTOR);\n if (isResolve && isBinding) throw new Error(\"Cannot have both resolve and binding\");\n if (!next || !next.value || (!isAttribute && !isIdentifierToken(next))) throw new Error(\"Unexpected or missing token: \" + next?.tokenType);\n const identifer = next.value;\n let filter: QNode | undefined = undefined;\n if (tokens.length > 0 && tokens[0].tokenType == TokenType.FILTERBEGIN) {\n filter = buildFilter(tokens)\n log?.debug(\"FILTER\", filter, tokens);\n }\n let child : QNode | undefined = undefined;\n if (tokens.length > 0 && subNodes.includes(tokens[0].tokenType)) {\n child = buildTree(tokens);\n }\n if (typeof(identifer) != \"string\") throw new Error(\"Identifier must be a string\");\n let nodeType: typeof NodeType.CHILD | typeof NodeType.DESCENDANT = NodeType.CHILD;\n if (token.tokenType == TokenType.DESCENDANT) {\n nodeType = NodeType.DESCENDANT;\n } else if (token.tokenType != TokenType.CHILD) {\n throw new Error(\"Unexpected token:\" + token.tokenType)\n }\n return {\n type: nodeType,\n value: identifer,\n attribute: isAttribute,\n binding: isBinding,\n resolve: isResolve,\n filter: filter,\n child: child\n }\n }\n if (token.tokenType == TokenType.LITERAL) {\n return {\n type: NodeType.LITERAL,\n value: token.value!\n }\n }\n throw new Error(\"Unexpected token: \" + token.tokenType);\n}\n\nfunction buildFunctionCall(name: AvailableFunction, tokens: Token[]) : QNode {\n log?.debug(\"BUILD FUNCTION\", name, tokens);\n const parameters: QNode[] = [];\n const next = tokens.shift();\n if (next?.tokenType != TokenType.PARAMETERSBEGIN) throw new Error(\"Unexpected token: \" + next?.tokenType);\n while (tokens.length > 0 && tokens[0].tokenType != TokenType.PARAMETERSEND) {\n parameters.push(buildTree(tokens));\n if (tokens[0].tokenType == TokenType.SEPARATOR) tokens.shift();\n }\n if (tokens.length == 0) throw new Error(\"Unexpected end of input\");\n tokens.shift();\n return {\n type: NodeType.FUNCTION,\n function: name,\n parameters: parameters\n }\n}\n\nexport function parse(input: string): QNode {\n const tokens = tokenize(input);\n const result = buildTree(tokens);\n log?.debug(\"RESULT\", result);\n if (!result) throw new Error(\"No root element found\");\n return result;\n}\n","import { FunctionCall, NodeType, parse, QNode } from \"./parseQuery\";\nimport { parseScript } from \"meriyah\";\nimport { isNodePath, VISITOR_KEYS, isAssignmentExpression, isBinding, isExportSpecifier, isFunctionDeclaration, isFunctionExpression, isIdentifier, isMemberExpression, isNode, isPrimitive, isScopable, isScope, isUpdateExpression, isVariableDeclaration, isVariableDeclarator } from \"./nodeutils\";\nimport { ESTree } from \"meriyah\";\nimport { isDefined, toArray } from \"./utils\";\n\n\nconst debugLogEnabled = false;\n\nconst log = debugLogEnabled ? {\n debug: (...args: unknown[]) => {\n console.debug(...args);\n }\n} : undefined;\n\nexport const functions = {\n \"join\": {\n fn: (result: Result[][]): Result[] =>{\n if (result.length != 2) throw new Error(\"Invalid number of arugments for join\");\n const [values, separators] = result;\n if (separators.length != 1) throw new Error(\"Invalid number of separators for join\");\n const separator = separators[0];\n if (typeof separator != \"string\") throw new Error(\"Separator must be a string\");\n if (values.length == 0) return [];\n return [values.join(separator as string)];\n }\n },\n \"concat\": {\n fn: (result: Result[][]): Result[] => {\n // Optimize: combine empty check with manual flattening\n const flattened: Result[] = [];\n for (let i = 0; i < result.length; i++) {\n if (result[i].length === 0) return [];\n for (let j = 0; j < result[i].length; j++) {\n flattened.push(result[i][j]);\n }\n }\n return [flattened.join(\"\")];\n }\n },\n \"first\": {\n fn: (result: Result[][]): Result[] => {\n if (result.length != 1) throw new Error(\"Invalid number of arugments for first\");\n if (result[0].length == 0) return [];\n return [result[0][0]];\n }\n },\n \"nthchild\" : {\n fn: (result: Result[][]): Result[] => {\n if (result.length != 2) throw new Error(\"Invalid number of arguments for nthchild\");\n if (result[1].length != 1) throw new Error(\"Invalid number of arguments for nthchild\");\n const x = result[1][0];\n const number = typeof x == \"number\" ? x : parseInt(x as string);\n return [result[0][number]];\n }\n }\n\n}\nconst functionNames = new Set(Object.keys(functions));\nexport type AvailableFunction = keyof typeof functions;\nexport function isAvailableFunction(name: string) : name is AvailableFunction {\n return functionNames.has(name);\n}\n\n\nexport type PrimitiveValue = string | number | boolean;\n\ntype Result = ASTNode | PrimitiveValue;\n\n\ntype FNode = {\n node: QNode, \n result: Array<Result>\n};\n\ntype State = {\n depth: number;\n child: FNode[][];\n descendant: FNode[][];\n filters: FilterResult[][];\n filtersMap: Array<Map<QNode, FilterResult[]>>;\n matches: [FNode, NodePath][][];\n functionCalls: FunctionCallResult[][];\n}\ntype FilterCondition = {\n type: typeof NodeType.AND | typeof NodeType.OR | typeof NodeType.EQUALS;\n left: FilterNode;\n right: FilterNode;\n}\ntype FilterNode = (FilterCondition | FNode);\n\ntype FilterResult = {\n qNode: QNode;\n filter: FilterNode;\n node: ASTNode;\n result: Array<Result>;\n}\ntype FunctionCallResult = {\n node: QNode;\n functionCall: FunctionCall;\n parameters: (FNode | FunctionCallResult)[];\n result: Array<Result>;\n}\n\nfunction breadCrumb(path: NodePath) {\n if (!debugLogEnabled) return \"\";\n return { //Using the toString trick here to avoid calculating the breadcrumb if debug logging is off\n valueOf() : string {\n if (path.parentPath == undefined) return \"@\" + path.node.type;\n return breadCrumb(path.parentPath) + \".\" + (path.parentKey == path.key ? path.key : path.parentKey + \"[\" + path.key + \"]\") + \"@\" + path.node.type;\n }\n }\n}\n\nfunction createQuerier() {\n\n const traverser = createTraverser();\n const { getChildren, getPrimitiveChildren, getPrimitiveChildrenOrNodePaths, getBinding, createNodePath, traverse } = traverser;\n\n function createFilter(filter: QNode, filterResult: Array<Result>) : FilterNode {\n if (filter.type == NodeType.AND || filter.type == NodeType.OR || filter.type == NodeType.EQUALS) {\n return {\n type: filter.type,\n left: createFilter(filter.left, []),\n right: createFilter(filter.right, [])\n };\n } else if (filter.type == NodeType.LITERAL) {\n const r = [ filter.value ];\n return {\n node: filter,\n result: r\n };\n }\n return createFNode(filter, filterResult);\n }\n\n function createFNode(token: QNode, result: Array<Result>) : FNode {\n return {\n node: token,\n result: result\n };\n }\n\n function addFilterChildrenToState(filter: FilterNode, state: State) { \n if (\"type\" in filter && (filter.type == NodeType.AND || filter.type == NodeType.OR || filter.type == NodeType.EQUALS)) {\n addFilterChildrenToState(filter.left, state);\n addFilterChildrenToState(filter.right, state);\n } else if (\"node\" in filter) {\n if (filter.node.type == NodeType.CHILD) {\n log?.debug(\"ADDING FILTER CHILD\", filter.node);\n state.child[state.depth+1].push(filter);\n }\n if (filter.node.type == NodeType.DESCENDANT) {\n log?.debug(\"ADDING FILTER DESCENDANT\", filter.node);\n state.descendant[state.depth+1].push(filter);\n }\n }\n }\n\n function createFNodeAndAddToState(token: QNode, result: Array<Result>, state: State) : FNode {\n log?.debug(\"ADDING FNODE\", token);\n const fnode = createFNode(token, result);\n if (token.type == NodeType.CHILD) {\n state.child[state.depth+1].push(fnode);\n } else if (token.type == NodeType.DESCENDANT) {\n state.descendant[state.depth+1].push(fnode);\n }\n return fnode;\n }\n\n function isMatch(fnode: FNode, path: NodePath) : boolean {\n if (fnode.node.attribute) {\n const m = fnode.node.value == path.parentKey || fnode.node.value == path.key\n if (m) log?.debug(\"ATTR MATCH\", fnode.node.value, breadCrumb(path));\n return m;\n }\n if (fnode.node.value == \"*\") {\n return true;\n }\n const m = fnode.node.value == path.node.type\n if (m) log?.debug(\"NODE MATCH\", fnode.node.value, breadCrumb(path));\n return m;\n }\n function addIfTokenMatch(fnode: FNode, path: NodePath, state: State) {\n if (!isMatch(fnode, path)) return;\n state.matches[state.depth].push([fnode, path]);\n if (fnode.node.filter) {\n const filter = createFilter(fnode.node.filter, []);\n const filteredResult: Array<Result> = [];\n const f = { filter: filter, qNode: fnode.node, node: path.node, result: filteredResult };\n state.filters[state.depth].push(f);\n let fmap = state.filtersMap[state.depth].get(fnode.node);\n if (!fmap) {\n fmap = [];\n state.filtersMap[state.depth].set(fnode.node, fmap);\n }\n fmap.push(f);\n addFilterChildrenToState(filter, state);\n const child = fnode.node.child;\n if (child) {\n if (child.type == NodeType.FUNCTION) {\n const fr = addFunction(fnode, child, path, state);\n state.functionCalls[state.depth].push(fr);\n } else {\n createFNodeAndAddToState(child, filteredResult, state); \n }\n }\n } else {\n const child = fnode.node.child;\n if (child?.type == NodeType.FUNCTION) {\n const fr = addFunction(fnode, child, path, state);\n state.functionCalls[state.depth].push(fr);\n } else if (child && !fnode.node.binding && !fnode.node.resolve) {\n createFNodeAndAddToState(child, fnode.result, state); \n } \n }\n }\n\n function addFunction(rootNode: FNode, functionCall: FunctionCall, path: NodePath, state: State): FunctionCallResult {\n const functionNode: FunctionCallResult = { node: rootNode.node, functionCall: functionCall, parameters: [], result: [] };\n for (const param of functionCall.parameters) {\n if (param.type == NodeType.LITERAL) {\n functionNode.parameters.push({ node: param, result: [param.value] });\n } else {\n if (param.type == NodeType.FUNCTION) {\n functionNode.parameters.push(addFunction(functionNode, param, path, state));\n } else {\n functionNode.parameters.push(createFNodeAndAddToState(param, [], state));\n }\n }\n }\n return functionNode;\n }\n\n\n function addPrimitiveAttributeIfMatch(fnode: FNode, path: NodePath) {\n if (!fnode.node.attribute || fnode.node.value == undefined) return;\n if (fnode.node.child || fnode.node.filter) return;\n if (!Object.hasOwn(path.node, fnode.node.value)) return;\n const nodes = getPrimitiveChildren(fnode.node.value, path);\n if (nodes.length == 0) return;\n log?.debug(\"PRIMITIVE\", fnode.node.value, nodes);\n fnode.result.push(...nodes);\n }\n\n function evaluateFilter(filter: FilterNode, path: NodePath) : Result[] {\n log?.debug(\"EVALUATING FILTER\", filter, breadCrumb(path));\n if (\"type\" in filter) {\n if (filter.type == NodeType.AND) {\n const left = evaluateFilter(filter.left, path);\n if (left.length == 0) {\n return [];\n }\n const r = evaluateFilter(filter.right, path);\n return r;\n }\n if (filter.type == NodeType.OR) {\n const left = evaluateFilter(filter.left, path);\n if (left.length > 0) {\n return left;\n }\n const r = evaluateFilter(filter.right, path);\n return r;\n }\n if (filter.type == NodeType.EQUALS) {\n const left = evaluateFilter(filter.left, path);\n const right = evaluateFilter(filter.right, path);\n // Optimize: use Set for O(1) lookups instead of O(n) includes\n if (right.length > 3) {\n const rightSet = new Set(right);\n const r: Result[] = [];\n for (let i = 0; i < left.length; i++) {\n if (rightSet.has(left[i])) r.push(left[i]);\n }\n return r;\n }\n // For small arrays, includes is faster than Set creation\n const r: Result[] = [];\n for (let i = 0; i < left.length; i++) {\n if (right.includes(left[i])) r.push(left[i]);\n }\n return r;\n }\n throw new Error(\"Unknown filter type: \" + filter.type);\n }\n if (filter.node.type == NodeType.PARENT) {\n const r = resolveFilterWithParent(filter.node, path);\n return r;\n }\n return filter.result;\n }\n\n\n function resolveBinding(path: NodePath) : NodePath | undefined {\n if (!isIdentifier(path.node)) return undefined;\n log?.debug(\"RESOLVING BINDING FOR \", path.node);\n const name = path.node.name;\n if (name == undefined || typeof name != \"string\") return undefined;\n //const binding = path.scope.getBinding(name);\n const binding = getBinding(path.scopeId, name);\n if (!binding) return undefined;\n log?.debug(\"THIS IS THE BINDING\", binding);\n return binding.path;\n }\n\n function resolveFilterWithParent(node: QNode, path: NodePath) : Result[] {\n let startNode: QNode = node;\n let startPath = path;\n while(startNode.type == NodeType.PARENT) {\n if (!startNode.child) throw new Error(\"Parent filter must have child\");\n if (!startPath.parentPath) return [];\n log?.debug(\"STEP OUT\", startNode, breadCrumb(startPath));\n startNode = startNode.child;\n startPath = startPath.parentPath;\n }\n return resolveDirectly(startNode, startPath);\n }\n \n let subQueryCounter = 0;\n const memo = new Map<QNode, Map<NodePath | PrimitiveValue, Result[]>>();\n\n function resolveDirectly(node: QNode, path: NodePath) : Result[] {\n let startNode: QNode = node;\n const startPath = path;\n let paths: Array<PrimitiveValue | NodePath> = [startPath];\n while(startNode.attribute && startNode.type == NodeType.CHILD) {\n const lookup = startNode.value;\n if (!lookup) throw new Error(\"Selector must have a value\");\n //log?.debug(\"STEP IN \", lookup, paths.map(p => breadCrumb(p)));\n \n // Optimize: avoid filter().map().flat() chain - use single loop\n const nodes: Array<PrimitiveValue | NodePath> = [];\n for (let i = 0; i < paths.length; i++) {\n const p = paths[i];\n if (!isNodePath(p)) continue;\n const arr = getPrimitiveChildrenOrNodePaths(lookup, p);\n for (let j = 0; j < arr.length; j++) {\n nodes.push(arr[j]);\n }\n }\n\n if (nodes.length == 0) return [];\n paths = nodes;\n if (startNode.resolve) {\n const resolved: NodePath[] = [];\n for (let i = 0; i < paths.length; i++) {\n const p = paths[i];\n if (!isNodePath(p)) continue;\n const binding = resolveBinding(p);\n if (!binding) continue;\n const children = getChildren(\"init\", binding);\n for (let j = 0; j < children.length; j++) {\n resolved.push(children[j]);\n }\n }\n if (resolved.length > 0) paths = resolved;\n } else if (startNode.binding) {\n const bindings: NodePath[] = [];\n for (let i = 0; i < paths.length; i++) {\n const p = paths[i];\n if (!isNodePath(p)) continue;\n const binding = resolveBinding(p);\n if (binding) bindings.push(binding);\n }\n paths = bindings;\n }\n const filter = startNode.filter;\n if (filter) {\n const filtered: NodePath[] = [];\n for (let i = 0; i < paths.length; i++) {\n const p = paths[i];\n if (!isNodePath(p)) continue;\n if (travHandle({subquery: filter}, p).subquery.length > 0) {\n filtered.push(p);\n }\n }\n paths = filtered;\n }\n if (!startNode.child) {\n const results = new Array(paths.length);\n for (let i = 0; i < paths.length; i++) {\n const p = paths[i];\n results[i] = isPrimitive(p) ? p : p.node;\n }\n return results;\n }\n startNode = startNode.child;\n }\n //log?.debug(\"DIRECT TRAV RESOLVE\", startNode, paths.map(p => breadCrumb(p)));\n const result = [];\n //console.log(paths.length, subQueryCounter);\n for (const path of paths) {\n if (isNodePath(path)) {\n if (memo.has(startNode) && memo.get(startNode)!.has(path)) {\n const cached = memo.get(startNode)!.get(path)!;\n for (let i = 0; i < cached.length; i++) {\n result.push(cached[i]);\n }\n } else {\n const subQueryKey = \"subquery-\" + subQueryCounter++;\n const subQueryResult = travHandle({ [subQueryKey]: startNode }, path)[subQueryKey];\n if (!memo.has(startNode)) memo.set(startNode, new Map());\n memo.get(startNode)?.set(path, subQueryResult);\n for (let i = 0; i < subQueryResult.length; i++) {\n result.push(subQueryResult[i]);\n }\n }\n }\n }\n log?.debug(\"DIRECT TRAV RESOLVE RESULT\", result);\n return result;\n }\n\n function addResultIfTokenMatch(fnode: FNode, path: NodePath, state: State) {\n const matchingFilters = [];\n //console.log(\"FILTERS\", state.filters[state.depth].length, state.filtersMap[state.depth].get(fnode.node)?.length);\n const filters = [];\n const nodeFilters = state.filtersMap[state.depth].get(fnode.node);\n if (nodeFilters) {\n for (let i = 0; i < nodeFilters.length; i++) {\n const f = nodeFilters[i];\n if (f.qNode !== fnode.node) continue;\n if (f.node !== path.node) continue;\n filters.push(f);\n }\n \n for (let i = 0; i < filters.length; i++) {\n const f = filters[i];\n if (evaluateFilter(f.filter, path).length > 0) {\n matchingFilters.push(f);\n }\n }\n if (filters.length > 0 && matchingFilters.length == 0) return;\n }\n\n if (fnode.node.resolve) {\n const binding = resolveBinding(path);\n const resolved = binding ? getChildren(\"init\", binding)[0] : undefined;\n\n if (fnode.node.child) {\n const result = resolveDirectly(fnode.node.child, resolved ?? path);\n for (let i = 0; i < result.length; i++) {\n fnode.result.push(result[i]);\n }\n } else {\n fnode.result.push(path.node);\n }\n } else if (fnode.node.binding) {\n const binding = resolveBinding(path);\n if (binding) {\n if (fnode.node.child) {\n const result = resolveDirectly(fnode.node.child, binding);\n for (let i = 0; i < result.length; i++) {\n fnode.result.push(result[i]);\n }\n } else {\n fnode.result.push(binding.node);\n }\n } \n } else if (!fnode.node.child) {\n fnode.result.push(path.node);\n } else if (fnode.node.child.type == NodeType.FUNCTION) {\n const functionCallResult = state.functionCalls[state.depth].find(f => f.node == fnode.node);\n if (!functionCallResult) throw new Error(\"Did not find expected function call for \" + fnode.node.child.function);\n resolveFunctionCalls(fnode, functionCallResult, path, state);\n } else if (matchingFilters.length > 0) {\n log?.debug(\"HAS MATCHING FILTER\", fnode.result.length, matchingFilters.length, breadCrumb(path));\n for (let i = 0; i < matchingFilters.length; i++) {\n const filterResult = matchingFilters[i].result;\n for (let j = 0; j < filterResult.length; j++) {\n fnode.result.push(filterResult[j]);\n }\n }\n } \n }\n\n function resolveFunctionCalls(fnode: FNode, functionCallResult: FunctionCallResult, path: NodePath, state: State) {\n const parameterResults: Result[][] = [];\n for (let i = 0; i < functionCallResult.parameters.length; i++) {\n const p = functionCallResult.parameters[i];\n if (\"parameters\" in p) {\n resolveFunctionCalls(p, p, path, state);\n parameterResults.push(p.result);\n } else {\n parameterResults.push(p.result);\n }\n }\n const functionResult = functions[functionCallResult.functionCall.function].fn(parameterResults);\n log?.debug(\"PARAMETER RESULTS\", functionCallResult.functionCall.function, parameterResults, functionResult);\n for (let i = 0; i < functionResult.length; i++) {\n fnode.result.push(functionResult[i]);\n }\n }\n\n function travHandle<T extends Record<string, QNode>>(queries: T, root: NodePath) : Record<keyof T, Result[]> {\n // Optimize: create results object directly instead of Object.fromEntries + map\n const results = {} as Record<keyof T, Result[]>;\n const queryKeys = Object.keys(queries);\n for (let i = 0; i < queryKeys.length; i++) {\n results[queryKeys[i] as keyof T] = [];\n }\n \n const state: State = {\n depth: 0,\n child: [[],[]],\n descendant: [[],[]],\n filters: [[],[]],\n filtersMap: [new Map(), new Map()],\n matches: [[]],\n functionCalls: [[]]\n };\n\n for (const [name, node] of Object.entries(queries)) {\n createFNodeAndAddToState(node, results[name], state);\n }\n \n // Optimize: replace forEach with for loop\n const childAtDepth = state.child[state.depth+1];\n for (let i = 0; i < childAtDepth.length; i++) {\n addPrimitiveAttributeIfMatch(childAtDepth[i], root);\n }\n const descendantSlice = state.descendant.slice(0, state.depth+1);\n for (let i = 0; i < descendantSlice.length; i++) {\n const fnodes = descendantSlice[i];\n for (let j = 0; j < fnodes.length; j++) {\n addPrimitiveAttributeIfMatch(fnodes[j], root);\n }\n }\n\n traverse(root.node, {\n enter(path, state) {\n //log?.debug(\"ENTER\", breadCrumb(path));\n state.depth++;\n state.child.push([]);\n state.descendant.push([]);\n state.filters.push([]);\n state.filtersMap.push(new Map());\n state.matches.push([]);\n state.functionCalls.push([]);\n for (const fnode of state.child[state.depth]) {\n addIfTokenMatch(fnode, path, state);\n }\n for (const fnodes of state.descendant.slice(0, state.depth + 1)) {\n for (const fnode of fnodes) {\n addIfTokenMatch(fnode, path, state);\n }\n }\n },\n exit(path, state) {\n log?.debug(\"EXIT\", breadCrumb(path));\n // Check for attributes as not all attributes are visited\n // Optimize: replace forEach with for loop\n const childAtDepthPlusOne = state.child[state.depth + 1];\n for (let i = 0; i < childAtDepthPlusOne.length; i++) {\n addPrimitiveAttributeIfMatch(childAtDepthPlusOne[i], path);\n }\n for (let i = 0; i < state.descendant.length; i++) {\n const fnodes = state.descendant[i];\n for (let j = 0; j < fnodes.length; j++) {\n addPrimitiveAttributeIfMatch(fnodes[j], path);\n }\n }\n const matchesAtDepth = state.matches[state.depth];\n for (let i = 0; i < matchesAtDepth.length; i++) {\n addResultIfTokenMatch(matchesAtDepth[i][0], matchesAtDepth[i][1], state);\n }\n state.depth--;\n state.child.pop();\n state.descendant.pop();\n state.filters.pop();\n state.filtersMap.pop();\n state.matches.pop();\n state.functionCalls.pop();\n }\n }, root.scopeId, state, root);\n\n return results;\n }\n\n function beginHandle<T extends Record<string, QNode>>(queries: T, path: ASTNode) : Record<keyof T, Result[]> {\n const rootPath: NodePath = createNodePath(path, undefined, undefined, undefined, undefined);\n const r = travHandle(queries, rootPath);\n memo.clear();\n return r;\n }\n return {\n beginHandle\n }\n}\n\n\n\n\nconst defaultKey = \"__default__\";\n\nexport function query(code: string | ASTNode, query: string, returnAST?: boolean) : Result[] & { __AST?: ASTNode } {\n const result = multiQuery(code, { [defaultKey]: query }, returnAST);\n if (returnAST) {\n const r = result[defaultKey] as Result[] & { __AST?: ASTNode };\n r.__AST = result.__AST;\n return r;\n }\n return result[defaultKey];\n}\n\nexport function multiQuery<T extends Record<string, string>>(code: string | ASTNode, namedQueries: T, returnAST?: boolean) : Record<keyof T, Result[]> & { __AST?: ASTNode } {\n const start = Date.now();\n const ast = typeof code == \"string\" ? parseSource(code) : code;\n if (ast == null) throw new Error(\"Could not pase code\");\n // Optimize: parse queries directly instead of Object.fromEntries + map\n const queries = {} as Record<keyof T, QNode>;\n const entries = Object.entries(namedQueries);\n for (let i = 0; i < entries.length; i++) {\n const [name, queryStr] = entries[i];\n queries[name as keyof T] = parse(queryStr);\n }\n const querier = createQuerier();\n const result = querier.beginHandle(queries, ast);\n log?.debug(\"Query time: \", Date.now() - start);\n if (returnAST) {\n return { ...result, __AST: ast };\n }\n return result;\n}\n\nexport function parseSource(source: string, optimize: boolean = true) : ASTNode {\n const parsingOptions = optimize ? {loc: false, ranges: false } : {loc: true, ranges: true };\n try {\n return parseScript(source, { module: true, next: true, ...parsingOptions });\n } catch(e) {\n return parseScript(source, { module: false, next: true, ...parsingOptions, webcompat: true });\n }\n}\n\n\n\nexport type Binding = {\n path: NodePath;\n}\n\nexport type Scope = {\n bindings: Record<string, Binding>;\n parentScopeId?: number;\n id: number;\n};\n\n\nexport type ASTNode = ESTree.Node & {\n extra?: {\n scopeId?: number;\n functionScopeId?: number;\n nodePath?: NodePath;\n }\n};\n\nexport type NodePath = {\n node: ASTNode;\n key?: string;\n parentPath?: NodePath;\n parentKey?: string;\n scopeId: number;\n functionScopeId: number;\n};\n\ntype Visitor<T> = {\n enter: (path: NodePath, state: T) => void;\n exit: (path: NodePath, state: T) => void;\n}\n\nexport default function createTraverser() {\n let scopeIdCounter = 0;\n const scopes = new Map<number, Scope | number>(); \n let removedScopes = 0;\n const nodePathsCreated: Record<string, number> = {}\n\n function createScope(parentScopeId?: number): number {\n const id = scopeIdCounter++;\n if (parentScopeId != undefined) {\n scopes.set(id, parentScopeId ?? -1);\n }\n return id;\n }\n\n function getBinding(scopeId: number, name: string): Binding | undefined {\n let currentScope = scopes.get(scopeId);\n \n while (currentScope !== undefined) {\n if (typeof currentScope !== \"number\") {\n // Full scope: Check for binding\n if (currentScope.bindings[name]) {\n return currentScope.bindings[name];\n }\n // Move to parent scope\n if (currentScope.parentScopeId === -1) break; // No parent scope\n currentScope = scopes.get(currentScope.parentScopeId!);\n } else {\n // Lightweight scope: Retrieve parent scope\n if (currentScope === -1 || currentScope == undefined) break; // No parent scope\n currentScope = scopes.get(currentScope);\n }\n }\n \n return undefined; // Binding not found\n }\n \n\n\n function setBinding(scopeId: number, name: string, binding: Binding) {\n let scope = scopes.get(scopeId);\n \n if (typeof scope === \"number\" || scope === undefined) {\n // Upgrade the lightweight scope to a full scope\n scope = { bindings: {}, id: scopeId, parentScopeId: scope };\n scopes.set(scopeId, scope);\n }\n \n if (scope && typeof scope !== \"number\") {\n scope.bindings[name] = binding;\n }\n }\n\n let pathsCreated = 0;\n\n function getChildren(key: string, path: NodePath) : NodePath[] {\n if (key in path.node) {\n const r = (path.node as unknown as Record<string, unknown>)[key];\n if (Array.isArray(r)) {\n const len = r.length;\n const result = new Array(len);\n for (let i = 0; i < len; i++) {\n result[i] = createNodePath(r[i], i, key, path.scopeId, path.functionScopeId, path);\n }\n return result;\n } else if (r != undefined) {\n return [createNodePath(r as ASTNode, key, key, path.scopeId, path.functionScopeId, path)];\n }\n }\n return [];\n }\n function getPrimitiveChildren(key: string, path: NodePath) : PrimitiveValue[] {\n if (key in path.node) {\n const r = (path.node as unknown as Record<string, unknown>)[key];\n const arr = toArray(r);\n // Optimize: single loop instead of chained filter()\n const result: PrimitiveValue[] = [];\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n if (isDefined(item) && isPrimitive(item)) {\n result.push(item);\n }\n }\n return result;\n }\n return [];\n }\n function getPrimitiveChildrenOrNodePaths(key: string, path: NodePath) : Array<PrimitiveValue | NodePath> {\n if (key in path.node) {\n const r = (path.node as unknown as Record<string, unknown>)[key];\n if (Array.isArray(r)) {\n const len = r.length;\n const result = new Array(len);\n for (let i = 0; i < len; i++) {\n const n = r[i];\n result[i] = isPrimitive(n) ? n : createNodePath(n, i, key, path.scopeId, path.functionScopeId, path);\n }\n return result;\n } else if (r != undefined) {\n return [\n isPrimitive(r) ? r : \n createNodePath(r as ASTNode, key, key, path.scopeId, path.functionScopeId, path)\n ];\n }\n }\n return [];\n }\n const nodePathMap = new WeakMap<ASTNode, NodePath>();\n\n function createNodePath(node: ASTNode, key: string | undefined | number, parentKey: string | undefined, scopeId: number | undefined, functionScopeId: number | undefined, nodePath?: NodePath) : NodePath {\n if (nodePathMap.has(node)) {\n //if (node.extra?.nodePath) {\n //const path = node.extra.nodePath;\n const path = nodePathMap.get(node)!;\n if (nodePath && isExportSpecifier(nodePath.node) && key == \"exported\" && path.key == \"local\") {\n //Special handling for \"export { someName }\" as id is both local and exported\n path.key = \"exported\"; \n path.parentPath = nodePath;\n return path;\n }\n if (key != undefined) path.key = typeof(key) == \"number\" ? key.toString() : key;\n if (parentKey != undefined) path.parentKey = parentKey;\n if (nodePath != undefined) path.parentPath = nodePath;\n \n return path;\n }\n\n const finalScope: number = ((node.extra && node.extra.scopeId != undefined) ? node.extra.scopeId : scopeId) ?? createScope();\n const finalFScope: number = ((node.extra && node.extra.functionScopeId != undefined) ? node.extra.functionScopeId : functionScopeId) ?? finalScope;\n const path: NodePath = {\n node,\n scopeId: finalScope,\n functionScopeId: finalFScope,\n parentPath: nodePath,\n key: typeof(key) == \"number\" ? key.toString() : key,\n parentKey\n }\n if (isNode(node)) {\n //node.extra = node.extra ?? {};\n //node.extra.nodePath = path;\n //Object.defineProperty(node.extra, \"nodePath\", { enumerable: false });\n nodePathMap.set(node, path);\n }\n nodePathsCreated[node.type] = (nodePathsCreated[node.type] ?? 0) + 1;\n pathsCreated++;\n return path;\n }\n\n\n\n\n function registerBinding(stack: ASTNode[], scopeId: number, functionScopeId: number, key: string | number, parentKey: string) {\n //console.log(\"x registerBinding?\", isIdentifier(node) ? node.name : node.type, parentNode.type, grandParentNode?.type, scopeId, isBinding(node, parentNode, grandParentNode));\n const node = stack[stack.length - 1];\n if (!isIdentifier(node)) return;\n const parentNode = stack[stack.length - 2];\n if (isAssignmentExpression(parentNode) || isMemberExpression(parentNode) || isUpdateExpression(parentNode) || isExportSpecifier(parentNode)) return;\n const grandParentNode = stack[stack.length - 3];\n if (!isBinding(node, parentNode, grandParentNode)) return;\n\n if (key == \"id\" && !isVariableDeclarator(parentNode)) {\n setBinding(functionScopeId, node.name, { path: createNodePath(node, undefined, undefined, scopeId, functionScopeId) });\n return;\n }\n if (isVariableDeclarator(parentNode) && isVariableDeclaration(grandParentNode)) {\n if (grandParentNode.kind == \"var\") {\n setBinding(functionScopeId, node.name, { path: createNodePath(parentNode, undefined, undefined, scopeId, functionScopeId) });\n return;\n } else {\n setBinding(scopeId, node.name, { path: createNodePath(parentNode, undefined, undefined, scopeId, functionScopeId) }); \n return;\n }\n }\n \n if (isScope(node, parentNode)) { \n setBinding(scopeId, node.name, { path: createNodePath(node, key, parentKey, scopeId, functionScopeId) });\n } /*else {\n console.log(node.type, parentNode.type, grandParentNode?.type);\n }*/\n }\n\n\n\n let bindingNodesVisited = 0;\n function registerBindings(stack: ASTNode[], scopeId: number, functionScopeId: number) {\n const node = stack[stack.length - 1];\n if (!isNode(node)) return\n if (node.extra?.scopeId != undefined) return;\n node.extra = node.extra ?? {};\n node.extra.scopeId = scopeId;\n bindingNodesVisited++;\n const keys = VISITOR_KEYS[node.type];\n if (keys.length == 0) return;\n\n let childScopeId = scopeId;\n if (isScopable(node)) {\n childScopeId = createScope(scopeId);\n }\n for (let keyIdx = 0; keyIdx < keys.length; keyIdx++) {\n const key = keys[keyIdx];\n const childNodes = node[key as keyof ASTNode];\n const children = toArray(childNodes);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (!isDefined(child) || !isNode(child)) continue;\n const f = key === \"body\" && (isFunctionDeclaration(node) || isFunctionExpression(node)) ? childScopeId : functionScopeId;\n stack.push(child);\n if (isIdentifier(child)) {\n const k = Array.isArray(childNodes) ? i : key;\n registerBinding(stack, childScopeId, f, k, key);\n } else {\n registerBindings(stack, childScopeId, f);\n }\n stack.pop();\n }\n }\n if (childScopeId != scopeId && typeof scopes.get(childScopeId) == \"number\") { // Scope has not been populated\n scopes.set(childScopeId, scopes.get(scopeId)!);\n removedScopes++;\n }\n }\n\n function traverseInner<T>(\n node: ASTNode,\n visitor: Visitor<T>,\n scopeId: number | undefined,\n functionScopeId: number | undefined,\n state: T, \n path?: NodePath\n ) {\n const nodePath = path ?? createNodePath(node, undefined, undefined, scopeId, functionScopeId);\n const keys = VISITOR_KEYS[node.type];\n \n if (nodePath.parentPath) {\n const stack: ASTNode[] = [];\n if (nodePath.parentPath.parentPath?.node) stack.push(nodePath.parentPath.parentPath.node);\n stack.push(nodePath.parentPath.node, nodePath.node);\n registerBindings(stack, nodePath.scopeId, nodePath.functionScopeId);\n }\n\n // Optimization: Check if we need to traverse children at all\n // If there are no descendant queries and no child queries at next depth, skip traversal\n const stateTyped = state as unknown as State;\n const hasDescendantQueries = stateTyped.descendant && stateTyped.descendant.some(arr => arr.length > 0);\n const hasChildQueriesAtNextDepth = stateTyped.child && stateTyped.child[stateTyped.depth + 1] && stateTyped.child[stateTyped.depth + 1].length > 0;\n \n // If no queries would match in this subtree, skip traversal entirely\n if (!hasDescendantQueries && !hasChildQueriesAtNextDepth) {\n return;\n }\n\n for (let keyIdx = 0; keyIdx < keys.length; keyIdx++) {\n const key = keys[keyIdx];\n const childNodes = node[key as keyof ASTNode];\n const children = Array.isArray(childNodes) ? childNodes : childNodes ? [childNodes] : [];\n const nodePaths: NodePath[] = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isNode(child)) {\n const childPath = createNodePath(child, Array.isArray(childNodes) ? i : key, key, nodePath.scopeId, nodePath.functionScopeId, nodePath);\n nodePaths.push(childPath);\n }\n }\n for (let i = 0; i < nodePaths.length; i++) {\n const childPath = nodePaths[i];\n visitor.enter(childPath, state);\n traverseInner(childPath.node, visitor, nodePath.scopeId, nodePath.functionScopeId, state, childPath);\n visitor.exit(childPath, state);\n }\n }\n }\n\n const sOut: number[] = [];\n\n function traverse<T>( node: ASTNode,\n visitor: Visitor<T>,\n scopeId: number | undefined, \n state: T, \n path?: NodePath) {\n const fscope = path?.functionScopeId ?? node.extra?.functionScopeId ?? scopeId;\n traverseInner(node, visitor, scopeId, fscope, state, path);\n if (!sOut.includes(scopeIdCounter)) {\n log?.debug(\"Scopes created\", scopeIdCounter, \" Scopes removed\", removedScopes, \"Paths created\", pathsCreated, bindingNodesVisited);\n sOut.push(scopeIdCounter);\n const k = Object.fromEntries(Object.entries(nodePathsCreated).sort((a, b) => a[1] - b[1]));\n log?.debug(\"Node paths created\", k);\n }\n\n\n }\n return {\n traverse,\n createNodePath,\n getChildren,\n getPrimitiveChildren,\n getPrimitiveChildrenOrNodePaths,\n getBinding\n }\n}\n","export function toArray<T>(value: T | T[]) : T[] { \n return Array.isArray(value) ? value : [value]; \n}\n\nexport function isDefined<T>(value: T | undefined | null) : value is T {\n return value != undefined && value != null;\n}"],"mappings":"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","names":["isBinding","debugLogEnabled","log","m","r","path","state","query"]}
|
package/package.json
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "astronomical",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"description": "offers a way to query a Javascript AST to find specific patterns using a syntax somewhat similar to XPath.",
|
|
6
|
+
"sideEffects": false,
|
|
6
7
|
"scripts": {
|
|
7
8
|
"lint": "eslint . --ext .ts --fix --ignore-path .gitignore",
|
|
8
9
|
"typecheck": "tsc --noEmit",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"build:esm": "tsc && mv lib/esm/index.js lib/esm/index.mjs",
|
|
12
|
-
"build:cjs": "tsc -p ./tsconfig.cjs.json",
|
|
13
|
-
"watch": "tsc --watch",
|
|
10
|
+
"build": "tsup",
|
|
11
|
+
"watch": "tsup --watch",
|
|
14
12
|
"check": "npm run lint && npm run typecheck",
|
|
15
|
-
"dev": "tsc --watch",
|
|
16
13
|
"testWatch": "jest --watchAll",
|
|
17
14
|
"test": "jest --ci",
|
|
18
15
|
"prepack": "npm run build"
|
|
@@ -31,6 +28,7 @@
|
|
|
31
28
|
"eslint-config-prettier": "^9.1.0",
|
|
32
29
|
"prettier": "^3.2.4",
|
|
33
30
|
"ts-jest": "^29.1.2",
|
|
31
|
+
"tsup": "^8.5.1",
|
|
34
32
|
"typescript": "^5.3.3"
|
|
35
33
|
},
|
|
36
34
|
"dependencies": {
|
|
@@ -42,15 +40,15 @@
|
|
|
42
40
|
"exports": {
|
|
43
41
|
".": {
|
|
44
42
|
"import": {
|
|
45
|
-
"types": "./lib/
|
|
46
|
-
"default": "./lib/
|
|
43
|
+
"types": "./lib/index.d.mts",
|
|
44
|
+
"default": "./lib/index.mjs"
|
|
47
45
|
},
|
|
48
46
|
"require": {
|
|
49
|
-
"types": "./lib/
|
|
50
|
-
"default": "./lib/
|
|
47
|
+
"types": "./lib/index.d.ts",
|
|
48
|
+
"default": "./lib/index.js"
|
|
51
49
|
}
|
|
52
50
|
}
|
|
53
51
|
},
|
|
54
|
-
"types": "./lib/
|
|
55
|
-
"main": "./lib/
|
|
52
|
+
"types": "./lib/index.d.ts",
|
|
53
|
+
"main": "./lib/index.js"
|
|
56
54
|
}
|