corsa-oxlint 0.42.0 → 0.44.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.
Files changed (55) hide show
  1. package/dist/ast_utils.js.map +1 -1
  2. package/dist/checker.js.map +1 -1
  3. package/dist/compat.js.map +1 -1
  4. package/dist/context.js.map +1 -1
  5. package/dist/index.d.ts +2 -2
  6. package/dist/json_schema.js.map +1 -1
  7. package/dist/node_map.js.map +1 -1
  8. package/dist/oxlint_compat.js.map +1 -1
  9. package/dist/oxlint_utils.js.map +1 -1
  10. package/dist/parser_services.js.map +1 -1
  11. package/dist/plugin.d.ts +24 -3
  12. package/dist/plugin.js +0 -14
  13. package/dist/plugin.js.map +1 -1
  14. package/dist/registry.js.map +1 -1
  15. package/dist/rule_tester.d.ts +3 -4
  16. package/dist/rule_tester.js.map +1 -1
  17. package/dist/rules/ast.js.map +1 -1
  18. package/dist/rules/await_thenable.js.map +1 -1
  19. package/dist/rules/index.js.map +1 -1
  20. package/dist/rules/native_bridge.js.map +1 -1
  21. package/dist/rules/no_array_delete.js.map +1 -1
  22. package/dist/rules/no_base_to_string.js.map +1 -1
  23. package/dist/rules/no_floating_promises.js.map +1 -1
  24. package/dist/rules/no_for_in_array.js.map +1 -1
  25. package/dist/rules/no_implied_eval.js.map +1 -1
  26. package/dist/rules/no_meaningless_void_operator.js.map +1 -1
  27. package/dist/rules/no_mixed_enums.js.map +1 -1
  28. package/dist/rules/no_unsafe_assignment.js.map +1 -1
  29. package/dist/rules/no_unsafe_call.js.map +1 -1
  30. package/dist/rules/no_unsafe_member_access.js.map +1 -1
  31. package/dist/rules/no_unsafe_return.js.map +1 -1
  32. package/dist/rules/no_unsafe_type_assertion.js.map +1 -1
  33. package/dist/rules/no_unsafe_unary_minus.js.map +1 -1
  34. package/dist/rules/only_throw_error.js.map +1 -1
  35. package/dist/rules/pending_parity.js.map +1 -1
  36. package/dist/rules/prefer_find.js.map +1 -1
  37. package/dist/rules/prefer_includes.js.map +1 -1
  38. package/dist/rules/prefer_promise_reject_errors.js.map +1 -1
  39. package/dist/rules/prefer_reduce_type_parameter.js.map +1 -1
  40. package/dist/rules/prefer_regexp_exec.js.map +1 -1
  41. package/dist/rules/prefer_string_starts_ends_with.js.map +1 -1
  42. package/dist/rules/require_array_sort_compare.js.map +1 -1
  43. package/dist/rules/restrict_plus_operands.js.map +1 -1
  44. package/dist/rules/restrict_template_expressions.js.map +1 -1
  45. package/dist/rules/rule_creator.js.map +1 -1
  46. package/dist/rules/type_utils.js.map +1 -1
  47. package/dist/rules/use_unknown_in_catch_callback_variable.js.map +1 -1
  48. package/dist/session.js +2 -0
  49. package/dist/session.js.map +1 -1
  50. package/dist/stylistic.js.map +1 -1
  51. package/dist/ts_eslint.js.map +1 -1
  52. package/dist/ts_utils.js.map +1 -1
  53. package/dist/types.js.map +1 -1
  54. package/dist/utils.d.ts +1 -2
  55. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ast_utils.js","names":["#globalObjectNames","#globalScope","#mode","#variableStack","#iterateVariableReferences","#iteratePropertyReferences","#iterateImportReferences","#iterateLhsReferences"],"sources":["../ts/ast_utils.ts"],"sourcesContent":["type TypedValue = { readonly type?: string };\ntype ValueToken = { readonly type?: string; readonly value?: string };\ntype Predicate<T> = (value: T | null | undefined) => boolean;\ntype AstNode = Record<string, unknown> & {\n readonly name?: string;\n readonly range?: readonly [number, number];\n readonly type?: string;\n};\ntype StaticValue = { readonly value: unknown } | null;\ntype Position = { readonly line: number; readonly column: number };\ntype SourceLocation = { readonly start: Position; readonly end: Position };\ntype TokenLike = { readonly type?: string; readonly value?: string; readonly loc?: SourceLocation };\ntype SourceCodeLike = {\n readonly visitorKeys?: Readonly<Record<string, readonly string[]>>;\n getFirstToken?: (node: unknown, predicate?: (token: TokenLike) => boolean) => TokenLike | null;\n getText?: (node: unknown) => string;\n getTokenAfter?: (node: unknown, predicate?: (token: TokenLike) => boolean) => TokenLike | null;\n getTokenBefore?: (node: unknown, predicate?: (token: TokenLike) => boolean) => TokenLike | null;\n};\ntype ScopeLike = {\n readonly block?: AstNode & { readonly range?: readonly [number, number] };\n readonly childScopes?: readonly ScopeLike[];\n readonly set?: ReadonlyMap<string, VariableLike>;\n readonly upper?: ScopeLike | null;\n};\ntype HasSideEffectOptions = {\n readonly considerGetters?: boolean;\n readonly considerImplicitTypeConversion?: boolean;\n};\ntype ReferenceLike = {\n readonly identifier?: AstNode;\n isRead?: () => boolean;\n isWrite?: () => boolean;\n};\ntype VariableLike = {\n readonly defs?: readonly unknown[];\n readonly references?: readonly ReferenceLike[];\n};\ntype TraceMapValue<T> = TraceMapElement<T> | T | true | undefined;\ninterface TraceMapElement<T = never> {\n readonly [key: string]: TraceMapValue<T>;\n readonly [key: number]: TraceMapValue<T>;\n [ReferenceTracker.READ]?: T;\n [ReferenceTracker.CALL]?: T;\n [ReferenceTracker.CONSTRUCT]?: T;\n [ReferenceTracker.ESM]?: true;\n}\ntype FoundReference<T = unknown> = {\n info: T;\n node: AstNode;\n path: string[];\n type: ReferenceTracker.ReferenceType;\n};\n\nexport function isNodeOfType(type: string): Predicate<TypedValue>;\nexport function isNodeOfType(node: TypedValue | null | undefined, type: string): boolean;\nexport function isNodeOfType(\n nodeOrType: TypedValue | string | null | undefined,\n maybeType?: string,\n): boolean | Predicate<TypedValue> {\n if (typeof nodeOrType === \"string\" && maybeType === undefined) {\n return (node) => node?.type === nodeOrType;\n }\n return (nodeOrType as TypedValue | null | undefined)?.type === maybeType;\n}\n\nexport function isNodeOfTypes(types: readonly string[]): Predicate<TypedValue>;\nexport function isNodeOfTypes(\n node: TypedValue | null | undefined,\n types: readonly string[],\n): boolean;\nexport function isNodeOfTypes(\n nodeOrTypes: TypedValue | readonly string[] | null | undefined,\n maybeTypes?: readonly string[],\n): boolean | Predicate<TypedValue> {\n if (Array.isArray(nodeOrTypes) && maybeTypes === undefined) {\n return (node) => node?.type !== undefined && nodeOrTypes.includes(node.type);\n }\n const nodeType = (nodeOrTypes as TypedValue | null | undefined)?.type;\n return nodeType !== undefined && maybeTypes?.includes(nodeType) === true;\n}\n\nexport function isNodeOfTypeWithConditions(\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): Predicate<TypedValue>;\nexport function isNodeOfTypeWithConditions(\n node: TypedValue | null | undefined,\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): boolean;\nexport function isNodeOfTypeWithConditions(\n nodeOrType: TypedValue | string | null | undefined,\n typeOrConditions: string | Readonly<Record<string, unknown>>,\n maybeConditions?: Readonly<Record<string, unknown>>,\n): boolean | Predicate<TypedValue> {\n if (typeof nodeOrType === \"string\") {\n const type = nodeOrType;\n const conditions = typeOrConditions as Readonly<Record<string, unknown>>;\n return (node) => node?.type === type && matchesConditions(node, conditions);\n }\n return (\n nodeOrType?.type === typeOrConditions && matchesConditions(nodeOrType, maybeConditions ?? {})\n );\n}\n\nexport function isIdentifier(\n node: { readonly type?: string; readonly name?: string } | null | undefined,\n name?: string,\n): boolean {\n return node?.type === \"Identifier\" && (name === undefined || node.name === name);\n}\n\nexport function isTokenOfTypeWithConditions(\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): Predicate<ValueToken>;\nexport function isTokenOfTypeWithConditions(\n token: ValueToken | null | undefined,\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): boolean;\nexport function isTokenOfTypeWithConditions(\n tokenOrType: ValueToken | string | null | undefined,\n typeOrConditions: string | Readonly<Record<string, unknown>>,\n maybeConditions?: Readonly<Record<string, unknown>>,\n): boolean | Predicate<ValueToken> {\n if (typeof tokenOrType === \"string\") {\n const type = tokenOrType;\n const conditions = typeOrConditions as Readonly<Record<string, unknown>>;\n return (token) => token?.type === type && matchesConditions(token, conditions);\n }\n return (\n tokenOrType?.type === typeOrConditions && matchesConditions(tokenOrType, maybeConditions ?? {})\n );\n}\n\nexport function isNotTokenOfTypeWithConditions(\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): Predicate<ValueToken>;\nexport function isNotTokenOfTypeWithConditions(\n token: ValueToken | null | undefined,\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): boolean;\nexport function isNotTokenOfTypeWithConditions(\n tokenOrType: ValueToken | string | null | undefined,\n typeOrConditions: string | Readonly<Record<string, unknown>>,\n maybeConditions?: Readonly<Record<string, unknown>>,\n): boolean | Predicate<ValueToken> {\n if (typeof tokenOrType === \"string\") {\n const predicate = isTokenOfTypeWithConditions(tokenOrType, typeOrConditions as never);\n return (token) => !predicate(token);\n }\n return !isTokenOfTypeWithConditions(\n tokenOrType,\n typeOrConditions as string,\n maybeConditions ?? {},\n );\n}\n\nexport function isFunction(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\n \"ArrowFunctionExpression\",\n \"FunctionDeclaration\",\n \"FunctionExpression\",\n ]);\n}\n\nexport function isFunctionType(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, functionTypeTypes);\n}\n\nexport function isFunctionOrFunctionType(\n node: { readonly type?: string } | null | undefined,\n): boolean {\n return isFunction(node) || isFunctionType(node);\n}\n\nexport function isTSFunctionType(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"TSFunctionType\";\n}\n\nexport function isTSConstructorType(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"TSConstructorType\";\n}\n\nexport function isAwaitExpression(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"AwaitExpression\";\n}\n\nexport function isVariableDeclarator(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"VariableDeclarator\";\n}\n\nexport function isLoop(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\n \"DoWhileStatement\",\n \"ForInStatement\",\n \"ForOfStatement\",\n \"ForStatement\",\n \"WhileStatement\",\n ]);\n}\n\nexport function isTypeAssertion(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\"TSAsExpression\", \"TSTypeAssertion\"]);\n}\n\nexport function isClassOrTypeElement(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\n \"PropertyDefinition\",\n \"FunctionExpression\",\n \"MethodDefinition\",\n \"TSAbstractPropertyDefinition\",\n \"TSAbstractMethodDefinition\",\n \"TSEmptyBodyFunctionExpression\",\n \"TSIndexSignature\",\n \"TSCallSignatureDeclaration\",\n \"TSConstructSignatureDeclaration\",\n \"TSMethodSignature\",\n \"TSPropertySignature\",\n ]);\n}\n\nexport function isOptionalCallExpression(\n node: { readonly type?: string; readonly optional?: boolean } | null | undefined,\n): boolean {\n return node?.type === \"CallExpression\" && node.optional === true;\n}\n\nexport function isConstructor(\n node: { readonly type?: string; readonly kind?: string } | null | undefined,\n): boolean {\n return node?.type === \"MethodDefinition\" && node.kind === \"constructor\";\n}\n\nexport function isSetter(\n node: { readonly type?: string; readonly kind?: string } | null | undefined,\n): boolean {\n return (node?.type === \"MethodDefinition\" || node?.type === \"Property\") && node.kind === \"set\";\n}\n\nexport const LINEBREAK_MATCHER = /\\r\\n|[\\r\\n\\u2028\\u2029]/u;\n\nconst IDENTIFIER = \"Identifier\";\nconst PUNCTUATOR = \"Punctuator\";\nconst KEYWORD = \"Keyword\";\nconst functionTypeTypes = [\n \"TSCallSignatureDeclaration\",\n \"TSConstructSignatureDeclaration\",\n \"TSConstructorType\",\n \"TSDeclareFunction\",\n \"TSEmptyBodyFunctionExpression\",\n \"TSFunctionType\",\n \"TSMethodSignature\",\n] as const;\n\nexport const isArrowToken = tokenWithValue(\"=>\");\nexport const isNotArrowToken = not(isArrowToken);\nexport const isAwaitKeyword = tokenWithValue(\"await\", IDENTIFIER);\nexport const isClosingBraceToken = tokenWithValue(\"}\");\nexport const isNotClosingBraceToken = not(isClosingBraceToken);\nexport const isClosingBracketToken = tokenWithValue(\"]\");\nexport const isNotClosingBracketToken = not(isClosingBracketToken);\nexport const isClosingParenToken = tokenWithValue(\")\");\nexport const isNotClosingParenToken = not(isClosingParenToken);\nexport const isColonToken = tokenWithValue(\":\");\nexport const isNotColonToken = not(isColonToken);\nexport const isCommaToken = tokenWithValue(\",\");\nexport const isNotCommaToken = not(isCommaToken);\nexport const isCommentToken = (token: { readonly type?: string } | null | undefined): boolean =>\n token?.type === \"Block\" || token?.type === \"Line\" || token?.type === \"Shebang\";\nexport const isNotCommentToken = not(isCommentToken);\nexport const isImportKeyword = keywordWithValue(\"import\");\nexport const isLogicalOrOperator = tokenWithValue(\"||\");\nexport const isNonNullAssertionPunctuator = tokenWithValue(\"!\");\nexport const isNotNonNullAssertionPunctuator = not(isNonNullAssertionPunctuator);\nexport const isOpeningBraceToken = tokenWithValue(\"{\");\nexport const isNotOpeningBraceToken = not(isOpeningBraceToken);\nexport const isOpeningBracketToken = tokenWithValue(\"[\");\nexport const isNotOpeningBracketToken = not(isOpeningBracketToken);\nexport const isOpeningParenToken = tokenWithValue(\"(\");\nexport const isNotOpeningParenToken = not(isOpeningParenToken);\nexport const isOptionalChainPunctuator = tokenWithValue(\"?.\");\nexport const isNotOptionalChainPunctuator = not(isOptionalChainPunctuator);\nexport const isSemicolonToken = tokenWithValue(\";\");\nexport const isNotSemicolonToken = not(isSemicolonToken);\nexport const isTypeKeyword = tokenWithValue(\"type\", IDENTIFIER);\n\nexport function isTokenOnSameLine(\n left: { readonly loc?: { readonly end?: { readonly line?: number } } },\n right: { readonly loc?: { readonly start?: { readonly line?: number } } },\n): boolean {\n return left.loc?.end?.line === right.loc?.start?.line;\n}\n\nexport function isParenthesized(\n node: { readonly range?: readonly [number, number] },\n sourceCode?: {\n getTokenBefore?: (node: unknown) => { readonly value?: string } | null;\n getTokenAfter?: (node: unknown) => { readonly value?: string } | null;\n },\n): boolean {\n if (!node.range || !sourceCode?.getTokenBefore || !sourceCode.getTokenAfter) {\n return false;\n }\n return (\n sourceCode.getTokenBefore(node)?.value === \"(\" && sourceCode.getTokenAfter(node)?.value === \")\"\n );\n}\n\nexport function getInnermostScope(\n initialScope: ScopeLike | null | undefined,\n node: { readonly range?: readonly [number, number] } | null | undefined,\n): ScopeLike | null {\n if (!initialScope) {\n return null;\n }\n if (!node?.range) {\n return initialScope;\n }\n\n const location = node.range[0];\n let scope = initialScope;\n let found = false;\n do {\n found = false;\n for (const childScope of scope.childScopes ?? []) {\n const range = childScope.block?.range;\n if (range && range[0] <= location && location < range[1]) {\n scope = childScope;\n found = true;\n break;\n }\n }\n } while (found);\n\n return scope;\n}\n\nexport function findVariable(\n initialScope: ScopeLike | null | undefined,\n nameOrNode:\n | string\n | ({ readonly name?: string } & { readonly range?: readonly [number, number] }),\n): VariableLike | null {\n if (!initialScope) {\n return null;\n }\n\n const name = typeof nameOrNode === \"string\" ? nameOrNode : nameOrNode.name;\n if (!name) {\n return null;\n }\n\n let scope: ScopeLike | null =\n typeof nameOrNode === \"string\" ? initialScope : getInnermostScope(initialScope, nameOrNode);\n while (scope) {\n const variable = scope.set?.get(name);\n if (variable != null) {\n return variable;\n }\n scope = scope.upper ?? null;\n }\n\n return null;\n}\n\nexport function getFunctionHeadLocation(\n node: AstNode | null | undefined,\n sourceCode?: SourceCodeLike,\n): SourceLocation | null {\n if (!node || !sourceCode) {\n return null;\n }\n\n const parent = parentNodeOf(node);\n let start: Position | undefined;\n let end: Position | undefined;\n\n if (node.type === \"ArrowFunctionExpression\") {\n const body = childNode(node, \"body\");\n const arrowToken = body ? sourceCode.getTokenBefore?.(body, isArrowToken) : null;\n start = arrowToken?.loc?.start;\n end = arrowToken?.loc?.end;\n } else if (\n parent &&\n (parent.type === \"Property\" ||\n parent.type === \"MethodDefinition\" ||\n parent.type === \"PropertyDefinition\")\n ) {\n start = locationOf(parent)?.start;\n end = getOpeningParenOfParams(node, sourceCode)?.loc?.start;\n } else {\n start = locationOf(node)?.start;\n end = getOpeningParenOfParams(node, sourceCode)?.loc?.start;\n }\n\n return start && end ? { start: { ...start }, end: { ...end } } : null;\n}\n\nexport function getFunctionNameWithKind(\n node: AstNode | null | undefined,\n sourceCode?: SourceCodeLike,\n): string {\n const parent = node ? parentNodeOf(node) : undefined;\n if (!node || !parent) {\n return \"\";\n }\n\n const tokens: string[] = [];\n const isObjectMethod = parent.type === \"Property\" && parent.value === node;\n const isClassMethod = parent.type === \"MethodDefinition\" && parent.value === node;\n const isClassFieldMethod = parent.type === \"PropertyDefinition\" && parent.value === node;\n const key = childNode(parent, \"key\");\n\n if (isClassMethod || isClassFieldMethod) {\n if (parent.static === true) {\n tokens.push(\"static\");\n }\n if (key?.type === \"PrivateIdentifier\") {\n tokens.push(\"private\");\n }\n }\n if (node.async === true) {\n tokens.push(\"async\");\n }\n if (node.generator === true) {\n tokens.push(\"generator\");\n }\n\n if (isObjectMethod || isClassMethod) {\n if (parent.kind === \"constructor\") {\n return \"constructor\";\n }\n if (parent.kind === \"get\") {\n tokens.push(\"getter\");\n } else if (parent.kind === \"set\") {\n tokens.push(\"setter\");\n } else {\n tokens.push(\"method\");\n }\n } else if (isClassFieldMethod) {\n tokens.push(\"method\");\n } else {\n if (node.type === \"ArrowFunctionExpression\") {\n tokens.push(\"arrow\");\n }\n tokens.push(\"function\");\n }\n\n if (isObjectMethod || isClassMethod || isClassFieldMethod) {\n if (key?.type === \"PrivateIdentifier\") {\n const name = stringField(key, \"name\");\n if (name) {\n tokens.push(`#${name}`);\n }\n } else {\n const name = getPropertyName(parent);\n if (name) {\n tokens.push(`'${name}'`);\n } else if (sourceCode && key) {\n const keyText = sourceCode.getText?.(key);\n if (keyText && !keyText.includes(\"\\n\")) {\n tokens.push(`[${keyText}]`);\n }\n }\n }\n } else {\n const id = childNode(node, \"id\");\n const variableId = childNode(parent, \"id\");\n const assignmentLeft = childNode(parent, \"left\");\n if (id) {\n const name = stringField(id, \"name\");\n if (name) {\n tokens.push(`'${name}'`);\n }\n } else if (parent.type === \"VariableDeclarator\" && variableId?.type === \"Identifier\") {\n const name = stringField(variableId, \"name\");\n if (name) {\n tokens.push(`'${name}'`);\n }\n } else if (\n (parent.type === \"AssignmentExpression\" || parent.type === \"AssignmentPattern\") &&\n assignmentLeft?.type === \"Identifier\"\n ) {\n const name = stringField(assignmentLeft, \"name\");\n if (name) {\n tokens.push(`'${name}'`);\n }\n } else if (parent.type === \"ExportDefaultDeclaration\" && parent.declaration === node) {\n tokens.push(\"'default'\");\n }\n }\n\n return tokens.join(\" \");\n}\n\nexport function getPropertyName(node: AstNode | null | undefined): string | null {\n if (!node) {\n return null;\n }\n\n switch (node.type) {\n case \"MemberExpression\": {\n const property = childNode(node, \"property\");\n if (!property) {\n return null;\n }\n if (isComputedProperty(node)) {\n return getStringIfConstant(property);\n }\n return property.type === \"PrivateIdentifier\" ? null : stringField(property, \"name\");\n }\n case \"MethodDefinition\":\n case \"Property\":\n case \"PropertyDefinition\": {\n const key = childNode(node, \"key\");\n if (!key) {\n return null;\n }\n if (isComputedProperty(node)) {\n return getStringIfConstant(key);\n }\n if (key.type === \"Literal\") {\n return String((key as { readonly value?: unknown }).value);\n }\n return key.type === \"PrivateIdentifier\" ? null : stringField(key, \"name\");\n }\n default: {\n const property = propertyNodeOf(node);\n if (!property) {\n return null;\n }\n if (!isComputedProperty(node) && property.type === \"Identifier\") {\n return stringField(property, \"name\");\n }\n if (!isComputedProperty(node) && property.type === \"PrivateIdentifier\") {\n return null;\n }\n const staticValue = getStaticValue(property);\n return staticValue == null ? null : String(staticValue.value);\n }\n }\n}\n\nexport function getStaticValue(node: AstNode | null | undefined): StaticValue {\n if (!node) {\n return null;\n }\n try {\n switch (node.type) {\n case \"ArrayExpression\":\n return staticArrayValue(node);\n case \"BinaryExpression\":\n return staticBinaryValue(node);\n case \"ChainExpression\":\n case \"TSAsExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n return getStaticValue(childNode(node, \"expression\"));\n case \"ConditionalExpression\":\n return staticConditionalValue(node);\n case \"Identifier\":\n return staticIdentifierValue(node);\n case \"Literal\":\n return { value: (node as { readonly value?: unknown }).value };\n case \"LogicalExpression\":\n return staticLogicalValue(node);\n case \"ObjectExpression\":\n return staticObjectValue(node);\n case \"SequenceExpression\":\n return staticSequenceValue(node);\n case \"TemplateLiteral\":\n return staticTemplateValue(node);\n case \"UnaryExpression\":\n return staticUnaryValue(node);\n default:\n return null;\n }\n } catch {\n return null;\n }\n}\n\nexport function getStringIfConstant(node: AstNode | null | undefined): string | null {\n if (node?.type === \"Literal\" && (node as { readonly value?: unknown }).value === null) {\n const regex = (\n node as { readonly regex?: { readonly pattern?: string; readonly flags?: string } }\n ).regex;\n if (regex?.pattern != null && regex.flags != null) {\n return `/${regex.pattern}/${regex.flags}`;\n }\n const bigint = (node as { readonly bigint?: unknown }).bigint;\n if (typeof bigint === \"string\") {\n return bigint;\n }\n }\n const staticValue = getStaticValue(node);\n if (staticValue == null) {\n return null;\n }\n try {\n return String(staticValue.value);\n } catch {\n return null;\n }\n}\n\nexport function hasSideEffect(\n node: AstNode | null | undefined,\n sourceCode?: SourceCodeLike,\n options: HasSideEffectOptions = {},\n): boolean {\n return hasSideEffectNode(node, new WeakSet<object>(), sourceCode?.visitorKeys, {\n considerGetters: options.considerGetters === true,\n considerImplicitTypeConversion: options.considerImplicitTypeConversion === true,\n });\n}\n\nfunction hasSideEffectNode(\n node: AstNode | null | undefined,\n seen: WeakSet<object>,\n visitorKeys: Readonly<Record<string, readonly string[]>> | undefined,\n options: Required<HasSideEffectOptions>,\n): boolean {\n if (!node) {\n return false;\n }\n if (seen.has(node)) {\n return false;\n }\n seen.add(node);\n if (isSideEffectNode(node)) {\n return true;\n }\n if (node.type === \"ArrowFunctionExpression\" || node.type === \"FunctionExpression\") {\n return false;\n }\n if (isImplicitTypeConversionSideEffectNode(node, options)) {\n return true;\n }\n if (options.considerGetters && node.type === \"MemberExpression\") {\n return true;\n }\n for (const key of astChildKeys(node, visitorKeys)) {\n const value = node[key];\n if (isAstNode(value) && hasSideEffectNode(value, seen, visitorKeys, options)) {\n return true;\n }\n if (\n Array.isArray(value) &&\n value.some((item) => isAstNode(item) && hasSideEffectNode(item, seen, visitorKeys, options))\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport class PatternMatcher {\n constructor(pattern: RegExp, options: { readonly escaped?: boolean } = {}) {\n if (!(pattern instanceof RegExp)) {\n throw new TypeError(\"'pattern' should be a RegExp instance.\");\n }\n if (!pattern.flags.includes(\"g\")) {\n throw new Error(\"'pattern' should contains 'g' flag.\");\n }\n\n patternMatcherInternal.set(this, {\n escaped: options.escaped === true,\n pattern: new RegExp(pattern.source, pattern.flags),\n });\n }\n\n *execAll(str: string): IterableIterator<RegExpExecArray> {\n const state = patternMatcherInternal.get(this);\n if (!state) {\n return;\n }\n\n let match: RegExpExecArray | null = null;\n let lastIndex = 0;\n state.pattern.lastIndex = 0;\n while ((match = state.pattern.exec(str)) != null) {\n if (state.escaped || !isEscaped(str, match.index)) {\n lastIndex = state.pattern.lastIndex;\n yield match;\n state.pattern.lastIndex = lastIndex;\n }\n }\n }\n\n test(str: string): boolean {\n return this.execAll(str).next().done !== true;\n }\n\n [Symbol.replace](\n str: string,\n replacer: string | ((substring: string, ...args: unknown[]) => string),\n ): string {\n return typeof replacer === \"function\"\n ? replacePatternWithFunction(this, String(str), replacer)\n : replacePatternWithString(this, String(str), String(replacer));\n }\n}\n\nexport class ReferenceTracker {\n static readonly READ: unique symbol = Symbol(\"read\");\n static readonly CALL: unique symbol = Symbol(\"call\");\n static readonly CONSTRUCT: unique symbol = Symbol(\"construct\");\n static readonly ESM: unique symbol = Symbol(\"esm\");\n\n readonly #globalObjectNames: readonly string[];\n readonly #globalScope: ScopeLike;\n readonly #mode: \"legacy\" | \"strict\";\n readonly #variableStack: VariableLike[] = [];\n\n constructor(\n globalScope: ScopeLike,\n options: {\n readonly globalObjectNames?: readonly string[];\n readonly mode?: \"legacy\" | \"strict\";\n } = {},\n ) {\n this.#globalScope = globalScope;\n this.#globalObjectNames = options.globalObjectNames ?? [\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n ];\n this.#mode = options.mode ?? \"strict\";\n }\n\n *iterateGlobalReferences<T>(traceMap: TraceMapElement<T>): IterableIterator<FoundReference<T>> {\n for (const key of Object.keys(traceMap)) {\n const nextTraceMap = traceElement(traceMap, key);\n const variable = this.#globalScope.set?.get(key);\n if (!nextTraceMap || isModifiedGlobal(variable)) {\n continue;\n }\n yield* this.#iterateVariableReferences(variable, [key], nextTraceMap, true);\n }\n\n for (const key of this.#globalObjectNames) {\n const variable = this.#globalScope.set?.get(key);\n if (isModifiedGlobal(variable)) {\n continue;\n }\n yield* this.#iterateVariableReferences(variable, [], traceMap, false);\n }\n }\n\n *iterateCjsReferences<T>(traceMap: TraceMapElement<T>): IterableIterator<FoundReference<T>> {\n const requireCall = { require: { [ReferenceTracker.CALL]: true } };\n for (const { node } of this.iterateGlobalReferences(requireCall)) {\n const key = getStringIfConstant(arrayField<AstNode>(node, \"arguments\")[0]);\n if (key == null || !hasOwn(traceMap, key)) {\n continue;\n }\n const nextTraceMap = traceElement(traceMap, key);\n if (!nextTraceMap) {\n continue;\n }\n const path = [key];\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iteratePropertyReferences(node, path, nextTraceMap);\n }\n }\n\n *iterateEsmReferences<T>(traceMap: TraceMapElement<T>): IterableIterator<FoundReference<T>> {\n const program = this.#globalScope.block;\n for (const node of arrayField<AstNode>(program ?? {}, \"body\")) {\n const source = node.source;\n if (\n !isRecord(source) ||\n typeof source.value !== \"string\" ||\n !hasOwn(traceMap, source.value)\n ) {\n continue;\n }\n const nextTraceMap = traceElement(traceMap, source.value);\n if (!nextTraceMap) {\n continue;\n }\n const path = [source.value];\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n\n if (node.type === \"ExportAllDeclaration\") {\n for (const key of Object.keys(nextTraceMap)) {\n const exportTraceMap = traceElement(nextTraceMap, key);\n if (exportTraceMap && hasOwn(exportTraceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path: path.concat(key),\n type: ReferenceTracker.READ,\n info: exportTraceMap[ReferenceTracker.READ] as T,\n };\n }\n }\n continue;\n }\n\n for (const specifier of arrayField<AstNode>(node, \"specifiers\")) {\n const esm = hasOwn(nextTraceMap, ReferenceTracker.ESM);\n const importTraceMap = esm\n ? nextTraceMap\n : this.#mode === \"legacy\"\n ? ({ default: nextTraceMap, ...nextTraceMap } as TraceMapElement<T>)\n : ({ default: nextTraceMap } as TraceMapElement<T>);\n const reports = this.#iterateImportReferences(specifier, path, importTraceMap);\n if (esm) {\n yield* reports;\n } else {\n for (const report of reports) {\n report.path = report.path.filter((name, index) => !(index === 1 && name === \"default\"));\n if (report.path.length >= 2 || report.type !== ReferenceTracker.READ) {\n yield report;\n }\n }\n }\n }\n }\n }\n\n *iteratePropertyReferences<T>(\n node: AstNode,\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n yield* this.#iteratePropertyReferences(node, [], traceMap);\n }\n\n *#iterateVariableReferences<T>(\n variable: VariableLike,\n path: string[],\n traceMap: TraceMapElement<T>,\n shouldReport: boolean,\n ): IterableIterator<FoundReference<T>> {\n if (this.#variableStack.includes(variable)) {\n return;\n }\n this.#variableStack.push(variable);\n try {\n for (const reference of variable.references ?? []) {\n if (reference.isRead?.() === false || !reference.identifier) {\n continue;\n }\n const node = reference.identifier;\n if (shouldReport && hasOwn(traceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path,\n type: ReferenceTracker.READ,\n info: traceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iteratePropertyReferences(node, path, traceMap);\n }\n } finally {\n this.#variableStack.pop();\n }\n }\n\n *#iteratePropertyReferences<T>(\n rootNode: AstNode,\n path: string[],\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n let node = rootNode;\n while (isPassThroughReferenceNode(node)) {\n node = parentNodeOf(node) ?? node;\n }\n\n const parent = parentNodeOf(node);\n if (!parent) {\n return;\n }\n if (parent.type === \"MemberExpression\") {\n if (parent.object === node) {\n const key = getPropertyName(parent);\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n return;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: parent,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iteratePropertyReferences(parent, nextPath, nextTraceMap);\n }\n return;\n }\n if (parent.type === \"CallExpression\") {\n if (parent.callee === node && hasOwn(traceMap, ReferenceTracker.CALL)) {\n yield {\n node: parent,\n path,\n type: ReferenceTracker.CALL,\n info: traceMap[ReferenceTracker.CALL] as T,\n };\n }\n return;\n }\n if (parent.type === \"NewExpression\") {\n if (parent.callee === node && hasOwn(traceMap, ReferenceTracker.CONSTRUCT)) {\n yield {\n node: parent,\n path,\n type: ReferenceTracker.CONSTRUCT,\n info: traceMap[ReferenceTracker.CONSTRUCT] as T,\n };\n }\n return;\n }\n if (parent.type === \"AssignmentExpression\") {\n if (parent.right === node) {\n yield* this.#iterateLhsReferences(childNode(parent, \"left\"), path, traceMap);\n yield* this.#iteratePropertyReferences(parent, path, traceMap);\n }\n return;\n }\n if (parent.type === \"AssignmentPattern\") {\n if (parent.right === node) {\n yield* this.#iterateLhsReferences(childNode(parent, \"left\"), path, traceMap);\n }\n return;\n }\n if (parent.type === \"VariableDeclarator\" && parent.init === node) {\n yield* this.#iterateLhsReferences(childNode(parent, \"id\"), path, traceMap);\n }\n }\n\n *#iterateLhsReferences<T>(\n patternNode: AstNode | undefined,\n path: string[],\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n if (!patternNode) {\n return;\n }\n if (patternNode.type === \"Identifier\") {\n const variable = findVariable(this.#globalScope, patternNode) as VariableLike | null;\n if (variable) {\n yield* this.#iterateVariableReferences(variable, path, traceMap, false);\n }\n return;\n }\n if (patternNode.type === \"ObjectPattern\") {\n for (const property of arrayField<AstNode>(patternNode, \"properties\")) {\n const key = getPropertyName(property);\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n continue;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: property,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iterateLhsReferences(childNode(property, \"value\"), nextPath, nextTraceMap);\n }\n return;\n }\n if (patternNode.type === \"AssignmentPattern\") {\n yield* this.#iterateLhsReferences(childNode(patternNode, \"left\"), path, traceMap);\n }\n }\n\n *#iterateImportReferences<T>(\n specifierNode: AstNode,\n path: string[],\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n if (\n specifierNode.type === \"ImportSpecifier\" ||\n specifierNode.type === \"ImportDefaultSpecifier\"\n ) {\n const key =\n specifierNode.type === \"ImportDefaultSpecifier\"\n ? \"default\"\n : importNameOf(childNode(specifierNode, \"imported\"));\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n return;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: specifierNode,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n const local = childNode(specifierNode, \"local\");\n const variable = local ? findVariable(this.#globalScope, local) : null;\n if (variable) {\n yield* this.#iterateVariableReferences(variable, nextPath, nextTraceMap, false);\n }\n return;\n }\n\n if (specifierNode.type === \"ImportNamespaceSpecifier\") {\n const local = childNode(specifierNode, \"local\");\n const variable = local ? findVariable(this.#globalScope, local) : null;\n if (variable) {\n yield* this.#iterateVariableReferences(variable, path, traceMap, false);\n }\n return;\n }\n\n if (specifierNode.type === \"ExportSpecifier\") {\n const key = importNameOf(childNode(specifierNode, \"local\"));\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n return;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: specifierNode,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n }\n }\n}\n\nexport namespace ReferenceTracker {\n export type READ = typeof ReferenceTracker.READ;\n export type CALL = typeof ReferenceTracker.CALL;\n export type CONSTRUCT = typeof ReferenceTracker.CONSTRUCT;\n export type ESM = typeof ReferenceTracker.ESM;\n export type ReferenceType = READ | CALL | CONSTRUCT;\n export type TraceMap<T = unknown> = TraceMapElement<T>;\n export type FoundReference<T = unknown> = {\n info: T;\n node: AstNode;\n path: readonly string[];\n type: ReferenceType;\n };\n}\n\nexport const ASTUtils = Object.freeze({\n LINEBREAK_MATCHER,\n PatternMatcher,\n ReferenceTracker,\n findVariable,\n getFunctionHeadLocation,\n getFunctionNameWithKind,\n getInnermostScope,\n getPropertyName,\n getStaticValue,\n getStringIfConstant,\n hasSideEffect,\n isIdentifier,\n isArrowToken,\n isAwaitExpression,\n isAwaitKeyword,\n isClosingBraceToken,\n isClosingBracketToken,\n isClosingParenToken,\n isClassOrTypeElement,\n isColonToken,\n isCommaToken,\n isCommentToken,\n isConstructor,\n isFunction,\n isFunctionOrFunctionType,\n isFunctionType,\n isImportKeyword,\n isLogicalOrOperator,\n isLoop,\n isNodeOfType,\n isNodeOfTypes,\n isNodeOfTypeWithConditions,\n isNonNullAssertionPunctuator,\n isNotArrowToken,\n isNotClosingBraceToken,\n isNotClosingBracketToken,\n isNotClosingParenToken,\n isNotColonToken,\n isNotCommaToken,\n isNotCommentToken,\n isNotNonNullAssertionPunctuator,\n isNotOpeningBraceToken,\n isNotOpeningBracketToken,\n isNotOpeningParenToken,\n isNotOptionalChainPunctuator,\n isNotSemicolonToken,\n isNotTokenOfTypeWithConditions,\n isOpeningBraceToken,\n isOpeningBracketToken,\n isOpeningParenToken,\n isOptionalCallExpression,\n isOptionalChainPunctuator,\n isParenthesized,\n isSemicolonToken,\n isSetter,\n isTokenOfTypeWithConditions,\n isTokenOnSameLine,\n isTSConstructorType,\n isTSFunctionType,\n isTypeAssertion,\n isTypeKeyword,\n isVariableDeclarator,\n});\n\nfunction matchesConditions(\n value: { readonly [key: string]: unknown } | null | undefined,\n conditions: Readonly<Record<string, unknown>>,\n): boolean {\n return Object.entries(conditions).every(([key, expected]) => value?.[key] === expected);\n}\n\nfunction isModifiedGlobal(variable: VariableLike | undefined): variable is undefined {\n return (\n variable == null ||\n (variable.defs?.length ?? 0) !== 0 ||\n (variable.references ?? []).some((reference) => reference.isWrite?.() === true)\n );\n}\n\nfunction traceElement<T>(\n traceMap: TraceMapElement<T>,\n key: PropertyKey,\n): TraceMapElement<T> | null {\n if (!hasOwn(traceMap, key)) {\n return null;\n }\n const value = Reflect.get(traceMap, key) as TraceMapValue<T>;\n return isRecord(value) ? (value as TraceMapElement<T>) : null;\n}\n\nfunction hasOwn(value: object, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction isPassThroughReferenceNode(node: AstNode): boolean {\n const parent = parentNodeOf(node);\n if (!parent) {\n return false;\n }\n switch (parent.type) {\n case \"ConditionalExpression\":\n return parent.consequent === node || parent.alternate === node;\n case \"LogicalExpression\":\n case \"ChainExpression\":\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSTypeAssertion\":\n case \"TSNonNullExpression\":\n case \"TSInstantiationExpression\":\n return true;\n case \"SequenceExpression\": {\n const expressions = arrayField<AstNode>(parent, \"expressions\");\n return expressions.at(-1) === node;\n }\n default:\n return false;\n }\n}\n\nfunction importNameOf(node: AstNode | undefined): string | null {\n if (!node) {\n return null;\n }\n if (node.type === \"Identifier\") {\n return stringField(node, \"name\");\n }\n if (node.type === \"Literal\") {\n const value = node.value;\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : null;\n }\n return null;\n}\n\nfunction propertyNodeOf(node: AstNode | null | undefined): AstNode | undefined {\n if (!node) {\n return undefined;\n }\n const property = node.property ?? node.key;\n return isAstNode(property) ? property : undefined;\n}\n\nfunction isComputedProperty(node: AstNode | null | undefined): boolean {\n return (node as { readonly computed?: boolean } | null | undefined)?.computed === true;\n}\n\nfunction parentNodeOf(node: AstNode): AstNode | undefined {\n const parent = node.parent;\n return isAstNode(parent) ? parent : undefined;\n}\n\nfunction locationOf(node: AstNode): SourceLocation | undefined {\n const loc = node.loc;\n return isSourceLocation(loc) ? loc : undefined;\n}\n\nfunction isSourceLocation(value: unknown): value is SourceLocation {\n return isRecord(value) && isPosition(value.start) && isPosition(value.end);\n}\n\nfunction isPosition(value: unknown): value is Position {\n return isRecord(value) && typeof value.line === \"number\" && typeof value.column === \"number\";\n}\n\nfunction getOpeningParenOfParams(node: AstNode, sourceCode: SourceCodeLike): TokenLike | null {\n const id = childNode(node, \"id\");\n return id\n ? (sourceCode.getTokenAfter?.(id, isOpeningParenToken) ?? null)\n : (sourceCode.getFirstToken?.(node, isOpeningParenToken) ?? null);\n}\n\nfunction staticTemplateValue(node: AstNode): StaticValue {\n const quasis = arrayField<AstNode>(node, \"quasis\");\n const expressions = arrayField<AstNode>(node, \"expressions\");\n let value = \"\";\n for (let index = 0; index < quasis.length; index += 1) {\n value += cookedTemplateText(quasis[index]);\n if (index < expressions.length) {\n const expression = getStaticValue(expressions[index]);\n if (expression == null) {\n return null;\n }\n value += String(expression.value);\n }\n }\n return { value };\n}\n\nfunction staticUnaryValue(node: AstNode): StaticValue {\n const argument = getStaticValue(childNode(node, \"argument\"));\n if (argument == null) {\n return null;\n }\n switch (stringField(node, \"operator\")) {\n case \"-\":\n return { value: -(argument.value as number) };\n case \"+\":\n return { value: +(argument.value as number) };\n case \"!\":\n return { value: !argument.value };\n case \"~\":\n return { value: ~(argument.value as number) };\n case \"typeof\":\n return { value: typeof argument.value };\n case \"void\":\n return { value: undefined };\n default:\n return null;\n }\n}\n\nfunction staticBinaryValue(node: AstNode): StaticValue {\n const left = getStaticValue(childNode(node, \"left\"));\n const right = getStaticValue(childNode(node, \"right\"));\n if (left == null || right == null) {\n return null;\n }\n switch (stringField(node, \"operator\")) {\n case \"==\":\n return { value: left.value == right.value };\n case \"!=\":\n return { value: left.value != right.value };\n case \"===\":\n return { value: left.value === right.value };\n case \"!==\":\n return { value: left.value !== right.value };\n case \"<\":\n return { value: (left.value as number) < (right.value as number) };\n case \"<=\":\n return { value: (left.value as number) <= (right.value as number) };\n case \">\":\n return { value: (left.value as number) > (right.value as number) };\n case \">=\":\n return { value: (left.value as number) >= (right.value as number) };\n case \"<<\":\n return { value: (left.value as number) << (right.value as number) };\n case \">>\":\n return { value: (left.value as number) >> (right.value as number) };\n case \">>>\":\n return { value: (left.value as number) >>> (right.value as number) };\n case \"+\":\n return { value: (left.value as any) + (right.value as any) };\n case \"-\":\n return { value: (left.value as number) - (right.value as number) };\n case \"*\":\n return { value: (left.value as number) * (right.value as number) };\n case \"/\":\n return { value: (left.value as number) / (right.value as number) };\n case \"%\":\n return { value: (left.value as number) % (right.value as number) };\n case \"**\":\n return { value: (left.value as number) ** (right.value as number) };\n case \"|\":\n return { value: (left.value as number) | (right.value as number) };\n case \"&\":\n return { value: (left.value as number) & (right.value as number) };\n case \"^\":\n return { value: (left.value as number) ^ (right.value as number) };\n default:\n return null;\n }\n}\n\nfunction staticLogicalValue(node: AstNode): StaticValue {\n const left = getStaticValue(childNode(node, \"left\"));\n if (left == null) {\n return null;\n }\n const operator = stringField(node, \"operator\");\n if (operator === \"&&\" && !left.value) {\n return left;\n }\n if (operator === \"||\" && left.value) {\n return left;\n }\n if (operator === \"??\" && left.value != null) {\n return left;\n }\n return getStaticValue(childNode(node, \"right\"));\n}\n\nfunction staticConditionalValue(node: AstNode): StaticValue {\n const test = getStaticValue(childNode(node, \"test\"));\n if (test == null) {\n return null;\n }\n return getStaticValue(childNode(node, test.value ? \"consequent\" : \"alternate\"));\n}\n\nfunction staticArrayValue(node: AstNode): StaticValue {\n const values = [];\n for (const element of arrayField<AstNode | null>(node, \"elements\")) {\n if (element == null) {\n values.push(undefined);\n continue;\n }\n if (element.type === \"SpreadElement\") {\n return null;\n }\n const item = getStaticValue(element);\n if (item == null) {\n return null;\n }\n values.push(item.value);\n }\n return { value: values };\n}\n\nfunction staticObjectValue(node: AstNode): StaticValue {\n const value: Record<string, unknown> = {};\n for (const property of arrayField<AstNode>(node, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = getStaticValue(childNode(property, \"argument\"));\n if (argument == null || !isRecord(argument.value)) {\n return null;\n }\n Object.assign(value, argument.value);\n continue;\n }\n if (property.kind != null && property.kind !== \"init\") {\n return null;\n }\n const name = getPropertyName(property);\n const propertyValue = getStaticValue(childNode(property, \"value\"));\n if (name == null || propertyValue == null) {\n return null;\n }\n value[name] = propertyValue.value;\n }\n return { value };\n}\n\nfunction staticSequenceValue(node: AstNode): StaticValue {\n const expressions = arrayField<AstNode>(node, \"expressions\");\n const last = expressions.at(-1);\n return last ? getStaticValue(last) : null;\n}\n\nfunction staticIdentifierValue(node: AstNode): StaticValue {\n switch (stringField(node, \"name\")) {\n case \"Infinity\":\n return { value: Infinity };\n case \"NaN\":\n return { value: NaN };\n case \"undefined\":\n return { value: undefined };\n default:\n return null;\n }\n}\n\nfunction cookedTemplateText(node: AstNode | undefined): string {\n const value = node?.value;\n if (isRecord(value) && typeof value.cooked === \"string\") {\n return value.cooked;\n }\n return \"\";\n}\n\nfunction childNode(node: AstNode, key: string): AstNode | undefined {\n const value = node[key];\n return isAstNode(value) ? value : undefined;\n}\n\nfunction arrayField<T>(node: AstNode, key: string): T[] {\n const value = node[key];\n return Array.isArray(value) ? (value as T[]) : [];\n}\n\nfunction stringField(node: AstNode, key: string): string | null {\n const value = node[key];\n return typeof value === \"string\" ? value : null;\n}\n\nfunction isAstNode(value: unknown): value is AstNode {\n return isRecord(value) && typeof value.type === \"string\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSideEffectNode(node: AstNode): boolean {\n if (\n node.type === \"AssignmentExpression\" ||\n node.type === \"AwaitExpression\" ||\n node.type === \"CallExpression\" ||\n node.type === \"ImportExpression\" ||\n node.type === \"NewExpression\" ||\n node.type === \"UpdateExpression\" ||\n node.type === \"YieldExpression\"\n ) {\n return true;\n }\n return node.type === \"UnaryExpression\" && stringField(node, \"operator\") === \"delete\";\n}\n\nconst typeConversionBinaryOps = new Set([\n \"==\",\n \"!=\",\n \"<\",\n \"<=\",\n \">\",\n \">=\",\n \"<<\",\n \">>\",\n \">>>\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"%\",\n \"|\",\n \"^\",\n \"&\",\n \"in\",\n]);\nconst typeConversionUnaryOps = new Set([\"-\", \"+\", \"!\", \"~\"]);\nconst skippedAstChildKeys = new Set([\"comments\", \"loc\", \"parent\", \"range\", \"tokens\"]);\n\nfunction isImplicitTypeConversionSideEffectNode(\n node: AstNode,\n options: Required<HasSideEffectOptions>,\n): boolean {\n if (!options.considerImplicitTypeConversion) {\n return false;\n }\n\n if (\n node.type === \"BinaryExpression\" &&\n typeConversionBinaryOps.has(stringField(node, \"operator\") ?? \"\")\n ) {\n return (\n childNode(node, \"left\")?.type !== \"Literal\" || childNode(node, \"right\")?.type !== \"Literal\"\n );\n }\n\n if (\n (node.type === \"MemberExpression\" ||\n node.type === \"MethodDefinition\" ||\n node.type === \"Property\" ||\n node.type === \"PropertyDefinition\") &&\n isComputedProperty(node)\n ) {\n return (\n childNode(node, node.type === \"MemberExpression\" ? \"property\" : \"key\")?.type !== \"Literal\"\n );\n }\n\n return (\n node.type === \"UnaryExpression\" &&\n typeConversionUnaryOps.has(stringField(node, \"operator\") ?? \"\") &&\n childNode(node, \"argument\")?.type !== \"Literal\"\n );\n}\n\nfunction astChildKeys(\n node: AstNode,\n visitorKeys: Readonly<Record<string, readonly string[]>> | undefined,\n): readonly string[] {\n const configured = node.type ? visitorKeys?.[node.type] : undefined;\n if (configured) {\n return configured;\n }\n return Object.keys(node).filter((key) => !skippedAstChildKeys.has(key));\n}\n\nconst patternMatcherInternal = new WeakMap<\n PatternMatcher,\n { readonly escaped: boolean; readonly pattern: RegExp }\n>();\nconst replacementPlaceholder = /\\$(?:[$&`']|[1-9][0-9]?)/gu;\n\nfunction isEscaped(str: string, index: number): boolean {\n let escaped = false;\n for (let cursor = index - 1; cursor >= 0 && str.charCodeAt(cursor) === 0x5c; cursor -= 1) {\n escaped = !escaped;\n }\n return escaped;\n}\n\nfunction replacePatternWithString(\n matcher: PatternMatcher,\n str: string,\n replacement: string,\n): string {\n const chunks: string[] = [];\n let index = 0;\n\n for (const match of matcher.execAll(str)) {\n chunks.push(str.slice(index, match.index));\n chunks.push(\n replacement.replace(replacementPlaceholder, (key) =>\n replacementForPlaceholder(key, str, match),\n ),\n );\n index = match.index + match[0].length;\n }\n chunks.push(str.slice(index));\n\n return chunks.join(\"\");\n}\n\nfunction replacementForPlaceholder(key: string, str: string, match: RegExpExecArray): string {\n switch (key) {\n case \"$$\":\n return \"$\";\n case \"$&\":\n return match[0];\n case \"$`\":\n return str.slice(0, match.index);\n case \"$'\":\n return str.slice(match.index + match[0].length);\n default: {\n const index = Number(key.slice(1));\n const capture = Number.isNaN(index) ? undefined : match[index];\n return capture ?? key;\n }\n }\n}\n\nfunction replacePatternWithFunction(\n matcher: PatternMatcher,\n str: string,\n replace: (substring: string, ...args: unknown[]) => string,\n): string {\n const chunks: string[] = [];\n let index = 0;\n\n for (const match of matcher.execAll(str)) {\n chunks.push(str.slice(index, match.index));\n chunks.push(String(replace(match[0], ...match.slice(1), match.index, match.input)));\n index = match.index + match[0].length;\n }\n chunks.push(str.slice(index));\n\n return chunks.join(\"\");\n}\n\nfunction tokenWithValue(expected: string, type = PUNCTUATOR) {\n return (token: { readonly type?: string; readonly value?: string } | null | undefined): boolean =>\n token?.type === type && token.value === expected;\n}\n\nfunction keywordWithValue(expected: string) {\n return (token: { readonly type?: string; readonly value?: string } | null | undefined): boolean =>\n token?.type === KEYWORD && token.value === expected;\n}\n\nfunction not<T extends readonly unknown[]>(predicate: (...args: T) => boolean) {\n return (...args: T): boolean => !predicate(...args);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ast_utils.js","names":["#globalObjectNames","#globalScope","#mode","#variableStack","#iterateVariableReferences","#iteratePropertyReferences","#iterateImportReferences","#iterateLhsReferences"],"sources":["../ts/ast_utils.ts"],"sourcesContent":["type TypedValue = { readonly type?: string };\ntype ValueToken = { readonly type?: string; readonly value?: string };\ntype Predicate<T> = (value: T | null | undefined) => boolean;\ntype AstNode = Record<string, unknown> & {\n readonly name?: string;\n readonly range?: readonly [number, number];\n readonly type?: string;\n};\ntype StaticValue = { readonly value: unknown } | null;\ntype Position = { readonly line: number; readonly column: number };\ntype SourceLocation = { readonly start: Position; readonly end: Position };\ntype TokenLike = { readonly type?: string; readonly value?: string; readonly loc?: SourceLocation };\ntype SourceCodeLike = {\n readonly visitorKeys?: Readonly<Record<string, readonly string[]>>;\n getFirstToken?: (node: unknown, predicate?: (token: TokenLike) => boolean) => TokenLike | null;\n getText?: (node: unknown) => string;\n getTokenAfter?: (node: unknown, predicate?: (token: TokenLike) => boolean) => TokenLike | null;\n getTokenBefore?: (node: unknown, predicate?: (token: TokenLike) => boolean) => TokenLike | null;\n};\ntype ScopeLike = {\n readonly block?: AstNode & { readonly range?: readonly [number, number] };\n readonly childScopes?: readonly ScopeLike[];\n readonly set?: ReadonlyMap<string, VariableLike>;\n readonly upper?: ScopeLike | null;\n};\ntype HasSideEffectOptions = {\n readonly considerGetters?: boolean;\n readonly considerImplicitTypeConversion?: boolean;\n};\ntype ReferenceLike = {\n readonly identifier?: AstNode;\n isRead?: () => boolean;\n isWrite?: () => boolean;\n};\ntype VariableLike = {\n readonly defs?: readonly unknown[];\n readonly references?: readonly ReferenceLike[];\n};\ntype TraceMapValue<T> = TraceMapElement<T> | T | true | undefined;\ninterface TraceMapElement<T = never> {\n readonly [key: string]: TraceMapValue<T>;\n readonly [key: number]: TraceMapValue<T>;\n [ReferenceTracker.READ]?: T;\n [ReferenceTracker.CALL]?: T;\n [ReferenceTracker.CONSTRUCT]?: T;\n [ReferenceTracker.ESM]?: true;\n}\ntype FoundReference<T = unknown> = {\n info: T;\n node: AstNode;\n path: string[];\n type: ReferenceTracker.ReferenceType;\n};\n\nexport function isNodeOfType(type: string): Predicate<TypedValue>;\nexport function isNodeOfType(node: TypedValue | null | undefined, type: string): boolean;\nexport function isNodeOfType(\n nodeOrType: TypedValue | string | null | undefined,\n maybeType?: string,\n): boolean | Predicate<TypedValue> {\n if (typeof nodeOrType === \"string\" && maybeType === undefined) {\n return (node) => node?.type === nodeOrType;\n }\n return (nodeOrType as TypedValue | null | undefined)?.type === maybeType;\n}\n\nexport function isNodeOfTypes(types: readonly string[]): Predicate<TypedValue>;\nexport function isNodeOfTypes(\n node: TypedValue | null | undefined,\n types: readonly string[],\n): boolean;\nexport function isNodeOfTypes(\n nodeOrTypes: TypedValue | readonly string[] | null | undefined,\n maybeTypes?: readonly string[],\n): boolean | Predicate<TypedValue> {\n if (Array.isArray(nodeOrTypes) && maybeTypes === undefined) {\n return (node) => node?.type !== undefined && nodeOrTypes.includes(node.type);\n }\n const nodeType = (nodeOrTypes as TypedValue | null | undefined)?.type;\n return nodeType !== undefined && maybeTypes?.includes(nodeType) === true;\n}\n\nexport function isNodeOfTypeWithConditions(\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): Predicate<TypedValue>;\nexport function isNodeOfTypeWithConditions(\n node: TypedValue | null | undefined,\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): boolean;\nexport function isNodeOfTypeWithConditions(\n nodeOrType: TypedValue | string | null | undefined,\n typeOrConditions: string | Readonly<Record<string, unknown>>,\n maybeConditions?: Readonly<Record<string, unknown>>,\n): boolean | Predicate<TypedValue> {\n if (typeof nodeOrType === \"string\") {\n const type = nodeOrType;\n const conditions = typeOrConditions as Readonly<Record<string, unknown>>;\n return (node) => node?.type === type && matchesConditions(node, conditions);\n }\n return (\n nodeOrType?.type === typeOrConditions && matchesConditions(nodeOrType, maybeConditions ?? {})\n );\n}\n\nexport function isIdentifier(\n node: { readonly type?: string; readonly name?: string } | null | undefined,\n name?: string,\n): boolean {\n return node?.type === \"Identifier\" && (name === undefined || node.name === name);\n}\n\nexport function isTokenOfTypeWithConditions(\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): Predicate<ValueToken>;\nexport function isTokenOfTypeWithConditions(\n token: ValueToken | null | undefined,\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): boolean;\nexport function isTokenOfTypeWithConditions(\n tokenOrType: ValueToken | string | null | undefined,\n typeOrConditions: string | Readonly<Record<string, unknown>>,\n maybeConditions?: Readonly<Record<string, unknown>>,\n): boolean | Predicate<ValueToken> {\n if (typeof tokenOrType === \"string\") {\n const type = tokenOrType;\n const conditions = typeOrConditions as Readonly<Record<string, unknown>>;\n return (token) => token?.type === type && matchesConditions(token, conditions);\n }\n return (\n tokenOrType?.type === typeOrConditions && matchesConditions(tokenOrType, maybeConditions ?? {})\n );\n}\n\nexport function isNotTokenOfTypeWithConditions(\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): Predicate<ValueToken>;\nexport function isNotTokenOfTypeWithConditions(\n token: ValueToken | null | undefined,\n type: string,\n conditions: Readonly<Record<string, unknown>>,\n): boolean;\nexport function isNotTokenOfTypeWithConditions(\n tokenOrType: ValueToken | string | null | undefined,\n typeOrConditions: string | Readonly<Record<string, unknown>>,\n maybeConditions?: Readonly<Record<string, unknown>>,\n): boolean | Predicate<ValueToken> {\n if (typeof tokenOrType === \"string\") {\n const predicate = isTokenOfTypeWithConditions(tokenOrType, typeOrConditions as never);\n return (token) => !predicate(token);\n }\n return !isTokenOfTypeWithConditions(\n tokenOrType,\n typeOrConditions as string,\n maybeConditions ?? {},\n );\n}\n\nexport function isFunction(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\n \"ArrowFunctionExpression\",\n \"FunctionDeclaration\",\n \"FunctionExpression\",\n ]);\n}\n\nexport function isFunctionType(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, functionTypeTypes);\n}\n\nexport function isFunctionOrFunctionType(\n node: { readonly type?: string } | null | undefined,\n): boolean {\n return isFunction(node) || isFunctionType(node);\n}\n\nexport function isTSFunctionType(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"TSFunctionType\";\n}\n\nexport function isTSConstructorType(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"TSConstructorType\";\n}\n\nexport function isAwaitExpression(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"AwaitExpression\";\n}\n\nexport function isVariableDeclarator(node: { readonly type?: string } | null | undefined): boolean {\n return node?.type === \"VariableDeclarator\";\n}\n\nexport function isLoop(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\n \"DoWhileStatement\",\n \"ForInStatement\",\n \"ForOfStatement\",\n \"ForStatement\",\n \"WhileStatement\",\n ]);\n}\n\nexport function isTypeAssertion(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\"TSAsExpression\", \"TSTypeAssertion\"]);\n}\n\nexport function isClassOrTypeElement(node: { readonly type?: string } | null | undefined): boolean {\n return isNodeOfTypes(node, [\n \"PropertyDefinition\",\n \"FunctionExpression\",\n \"MethodDefinition\",\n \"TSAbstractPropertyDefinition\",\n \"TSAbstractMethodDefinition\",\n \"TSEmptyBodyFunctionExpression\",\n \"TSIndexSignature\",\n \"TSCallSignatureDeclaration\",\n \"TSConstructSignatureDeclaration\",\n \"TSMethodSignature\",\n \"TSPropertySignature\",\n ]);\n}\n\nexport function isOptionalCallExpression(\n node: { readonly type?: string; readonly optional?: boolean } | null | undefined,\n): boolean {\n return node?.type === \"CallExpression\" && node.optional === true;\n}\n\nexport function isConstructor(\n node: { readonly type?: string; readonly kind?: string } | null | undefined,\n): boolean {\n return node?.type === \"MethodDefinition\" && node.kind === \"constructor\";\n}\n\nexport function isSetter(\n node: { readonly type?: string; readonly kind?: string } | null | undefined,\n): boolean {\n return (node?.type === \"MethodDefinition\" || node?.type === \"Property\") && node.kind === \"set\";\n}\n\nexport const LINEBREAK_MATCHER = /\\r\\n|[\\r\\n\\u2028\\u2029]/u;\n\nconst IDENTIFIER = \"Identifier\";\nconst PUNCTUATOR = \"Punctuator\";\nconst KEYWORD = \"Keyword\";\nconst functionTypeTypes = [\n \"TSCallSignatureDeclaration\",\n \"TSConstructSignatureDeclaration\",\n \"TSConstructorType\",\n \"TSDeclareFunction\",\n \"TSEmptyBodyFunctionExpression\",\n \"TSFunctionType\",\n \"TSMethodSignature\",\n] as const;\n\nexport const isArrowToken = tokenWithValue(\"=>\");\nexport const isNotArrowToken = not(isArrowToken);\nexport const isAwaitKeyword = tokenWithValue(\"await\", IDENTIFIER);\nexport const isClosingBraceToken = tokenWithValue(\"}\");\nexport const isNotClosingBraceToken = not(isClosingBraceToken);\nexport const isClosingBracketToken = tokenWithValue(\"]\");\nexport const isNotClosingBracketToken = not(isClosingBracketToken);\nexport const isClosingParenToken = tokenWithValue(\")\");\nexport const isNotClosingParenToken = not(isClosingParenToken);\nexport const isColonToken = tokenWithValue(\":\");\nexport const isNotColonToken = not(isColonToken);\nexport const isCommaToken = tokenWithValue(\",\");\nexport const isNotCommaToken = not(isCommaToken);\nexport const isCommentToken = (token: { readonly type?: string } | null | undefined): boolean =>\n token?.type === \"Block\" || token?.type === \"Line\" || token?.type === \"Shebang\";\nexport const isNotCommentToken = not(isCommentToken);\nexport const isImportKeyword = keywordWithValue(\"import\");\nexport const isLogicalOrOperator = tokenWithValue(\"||\");\nexport const isNonNullAssertionPunctuator = tokenWithValue(\"!\");\nexport const isNotNonNullAssertionPunctuator = not(isNonNullAssertionPunctuator);\nexport const isOpeningBraceToken = tokenWithValue(\"{\");\nexport const isNotOpeningBraceToken = not(isOpeningBraceToken);\nexport const isOpeningBracketToken = tokenWithValue(\"[\");\nexport const isNotOpeningBracketToken = not(isOpeningBracketToken);\nexport const isOpeningParenToken = tokenWithValue(\"(\");\nexport const isNotOpeningParenToken = not(isOpeningParenToken);\nexport const isOptionalChainPunctuator = tokenWithValue(\"?.\");\nexport const isNotOptionalChainPunctuator = not(isOptionalChainPunctuator);\nexport const isSemicolonToken = tokenWithValue(\";\");\nexport const isNotSemicolonToken = not(isSemicolonToken);\nexport const isTypeKeyword = tokenWithValue(\"type\", IDENTIFIER);\n\nexport function isTokenOnSameLine(\n left: { readonly loc?: { readonly end?: { readonly line?: number } } },\n right: { readonly loc?: { readonly start?: { readonly line?: number } } },\n): boolean {\n return left.loc?.end?.line === right.loc?.start?.line;\n}\n\nexport function isParenthesized(\n node: { readonly range?: readonly [number, number] },\n sourceCode?: {\n getTokenBefore?: (node: unknown) => { readonly value?: string } | null;\n getTokenAfter?: (node: unknown) => { readonly value?: string } | null;\n },\n): boolean {\n if (!node.range || !sourceCode?.getTokenBefore || !sourceCode.getTokenAfter) {\n return false;\n }\n return (\n sourceCode.getTokenBefore(node)?.value === \"(\" && sourceCode.getTokenAfter(node)?.value === \")\"\n );\n}\n\nexport function getInnermostScope(\n initialScope: ScopeLike | null | undefined,\n node: { readonly range?: readonly [number, number] } | null | undefined,\n): ScopeLike | null {\n if (!initialScope) {\n return null;\n }\n if (!node?.range) {\n return initialScope;\n }\n\n const location = node.range[0];\n let scope = initialScope;\n let found = false;\n do {\n found = false;\n for (const childScope of scope.childScopes ?? []) {\n const range = childScope.block?.range;\n if (range && range[0] <= location && location < range[1]) {\n scope = childScope;\n found = true;\n break;\n }\n }\n } while (found);\n\n return scope;\n}\n\nexport function findVariable(\n initialScope: ScopeLike | null | undefined,\n nameOrNode:\n | string\n | ({ readonly name?: string } & { readonly range?: readonly [number, number] }),\n): VariableLike | null {\n if (!initialScope) {\n return null;\n }\n\n const name = typeof nameOrNode === \"string\" ? nameOrNode : nameOrNode.name;\n if (!name) {\n return null;\n }\n\n let scope: ScopeLike | null =\n typeof nameOrNode === \"string\" ? initialScope : getInnermostScope(initialScope, nameOrNode);\n while (scope) {\n const variable = scope.set?.get(name);\n if (variable != null) {\n return variable;\n }\n scope = scope.upper ?? null;\n }\n\n return null;\n}\n\nexport function getFunctionHeadLocation(\n node: AstNode | null | undefined,\n sourceCode?: SourceCodeLike,\n): SourceLocation | null {\n if (!node || !sourceCode) {\n return null;\n }\n\n const parent = parentNodeOf(node);\n let start: Position | undefined;\n let end: Position | undefined;\n\n if (node.type === \"ArrowFunctionExpression\") {\n const body = childNode(node, \"body\");\n const arrowToken = body ? sourceCode.getTokenBefore?.(body, isArrowToken) : null;\n start = arrowToken?.loc?.start;\n end = arrowToken?.loc?.end;\n } else if (\n parent &&\n (parent.type === \"Property\" ||\n parent.type === \"MethodDefinition\" ||\n parent.type === \"PropertyDefinition\")\n ) {\n start = locationOf(parent)?.start;\n end = getOpeningParenOfParams(node, sourceCode)?.loc?.start;\n } else {\n start = locationOf(node)?.start;\n end = getOpeningParenOfParams(node, sourceCode)?.loc?.start;\n }\n\n return start && end ? { start: { ...start }, end: { ...end } } : null;\n}\n\nexport function getFunctionNameWithKind(\n node: AstNode | null | undefined,\n sourceCode?: SourceCodeLike,\n): string {\n const parent = node ? parentNodeOf(node) : undefined;\n if (!node || !parent) {\n return \"\";\n }\n\n const tokens: string[] = [];\n const isObjectMethod = parent.type === \"Property\" && parent.value === node;\n const isClassMethod = parent.type === \"MethodDefinition\" && parent.value === node;\n const isClassFieldMethod = parent.type === \"PropertyDefinition\" && parent.value === node;\n const key = childNode(parent, \"key\");\n\n if (isClassMethod || isClassFieldMethod) {\n if (parent.static === true) {\n tokens.push(\"static\");\n }\n if (key?.type === \"PrivateIdentifier\") {\n tokens.push(\"private\");\n }\n }\n if (node.async === true) {\n tokens.push(\"async\");\n }\n if (node.generator === true) {\n tokens.push(\"generator\");\n }\n\n if (isObjectMethod || isClassMethod) {\n if (parent.kind === \"constructor\") {\n return \"constructor\";\n }\n if (parent.kind === \"get\") {\n tokens.push(\"getter\");\n } else if (parent.kind === \"set\") {\n tokens.push(\"setter\");\n } else {\n tokens.push(\"method\");\n }\n } else if (isClassFieldMethod) {\n tokens.push(\"method\");\n } else {\n if (node.type === \"ArrowFunctionExpression\") {\n tokens.push(\"arrow\");\n }\n tokens.push(\"function\");\n }\n\n if (isObjectMethod || isClassMethod || isClassFieldMethod) {\n if (key?.type === \"PrivateIdentifier\") {\n const name = stringField(key, \"name\");\n if (name) {\n tokens.push(`#${name}`);\n }\n } else {\n const name = getPropertyName(parent);\n if (name) {\n tokens.push(`'${name}'`);\n } else if (sourceCode && key) {\n const keyText = sourceCode.getText?.(key);\n if (keyText && !keyText.includes(\"\\n\")) {\n tokens.push(`[${keyText}]`);\n }\n }\n }\n } else {\n const id = childNode(node, \"id\");\n const variableId = childNode(parent, \"id\");\n const assignmentLeft = childNode(parent, \"left\");\n if (id) {\n const name = stringField(id, \"name\");\n if (name) {\n tokens.push(`'${name}'`);\n }\n } else if (parent.type === \"VariableDeclarator\" && variableId?.type === \"Identifier\") {\n const name = stringField(variableId, \"name\");\n if (name) {\n tokens.push(`'${name}'`);\n }\n } else if (\n (parent.type === \"AssignmentExpression\" || parent.type === \"AssignmentPattern\") &&\n assignmentLeft?.type === \"Identifier\"\n ) {\n const name = stringField(assignmentLeft, \"name\");\n if (name) {\n tokens.push(`'${name}'`);\n }\n } else if (parent.type === \"ExportDefaultDeclaration\" && parent.declaration === node) {\n tokens.push(\"'default'\");\n }\n }\n\n return tokens.join(\" \");\n}\n\nexport function getPropertyName(node: AstNode | null | undefined): string | null {\n if (!node) {\n return null;\n }\n\n switch (node.type) {\n case \"MemberExpression\": {\n const property = childNode(node, \"property\");\n if (!property) {\n return null;\n }\n if (isComputedProperty(node)) {\n return getStringIfConstant(property);\n }\n return property.type === \"PrivateIdentifier\" ? null : stringField(property, \"name\");\n }\n case \"MethodDefinition\":\n case \"Property\":\n case \"PropertyDefinition\": {\n const key = childNode(node, \"key\");\n if (!key) {\n return null;\n }\n if (isComputedProperty(node)) {\n return getStringIfConstant(key);\n }\n if (key.type === \"Literal\") {\n return String((key as { readonly value?: unknown }).value);\n }\n return key.type === \"PrivateIdentifier\" ? null : stringField(key, \"name\");\n }\n default: {\n const property = propertyNodeOf(node);\n if (!property) {\n return null;\n }\n if (!isComputedProperty(node) && property.type === \"Identifier\") {\n return stringField(property, \"name\");\n }\n if (!isComputedProperty(node) && property.type === \"PrivateIdentifier\") {\n return null;\n }\n const staticValue = getStaticValue(property);\n return staticValue == null ? null : String(staticValue.value);\n }\n }\n}\n\nexport function getStaticValue(node: AstNode | null | undefined): StaticValue {\n if (!node) {\n return null;\n }\n try {\n switch (node.type) {\n case \"ArrayExpression\":\n return staticArrayValue(node);\n case \"BinaryExpression\":\n return staticBinaryValue(node);\n case \"ChainExpression\":\n case \"TSAsExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n return getStaticValue(childNode(node, \"expression\"));\n case \"ConditionalExpression\":\n return staticConditionalValue(node);\n case \"Identifier\":\n return staticIdentifierValue(node);\n case \"Literal\":\n return { value: (node as { readonly value?: unknown }).value };\n case \"LogicalExpression\":\n return staticLogicalValue(node);\n case \"ObjectExpression\":\n return staticObjectValue(node);\n case \"SequenceExpression\":\n return staticSequenceValue(node);\n case \"TemplateLiteral\":\n return staticTemplateValue(node);\n case \"UnaryExpression\":\n return staticUnaryValue(node);\n default:\n return null;\n }\n } catch {\n return null;\n }\n}\n\nexport function getStringIfConstant(node: AstNode | null | undefined): string | null {\n if (node?.type === \"Literal\" && (node as { readonly value?: unknown }).value === null) {\n const regex = (\n node as { readonly regex?: { readonly pattern?: string; readonly flags?: string } }\n ).regex;\n if (regex?.pattern != null && regex.flags != null) {\n return `/${regex.pattern}/${regex.flags}`;\n }\n const bigint = (node as { readonly bigint?: unknown }).bigint;\n if (typeof bigint === \"string\") {\n return bigint;\n }\n }\n const staticValue = getStaticValue(node);\n if (staticValue == null) {\n return null;\n }\n try {\n return String(staticValue.value);\n } catch {\n return null;\n }\n}\n\nexport function hasSideEffect(\n node: AstNode | null | undefined,\n sourceCode?: SourceCodeLike,\n options: HasSideEffectOptions = {},\n): boolean {\n return hasSideEffectNode(node, new WeakSet<object>(), sourceCode?.visitorKeys, {\n considerGetters: options.considerGetters === true,\n considerImplicitTypeConversion: options.considerImplicitTypeConversion === true,\n });\n}\n\nfunction hasSideEffectNode(\n node: AstNode | null | undefined,\n seen: WeakSet<object>,\n visitorKeys: Readonly<Record<string, readonly string[]>> | undefined,\n options: Required<HasSideEffectOptions>,\n): boolean {\n if (!node) {\n return false;\n }\n if (seen.has(node)) {\n return false;\n }\n seen.add(node);\n if (isSideEffectNode(node)) {\n return true;\n }\n if (node.type === \"ArrowFunctionExpression\" || node.type === \"FunctionExpression\") {\n return false;\n }\n if (isImplicitTypeConversionSideEffectNode(node, options)) {\n return true;\n }\n if (options.considerGetters && node.type === \"MemberExpression\") {\n return true;\n }\n for (const key of astChildKeys(node, visitorKeys)) {\n const value = node[key];\n if (isAstNode(value) && hasSideEffectNode(value, seen, visitorKeys, options)) {\n return true;\n }\n if (\n Array.isArray(value) &&\n value.some((item) => isAstNode(item) && hasSideEffectNode(item, seen, visitorKeys, options))\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport class PatternMatcher {\n constructor(pattern: RegExp, options: { readonly escaped?: boolean } = {}) {\n if (!(pattern instanceof RegExp)) {\n throw new TypeError(\"'pattern' should be a RegExp instance.\");\n }\n if (!pattern.flags.includes(\"g\")) {\n throw new Error(\"'pattern' should contains 'g' flag.\");\n }\n\n patternMatcherInternal.set(this, {\n escaped: options.escaped === true,\n pattern: new RegExp(pattern.source, pattern.flags),\n });\n }\n\n *execAll(str: string): IterableIterator<RegExpExecArray> {\n const state = patternMatcherInternal.get(this);\n if (!state) {\n return;\n }\n\n let match: RegExpExecArray | null = null;\n let lastIndex = 0;\n state.pattern.lastIndex = 0;\n while ((match = state.pattern.exec(str)) != null) {\n if (state.escaped || !isEscaped(str, match.index)) {\n lastIndex = state.pattern.lastIndex;\n yield match;\n state.pattern.lastIndex = lastIndex;\n }\n }\n }\n\n test(str: string): boolean {\n return this.execAll(str).next().done !== true;\n }\n\n [Symbol.replace](\n str: string,\n replacer: string | ((substring: string, ...args: unknown[]) => string),\n ): string {\n return typeof replacer === \"function\"\n ? replacePatternWithFunction(this, String(str), replacer)\n : replacePatternWithString(this, String(str), String(replacer));\n }\n}\n\nexport class ReferenceTracker {\n static readonly READ: unique symbol = Symbol(\"read\");\n static readonly CALL: unique symbol = Symbol(\"call\");\n static readonly CONSTRUCT: unique symbol = Symbol(\"construct\");\n static readonly ESM: unique symbol = Symbol(\"esm\");\n\n readonly #globalObjectNames: readonly string[];\n readonly #globalScope: ScopeLike;\n readonly #mode: \"legacy\" | \"strict\";\n readonly #variableStack: VariableLike[] = [];\n\n constructor(\n globalScope: ScopeLike,\n options: {\n readonly globalObjectNames?: readonly string[];\n readonly mode?: \"legacy\" | \"strict\";\n } = {},\n ) {\n this.#globalScope = globalScope;\n this.#globalObjectNames = options.globalObjectNames ?? [\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n ];\n this.#mode = options.mode ?? \"strict\";\n }\n\n *iterateGlobalReferences<T>(traceMap: TraceMapElement<T>): IterableIterator<FoundReference<T>> {\n for (const key of Object.keys(traceMap)) {\n const nextTraceMap = traceElement(traceMap, key);\n const variable = this.#globalScope.set?.get(key);\n if (!nextTraceMap || isModifiedGlobal(variable)) {\n continue;\n }\n yield* this.#iterateVariableReferences(variable, [key], nextTraceMap, true);\n }\n\n for (const key of this.#globalObjectNames) {\n const variable = this.#globalScope.set?.get(key);\n if (isModifiedGlobal(variable)) {\n continue;\n }\n yield* this.#iterateVariableReferences(variable, [], traceMap, false);\n }\n }\n\n *iterateCjsReferences<T>(traceMap: TraceMapElement<T>): IterableIterator<FoundReference<T>> {\n const requireCall = { require: { [ReferenceTracker.CALL]: true } };\n for (const { node } of this.iterateGlobalReferences(requireCall)) {\n const key = getStringIfConstant(arrayField<AstNode>(node, \"arguments\")[0]);\n if (key == null || !hasOwn(traceMap, key)) {\n continue;\n }\n const nextTraceMap = traceElement(traceMap, key);\n if (!nextTraceMap) {\n continue;\n }\n const path = [key];\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iteratePropertyReferences(node, path, nextTraceMap);\n }\n }\n\n *iterateEsmReferences<T>(traceMap: TraceMapElement<T>): IterableIterator<FoundReference<T>> {\n const program = this.#globalScope.block;\n for (const node of arrayField<AstNode>(program ?? {}, \"body\")) {\n const source = node.source;\n if (\n !isRecord(source) ||\n typeof source.value !== \"string\" ||\n !hasOwn(traceMap, source.value)\n ) {\n continue;\n }\n const nextTraceMap = traceElement(traceMap, source.value);\n if (!nextTraceMap) {\n continue;\n }\n const path = [source.value];\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n\n if (node.type === \"ExportAllDeclaration\") {\n for (const key of Object.keys(nextTraceMap)) {\n const exportTraceMap = traceElement(nextTraceMap, key);\n if (exportTraceMap && hasOwn(exportTraceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path: path.concat(key),\n type: ReferenceTracker.READ,\n info: exportTraceMap[ReferenceTracker.READ] as T,\n };\n }\n }\n continue;\n }\n\n for (const specifier of arrayField<AstNode>(node, \"specifiers\")) {\n const esm = hasOwn(nextTraceMap, ReferenceTracker.ESM);\n const importTraceMap = esm\n ? nextTraceMap\n : this.#mode === \"legacy\"\n ? ({ default: nextTraceMap, ...nextTraceMap } as TraceMapElement<T>)\n : ({ default: nextTraceMap } as TraceMapElement<T>);\n const reports = this.#iterateImportReferences(specifier, path, importTraceMap);\n if (esm) {\n yield* reports;\n } else {\n for (const report of reports) {\n report.path = report.path.filter((name, index) => !(index === 1 && name === \"default\"));\n if (report.path.length >= 2 || report.type !== ReferenceTracker.READ) {\n yield report;\n }\n }\n }\n }\n }\n }\n\n *iteratePropertyReferences<T>(\n node: AstNode,\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n yield* this.#iteratePropertyReferences(node, [], traceMap);\n }\n\n *#iterateVariableReferences<T>(\n variable: VariableLike,\n path: string[],\n traceMap: TraceMapElement<T>,\n shouldReport: boolean,\n ): IterableIterator<FoundReference<T>> {\n if (this.#variableStack.includes(variable)) {\n return;\n }\n this.#variableStack.push(variable);\n try {\n for (const reference of variable.references ?? []) {\n if (reference.isRead?.() === false || !reference.identifier) {\n continue;\n }\n const node = reference.identifier;\n if (shouldReport && hasOwn(traceMap, ReferenceTracker.READ)) {\n yield {\n node,\n path,\n type: ReferenceTracker.READ,\n info: traceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iteratePropertyReferences(node, path, traceMap);\n }\n } finally {\n this.#variableStack.pop();\n }\n }\n\n *#iteratePropertyReferences<T>(\n rootNode: AstNode,\n path: string[],\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n let node = rootNode;\n while (isPassThroughReferenceNode(node)) {\n node = parentNodeOf(node) ?? node;\n }\n\n const parent = parentNodeOf(node);\n if (!parent) {\n return;\n }\n if (parent.type === \"MemberExpression\") {\n if (parent.object === node) {\n const key = getPropertyName(parent);\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n return;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: parent,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iteratePropertyReferences(parent, nextPath, nextTraceMap);\n }\n return;\n }\n if (parent.type === \"CallExpression\") {\n if (parent.callee === node && hasOwn(traceMap, ReferenceTracker.CALL)) {\n yield {\n node: parent,\n path,\n type: ReferenceTracker.CALL,\n info: traceMap[ReferenceTracker.CALL] as T,\n };\n }\n return;\n }\n if (parent.type === \"NewExpression\") {\n if (parent.callee === node && hasOwn(traceMap, ReferenceTracker.CONSTRUCT)) {\n yield {\n node: parent,\n path,\n type: ReferenceTracker.CONSTRUCT,\n info: traceMap[ReferenceTracker.CONSTRUCT] as T,\n };\n }\n return;\n }\n if (parent.type === \"AssignmentExpression\") {\n if (parent.right === node) {\n yield* this.#iterateLhsReferences(childNode(parent, \"left\"), path, traceMap);\n yield* this.#iteratePropertyReferences(parent, path, traceMap);\n }\n return;\n }\n if (parent.type === \"AssignmentPattern\") {\n if (parent.right === node) {\n yield* this.#iterateLhsReferences(childNode(parent, \"left\"), path, traceMap);\n }\n return;\n }\n if (parent.type === \"VariableDeclarator\" && parent.init === node) {\n yield* this.#iterateLhsReferences(childNode(parent, \"id\"), path, traceMap);\n }\n }\n\n *#iterateLhsReferences<T>(\n patternNode: AstNode | undefined,\n path: string[],\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n if (!patternNode) {\n return;\n }\n if (patternNode.type === \"Identifier\") {\n const variable = findVariable(this.#globalScope, patternNode) as VariableLike | null;\n if (variable) {\n yield* this.#iterateVariableReferences(variable, path, traceMap, false);\n }\n return;\n }\n if (patternNode.type === \"ObjectPattern\") {\n for (const property of arrayField<AstNode>(patternNode, \"properties\")) {\n const key = getPropertyName(property);\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n continue;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: property,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n yield* this.#iterateLhsReferences(childNode(property, \"value\"), nextPath, nextTraceMap);\n }\n return;\n }\n if (patternNode.type === \"AssignmentPattern\") {\n yield* this.#iterateLhsReferences(childNode(patternNode, \"left\"), path, traceMap);\n }\n }\n\n *#iterateImportReferences<T>(\n specifierNode: AstNode,\n path: string[],\n traceMap: TraceMapElement<T>,\n ): IterableIterator<FoundReference<T>> {\n if (\n specifierNode.type === \"ImportSpecifier\" ||\n specifierNode.type === \"ImportDefaultSpecifier\"\n ) {\n const key =\n specifierNode.type === \"ImportDefaultSpecifier\"\n ? \"default\"\n : importNameOf(childNode(specifierNode, \"imported\"));\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n return;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: specifierNode,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n const local = childNode(specifierNode, \"local\");\n const variable = local ? findVariable(this.#globalScope, local) : null;\n if (variable) {\n yield* this.#iterateVariableReferences(variable, nextPath, nextTraceMap, false);\n }\n return;\n }\n\n if (specifierNode.type === \"ImportNamespaceSpecifier\") {\n const local = childNode(specifierNode, \"local\");\n const variable = local ? findVariable(this.#globalScope, local) : null;\n if (variable) {\n yield* this.#iterateVariableReferences(variable, path, traceMap, false);\n }\n return;\n }\n\n if (specifierNode.type === \"ExportSpecifier\") {\n const key = importNameOf(childNode(specifierNode, \"local\"));\n const nextTraceMap = key == null ? null : traceElement(traceMap, key);\n if (!key || !nextTraceMap) {\n return;\n }\n const nextPath = path.concat(key);\n if (hasOwn(nextTraceMap, ReferenceTracker.READ)) {\n yield {\n node: specifierNode,\n path: nextPath,\n type: ReferenceTracker.READ,\n info: nextTraceMap[ReferenceTracker.READ] as T,\n };\n }\n }\n }\n}\n\nexport namespace ReferenceTracker {\n export type READ = typeof ReferenceTracker.READ;\n export type CALL = typeof ReferenceTracker.CALL;\n export type CONSTRUCT = typeof ReferenceTracker.CONSTRUCT;\n export type ESM = typeof ReferenceTracker.ESM;\n export type ReferenceType = READ | CALL | CONSTRUCT;\n export type TraceMap<T = unknown> = TraceMapElement<T>;\n export type FoundReference<T = unknown> = {\n info: T;\n node: AstNode;\n path: readonly string[];\n type: ReferenceType;\n };\n}\n\nexport const ASTUtils = Object.freeze({\n LINEBREAK_MATCHER,\n PatternMatcher,\n ReferenceTracker,\n findVariable,\n getFunctionHeadLocation,\n getFunctionNameWithKind,\n getInnermostScope,\n getPropertyName,\n getStaticValue,\n getStringIfConstant,\n hasSideEffect,\n isIdentifier,\n isArrowToken,\n isAwaitExpression,\n isAwaitKeyword,\n isClosingBraceToken,\n isClosingBracketToken,\n isClosingParenToken,\n isClassOrTypeElement,\n isColonToken,\n isCommaToken,\n isCommentToken,\n isConstructor,\n isFunction,\n isFunctionOrFunctionType,\n isFunctionType,\n isImportKeyword,\n isLogicalOrOperator,\n isLoop,\n isNodeOfType,\n isNodeOfTypes,\n isNodeOfTypeWithConditions,\n isNonNullAssertionPunctuator,\n isNotArrowToken,\n isNotClosingBraceToken,\n isNotClosingBracketToken,\n isNotClosingParenToken,\n isNotColonToken,\n isNotCommaToken,\n isNotCommentToken,\n isNotNonNullAssertionPunctuator,\n isNotOpeningBraceToken,\n isNotOpeningBracketToken,\n isNotOpeningParenToken,\n isNotOptionalChainPunctuator,\n isNotSemicolonToken,\n isNotTokenOfTypeWithConditions,\n isOpeningBraceToken,\n isOpeningBracketToken,\n isOpeningParenToken,\n isOptionalCallExpression,\n isOptionalChainPunctuator,\n isParenthesized,\n isSemicolonToken,\n isSetter,\n isTokenOfTypeWithConditions,\n isTokenOnSameLine,\n isTSConstructorType,\n isTSFunctionType,\n isTypeAssertion,\n isTypeKeyword,\n isVariableDeclarator,\n});\n\nfunction matchesConditions(\n value: { readonly [key: string]: unknown } | null | undefined,\n conditions: Readonly<Record<string, unknown>>,\n): boolean {\n return Object.entries(conditions).every(([key, expected]) => value?.[key] === expected);\n}\n\nfunction isModifiedGlobal(variable: VariableLike | undefined): variable is undefined {\n return (\n variable == null ||\n (variable.defs?.length ?? 0) !== 0 ||\n (variable.references ?? []).some((reference) => reference.isWrite?.() === true)\n );\n}\n\nfunction traceElement<T>(\n traceMap: TraceMapElement<T>,\n key: PropertyKey,\n): TraceMapElement<T> | null {\n if (!hasOwn(traceMap, key)) {\n return null;\n }\n const value = Reflect.get(traceMap, key) as TraceMapValue<T>;\n return isRecord(value) ? (value as TraceMapElement<T>) : null;\n}\n\nfunction hasOwn(value: object, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction isPassThroughReferenceNode(node: AstNode): boolean {\n const parent = parentNodeOf(node);\n if (!parent) {\n return false;\n }\n switch (parent.type) {\n case \"ConditionalExpression\":\n return parent.consequent === node || parent.alternate === node;\n case \"LogicalExpression\":\n case \"ChainExpression\":\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSTypeAssertion\":\n case \"TSNonNullExpression\":\n case \"TSInstantiationExpression\":\n return true;\n case \"SequenceExpression\": {\n const expressions = arrayField<AstNode>(parent, \"expressions\");\n return expressions.at(-1) === node;\n }\n default:\n return false;\n }\n}\n\nfunction importNameOf(node: AstNode | undefined): string | null {\n if (!node) {\n return null;\n }\n if (node.type === \"Identifier\") {\n return stringField(node, \"name\");\n }\n if (node.type === \"Literal\") {\n const value = node.value;\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : null;\n }\n return null;\n}\n\nfunction propertyNodeOf(node: AstNode | null | undefined): AstNode | undefined {\n if (!node) {\n return undefined;\n }\n const property = node.property ?? node.key;\n return isAstNode(property) ? property : undefined;\n}\n\nfunction isComputedProperty(node: AstNode | null | undefined): boolean {\n return (node as { readonly computed?: boolean } | null | undefined)?.computed === true;\n}\n\nfunction parentNodeOf(node: AstNode): AstNode | undefined {\n const parent = node.parent;\n return isAstNode(parent) ? parent : undefined;\n}\n\nfunction locationOf(node: AstNode): SourceLocation | undefined {\n const loc = node.loc;\n return isSourceLocation(loc) ? loc : undefined;\n}\n\nfunction isSourceLocation(value: unknown): value is SourceLocation {\n return isRecord(value) && isPosition(value.start) && isPosition(value.end);\n}\n\nfunction isPosition(value: unknown): value is Position {\n return isRecord(value) && typeof value.line === \"number\" && typeof value.column === \"number\";\n}\n\nfunction getOpeningParenOfParams(node: AstNode, sourceCode: SourceCodeLike): TokenLike | null {\n const id = childNode(node, \"id\");\n return id\n ? (sourceCode.getTokenAfter?.(id, isOpeningParenToken) ?? null)\n : (sourceCode.getFirstToken?.(node, isOpeningParenToken) ?? null);\n}\n\nfunction staticTemplateValue(node: AstNode): StaticValue {\n const quasis = arrayField<AstNode>(node, \"quasis\");\n const expressions = arrayField<AstNode>(node, \"expressions\");\n let value = \"\";\n for (let index = 0; index < quasis.length; index += 1) {\n value += cookedTemplateText(quasis[index]);\n if (index < expressions.length) {\n const expression = getStaticValue(expressions[index]);\n if (expression == null) {\n return null;\n }\n value += String(expression.value);\n }\n }\n return { value };\n}\n\nfunction staticUnaryValue(node: AstNode): StaticValue {\n const argument = getStaticValue(childNode(node, \"argument\"));\n if (argument == null) {\n return null;\n }\n switch (stringField(node, \"operator\")) {\n case \"-\":\n return { value: -(argument.value as number) };\n case \"+\":\n return { value: +(argument.value as number) };\n case \"!\":\n return { value: !argument.value };\n case \"~\":\n return { value: ~(argument.value as number) };\n case \"typeof\":\n return { value: typeof argument.value };\n case \"void\":\n return { value: undefined };\n default:\n return null;\n }\n}\n\nfunction staticBinaryValue(node: AstNode): StaticValue {\n const left = getStaticValue(childNode(node, \"left\"));\n const right = getStaticValue(childNode(node, \"right\"));\n if (left == null || right == null) {\n return null;\n }\n switch (stringField(node, \"operator\")) {\n case \"==\":\n return { value: left.value == right.value };\n case \"!=\":\n return { value: left.value != right.value };\n case \"===\":\n return { value: left.value === right.value };\n case \"!==\":\n return { value: left.value !== right.value };\n case \"<\":\n return { value: (left.value as number) < (right.value as number) };\n case \"<=\":\n return { value: (left.value as number) <= (right.value as number) };\n case \">\":\n return { value: (left.value as number) > (right.value as number) };\n case \">=\":\n return { value: (left.value as number) >= (right.value as number) };\n case \"<<\":\n return { value: (left.value as number) << (right.value as number) };\n case \">>\":\n return { value: (left.value as number) >> (right.value as number) };\n case \">>>\":\n return { value: (left.value as number) >>> (right.value as number) };\n case \"+\":\n return { value: (left.value as any) + (right.value as any) };\n case \"-\":\n return { value: (left.value as number) - (right.value as number) };\n case \"*\":\n return { value: (left.value as number) * (right.value as number) };\n case \"/\":\n return { value: (left.value as number) / (right.value as number) };\n case \"%\":\n return { value: (left.value as number) % (right.value as number) };\n case \"**\":\n return { value: (left.value as number) ** (right.value as number) };\n case \"|\":\n return { value: (left.value as number) | (right.value as number) };\n case \"&\":\n return { value: (left.value as number) & (right.value as number) };\n case \"^\":\n return { value: (left.value as number) ^ (right.value as number) };\n default:\n return null;\n }\n}\n\nfunction staticLogicalValue(node: AstNode): StaticValue {\n const left = getStaticValue(childNode(node, \"left\"));\n if (left == null) {\n return null;\n }\n const operator = stringField(node, \"operator\");\n if (operator === \"&&\" && !left.value) {\n return left;\n }\n if (operator === \"||\" && left.value) {\n return left;\n }\n if (operator === \"??\" && left.value != null) {\n return left;\n }\n return getStaticValue(childNode(node, \"right\"));\n}\n\nfunction staticConditionalValue(node: AstNode): StaticValue {\n const test = getStaticValue(childNode(node, \"test\"));\n if (test == null) {\n return null;\n }\n return getStaticValue(childNode(node, test.value ? \"consequent\" : \"alternate\"));\n}\n\nfunction staticArrayValue(node: AstNode): StaticValue {\n const values = [];\n for (const element of arrayField<AstNode | null>(node, \"elements\")) {\n if (element == null) {\n values.push(undefined);\n continue;\n }\n if (element.type === \"SpreadElement\") {\n return null;\n }\n const item = getStaticValue(element);\n if (item == null) {\n return null;\n }\n values.push(item.value);\n }\n return { value: values };\n}\n\nfunction staticObjectValue(node: AstNode): StaticValue {\n const value: Record<string, unknown> = {};\n for (const property of arrayField<AstNode>(node, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = getStaticValue(childNode(property, \"argument\"));\n if (argument == null || !isRecord(argument.value)) {\n return null;\n }\n Object.assign(value, argument.value);\n continue;\n }\n if (property.kind != null && property.kind !== \"init\") {\n return null;\n }\n const name = getPropertyName(property);\n const propertyValue = getStaticValue(childNode(property, \"value\"));\n if (name == null || propertyValue == null) {\n return null;\n }\n value[name] = propertyValue.value;\n }\n return { value };\n}\n\nfunction staticSequenceValue(node: AstNode): StaticValue {\n const expressions = arrayField<AstNode>(node, \"expressions\");\n const last = expressions.at(-1);\n return last ? getStaticValue(last) : null;\n}\n\nfunction staticIdentifierValue(node: AstNode): StaticValue {\n switch (stringField(node, \"name\")) {\n case \"Infinity\":\n return { value: Infinity };\n case \"NaN\":\n return { value: NaN };\n case \"undefined\":\n return { value: undefined };\n default:\n return null;\n }\n}\n\nfunction cookedTemplateText(node: AstNode | undefined): string {\n const value = node?.value;\n if (isRecord(value) && typeof value.cooked === \"string\") {\n return value.cooked;\n }\n return \"\";\n}\n\nfunction childNode(node: AstNode, key: string): AstNode | undefined {\n const value = node[key];\n return isAstNode(value) ? value : undefined;\n}\n\nfunction arrayField<T>(node: AstNode, key: string): T[] {\n const value = node[key];\n return Array.isArray(value) ? (value as T[]) : [];\n}\n\nfunction stringField(node: AstNode, key: string): string | null {\n const value = node[key];\n return typeof value === \"string\" ? value : null;\n}\n\nfunction isAstNode(value: unknown): value is AstNode {\n return isRecord(value) && typeof value.type === \"string\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSideEffectNode(node: AstNode): boolean {\n if (\n node.type === \"AssignmentExpression\" ||\n node.type === \"AwaitExpression\" ||\n node.type === \"CallExpression\" ||\n node.type === \"ImportExpression\" ||\n node.type === \"NewExpression\" ||\n node.type === \"UpdateExpression\" ||\n node.type === \"YieldExpression\"\n ) {\n return true;\n }\n return node.type === \"UnaryExpression\" && stringField(node, \"operator\") === \"delete\";\n}\n\nconst typeConversionBinaryOps = new Set([\n \"==\",\n \"!=\",\n \"<\",\n \"<=\",\n \">\",\n \">=\",\n \"<<\",\n \">>\",\n \">>>\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"%\",\n \"|\",\n \"^\",\n \"&\",\n \"in\",\n]);\nconst typeConversionUnaryOps = new Set([\"-\", \"+\", \"!\", \"~\"]);\nconst skippedAstChildKeys = new Set([\"comments\", \"loc\", \"parent\", \"range\", \"tokens\"]);\n\nfunction isImplicitTypeConversionSideEffectNode(\n node: AstNode,\n options: Required<HasSideEffectOptions>,\n): boolean {\n if (!options.considerImplicitTypeConversion) {\n return false;\n }\n\n if (\n node.type === \"BinaryExpression\" &&\n typeConversionBinaryOps.has(stringField(node, \"operator\") ?? \"\")\n ) {\n return (\n childNode(node, \"left\")?.type !== \"Literal\" || childNode(node, \"right\")?.type !== \"Literal\"\n );\n }\n\n if (\n (node.type === \"MemberExpression\" ||\n node.type === \"MethodDefinition\" ||\n node.type === \"Property\" ||\n node.type === \"PropertyDefinition\") &&\n isComputedProperty(node)\n ) {\n return (\n childNode(node, node.type === \"MemberExpression\" ? \"property\" : \"key\")?.type !== \"Literal\"\n );\n }\n\n return (\n node.type === \"UnaryExpression\" &&\n typeConversionUnaryOps.has(stringField(node, \"operator\") ?? \"\") &&\n childNode(node, \"argument\")?.type !== \"Literal\"\n );\n}\n\nfunction astChildKeys(\n node: AstNode,\n visitorKeys: Readonly<Record<string, readonly string[]>> | undefined,\n): readonly string[] {\n const configured = node.type ? visitorKeys?.[node.type] : undefined;\n if (configured) {\n return configured;\n }\n return Object.keys(node).filter((key) => !skippedAstChildKeys.has(key));\n}\n\nconst patternMatcherInternal = new WeakMap<\n PatternMatcher,\n { readonly escaped: boolean; readonly pattern: RegExp }\n>();\nconst replacementPlaceholder = /\\$(?:[$&`']|[1-9][0-9]?)/gu;\n\nfunction isEscaped(str: string, index: number): boolean {\n let escaped = false;\n for (let cursor = index - 1; cursor >= 0 && str.charCodeAt(cursor) === 0x5c; cursor -= 1) {\n escaped = !escaped;\n }\n return escaped;\n}\n\nfunction replacePatternWithString(\n matcher: PatternMatcher,\n str: string,\n replacement: string,\n): string {\n const chunks: string[] = [];\n let index = 0;\n\n for (const match of matcher.execAll(str)) {\n chunks.push(str.slice(index, match.index));\n chunks.push(\n replacement.replace(replacementPlaceholder, (key) =>\n replacementForPlaceholder(key, str, match),\n ),\n );\n index = match.index + match[0].length;\n }\n chunks.push(str.slice(index));\n\n return chunks.join(\"\");\n}\n\nfunction replacementForPlaceholder(key: string, str: string, match: RegExpExecArray): string {\n switch (key) {\n case \"$$\":\n return \"$\";\n case \"$&\":\n return match[0];\n case \"$`\":\n return str.slice(0, match.index);\n case \"$'\":\n return str.slice(match.index + match[0].length);\n default: {\n const index = Number(key.slice(1));\n const capture = Number.isNaN(index) ? undefined : match[index];\n return capture ?? key;\n }\n }\n}\n\nfunction replacePatternWithFunction(\n matcher: PatternMatcher,\n str: string,\n replace: (substring: string, ...args: unknown[]) => string,\n): string {\n const chunks: string[] = [];\n let index = 0;\n\n for (const match of matcher.execAll(str)) {\n chunks.push(str.slice(index, match.index));\n chunks.push(String(replace(match[0], ...match.slice(1), match.index, match.input)));\n index = match.index + match[0].length;\n }\n chunks.push(str.slice(index));\n\n return chunks.join(\"\");\n}\n\nfunction tokenWithValue(expected: string, type = PUNCTUATOR) {\n return (token: { readonly type?: string; readonly value?: string } | null | undefined): boolean =>\n token?.type === type && token.value === expected;\n}\n\nfunction keywordWithValue(expected: string) {\n return (token: { readonly type?: string; readonly value?: string } | null | undefined): boolean =>\n token?.type === KEYWORD && token.value === expected;\n}\n\nfunction not<T extends readonly unknown[]>(predicate: (...args: T) => boolean) {\n return (...args: T): boolean => !predicate(...args);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"checker.js","names":[],"sources":["../ts/checker.ts"],"sourcesContent":["import type { Node } from \"@oxlint/plugins\";\n\nimport { createNodeMaps, toPosition } from \"./node_map\";\nimport { sessionForContext } from \"./registry\";\nimport { SignatureKind } from \"./types\";\nimport type {\n ContextWithParserOptions,\n CorsaNode,\n CorsaProgramShape,\n CorsaSignature,\n CorsaSymbol,\n CorsaType,\n CorsaTypeCheckerShape,\n} from \"./types\";\n\nexport function createProgram(\n context: ContextWithParserOptions,\n): CorsaProgramShape & { readonly nodeMaps: ReturnType<typeof createNodeMaps> } {\n const nodeMaps = createNodeMaps(context);\n return {\n nodeMaps,\n getCompilerOptions() {\n return sessionForContext(context).session.getCompilerOptions();\n },\n getCurrentDirectory() {\n return sessionForContext(context).project.rootDir;\n },\n getRootFileNames() {\n return sessionForContext(context).session.getRootFileNames();\n },\n getSourceFile(fileName = context.filename) {\n return { fileName, text: context.sourceCode.text };\n },\n getTypeChecker() {\n return createTypeChecker(context);\n },\n };\n}\n\nexport function createTypeChecker(context: ContextWithParserOptions): CorsaTypeCheckerShape {\n return {\n getTypeAtLocation(node) {\n if ((node as { readonly type?: string }).type === \"NewExpression\") {\n return typeOfNewExpression(node as Node, this);\n }\n const lookupNode = nodeForTypeLookup(node);\n return sessionForContext(context).session.getTypeAtSourceRange(\n filenameFor(context, lookupNode),\n toPosition(lookupNode),\n endPosition(lookupNode),\n sourceTextFor(context, lookupNode),\n nodeKind(lookupNode),\n );\n },\n getContextualType(node) {\n return this.getTypeAtLocation(node);\n },\n getSymbolAtLocation(node) {\n const lookupNode = nodeForTypeLookup(node);\n return sessionForContext(context).session.getSymbolAtPosition(\n filenameFor(context, lookupNode),\n toPosition(lookupNode),\n sourceTextFor(context, lookupNode),\n );\n },\n getSymbol(symbol) {\n return sessionForContext(context).session.getSymbol(symbol);\n },\n getSymbolById(id) {\n return sessionForContext(context).session.getSymbol(id);\n },\n getSymbolOfType(type) {\n return sessionForContext(context).session.getSymbolOfType(type);\n },\n getNode(node) {\n return sessionForContext(context).session.getNode(node);\n },\n getNodeById(id) {\n return sessionForContext(context).session.getNode(id);\n },\n getTypeOfSymbol(symbol) {\n return sessionForContext(context).session.getTypeOfSymbol(symbol);\n },\n getTypeOfSymbolById(id) {\n return sessionForContext(context).session.getTypeOfSymbolById(id);\n },\n getDeclaredTypeOfSymbol(symbol) {\n return sessionForContext(context).session.getDeclaredTypeOfSymbol(symbol);\n },\n getDeclaredTypeOfSymbolById(id) {\n return sessionForContext(context).session.getDeclaredTypeOfSymbolById(id);\n },\n getTypeOfSymbolAtLocation(symbol, node) {\n return (\n this.getTypeOfSymbol(symbol) ??\n this.getDeclaredTypeOfSymbol(symbol) ??\n this.getTypeAtLocation(node)\n );\n },\n typeToString(type, enclosingDeclaration, flags) {\n void enclosingDeclaration;\n return sessionForContext(context).session.typeToString(type, flags);\n },\n getBaseTypeOfLiteralType(type) {\n return sessionForContext(context).session.getBaseTypeOfLiteralType(type);\n },\n getPropertiesOfType(type) {\n return sessionForContext(context).session.getPropertiesOfType(type);\n },\n getSignaturesOfType(type, kind) {\n return sessionForContext(context).session.getSignaturesOfType(type, kind);\n },\n getCallSignatureFacts(type, kind, argumentTypeTexts, explicitTypeArgumentTexts) {\n return sessionForContext(context).session.getCallSignatureFacts(\n type,\n kind,\n argumentTypeTexts,\n explicitTypeArgumentTexts,\n );\n },\n getReturnTypeOfSignature(signature) {\n return sessionForContext(context).session.getReturnTypeOfSignature(signature);\n },\n getTypePredicateOfSignature(signature) {\n return sessionForContext(context).session.getTypePredicateOfSignature(signature);\n },\n getBaseTypes(type) {\n return sessionForContext(context).session.getBaseTypes(type);\n },\n getImplementedTypes(node) {\n if (\"pos\" in node) {\n return implementedTypesFromCorsaNode(context, node, this);\n }\n const sourceText = sourceTextFor(context, node);\n const sourceNode = sourceText ? corsaNodeFromEstree(context, node) : undefined;\n if (sourceText && sourceNode) {\n const implemented = implementedTypesFromSourceText(context, sourceNode, sourceText, this);\n if (implemented.length > 0) {\n return implemented;\n }\n }\n return implementedClauseNodes(node)\n .map((clause) => {\n const expression = implementedClauseChildNode(clause, \"expression\") ?? clause;\n const symbol = this.getSymbolAtLocation(expression) ?? this.getSymbolAtLocation(clause);\n return symbol\n ? (this.getDeclaredTypeOfSymbol(symbol) ?? this.getTypeOfSymbol(symbol))\n : (this.getTypeAtLocation(expression) ?? this.getTypeAtLocation(clause));\n })\n .filter((type): type is CorsaType => type !== undefined);\n },\n getImplementedTypesOfType(type) {\n return implementedTypesFromTypeAndBases(context, type, this);\n },\n getTypeArguments(type) {\n return sessionForContext(context).session.getTypeArguments(type);\n },\n getTypesOfType(type) {\n return sessionForContext(context).session.getTypesOfType(type);\n },\n getTargetOfType(type) {\n return sessionForContext(context).session.getTargetOfType(type);\n },\n getTypeParametersOfType(type) {\n return sessionForContext(context).session.getTypeParametersOfType(type);\n },\n getOuterTypeParametersOfType(type) {\n return sessionForContext(context).session.getOuterTypeParametersOfType(type);\n },\n getLocalTypeParametersOfType(type) {\n return sessionForContext(context).session.getLocalTypeParametersOfType(type);\n },\n getObjectTypeOfType(type) {\n return sessionForContext(context).session.getObjectTypeOfType(type);\n },\n getIndexTypeOfType(type) {\n return sessionForContext(context).session.getIndexTypeOfType(type);\n },\n getCheckTypeOfType(type) {\n return sessionForContext(context).session.getCheckTypeOfType(type);\n },\n getExtendsTypeOfType(type) {\n return sessionForContext(context).session.getExtendsTypeOfType(type);\n },\n getBaseTypeOfType(type) {\n return sessionForContext(context).session.getBaseTypeOfType(type);\n },\n getConstraintOfType(type) {\n return sessionForContext(context).session.getConstraintOfType(type);\n },\n isUnionType(type) {\n return (type.flags & typeFlags.union) !== 0;\n },\n isIntersectionType(type) {\n return (type.flags & typeFlags.intersection) !== 0;\n },\n };\n}\n\nconst typeFlags = {\n union: 1 << 27,\n intersection: 1 << 28,\n} as const;\n\nfunction sourceTextFor(\n context: ContextWithParserOptions,\n node: Node | CorsaNode | CorsaType | CorsaSymbol | CorsaSignature,\n): string | undefined {\n return sourceTextForPath(context, filenameFor(context, node));\n}\n\nfunction sourceTextForPath(\n context: ContextWithParserOptions,\n fileName: string,\n): string | undefined {\n const normalizedFileName = fileName.toLowerCase();\n const normalizedContextFilename = context.filename.toLowerCase();\n return normalizedFileName === normalizedContextFilename ||\n normalizedFileName.endsWith(normalizedContextFilename) ||\n normalizedContextFilename.endsWith(normalizedFileName)\n ? context.sourceCode.text\n : sessionForContext(context).session.getSourceTextForPath(fileName);\n}\n\nfunction typeOfNewExpression(node: Node, checker: CorsaTypeCheckerShape): CorsaType | undefined {\n const callee = childNode(node, \"callee\");\n if (!callee) {\n return undefined;\n }\n const calleeType = checker.getTypeAtLocation(callee);\n if (!calleeType) {\n return undefined;\n }\n const constructSignature = checker.getSignaturesOfType(calleeType, SignatureKind.Construct)[0];\n return constructSignature\n ? (checker.getReturnTypeOfSignature(constructSignature) ?? calleeType)\n : calleeType;\n}\n\nfunction nodeForTypeLookup(node: Node | CorsaNode): Node | CorsaNode {\n if (\"pos\" in node) {\n return node;\n }\n switch ((node as { readonly type?: string }).type) {\n case \"ClassDeclaration\":\n case \"ClassExpression\":\n return childNode(node, \"id\") ?? node;\n case \"TSPropertySignature\":\n return childNode(node, \"key\") ?? node;\n default:\n return node;\n }\n}\n\nfunction endPosition(node: Node | CorsaNode): number {\n if (\"end\" in node) {\n return node.end;\n }\n const range = (node as Node & { readonly range?: readonly [number, number] }).range;\n if (!range) {\n throw new Error(\"corsa oxlint requires ESTree nodes with range data\");\n }\n return range[1];\n}\n\nfunction nodeKind(node: Node | CorsaNode): string | undefined {\n return \"pos\" in node ? undefined : (node as { readonly type?: string }).type;\n}\n\nfunction childNode(node: Node, key: string): Node | undefined {\n const value = (node as unknown as Record<string, unknown>)[key];\n if (isNode(value)) {\n return value;\n }\n return undefined;\n}\n\nfunction implementedClauseNodes(node: Node | CorsaNode): readonly Node[] {\n if (\"pos\" in node) {\n return [];\n }\n const clauses = (node as unknown as { readonly implements?: unknown }).implements;\n if (!Array.isArray(clauses)) {\n return [];\n }\n return clauses.filter(isNode);\n}\n\nfunction implementedClauseChildNode(node: Node, key: string): Node | undefined {\n const value = (node as unknown as Record<string, unknown>)[key];\n if (isNode(value)) {\n return value;\n }\n return undefined;\n}\n\nfunction implementedTypesFromCorsaNode(\n context: ContextWithParserOptions,\n node: CorsaNode,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n const symbol = checker.getSymbolAtLocation(node);\n if (symbol) {\n const declaredType = checker.getDeclaredTypeOfSymbol(symbol) ?? checker.getTypeOfSymbol(symbol);\n if (declaredType) {\n const implemented = checker.getImplementedTypesOfType(declaredType);\n if (implemented.length > 0) {\n return implemented;\n }\n }\n }\n const sourceText = sourceTextFor(context, node);\n if (sourceText) {\n return implementedTypesFromSourceText(context, node, sourceText, checker);\n }\n const type = checker.getTypeAtLocation(node);\n return type ? checker.getImplementedTypesOfType(type) : [];\n}\n\nfunction corsaNodeFromEstree(context: ContextWithParserOptions, node: Node): CorsaNode | undefined {\n const range = (node as { readonly range?: unknown }).range;\n if (\n !Array.isArray(range) ||\n range.length < 2 ||\n typeof range[0] !== \"number\" ||\n typeof range[1] !== \"number\"\n ) {\n return undefined;\n }\n return {\n fileName: context.filename,\n pos: range[0],\n end: range[1],\n range: [range[0], range[1]] as const,\n };\n}\n\nfunction implementedTypesFromTypeAndBases(\n context: ContextWithParserOptions,\n type: CorsaType,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n // Iterative DFS over the base chain so we don't pay for one closure call\n // and one `push(...subResult)` spread per base (each spread used to copy\n // the entire growing accumulator). Visit order doesn't matter because we\n // dedupe by `type.id`.\n const seenTypes = new Set<string>();\n const seenImplementedTypes = new Set<string>();\n const implemented: CorsaType[] = [];\n const stack: CorsaType[] = [type];\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (seenTypes.has(current.id)) {\n continue;\n }\n seenTypes.add(current.id);\n\n const ownImplemented = implementedTypesFromTypeDeclaration(context, current, checker);\n for (let index = 0; index < ownImplemented.length; index += 1) {\n const ownType = ownImplemented[index]!;\n if (seenImplementedTypes.has(ownType.id)) {\n continue;\n }\n seenImplementedTypes.add(ownType.id);\n implemented.push(ownType);\n }\n\n const bases = checker.getBaseTypes(current);\n // Push in reverse so the natural visit order matches the recursive form.\n for (let index = bases.length - 1; index >= 0; index -= 1) {\n const baseType = bases[index]!;\n if (seenTypes.has(baseType.id)) {\n continue;\n }\n stack.push(baseType);\n }\n }\n return implemented;\n}\n\nfunction implementedTypesFromTypeDeclaration(\n context: ContextWithParserOptions,\n type: CorsaType,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n const session = sessionForContext(context).session;\n const symbol = type.symbol ? session.getSymbol(type.symbol) : undefined;\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n const declarationNode = declaration ? session.getNode(declaration) : undefined;\n const sourceText = declarationNode\n ? sourceTextForPath(context, declarationNode.fileName)\n : undefined;\n return declarationNode && sourceText\n ? implementedTypesFromSourceText(context, declarationNode, sourceText, checker)\n : [];\n}\n\nfunction implementedTypesFromSourceText(\n context: ContextWithParserOptions,\n node: CorsaNode,\n sourceText: string,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n if (node.pos < 0 || node.end > sourceText.length || node.pos >= node.end) {\n return [];\n }\n const classText = sourceText.slice(node.pos, node.end);\n const classStart = findKeywordOutsideTrivia(classText, \"class\");\n const headerStart = classStart >= 0 ? classStart : 0;\n const bodyOpen = findClassBodyOpen(classText, headerStart);\n const headerText = classText.slice(headerStart, bodyOpen >= 0 ? bodyOpen : classText.length);\n const implementsIndex = findKeywordOutsideTrivia(headerText, \"implements\");\n if (implementsIndex < 0) {\n return [];\n }\n const clauseText = headerText.slice(implementsIndex + \"implements\".length);\n const clauseStart = node.pos + headerStart + implementsIndex + \"implements\".length;\n return splitTopLevelRanges(clauseText, \",\")\n .map((range) => {\n const raw = clauseText.slice(range.start, range.end);\n const leading = raw.search(/\\S/);\n if (leading < 0) {\n return undefined;\n }\n const trailing = raw.match(/\\s*$/)?.[0].length ?? 0;\n const pos = clauseStart + range.start + leading;\n const end = clauseStart + range.end - trailing;\n const lookupNode: CorsaNode = {\n fileName: node.fileName,\n pos,\n end,\n range: [pos, end] as const,\n };\n const nameNode = implementedClauseNameNode(lookupNode, raw);\n const symbol =\n checker.getSymbolAtLocation(nameNode) ?? checker.getSymbolAtLocation(lookupNode);\n const type = symbol\n ? (checker.getDeclaredTypeOfSymbol(symbol) ?? checker.getTypeOfSymbol(symbol))\n : (checker.getTypeAtLocation(nameNode) ?? checker.getTypeAtLocation(lookupNode));\n if (type) {\n try {\n checker.typeToString(type);\n } catch {\n // Corsa-side relation fallbacks handle stale type handles; avoid\n // deriving replacement text from source names in the JS bridge.\n }\n }\n return type;\n })\n .filter((type): type is CorsaType => type !== undefined);\n}\n\nfunction implementedClauseNameNode(node: CorsaNode, raw: string): CorsaNode {\n const range = lastTypeNameIdentifierRange(raw);\n if (!range) {\n return node;\n }\n const pos = node.pos + range.start;\n const end = node.pos + range.end;\n return {\n fileName: node.fileName,\n pos,\n end,\n range: [pos, end] as const,\n };\n}\n\nfunction lastTypeNameIdentifierRange(\n text: string,\n): { readonly start: number; readonly end: number } | undefined {\n let last: { start: number; end: number } | undefined;\n const scanner = createScanner();\n for (let index = 0; index < text.length; index += 1) {\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n const char = text[index];\n if (char === \"<\") {\n break;\n }\n if (!isIdentifierStart(char)) {\n continue;\n }\n let end = index + 1;\n while (isIdentifierPart(text[end])) {\n end += 1;\n }\n last = { start: index, end };\n index = end - 1;\n }\n return last;\n}\n\nfunction findClassBodyOpen(text: string, start: number): number {\n const scanner = createScanner();\n let angleDepth = 0;\n let parenDepth = 0;\n let bracketDepth = 0;\n let braceDepth = 0;\n for (let index = start; index < text.length; index += 1) {\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n const char = text[index];\n if (char === \"<\") angleDepth += 1;\n else if (char === \">\") angleDepth = Math.max(0, angleDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (\n char === \"{\" &&\n angleDepth === 0 &&\n parenDepth === 0 &&\n bracketDepth === 0 &&\n braceDepth === 0\n ) {\n return index;\n } else if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n }\n return -1;\n}\n\nfunction findKeywordOutsideTrivia(text: string, keyword: string): number {\n const scanner = createScanner();\n for (let index = 0; index < text.length; index += 1) {\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n if (matchesKeyword(text, keyword, index)) {\n return index;\n }\n }\n return -1;\n}\n\nfunction matchesKeyword(text: string, keyword: string, index: number): boolean {\n return (\n text.startsWith(keyword, index) &&\n !isIdentifierPart(text[index - 1]) &&\n !isIdentifierPart(text[index + keyword.length])\n );\n}\n\nfunction isIdentifierPart(char: string | undefined): boolean {\n return char !== undefined && (isIdentifierStart(char) || /[0-9]/.test(char));\n}\n\nfunction isIdentifierStart(char: string | undefined): boolean {\n return char !== undefined && /[A-Za-z_$]/.test(char);\n}\n\nfunction splitTopLevelRanges(\n text: string,\n delimiter: string,\n): readonly { readonly start: number; readonly end: number }[] {\n const ranges: { start: number; end: number }[] = [];\n const scanner = createScanner();\n let start = 0;\n let angleDepth = 0;\n let parenDepth = 0;\n let bracketDepth = 0;\n let braceDepth = 0;\n for (let index = 0; index < text.length; index += 1) {\n const char = text[index];\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n if (char === \"<\") angleDepth += 1;\n else if (char === \">\") angleDepth = Math.max(0, angleDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n else if (\n char === delimiter &&\n angleDepth === 0 &&\n parenDepth === 0 &&\n bracketDepth === 0 &&\n braceDepth === 0\n ) {\n ranges.push({ start, end: index });\n start = index + 1;\n }\n }\n ranges.push({ start, end: text.length });\n return ranges;\n}\n\nfunction createScanner(): {\n skip(text: string, index: number): number;\n} {\n let quote: string | undefined;\n let escaped = false;\n let inLineComment = false;\n let inBlockComment = false;\n return {\n skip(text, index) {\n const char = text[index];\n const next = text[index + 1];\n if (inLineComment) {\n if (char === \"\\n\" || char === \"\\r\") {\n inLineComment = false;\n }\n return index + 1;\n }\n if (inBlockComment) {\n if (char === \"*\" && next === \"/\") {\n inBlockComment = false;\n return index + 2;\n }\n return index + 1;\n }\n if (quote) {\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === quote) {\n quote = undefined;\n }\n return index + 1;\n }\n if (char === \"/\" && next === \"/\") {\n inLineComment = true;\n return index + 2;\n }\n if (char === \"/\" && next === \"*\") {\n inBlockComment = true;\n return index + 2;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n return index + 1;\n }\n return index;\n },\n };\n}\n\nfunction isNode(value: unknown): value is Node {\n return typeof value === \"object\" && value !== null && \"type\" in value && \"range\" in value;\n}\n\nfunction filenameFor(\n context: ContextWithParserOptions,\n node: Node | CorsaNode | CorsaType | CorsaSymbol | CorsaSignature,\n): string {\n if (\"fileName\" in node) {\n return node.fileName;\n }\n return context.filename;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"checker.js","names":[],"sources":["../ts/checker.ts"],"sourcesContent":["import type { Node } from \"@oxlint/plugins\";\n\nimport { createNodeMaps, toPosition } from \"./node_map\";\nimport { sessionForContext } from \"./registry\";\nimport { SignatureKind } from \"./types\";\nimport type {\n ContextWithParserOptions,\n CorsaNode,\n CorsaProgramShape,\n CorsaSignature,\n CorsaSymbol,\n CorsaType,\n CorsaTypeCheckerShape,\n} from \"./types\";\n\nexport function createProgram(\n context: ContextWithParserOptions,\n): CorsaProgramShape & { readonly nodeMaps: ReturnType<typeof createNodeMaps> } {\n const nodeMaps = createNodeMaps(context);\n return {\n nodeMaps,\n getCompilerOptions() {\n return sessionForContext(context).session.getCompilerOptions();\n },\n getCurrentDirectory() {\n return sessionForContext(context).project.rootDir;\n },\n getRootFileNames() {\n return sessionForContext(context).session.getRootFileNames();\n },\n getSourceFile(fileName = context.filename) {\n return { fileName, text: context.sourceCode.text };\n },\n getTypeChecker() {\n return createTypeChecker(context);\n },\n };\n}\n\nexport function createTypeChecker(context: ContextWithParserOptions): CorsaTypeCheckerShape {\n return {\n getTypeAtLocation(node) {\n if ((node as { readonly type?: string }).type === \"NewExpression\") {\n return typeOfNewExpression(node as Node, this);\n }\n const lookupNode = nodeForTypeLookup(node);\n return sessionForContext(context).session.getTypeAtSourceRange(\n filenameFor(context, lookupNode),\n toPosition(lookupNode),\n endPosition(lookupNode),\n sourceTextFor(context, lookupNode),\n nodeKind(lookupNode),\n );\n },\n getContextualType(node) {\n return this.getTypeAtLocation(node);\n },\n getSymbolAtLocation(node) {\n const lookupNode = nodeForTypeLookup(node);\n return sessionForContext(context).session.getSymbolAtPosition(\n filenameFor(context, lookupNode),\n toPosition(lookupNode),\n sourceTextFor(context, lookupNode),\n );\n },\n getSymbol(symbol) {\n return sessionForContext(context).session.getSymbol(symbol);\n },\n getSymbolById(id) {\n return sessionForContext(context).session.getSymbol(id);\n },\n getSymbolOfType(type) {\n return sessionForContext(context).session.getSymbolOfType(type);\n },\n getNode(node) {\n return sessionForContext(context).session.getNode(node);\n },\n getNodeById(id) {\n return sessionForContext(context).session.getNode(id);\n },\n getTypeOfSymbol(symbol) {\n return sessionForContext(context).session.getTypeOfSymbol(symbol);\n },\n getTypeOfSymbolById(id) {\n return sessionForContext(context).session.getTypeOfSymbolById(id);\n },\n getDeclaredTypeOfSymbol(symbol) {\n return sessionForContext(context).session.getDeclaredTypeOfSymbol(symbol);\n },\n getDeclaredTypeOfSymbolById(id) {\n return sessionForContext(context).session.getDeclaredTypeOfSymbolById(id);\n },\n getTypeOfSymbolAtLocation(symbol, node) {\n return (\n this.getTypeOfSymbol(symbol) ??\n this.getDeclaredTypeOfSymbol(symbol) ??\n this.getTypeAtLocation(node)\n );\n },\n typeToString(type, enclosingDeclaration, flags) {\n void enclosingDeclaration;\n return sessionForContext(context).session.typeToString(type, flags);\n },\n getBaseTypeOfLiteralType(type) {\n return sessionForContext(context).session.getBaseTypeOfLiteralType(type);\n },\n getPropertiesOfType(type) {\n return sessionForContext(context).session.getPropertiesOfType(type);\n },\n getSignaturesOfType(type, kind) {\n return sessionForContext(context).session.getSignaturesOfType(type, kind);\n },\n getCallSignatureFacts(type, kind, argumentTypeTexts, explicitTypeArgumentTexts) {\n return sessionForContext(context).session.getCallSignatureFacts(\n type,\n kind,\n argumentTypeTexts,\n explicitTypeArgumentTexts,\n );\n },\n getReturnTypeOfSignature(signature) {\n return sessionForContext(context).session.getReturnTypeOfSignature(signature);\n },\n getTypePredicateOfSignature(signature) {\n return sessionForContext(context).session.getTypePredicateOfSignature(signature);\n },\n getBaseTypes(type) {\n return sessionForContext(context).session.getBaseTypes(type);\n },\n getImplementedTypes(node) {\n if (\"pos\" in node) {\n return implementedTypesFromCorsaNode(context, node, this);\n }\n const sourceText = sourceTextFor(context, node);\n const sourceNode = sourceText ? corsaNodeFromEstree(context, node) : undefined;\n if (sourceText && sourceNode) {\n const implemented = implementedTypesFromSourceText(context, sourceNode, sourceText, this);\n if (implemented.length > 0) {\n return implemented;\n }\n }\n return implementedClauseNodes(node)\n .map((clause) => {\n const expression = implementedClauseChildNode(clause, \"expression\") ?? clause;\n const symbol = this.getSymbolAtLocation(expression) ?? this.getSymbolAtLocation(clause);\n return symbol\n ? (this.getDeclaredTypeOfSymbol(symbol) ?? this.getTypeOfSymbol(symbol))\n : (this.getTypeAtLocation(expression) ?? this.getTypeAtLocation(clause));\n })\n .filter((type): type is CorsaType => type !== undefined);\n },\n getImplementedTypesOfType(type) {\n return implementedTypesFromTypeAndBases(context, type, this);\n },\n getTypeArguments(type) {\n return sessionForContext(context).session.getTypeArguments(type);\n },\n getTypesOfType(type) {\n return sessionForContext(context).session.getTypesOfType(type);\n },\n getTargetOfType(type) {\n return sessionForContext(context).session.getTargetOfType(type);\n },\n getTypeParametersOfType(type) {\n return sessionForContext(context).session.getTypeParametersOfType(type);\n },\n getOuterTypeParametersOfType(type) {\n return sessionForContext(context).session.getOuterTypeParametersOfType(type);\n },\n getLocalTypeParametersOfType(type) {\n return sessionForContext(context).session.getLocalTypeParametersOfType(type);\n },\n getObjectTypeOfType(type) {\n return sessionForContext(context).session.getObjectTypeOfType(type);\n },\n getIndexTypeOfType(type) {\n return sessionForContext(context).session.getIndexTypeOfType(type);\n },\n getCheckTypeOfType(type) {\n return sessionForContext(context).session.getCheckTypeOfType(type);\n },\n getExtendsTypeOfType(type) {\n return sessionForContext(context).session.getExtendsTypeOfType(type);\n },\n getBaseTypeOfType(type) {\n return sessionForContext(context).session.getBaseTypeOfType(type);\n },\n getConstraintOfType(type) {\n return sessionForContext(context).session.getConstraintOfType(type);\n },\n isUnionType(type) {\n return (type.flags & typeFlags.union) !== 0;\n },\n isIntersectionType(type) {\n return (type.flags & typeFlags.intersection) !== 0;\n },\n };\n}\n\nconst typeFlags = {\n union: 1 << 27,\n intersection: 1 << 28,\n} as const;\n\nfunction sourceTextFor(\n context: ContextWithParserOptions,\n node: Node | CorsaNode | CorsaType | CorsaSymbol | CorsaSignature,\n): string | undefined {\n return sourceTextForPath(context, filenameFor(context, node));\n}\n\nfunction sourceTextForPath(\n context: ContextWithParserOptions,\n fileName: string,\n): string | undefined {\n const normalizedFileName = fileName.toLowerCase();\n const normalizedContextFilename = context.filename.toLowerCase();\n return normalizedFileName === normalizedContextFilename ||\n normalizedFileName.endsWith(normalizedContextFilename) ||\n normalizedContextFilename.endsWith(normalizedFileName)\n ? context.sourceCode.text\n : sessionForContext(context).session.getSourceTextForPath(fileName);\n}\n\nfunction typeOfNewExpression(node: Node, checker: CorsaTypeCheckerShape): CorsaType | undefined {\n const callee = childNode(node, \"callee\");\n if (!callee) {\n return undefined;\n }\n const calleeType = checker.getTypeAtLocation(callee);\n if (!calleeType) {\n return undefined;\n }\n const constructSignature = checker.getSignaturesOfType(calleeType, SignatureKind.Construct)[0];\n return constructSignature\n ? (checker.getReturnTypeOfSignature(constructSignature) ?? calleeType)\n : calleeType;\n}\n\nfunction nodeForTypeLookup(node: Node | CorsaNode): Node | CorsaNode {\n if (\"pos\" in node) {\n return node;\n }\n switch ((node as { readonly type?: string }).type) {\n case \"ClassDeclaration\":\n case \"ClassExpression\":\n return childNode(node, \"id\") ?? node;\n case \"TSPropertySignature\":\n return childNode(node, \"key\") ?? node;\n default:\n return node;\n }\n}\n\nfunction endPosition(node: Node | CorsaNode): number {\n if (\"end\" in node) {\n return node.end;\n }\n const range = (node as Node & { readonly range?: readonly [number, number] }).range;\n if (!range) {\n throw new Error(\"corsa oxlint requires ESTree nodes with range data\");\n }\n return range[1];\n}\n\nfunction nodeKind(node: Node | CorsaNode): string | undefined {\n return \"pos\" in node ? undefined : (node as { readonly type?: string }).type;\n}\n\nfunction childNode(node: Node, key: string): Node | undefined {\n const value = (node as unknown as Record<string, unknown>)[key];\n if (isNode(value)) {\n return value;\n }\n return undefined;\n}\n\nfunction implementedClauseNodes(node: Node | CorsaNode): readonly Node[] {\n if (\"pos\" in node) {\n return [];\n }\n const clauses = (node as unknown as { readonly implements?: unknown }).implements;\n if (!Array.isArray(clauses)) {\n return [];\n }\n return clauses.filter(isNode);\n}\n\nfunction implementedClauseChildNode(node: Node, key: string): Node | undefined {\n const value = (node as unknown as Record<string, unknown>)[key];\n if (isNode(value)) {\n return value;\n }\n return undefined;\n}\n\nfunction implementedTypesFromCorsaNode(\n context: ContextWithParserOptions,\n node: CorsaNode,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n const symbol = checker.getSymbolAtLocation(node);\n if (symbol) {\n const declaredType = checker.getDeclaredTypeOfSymbol(symbol) ?? checker.getTypeOfSymbol(symbol);\n if (declaredType) {\n const implemented = checker.getImplementedTypesOfType(declaredType);\n if (implemented.length > 0) {\n return implemented;\n }\n }\n }\n const sourceText = sourceTextFor(context, node);\n if (sourceText) {\n return implementedTypesFromSourceText(context, node, sourceText, checker);\n }\n const type = checker.getTypeAtLocation(node);\n return type ? checker.getImplementedTypesOfType(type) : [];\n}\n\nfunction corsaNodeFromEstree(context: ContextWithParserOptions, node: Node): CorsaNode | undefined {\n const range = (node as { readonly range?: unknown }).range;\n if (\n !Array.isArray(range) ||\n range.length < 2 ||\n typeof range[0] !== \"number\" ||\n typeof range[1] !== \"number\"\n ) {\n return undefined;\n }\n return {\n fileName: context.filename,\n pos: range[0],\n end: range[1],\n range: [range[0], range[1]] as const,\n };\n}\n\nfunction implementedTypesFromTypeAndBases(\n context: ContextWithParserOptions,\n type: CorsaType,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n // Iterative DFS over the base chain so we don't pay for one closure call\n // and one `push(...subResult)` spread per base (each spread used to copy\n // the entire growing accumulator). Visit order doesn't matter because we\n // dedupe by `type.id`.\n const seenTypes = new Set<string>();\n const seenImplementedTypes = new Set<string>();\n const implemented: CorsaType[] = [];\n const stack: CorsaType[] = [type];\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (seenTypes.has(current.id)) {\n continue;\n }\n seenTypes.add(current.id);\n\n const ownImplemented = implementedTypesFromTypeDeclaration(context, current, checker);\n for (let index = 0; index < ownImplemented.length; index += 1) {\n const ownType = ownImplemented[index]!;\n if (seenImplementedTypes.has(ownType.id)) {\n continue;\n }\n seenImplementedTypes.add(ownType.id);\n implemented.push(ownType);\n }\n\n const bases = checker.getBaseTypes(current);\n // Push in reverse so the natural visit order matches the recursive form.\n for (let index = bases.length - 1; index >= 0; index -= 1) {\n const baseType = bases[index]!;\n if (seenTypes.has(baseType.id)) {\n continue;\n }\n stack.push(baseType);\n }\n }\n return implemented;\n}\n\nfunction implementedTypesFromTypeDeclaration(\n context: ContextWithParserOptions,\n type: CorsaType,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n const session = sessionForContext(context).session;\n const symbol = type.symbol ? session.getSymbol(type.symbol) : undefined;\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n const declarationNode = declaration ? session.getNode(declaration) : undefined;\n const sourceText = declarationNode\n ? sourceTextForPath(context, declarationNode.fileName)\n : undefined;\n return declarationNode && sourceText\n ? implementedTypesFromSourceText(context, declarationNode, sourceText, checker)\n : [];\n}\n\nfunction implementedTypesFromSourceText(\n context: ContextWithParserOptions,\n node: CorsaNode,\n sourceText: string,\n checker: CorsaTypeCheckerShape,\n): readonly CorsaType[] {\n if (node.pos < 0 || node.end > sourceText.length || node.pos >= node.end) {\n return [];\n }\n const classText = sourceText.slice(node.pos, node.end);\n const classStart = findKeywordOutsideTrivia(classText, \"class\");\n const headerStart = classStart >= 0 ? classStart : 0;\n const bodyOpen = findClassBodyOpen(classText, headerStart);\n const headerText = classText.slice(headerStart, bodyOpen >= 0 ? bodyOpen : classText.length);\n const implementsIndex = findKeywordOutsideTrivia(headerText, \"implements\");\n if (implementsIndex < 0) {\n return [];\n }\n const clauseText = headerText.slice(implementsIndex + \"implements\".length);\n const clauseStart = node.pos + headerStart + implementsIndex + \"implements\".length;\n return splitTopLevelRanges(clauseText, \",\")\n .map((range) => {\n const raw = clauseText.slice(range.start, range.end);\n const leading = raw.search(/\\S/);\n if (leading < 0) {\n return undefined;\n }\n const trailing = raw.match(/\\s*$/)?.[0].length ?? 0;\n const pos = clauseStart + range.start + leading;\n const end = clauseStart + range.end - trailing;\n const lookupNode: CorsaNode = {\n fileName: node.fileName,\n pos,\n end,\n range: [pos, end] as const,\n };\n const nameNode = implementedClauseNameNode(lookupNode, raw);\n const symbol =\n checker.getSymbolAtLocation(nameNode) ?? checker.getSymbolAtLocation(lookupNode);\n const type = symbol\n ? (checker.getDeclaredTypeOfSymbol(symbol) ?? checker.getTypeOfSymbol(symbol))\n : (checker.getTypeAtLocation(nameNode) ?? checker.getTypeAtLocation(lookupNode));\n if (type) {\n try {\n checker.typeToString(type);\n } catch {\n // Corsa-side relation fallbacks handle stale type handles; avoid\n // deriving replacement text from source names in the JS bridge.\n }\n }\n return type;\n })\n .filter((type): type is CorsaType => type !== undefined);\n}\n\nfunction implementedClauseNameNode(node: CorsaNode, raw: string): CorsaNode {\n const range = lastTypeNameIdentifierRange(raw);\n if (!range) {\n return node;\n }\n const pos = node.pos + range.start;\n const end = node.pos + range.end;\n return {\n fileName: node.fileName,\n pos,\n end,\n range: [pos, end] as const,\n };\n}\n\nfunction lastTypeNameIdentifierRange(\n text: string,\n): { readonly start: number; readonly end: number } | undefined {\n let last: { start: number; end: number } | undefined;\n const scanner = createScanner();\n for (let index = 0; index < text.length; index += 1) {\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n const char = text[index];\n if (char === \"<\") {\n break;\n }\n if (!isIdentifierStart(char)) {\n continue;\n }\n let end = index + 1;\n while (isIdentifierPart(text[end])) {\n end += 1;\n }\n last = { start: index, end };\n index = end - 1;\n }\n return last;\n}\n\nfunction findClassBodyOpen(text: string, start: number): number {\n const scanner = createScanner();\n let angleDepth = 0;\n let parenDepth = 0;\n let bracketDepth = 0;\n let braceDepth = 0;\n for (let index = start; index < text.length; index += 1) {\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n const char = text[index];\n if (char === \"<\") angleDepth += 1;\n else if (char === \">\") angleDepth = Math.max(0, angleDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (\n char === \"{\" &&\n angleDepth === 0 &&\n parenDepth === 0 &&\n bracketDepth === 0 &&\n braceDepth === 0\n ) {\n return index;\n } else if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n }\n return -1;\n}\n\nfunction findKeywordOutsideTrivia(text: string, keyword: string): number {\n const scanner = createScanner();\n for (let index = 0; index < text.length; index += 1) {\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n if (matchesKeyword(text, keyword, index)) {\n return index;\n }\n }\n return -1;\n}\n\nfunction matchesKeyword(text: string, keyword: string, index: number): boolean {\n return (\n text.startsWith(keyword, index) &&\n !isIdentifierPart(text[index - 1]) &&\n !isIdentifierPart(text[index + keyword.length])\n );\n}\n\nfunction isIdentifierPart(char: string | undefined): boolean {\n return char !== undefined && (isIdentifierStart(char) || /[0-9]/.test(char));\n}\n\nfunction isIdentifierStart(char: string | undefined): boolean {\n return char !== undefined && /[A-Za-z_$]/.test(char);\n}\n\nfunction splitTopLevelRanges(\n text: string,\n delimiter: string,\n): readonly { readonly start: number; readonly end: number }[] {\n const ranges: { start: number; end: number }[] = [];\n const scanner = createScanner();\n let start = 0;\n let angleDepth = 0;\n let parenDepth = 0;\n let bracketDepth = 0;\n let braceDepth = 0;\n for (let index = 0; index < text.length; index += 1) {\n const char = text[index];\n const nextIndex = scanner.skip(text, index);\n if (nextIndex > index) {\n index = nextIndex - 1;\n continue;\n }\n if (char === \"<\") angleDepth += 1;\n else if (char === \">\") angleDepth = Math.max(0, angleDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n else if (\n char === delimiter &&\n angleDepth === 0 &&\n parenDepth === 0 &&\n bracketDepth === 0 &&\n braceDepth === 0\n ) {\n ranges.push({ start, end: index });\n start = index + 1;\n }\n }\n ranges.push({ start, end: text.length });\n return ranges;\n}\n\nfunction createScanner(): {\n skip(text: string, index: number): number;\n} {\n let quote: string | undefined;\n let escaped = false;\n let inLineComment = false;\n let inBlockComment = false;\n return {\n skip(text, index) {\n const char = text[index];\n const next = text[index + 1];\n if (inLineComment) {\n if (char === \"\\n\" || char === \"\\r\") {\n inLineComment = false;\n }\n return index + 1;\n }\n if (inBlockComment) {\n if (char === \"*\" && next === \"/\") {\n inBlockComment = false;\n return index + 2;\n }\n return index + 1;\n }\n if (quote) {\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === quote) {\n quote = undefined;\n }\n return index + 1;\n }\n if (char === \"/\" && next === \"/\") {\n inLineComment = true;\n return index + 2;\n }\n if (char === \"/\" && next === \"*\") {\n inBlockComment = true;\n return index + 2;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n return index + 1;\n }\n return index;\n },\n };\n}\n\nfunction isNode(value: unknown): value is Node {\n return typeof value === \"object\" && value !== null && \"type\" in value && \"range\" in value;\n}\n\nfunction filenameFor(\n context: ContextWithParserOptions,\n node: Node | CorsaNode | CorsaType | CorsaSymbol | CorsaSignature,\n): string {\n if (\"fileName\" in node) {\n return node.fileName;\n }\n return context.filename;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compat.js","names":[],"sources":["../ts/compat.ts"],"sourcesContent":["export const AST_NODE_TYPES = Object.freeze({\n AccessorProperty: \"AccessorProperty\",\n ArrayExpression: \"ArrayExpression\",\n ArrayPattern: \"ArrayPattern\",\n ArrowFunctionExpression: \"ArrowFunctionExpression\",\n AssignmentExpression: \"AssignmentExpression\",\n AssignmentPattern: \"AssignmentPattern\",\n AwaitExpression: \"AwaitExpression\",\n BinaryExpression: \"BinaryExpression\",\n BlockStatement: \"BlockStatement\",\n BreakStatement: \"BreakStatement\",\n CallExpression: \"CallExpression\",\n CatchClause: \"CatchClause\",\n ChainExpression: \"ChainExpression\",\n ClassBody: \"ClassBody\",\n ClassDeclaration: \"ClassDeclaration\",\n ClassExpression: \"ClassExpression\",\n ConditionalExpression: \"ConditionalExpression\",\n ContinueStatement: \"ContinueStatement\",\n DebuggerStatement: \"DebuggerStatement\",\n Decorator: \"Decorator\",\n DoWhileStatement: \"DoWhileStatement\",\n EmptyStatement: \"EmptyStatement\",\n ExportAllDeclaration: \"ExportAllDeclaration\",\n ExportDefaultDeclaration: \"ExportDefaultDeclaration\",\n ExportNamedDeclaration: \"ExportNamedDeclaration\",\n ExportSpecifier: \"ExportSpecifier\",\n ExpressionStatement: \"ExpressionStatement\",\n ForInStatement: \"ForInStatement\",\n ForOfStatement: \"ForOfStatement\",\n ForStatement: \"ForStatement\",\n FunctionDeclaration: \"FunctionDeclaration\",\n FunctionExpression: \"FunctionExpression\",\n Identifier: \"Identifier\",\n IfStatement: \"IfStatement\",\n ImportAttribute: \"ImportAttribute\",\n ImportDeclaration: \"ImportDeclaration\",\n ImportDefaultSpecifier: \"ImportDefaultSpecifier\",\n ImportExpression: \"ImportExpression\",\n ImportNamespaceSpecifier: \"ImportNamespaceSpecifier\",\n ImportSpecifier: \"ImportSpecifier\",\n JSXAttribute: \"JSXAttribute\",\n JSXClosingElement: \"JSXClosingElement\",\n JSXClosingFragment: \"JSXClosingFragment\",\n JSXElement: \"JSXElement\",\n JSXEmptyExpression: \"JSXEmptyExpression\",\n JSXExpressionContainer: \"JSXExpressionContainer\",\n JSXFragment: \"JSXFragment\",\n JSXIdentifier: \"JSXIdentifier\",\n JSXMemberExpression: \"JSXMemberExpression\",\n JSXNamespacedName: \"JSXNamespacedName\",\n JSXOpeningElement: \"JSXOpeningElement\",\n JSXOpeningFragment: \"JSXOpeningFragment\",\n JSXSpreadAttribute: \"JSXSpreadAttribute\",\n JSXSpreadChild: \"JSXSpreadChild\",\n JSXText: \"JSXText\",\n LabeledStatement: \"LabeledStatement\",\n Literal: \"Literal\",\n LogicalExpression: \"LogicalExpression\",\n MemberExpression: \"MemberExpression\",\n MetaProperty: \"MetaProperty\",\n MethodDefinition: \"MethodDefinition\",\n NewExpression: \"NewExpression\",\n ObjectExpression: \"ObjectExpression\",\n ObjectPattern: \"ObjectPattern\",\n PrivateIdentifier: \"PrivateIdentifier\",\n Program: \"Program\",\n Property: \"Property\",\n PropertyDefinition: \"PropertyDefinition\",\n RestElement: \"RestElement\",\n ReturnStatement: \"ReturnStatement\",\n SequenceExpression: \"SequenceExpression\",\n SpreadElement: \"SpreadElement\",\n StaticBlock: \"StaticBlock\",\n Super: \"Super\",\n SwitchCase: \"SwitchCase\",\n SwitchStatement: \"SwitchStatement\",\n TaggedTemplateExpression: \"TaggedTemplateExpression\",\n TemplateElement: \"TemplateElement\",\n TemplateLiteral: \"TemplateLiteral\",\n ThisExpression: \"ThisExpression\",\n ThrowStatement: \"ThrowStatement\",\n TryStatement: \"TryStatement\",\n UnaryExpression: \"UnaryExpression\",\n UpdateExpression: \"UpdateExpression\",\n VariableDeclaration: \"VariableDeclaration\",\n VariableDeclarator: \"VariableDeclarator\",\n WhileStatement: \"WhileStatement\",\n WithStatement: \"WithStatement\",\n YieldExpression: \"YieldExpression\",\n TSAbstractAccessorProperty: \"TSAbstractAccessorProperty\",\n TSAbstractKeyword: \"TSAbstractKeyword\",\n TSAbstractMethodDefinition: \"TSAbstractMethodDefinition\",\n TSAbstractPropertyDefinition: \"TSAbstractPropertyDefinition\",\n TSAnyKeyword: \"TSAnyKeyword\",\n TSArrayType: \"TSArrayType\",\n TSAsExpression: \"TSAsExpression\",\n TSAsyncKeyword: \"TSAsyncKeyword\",\n TSBigIntKeyword: \"TSBigIntKeyword\",\n TSBooleanKeyword: \"TSBooleanKeyword\",\n TSCallSignatureDeclaration: \"TSCallSignatureDeclaration\",\n TSClassImplements: \"TSClassImplements\",\n TSConditionalType: \"TSConditionalType\",\n TSConstructorType: \"TSConstructorType\",\n TSConstructSignatureDeclaration: \"TSConstructSignatureDeclaration\",\n TSDeclareFunction: \"TSDeclareFunction\",\n TSDeclareKeyword: \"TSDeclareKeyword\",\n TSEmptyBodyFunctionExpression: \"TSEmptyBodyFunctionExpression\",\n TSEnumBody: \"TSEnumBody\",\n TSEnumDeclaration: \"TSEnumDeclaration\",\n TSEnumMember: \"TSEnumMember\",\n TSExportAssignment: \"TSExportAssignment\",\n TSExportKeyword: \"TSExportKeyword\",\n TSExpressionWithTypeArguments: \"TSExpressionWithTypeArguments\",\n TSExternalModuleReference: \"TSExternalModuleReference\",\n TSFunctionType: \"TSFunctionType\",\n TSImportEqualsDeclaration: \"TSImportEqualsDeclaration\",\n TSImportType: \"TSImportType\",\n TSIndexedAccessType: \"TSIndexedAccessType\",\n TSIndexSignature: \"TSIndexSignature\",\n TSInferType: \"TSInferType\",\n TSInstantiationExpression: \"TSInstantiationExpression\",\n TSInterfaceBody: \"TSInterfaceBody\",\n TSInterfaceDeclaration: \"TSInterfaceDeclaration\",\n TSInterfaceHeritage: \"TSInterfaceHeritage\",\n TSIntersectionType: \"TSIntersectionType\",\n TSIntrinsicKeyword: \"TSIntrinsicKeyword\",\n TSLiteralType: \"TSLiteralType\",\n TSMappedType: \"TSMappedType\",\n TSMethodSignature: \"TSMethodSignature\",\n TSModuleBlock: \"TSModuleBlock\",\n TSModuleDeclaration: \"TSModuleDeclaration\",\n TSNamedTupleMember: \"TSNamedTupleMember\",\n TSNamespaceExportDeclaration: \"TSNamespaceExportDeclaration\",\n TSNeverKeyword: \"TSNeverKeyword\",\n TSNonNullExpression: \"TSNonNullExpression\",\n TSNullKeyword: \"TSNullKeyword\",\n TSNumberKeyword: \"TSNumberKeyword\",\n TSObjectKeyword: \"TSObjectKeyword\",\n TSOptionalType: \"TSOptionalType\",\n TSParameterProperty: \"TSParameterProperty\",\n TSPrivateKeyword: \"TSPrivateKeyword\",\n TSPropertySignature: \"TSPropertySignature\",\n TSProtectedKeyword: \"TSProtectedKeyword\",\n TSPublicKeyword: \"TSPublicKeyword\",\n TSQualifiedName: \"TSQualifiedName\",\n TSReadonlyKeyword: \"TSReadonlyKeyword\",\n TSRestType: \"TSRestType\",\n TSSatisfiesExpression: \"TSSatisfiesExpression\",\n TSStaticKeyword: \"TSStaticKeyword\",\n TSStringKeyword: \"TSStringKeyword\",\n TSSymbolKeyword: \"TSSymbolKeyword\",\n TSTemplateLiteralType: \"TSTemplateLiteralType\",\n TSThisType: \"TSThisType\",\n TSTupleType: \"TSTupleType\",\n TSTypeAliasDeclaration: \"TSTypeAliasDeclaration\",\n TSTypeAnnotation: \"TSTypeAnnotation\",\n TSTypeAssertion: \"TSTypeAssertion\",\n TSTypeLiteral: \"TSTypeLiteral\",\n TSTypeOperator: \"TSTypeOperator\",\n TSTypeParameter: \"TSTypeParameter\",\n TSTypeParameterDeclaration: \"TSTypeParameterDeclaration\",\n TSTypeParameterInstantiation: \"TSTypeParameterInstantiation\",\n TSTypePredicate: \"TSTypePredicate\",\n TSTypeQuery: \"TSTypeQuery\",\n TSTypeReference: \"TSTypeReference\",\n TSUndefinedKeyword: \"TSUndefinedKeyword\",\n TSUnionType: \"TSUnionType\",\n TSUnknownKeyword: \"TSUnknownKeyword\",\n TSVoidKeyword: \"TSVoidKeyword\",\n} as const);\n\nexport const AST_TOKEN_TYPES = Object.freeze({\n Boolean: \"Boolean\",\n Identifier: \"Identifier\",\n JSXIdentifier: \"JSXIdentifier\",\n PrivateIdentifier: \"PrivateIdentifier\",\n JSXText: \"JSXText\",\n Keyword: \"Keyword\",\n Null: \"Null\",\n Numeric: \"Numeric\",\n Punctuator: \"Punctuator\",\n RegularExpression: \"RegularExpression\",\n String: \"String\",\n Template: \"Template\",\n Block: \"Block\",\n Line: \"Line\",\n} as const);\n\nexport const TSESTree = Object.freeze({\n AST_NODE_TYPES,\n AST_TOKEN_TYPES,\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"compat.js","names":[],"sources":["../ts/compat.ts"],"sourcesContent":["export const AST_NODE_TYPES = Object.freeze({\n AccessorProperty: \"AccessorProperty\",\n ArrayExpression: \"ArrayExpression\",\n ArrayPattern: \"ArrayPattern\",\n ArrowFunctionExpression: \"ArrowFunctionExpression\",\n AssignmentExpression: \"AssignmentExpression\",\n AssignmentPattern: \"AssignmentPattern\",\n AwaitExpression: \"AwaitExpression\",\n BinaryExpression: \"BinaryExpression\",\n BlockStatement: \"BlockStatement\",\n BreakStatement: \"BreakStatement\",\n CallExpression: \"CallExpression\",\n CatchClause: \"CatchClause\",\n ChainExpression: \"ChainExpression\",\n ClassBody: \"ClassBody\",\n ClassDeclaration: \"ClassDeclaration\",\n ClassExpression: \"ClassExpression\",\n ConditionalExpression: \"ConditionalExpression\",\n ContinueStatement: \"ContinueStatement\",\n DebuggerStatement: \"DebuggerStatement\",\n Decorator: \"Decorator\",\n DoWhileStatement: \"DoWhileStatement\",\n EmptyStatement: \"EmptyStatement\",\n ExportAllDeclaration: \"ExportAllDeclaration\",\n ExportDefaultDeclaration: \"ExportDefaultDeclaration\",\n ExportNamedDeclaration: \"ExportNamedDeclaration\",\n ExportSpecifier: \"ExportSpecifier\",\n ExpressionStatement: \"ExpressionStatement\",\n ForInStatement: \"ForInStatement\",\n ForOfStatement: \"ForOfStatement\",\n ForStatement: \"ForStatement\",\n FunctionDeclaration: \"FunctionDeclaration\",\n FunctionExpression: \"FunctionExpression\",\n Identifier: \"Identifier\",\n IfStatement: \"IfStatement\",\n ImportAttribute: \"ImportAttribute\",\n ImportDeclaration: \"ImportDeclaration\",\n ImportDefaultSpecifier: \"ImportDefaultSpecifier\",\n ImportExpression: \"ImportExpression\",\n ImportNamespaceSpecifier: \"ImportNamespaceSpecifier\",\n ImportSpecifier: \"ImportSpecifier\",\n JSXAttribute: \"JSXAttribute\",\n JSXClosingElement: \"JSXClosingElement\",\n JSXClosingFragment: \"JSXClosingFragment\",\n JSXElement: \"JSXElement\",\n JSXEmptyExpression: \"JSXEmptyExpression\",\n JSXExpressionContainer: \"JSXExpressionContainer\",\n JSXFragment: \"JSXFragment\",\n JSXIdentifier: \"JSXIdentifier\",\n JSXMemberExpression: \"JSXMemberExpression\",\n JSXNamespacedName: \"JSXNamespacedName\",\n JSXOpeningElement: \"JSXOpeningElement\",\n JSXOpeningFragment: \"JSXOpeningFragment\",\n JSXSpreadAttribute: \"JSXSpreadAttribute\",\n JSXSpreadChild: \"JSXSpreadChild\",\n JSXText: \"JSXText\",\n LabeledStatement: \"LabeledStatement\",\n Literal: \"Literal\",\n LogicalExpression: \"LogicalExpression\",\n MemberExpression: \"MemberExpression\",\n MetaProperty: \"MetaProperty\",\n MethodDefinition: \"MethodDefinition\",\n NewExpression: \"NewExpression\",\n ObjectExpression: \"ObjectExpression\",\n ObjectPattern: \"ObjectPattern\",\n PrivateIdentifier: \"PrivateIdentifier\",\n Program: \"Program\",\n Property: \"Property\",\n PropertyDefinition: \"PropertyDefinition\",\n RestElement: \"RestElement\",\n ReturnStatement: \"ReturnStatement\",\n SequenceExpression: \"SequenceExpression\",\n SpreadElement: \"SpreadElement\",\n StaticBlock: \"StaticBlock\",\n Super: \"Super\",\n SwitchCase: \"SwitchCase\",\n SwitchStatement: \"SwitchStatement\",\n TaggedTemplateExpression: \"TaggedTemplateExpression\",\n TemplateElement: \"TemplateElement\",\n TemplateLiteral: \"TemplateLiteral\",\n ThisExpression: \"ThisExpression\",\n ThrowStatement: \"ThrowStatement\",\n TryStatement: \"TryStatement\",\n UnaryExpression: \"UnaryExpression\",\n UpdateExpression: \"UpdateExpression\",\n VariableDeclaration: \"VariableDeclaration\",\n VariableDeclarator: \"VariableDeclarator\",\n WhileStatement: \"WhileStatement\",\n WithStatement: \"WithStatement\",\n YieldExpression: \"YieldExpression\",\n TSAbstractAccessorProperty: \"TSAbstractAccessorProperty\",\n TSAbstractKeyword: \"TSAbstractKeyword\",\n TSAbstractMethodDefinition: \"TSAbstractMethodDefinition\",\n TSAbstractPropertyDefinition: \"TSAbstractPropertyDefinition\",\n TSAnyKeyword: \"TSAnyKeyword\",\n TSArrayType: \"TSArrayType\",\n TSAsExpression: \"TSAsExpression\",\n TSAsyncKeyword: \"TSAsyncKeyword\",\n TSBigIntKeyword: \"TSBigIntKeyword\",\n TSBooleanKeyword: \"TSBooleanKeyword\",\n TSCallSignatureDeclaration: \"TSCallSignatureDeclaration\",\n TSClassImplements: \"TSClassImplements\",\n TSConditionalType: \"TSConditionalType\",\n TSConstructorType: \"TSConstructorType\",\n TSConstructSignatureDeclaration: \"TSConstructSignatureDeclaration\",\n TSDeclareFunction: \"TSDeclareFunction\",\n TSDeclareKeyword: \"TSDeclareKeyword\",\n TSEmptyBodyFunctionExpression: \"TSEmptyBodyFunctionExpression\",\n TSEnumBody: \"TSEnumBody\",\n TSEnumDeclaration: \"TSEnumDeclaration\",\n TSEnumMember: \"TSEnumMember\",\n TSExportAssignment: \"TSExportAssignment\",\n TSExportKeyword: \"TSExportKeyword\",\n TSExpressionWithTypeArguments: \"TSExpressionWithTypeArguments\",\n TSExternalModuleReference: \"TSExternalModuleReference\",\n TSFunctionType: \"TSFunctionType\",\n TSImportEqualsDeclaration: \"TSImportEqualsDeclaration\",\n TSImportType: \"TSImportType\",\n TSIndexedAccessType: \"TSIndexedAccessType\",\n TSIndexSignature: \"TSIndexSignature\",\n TSInferType: \"TSInferType\",\n TSInstantiationExpression: \"TSInstantiationExpression\",\n TSInterfaceBody: \"TSInterfaceBody\",\n TSInterfaceDeclaration: \"TSInterfaceDeclaration\",\n TSInterfaceHeritage: \"TSInterfaceHeritage\",\n TSIntersectionType: \"TSIntersectionType\",\n TSIntrinsicKeyword: \"TSIntrinsicKeyword\",\n TSLiteralType: \"TSLiteralType\",\n TSMappedType: \"TSMappedType\",\n TSMethodSignature: \"TSMethodSignature\",\n TSModuleBlock: \"TSModuleBlock\",\n TSModuleDeclaration: \"TSModuleDeclaration\",\n TSNamedTupleMember: \"TSNamedTupleMember\",\n TSNamespaceExportDeclaration: \"TSNamespaceExportDeclaration\",\n TSNeverKeyword: \"TSNeverKeyword\",\n TSNonNullExpression: \"TSNonNullExpression\",\n TSNullKeyword: \"TSNullKeyword\",\n TSNumberKeyword: \"TSNumberKeyword\",\n TSObjectKeyword: \"TSObjectKeyword\",\n TSOptionalType: \"TSOptionalType\",\n TSParameterProperty: \"TSParameterProperty\",\n TSPrivateKeyword: \"TSPrivateKeyword\",\n TSPropertySignature: \"TSPropertySignature\",\n TSProtectedKeyword: \"TSProtectedKeyword\",\n TSPublicKeyword: \"TSPublicKeyword\",\n TSQualifiedName: \"TSQualifiedName\",\n TSReadonlyKeyword: \"TSReadonlyKeyword\",\n TSRestType: \"TSRestType\",\n TSSatisfiesExpression: \"TSSatisfiesExpression\",\n TSStaticKeyword: \"TSStaticKeyword\",\n TSStringKeyword: \"TSStringKeyword\",\n TSSymbolKeyword: \"TSSymbolKeyword\",\n TSTemplateLiteralType: \"TSTemplateLiteralType\",\n TSThisType: \"TSThisType\",\n TSTupleType: \"TSTupleType\",\n TSTypeAliasDeclaration: \"TSTypeAliasDeclaration\",\n TSTypeAnnotation: \"TSTypeAnnotation\",\n TSTypeAssertion: \"TSTypeAssertion\",\n TSTypeLiteral: \"TSTypeLiteral\",\n TSTypeOperator: \"TSTypeOperator\",\n TSTypeParameter: \"TSTypeParameter\",\n TSTypeParameterDeclaration: \"TSTypeParameterDeclaration\",\n TSTypeParameterInstantiation: \"TSTypeParameterInstantiation\",\n TSTypePredicate: \"TSTypePredicate\",\n TSTypeQuery: \"TSTypeQuery\",\n TSTypeReference: \"TSTypeReference\",\n TSUndefinedKeyword: \"TSUndefinedKeyword\",\n TSUnionType: \"TSUnionType\",\n TSUnknownKeyword: \"TSUnknownKeyword\",\n TSVoidKeyword: \"TSVoidKeyword\",\n} as const);\n\nexport const AST_TOKEN_TYPES = Object.freeze({\n Boolean: \"Boolean\",\n Identifier: \"Identifier\",\n JSXIdentifier: \"JSXIdentifier\",\n PrivateIdentifier: \"PrivateIdentifier\",\n JSXText: \"JSXText\",\n Keyword: \"Keyword\",\n Null: \"Null\",\n Numeric: \"Numeric\",\n Punctuator: \"Punctuator\",\n RegularExpression: \"RegularExpression\",\n String: \"String\",\n Template: \"Template\",\n Block: \"Block\",\n Line: \"Line\",\n} as const);\n\nexport const TSESTree = Object.freeze({\n AST_NODE_TYPES,\n AST_TOKEN_TYPES,\n});\n"],"mappings":"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"}