ai-code-map 0.1.0-alpha.2 → 0.1.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/errors.ts","../src/config.ts","../src/schemas.ts","../src/utils/path.ts","../src/utils/stable.ts","../src/scan.ts","../src/analyze.ts","../src/ids.ts","../src/utils/hash.ts","../src/analyzers/core.ts","../src/analyzers/helpers.ts","../src/analyzers/nestjs.ts","../src/analyzers/nextjs.ts","../src/analyzers/react.ts","../src/freshness.ts","../src/compiler-units.ts","../src/discovery.ts","../src/package-metadata.ts","../src/workspaces.ts","../src/ignore.ts","../src/semantic.ts","../src/storage.ts","../src/parser.ts","../src/compiler-worker-client.ts","../src/show.ts"],"sourcesContent":["export const SCHEMA_VERSION = 4 as const;\nexport const CONFIG_VERSION = 1 as const;\nexport const ANALYZER_VERSION = \"0.4.0\";\nexport const DEFAULT_SYNTAX_PARSER = \"typescript-compiler-syntax\";\nexport const DEFAULT_SEMANTIC_RESOLVER = \"typescript-program\";\nexport const DEFAULT_ANALYZER_NAMES = [\"typescript-node\", \"react\"] as const;\nexport const DEFAULT_PRODUCER_ID = \"ai-code-map/default-pipeline\";\nexport const CUSTOM_PRODUCER_ID = \"ai-code-map/custom-pipeline\";\nexport const PRODUCER_CONTRACT_VERSION = 1 as const;\n\nexport const DEFAULT_OUTPUT = \".ai/code-map\";\nexport const DEFAULT_INCLUDE = [\n \"src/**/*\",\n \"app/**/*\",\n \"pages/**/*\",\n \"lib/**/*\",\n \"server/**/*\",\n \"*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}\",\n] as const;\nexport const DEFAULT_EXCLUDE = [\n \"**/node_modules/**\",\n \"**/.next/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/.git/**\",\n \"**/.ai/**\",\n \"**/*.generated.*\",\n] as const;\n\nexport const MANAGED_ARTIFACTS = [\n \"overview.md\",\n \"manifest.json\",\n \"project.json\",\n \"files.jsonl\",\n \"symbols.jsonl\",\n \"relations.jsonl\",\n \"diagnostics.json\",\n] as const;\n\nexport const MAP_COMPANION_ARTIFACTS = [\n \"overview.md\",\n \"project.json\",\n \"files.jsonl\",\n \"symbols.jsonl\",\n \"relations.jsonl\",\n \"diagnostics.json\",\n] as const;\n","export class CodeMapError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"CodeMapError\";\n this.code = code;\n }\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { CONFIG_VERSION, DEFAULT_EXCLUDE, DEFAULT_INCLUDE, DEFAULT_OUTPUT } from \"./constants.js\";\nimport { CodeMapError, errorMessage } from \"./errors.js\";\nimport { ConfigSchema } from \"./schemas.js\";\nimport type { CodeMapConfig, FrameworkSelection, LoadCodeMapOptions } from \"./types.js\";\nimport { isSafeRegularFile, toPosixPath } from \"./utils/path.js\";\nimport { atomicWriteIfChanged, isNotFound, stableJson } from \"./utils/stable.js\";\n\nexport interface ResolvedConfiguration {\n root: string;\n outputDir: string;\n configPath: string;\n config: CodeMapConfig;\n configExists: boolean;\n}\n\nexport interface InitOptions extends LoadCodeMapOptions {\n force?: boolean;\n}\n\nexport interface InitResult {\n root: string;\n configPath: string;\n created: boolean;\n}\n\nexport function createDefaultConfig(\n root: string,\n configPath: string,\n output?: string,\n): CodeMapConfig {\n const configDirectory = path.dirname(configPath);\n const relativeRoot = toPosixPath(path.relative(configDirectory, root) || \".\");\n const outputValue = output\n ? path.isAbsolute(output)\n ? toPosixPath(path.relative(root, output))\n : toPosixPath(output)\n : DEFAULT_OUTPUT;\n return {\n version: CONFIG_VERSION,\n root: relativeRoot,\n include: [...DEFAULT_INCLUDE],\n exclude: [...DEFAULT_EXCLUDE],\n tsconfig: \"tsconfig.json\",\n frameworks: [\"auto\"],\n output: outputValue,\n includePrivateSymbols: false,\n };\n}\n\nexport async function findProjectRoot(start = process.cwd()): Promise<string> {\n let current = path.resolve(start);\n try {\n if (!(await fs.stat(current)).isDirectory()) current = path.dirname(current);\n } catch (error) {\n throw new CodeMapError(\"ROOT_NOT_FOUND\", `Cannot access project root candidate ${current}.`, {\n cause: error,\n });\n }\n\n while (current !== path.dirname(current)) {\n const packagePath = path.join(current, \"package.json\");\n if (await isSafeRegularFile(current, packagePath)) {\n return await fs.realpath(current);\n }\n const parent = path.dirname(current);\n current = parent;\n }\n throw new CodeMapError(\n \"PROJECT_NOT_FOUND\",\n `No package.json was found at or above ${path.resolve(start)}. Pass --root explicitly.`,\n );\n}\n\nfunction resolveConfigArgument(base: string, config?: string): string {\n if (!config) return path.join(base, DEFAULT_OUTPUT, \"config.json\");\n return path.resolve(base, config);\n}\n\nexport async function resolveConfiguration(\n options: LoadCodeMapOptions = {},\n): Promise<ResolvedConfiguration> {\n const requestedStart = path.resolve(options.root ?? process.cwd());\n const discoveredRoot = await findProjectRoot(requestedStart);\n const configPath = options.config\n ? resolveConfigArgument(requestedStart, options.config)\n : path.join(\n options.output\n ? path.resolve(discoveredRoot, options.output)\n : path.join(discoveredRoot, DEFAULT_OUTPUT),\n \"config.json\",\n );\n let parsed: CodeMapConfig;\n let configExists = true;\n try {\n const raw: unknown = JSON.parse(await fs.readFile(configPath, \"utf8\"));\n const result = ConfigSchema.safeParse(raw);\n if (!result.success) {\n const details = result.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"config\"}: ${issue.message}`)\n .join(\"; \");\n throw new CodeMapError(\n \"INVALID_CONFIG\",\n `Invalid configuration at ${configPath}: ${details}`,\n );\n }\n parsed = result.data;\n } catch (error) {\n if (isNotFound(error)) {\n configExists = false;\n parsed = createDefaultConfig(discoveredRoot, configPath, options.output);\n } else if (error instanceof SyntaxError) {\n throw new CodeMapError(\"INVALID_CONFIG\", `Invalid JSON in ${configPath}: ${error.message}`);\n } else {\n throw error;\n }\n }\n\n const configuredRoot = configExists\n ? path.resolve(path.dirname(configPath), parsed.root)\n : discoveredRoot;\n let root: string;\n try {\n root = await fs.realpath(configuredRoot);\n } catch (error) {\n throw new CodeMapError(\n \"ROOT_NOT_FOUND\",\n `Configured project root cannot be resolved: ${configuredRoot}.`,\n { cause: error },\n );\n }\n const outputValue = options.output ?? parsed.output;\n const outputDir = path.isAbsolute(outputValue)\n ? path.normalize(outputValue)\n : path.resolve(root, outputValue);\n return { root, outputDir, configPath, config: parsed, configExists };\n}\n\nexport async function initProject(options: InitOptions = {}): Promise<InitResult> {\n const requestedStart = path.resolve(options.root ?? process.cwd());\n const root = await findProjectRoot(requestedStart);\n const defaultOutputDir = options.output\n ? path.resolve(root, options.output)\n : path.join(root, DEFAULT_OUTPUT);\n const configPath = options.config\n ? path.resolve(requestedStart, options.config)\n : path.join(defaultOutputDir, \"config.json\");\n\n try {\n await fs.access(configPath);\n if (!options.force) return { root, configPath, created: false };\n } catch (error) {\n if (!isNotFound(error)) {\n throw new CodeMapError(\n \"CONFIG_ACCESS_FAILED\",\n `Cannot access ${configPath}: ${errorMessage(error)}`,\n );\n }\n }\n\n const config = createDefaultConfig(root, configPath, options.output);\n await atomicWriteIfChanged(configPath, stableJson(config, true));\n return { root, configPath, created: true };\n}\n\nexport function effectiveFrameworks(\n configured: FrameworkSelection[],\n detected: Exclude<FrameworkSelection, \"auto\">[],\n): Exclude<FrameworkSelection, \"auto\">[] {\n const selected = configured.includes(\"auto\")\n ? [...detected]\n : configured.filter((entry): entry is Exclude<FrameworkSelection, \"auto\"> => entry !== \"auto\");\n return [...new Set(selected)].sort();\n}\n","import path from \"node:path\";\n\nimport { z } from \"zod\";\n\nimport {\n CONFIG_VERSION,\n DEFAULT_EXCLUDE,\n DEFAULT_INCLUDE,\n DEFAULT_OUTPUT,\n MAP_COMPANION_ARTIFACTS,\n SCHEMA_VERSION,\n} from \"./constants.js\";\nimport {\n hasEmbeddedAbsolutePath,\n isAbsolutePath,\n normalizeStoredPath,\n toPosixPath,\n} from \"./utils/path.js\";\nimport { compareText, stableJson } from \"./utils/stable.js\";\n\nexport const JsonValueSchema = z.json();\nexport type JsonValue = z.infer<typeof JsonValueSchema>;\nexport type JsonPrimitive = Extract<JsonValue, string | number | boolean | null>;\n\nexport const LanguageSchema = z.enum([\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"cts\", \"mjs\", \"cjs\"]);\nexport type Language = z.infer<typeof LanguageSchema>;\n\nexport const FrameworkSchema = z.enum([\"typescript\", \"node\", \"react\", \"nextjs\", \"nestjs\"]);\nexport type Framework = z.infer<typeof FrameworkSchema>;\n\nexport const FrameworkSelectionSchema = z.union([FrameworkSchema, z.literal(\"auto\")]);\nexport type FrameworkSelection = z.infer<typeof FrameworkSelectionSchema>;\n\nexport const ConfigSchema = z\n .object({\n version: z.literal(CONFIG_VERSION).default(CONFIG_VERSION),\n root: z.string().min(1).default(\"../..\"),\n include: z\n .array(z.string().min(1))\n .min(1)\n .default([...DEFAULT_INCLUDE]),\n exclude: z.array(z.string().min(1)).default([...DEFAULT_EXCLUDE]),\n tsconfig: z.string().min(1).optional(),\n frameworks: z.array(FrameworkSelectionSchema).min(1).default([\"auto\"]),\n output: z.string().min(1).default(DEFAULT_OUTPUT),\n includePrivateSymbols: z.boolean().default(false),\n concurrency: z.number().int().min(1).max(64).optional(),\n })\n .strict()\n .superRefine((config, context) => {\n if (new Set(config.frameworks).size !== config.frameworks.length) {\n context.addIssue({\n code: \"custom\",\n path: [\"frameworks\"],\n message: \"framework selections must be unique\",\n });\n }\n if (config.frameworks.includes(\"auto\") && config.frameworks.length > 1) {\n context.addIssue({\n code: \"custom\",\n path: [\"frameworks\"],\n message: \"auto cannot be combined with explicit framework selections\",\n });\n }\n });\nexport type CodeMapConfig = z.infer<typeof ConfigSchema>;\n\nexport const SourceRangeSchema = z\n .object({\n startLine: z.number().int().positive(),\n startColumn: z.number().int().positive(),\n endLine: z.number().int().positive(),\n endColumn: z.number().int().positive(),\n })\n .strict()\n .superRefine((range, context) => {\n if (\n range.endLine < range.startLine ||\n (range.endLine === range.startLine && range.endColumn < range.startColumn)\n ) {\n context.addIssue({ code: \"custom\", message: \"range end must not precede its start\" });\n }\n });\nexport type SourceRange = z.infer<typeof SourceRangeSchema>;\n\nexport const StoredPathSchema = z\n .string()\n .min(1)\n .refine(\n (value) =>\n !value.includes(\"\\\\\") &&\n !value.startsWith(\"/\") &&\n !hasEmbeddedAbsolutePath(value) &&\n !value.split(\"/\").includes(\"..\"),\n \"must be a repository-relative POSIX path\",\n )\n .refine((value) => value === normalizeStoredPath(value), \"must be normalized\");\n\nconst StoredFilePathSchema = StoredPathSchema.refine(\n (value) => value !== \".\",\n \"must identify a file or non-root project path\",\n);\n\nconst StoredModuleAliasSchema = z\n .string()\n .min(1)\n .refine(\n (value) => !isAbsolutePath(value) && !toPosixPath(value).split(\"/\").includes(\"..\"),\n \"must not contain an absolute or parent-traversing path\",\n );\n\nexport const ImportSpecifierRecordSchema = z\n .object({\n imported: z.string(),\n local: z.string(),\n typeOnly: z.boolean().optional(),\n })\n .strict();\nexport type ImportSpecifierRecord = z.infer<typeof ImportSpecifierRecordSchema>;\n\nexport const ImportRecordSchema = z\n .object({\n source: z\n .string()\n .min(1)\n .refine((value) => !isAbsolutePath(value), \"must not expose an absolute module path\"),\n specifiers: z.array(ImportSpecifierRecordSchema),\n resolved: StoredFilePathSchema.optional(),\n external: z.boolean(),\n kind: z.enum([\"esm\", \"commonjs\"]),\n line: z.number().int().positive(),\n })\n .strict();\nexport type ImportRecord = z.infer<typeof ImportRecordSchema>;\n\nexport const ExportRecordSchema = z\n .object({\n name: z.string(),\n local: z.string().optional(),\n source: z\n .string()\n .refine((value) => !isAbsolutePath(value), \"must not expose an absolute module path\")\n .optional(),\n default: z.boolean(),\n typeOnly: z.boolean().optional(),\n line: z.number().int().positive(),\n })\n .strict();\nexport type ExportRecord = z.infer<typeof ExportRecordSchema>;\n\nexport const ExternalOperationKindSchema = z.enum([\"filesystem\", \"http\", \"database\", \"queue\"]);\nexport type ExternalOperationKind = z.infer<typeof ExternalOperationKindSchema>;\n\nexport const ExternalOperationSchema = z\n .object({\n kind: ExternalOperationKindSchema,\n api: z.string().min(1),\n line: z.number().int().positive(),\n })\n .strict();\nexport type ExternalOperation = z.infer<typeof ExternalOperationSchema>;\n\nexport const SyntaxSummarySchema = z\n .object({\n parser: z.string().min(1),\n factCount: z.number().int().nonnegative(),\n hadErrors: z.boolean(),\n fallbackFrom: z.string().min(1).optional(),\n })\n .strict();\nexport type SyntaxSummary = z.infer<typeof SyntaxSummarySchema>;\n\nexport const FileRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n id: z.string().min(1),\n compilerUnit: z.string().min(1),\n path: StoredFilePathSchema,\n language: LanguageSchema,\n frameworks: z.array(FrameworkSchema),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n lines: z.number().int().nonnegative(),\n imports: z.array(ImportRecordSchema),\n exports: z.array(ExportRecordSchema),\n symbolIds: z.array(z.string().min(1)),\n env: z.array(z.string()),\n operations: z.array(ExternalOperationSchema),\n syntax: SyntaxSummarySchema,\n })\n .strict();\nexport type FileRecord = z.infer<typeof FileRecordSchema>;\n\nexport const CompilerUnitRecordSchema = z\n .object({\n id: z.string().min(1),\n kind: z.enum([\"configured\", \"fallback\"]),\n root: StoredPathSchema,\n config: StoredFilePathSchema.optional(),\n references: z.array(StoredFilePathSchema),\n extends: z.array(StoredFilePathSchema),\n pathAliases: z.record(StoredModuleAliasSchema, z.array(StoredPathSchema)),\n })\n .strict();\nexport type CompilerUnitRecord = z.infer<typeof CompilerUnitRecordSchema>;\n\nexport const SymbolKindSchema = z.enum([\n \"function\",\n \"class\",\n \"method\",\n \"interface\",\n \"type-alias\",\n \"variable\",\n \"react-component\",\n \"react-hook\",\n \"react-context\",\n \"next-page\",\n \"next-layout\",\n \"next-route-handler\",\n \"next-special-file\",\n \"nest-module\",\n \"nest-controller\",\n \"nest-provider\",\n \"nest-guard\",\n \"nest-interceptor\",\n \"nest-pipe\",\n \"nest-filter\",\n \"nest-gateway\",\n \"dto\",\n \"route\",\n]);\nexport type SymbolKind = z.infer<typeof SymbolKindSchema>;\n\nexport const SymbolRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n id: z.string().min(1),\n name: z.string(),\n kind: SymbolKindSchema,\n file: StoredFilePathSchema,\n range: SourceRangeSchema,\n exported: z.boolean(),\n defaultExport: z.boolean().optional(),\n signature: z.string().optional(),\n documentation: z.string().optional(),\n facts: z.record(z.string(), JsonValueSchema),\n sourceHash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type SymbolRecord = z.infer<typeof SymbolRecordSchema>;\n\nexport const RelationTypeSchema = z.enum([\n \"imports\",\n \"exports\",\n \"reexports\",\n \"calls\",\n \"instantiates\",\n \"renders\",\n \"uses-hook\",\n \"reads-state\",\n \"depends-on\",\n \"used-by\",\n \"contains\",\n \"references\",\n \"injects\",\n \"handles-route\",\n \"consumes-dto\",\n \"belongs-to-module\",\n \"uses-layout\",\n]);\nexport type RelationType = z.infer<typeof RelationTypeSchema>;\n\nexport const RelationEvidenceClassificationSchema = z.enum([\n \"exact\",\n \"framework-derived\",\n \"heuristic\",\n \"derived\",\n]);\nexport type RelationEvidenceClassification = z.infer<typeof RelationEvidenceClassificationSchema>;\n\nexport const RelationOriginSchema = z\n .object({\n file: StoredFilePathSchema,\n line: z.number().int().positive(),\n range: SourceRangeSchema,\n explanation: z.string().min(1),\n classification: RelationEvidenceClassificationSchema,\n analyzer: z.string().min(1),\n })\n .strict();\nexport type RelationOrigin = z.infer<typeof RelationOriginSchema>;\n\nexport const RelationRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n from: z.string().min(1),\n type: RelationTypeSchema,\n to: z.string().min(1),\n confidence: z.number().min(0).max(1),\n origin: RelationOriginSchema,\n })\n .strict();\nexport type RelationRecord = z.infer<typeof RelationRecordSchema>;\n\nexport const DiagnosticSeveritySchema = z.enum([\"info\", \"warning\", \"error\"]);\nexport type DiagnosticSeverity = z.infer<typeof DiagnosticSeveritySchema>;\n\nexport const DiagnosticCodeSchema = z.enum([\n \"parse-error\",\n \"unresolved-import\",\n \"invalid-config\",\n \"unsupported-file\",\n \"analysis-error\",\n \"parser-fallback\",\n \"compiler-config\",\n]);\nexport type DiagnosticCode = z.infer<typeof DiagnosticCodeSchema>;\n\nexport const DiagnosticRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n code: DiagnosticCodeSchema,\n severity: DiagnosticSeveritySchema,\n message: z.string().min(1),\n file: StoredFilePathSchema.optional(),\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n })\n .strict();\nexport type DiagnosticRecord = z.infer<typeof DiagnosticRecordSchema>;\n\nexport const WorkspacePackageSchema = z\n .object({\n name: z.string(),\n path: StoredFilePathSchema,\n entryPoints: z.array(StoredFilePathSchema),\n })\n .strict();\nexport type WorkspacePackage = z.infer<typeof WorkspacePackageSchema>;\n\nexport const MapCountsSchema = z\n .object({\n files: z.number().int().nonnegative(),\n symbols: z.number().int().nonnegative(),\n relations: z.number().int().nonnegative(),\n diagnostics: z.number().int().nonnegative(),\n })\n .strict();\nexport type MapCounts = z.infer<typeof MapCountsSchema>;\n\nexport const ProjectRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n name: z.string(),\n packageManager: z.string().optional(),\n frameworks: z.array(FrameworkSchema),\n compilerUnits: z.array(CompilerUnitRecordSchema),\n tsconfig: StoredFilePathSchema.optional(),\n pathAliases: z.record(StoredModuleAliasSchema, z.array(StoredPathSchema)),\n entryPoints: z.array(StoredFilePathSchema),\n workspaces: z.array(WorkspacePackageSchema),\n counts: MapCountsSchema,\n })\n .strict();\nexport type ProjectRecord = z.infer<typeof ProjectRecordSchema>;\n\nexport const ManifestSourceFileSchema = z\n .object({\n path: StoredFilePathSchema,\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n compilerUnit: z.string().min(1),\n lines: z.number().int().nonnegative(),\n })\n .strict();\nexport type ManifestSourceFile = z.infer<typeof ManifestSourceFileSchema>;\n\nconst SemanticFileInputRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"file\"),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nconst SemanticResolutionProbeRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"resolution-probe\"),\n scope: z.enum([\"project\", \"toolchain\"]),\n targetKind: z.enum([\"file\", \"directory\", \"readable-file\"]),\n exists: z.boolean(),\n })\n .strict();\nconst SemanticDirectoryListingRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"directory-listing\"),\n scope: z.enum([\"project\", \"toolchain\"]),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nconst SemanticSymlinkRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"symlink\"),\n scope: z.enum([\"project\", \"toolchain\"]),\n target: StoredPathSchema,\n })\n .strict();\nconst SemanticToolchainFileRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"toolchain-file\"),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport const SemanticInputRecordSchema = z.discriminatedUnion(\"kind\", [\n SemanticFileInputRecordSchema,\n SemanticResolutionProbeRecordSchema,\n SemanticDirectoryListingRecordSchema,\n SemanticSymlinkRecordSchema,\n SemanticToolchainFileRecordSchema,\n]);\nexport type SemanticInputRecord = z.infer<typeof SemanticInputRecordSchema>;\n\nexport const ArtifactIntegrityRecordSchema = z\n .object({\n path: z.enum(MAP_COMPANION_ARTIFACTS),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type ArtifactIntegrityRecord = z.infer<typeof ArtifactIntegrityRecordSchema>;\n\nexport const ProducerRecordSchema = z\n .object({\n id: z.string().min(1),\n kind: z.enum([\"built-in\", \"custom\"]),\n fingerprint: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type ProducerRecord = z.infer<typeof ProducerRecordSchema>;\n\nconst VersionedToolSchema = z\n .object({\n name: z.string().min(1),\n version: z.string().min(1),\n })\n .strict();\n\nexport const ManifestRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n analyzerVersion: z.string().min(1),\n producer: ProducerRecordSchema,\n semanticResolver: VersionedToolSchema,\n syntaxParser: VersionedToolSchema,\n analyzers: z.array(VersionedToolSchema),\n configHash: z.string().regex(/^[a-f0-9]{64}$/),\n sourceFiles: z.array(ManifestSourceFileSchema),\n semanticInputs: z.array(SemanticInputRecordSchema),\n artifacts: z.array(ArtifactIntegrityRecordSchema),\n integrityHash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type ManifestRecord = z.infer<typeof ManifestRecordSchema>;\n\nconst CodeMapShapeSchema = z\n .object({\n manifest: ManifestRecordSchema,\n project: ProjectRecordSchema,\n files: z.array(FileRecordSchema),\n symbols: z.array(SymbolRecordSchema),\n relations: z.array(RelationRecordSchema),\n diagnostics: z.array(DiagnosticRecordSchema),\n })\n .strict();\nexport const CodeMapSchema = CodeMapShapeSchema.superRefine((map, context) => {\n const fileByPath = new Map(map.files.map((file) => [file.path, file]));\n const fileIds = new Set<string>();\n const filePaths = new Set<string>();\n const compilerUnitsById = new Map(map.project.compilerUnits.map((unit) => [unit.id, unit]));\n const compilerUnitIds = new Set<string>();\n let fallbackCount = 0;\n for (const [index, file] of map.files.entries()) {\n addDuplicateIssue(context, fileIds, file.id, [\"files\", index, \"id\"]);\n addDuplicateIssue(context, filePaths, file.path, [\"files\", index, \"path\"]);\n if (file.id !== `file:${file.path}`) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", index, \"id\"],\n message: \"file ID must be derived from its path\",\n });\n }\n }\n\n for (const [index, unit] of map.project.compilerUnits.entries()) {\n addDuplicateIssue(context, compilerUnitIds, unit.id, [\"project\", \"compilerUnits\", index, \"id\"]);\n if (unit.kind === \"configured\" && !unit.config) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"config\"],\n message: \"configured compiler units require config\",\n });\n }\n if (unit.kind === \"fallback\" && unit.config) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"config\"],\n message: \"fallback compiler units must not have config\",\n });\n }\n if (unit.kind === \"fallback\") {\n fallbackCount += 1;\n if (\n unit.id !== \"compiler-unit:generated:fallback\" ||\n unit.root !== \".\" ||\n unit.references.length > 0 ||\n unit.extends.length > 0 ||\n Object.keys(unit.pathAliases).length > 0\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index],\n message: \"fallback compiler unit must use the canonical generated identity and shape\",\n });\n }\n }\n if (unit.kind === \"configured\" && unit.config) {\n if (unit.id !== `compiler-unit:configured:${unit.config}`) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"id\"],\n message: \"configured compiler-unit ID must be derived from its config path\",\n });\n }\n if (unit.root !== normalizeStoredPath(path.posix.dirname(unit.config))) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"root\"],\n message: \"configured compiler-unit root must match its config directory\",\n });\n }\n }\n }\n if (fallbackCount !== 1) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\"],\n message: \"exactly one fallback compiler unit is required\",\n });\n }\n const configuredPaths = new Set(\n map.project.compilerUnits.flatMap((unit) =>\n unit.kind === \"configured\" && unit.config ? [unit.config] : [],\n ),\n );\n if (map.project.tsconfig && !configuredPaths.has(map.project.tsconfig)) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"tsconfig\"],\n message: \"project tsconfig must resolve to a configured compiler unit\",\n });\n }\n const compatibilityUnit = map.project.tsconfig\n ? map.project.compilerUnits.find((unit) => unit.config === map.project.tsconfig)\n : map.project.compilerUnits\n .filter((unit) => unit.kind === \"configured\")\n .sort((left, right) => compareText(left.id, right.id))[0];\n if (stableJson(map.project.pathAliases) !== stableJson(compatibilityUnit?.pathAliases ?? {})) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"pathAliases\"],\n message: \"project path aliases must match the compatibility compiler unit\",\n });\n }\n for (const [index, unit] of map.project.compilerUnits.entries()) {\n for (const reference of unit.references) {\n if (!configuredPaths.has(reference)) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"references\"],\n message: \"compiler-unit reference must resolve to a configured unit\",\n });\n }\n }\n }\n\n const symbolById = new Map<string, (typeof map.symbols)[number]>();\n for (const [index, symbol] of map.symbols.entries()) {\n if (symbolById.has(symbol.id)) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"id\"],\n message: `duplicate symbol ID ${symbol.id}`,\n });\n }\n symbolById.set(symbol.id, symbol);\n const owner = fileByPath.get(symbol.file);\n if (!owner) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"file\"],\n message: \"symbol references a missing file\",\n });\n } else if (owner.hash !== symbol.sourceHash) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"sourceHash\"],\n message: \"symbol source hash does not match its file\",\n });\n } else if (!rangeFitsFile(symbol.range, owner)) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"range\"],\n message: \"symbol range must fit within its source file\",\n });\n }\n }\n\n const importRelationKeys = new Set(\n map.relations\n .filter((relation) => relation.type === \"imports\")\n .map(\n (relation) =>\n `${relation.from}\\u0000${relation.to}\\u0000${relation.origin.file}\\u0000${relation.origin.line}`,\n ),\n );\n const expectedImportRelationKeys = new Set<string>();\n\n for (const [fileIndex, file] of map.files.entries()) {\n const unit = compilerUnitsById.get(file.compilerUnit);\n if (!unit) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"compilerUnit\"],\n message: \"file compiler unit must resolve to exactly one compiler unit\",\n });\n }\n\n const expected = map.symbols\n .filter((symbol) => symbol.file === file.path)\n .map((symbol) => symbol.id)\n .sort();\n const actual = [...file.symbolIds].sort();\n if (JSON.stringify(actual) !== JSON.stringify(expected)) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"symbolIds\"],\n message: \"file symbol IDs must exactly match symbols owned by the file\",\n });\n }\n\n for (const [importIndex, importRecord] of file.imports.entries()) {\n if (importRecord.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex, \"line\"],\n message: \"import line must fit within its source file\",\n });\n }\n if (importRecord.external && importRecord.resolved) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex],\n message: \"external imports must not name an internal resolved path\",\n });\n }\n if (importRecord.resolved && !fileByPath.has(importRecord.resolved)) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex, \"resolved\"],\n message: \"resolved import must reference a persisted file\",\n });\n }\n const target = importRecord.resolved\n ? `file:${importRecord.resolved}`\n : `external:${importRecord.source}#default`;\n const key = `${file.id}\\u0000${target}\\u0000${file.path}\\u0000${importRecord.line}`;\n expectedImportRelationKeys.add(key);\n if (!importRelationKeys.has(key)) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex],\n message: \"import record must have matching relation evidence\",\n });\n }\n }\n for (const [exportIndex, exportRecord] of file.exports.entries()) {\n if (exportRecord.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"exports\", exportIndex, \"line\"],\n message: \"export line must fit within its source file\",\n });\n }\n }\n for (const [operationIndex, operation] of file.operations.entries()) {\n if (operation.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"operations\", operationIndex, \"line\"],\n message: \"operation line must fit within its source file\",\n });\n }\n }\n }\n\n const manifestPaths = new Set<string>();\n for (const [index, source] of map.manifest.sourceFiles.entries()) {\n addDuplicateIssue(context, manifestPaths, source.path, [\n \"manifest\",\n \"sourceFiles\",\n index,\n \"path\",\n ]);\n const file = fileByPath.get(source.path);\n if (!file || file.hash !== source.hash) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\", index],\n message: \"manifest source must match a persisted file and hash\",\n });\n } else if (file.compilerUnit !== source.compilerUnit) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\", index, \"compilerUnit\"],\n message: \"manifest source ownership must match the persisted file compiler unit\",\n });\n } else if (file.lines !== source.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\", index, \"lines\"],\n message: \"manifest source line count must match the persisted file\",\n });\n }\n }\n if (manifestPaths.size !== fileByPath.size) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\"],\n message: \"manifest sources must exactly cover persisted files\",\n });\n }\n\n const semanticInputIdentities = new Set<string>();\n for (const [index, input] of map.manifest.semanticInputs.entries()) {\n addDuplicateIssue(context, semanticInputIdentities, semanticInputIdentity(input), [\n \"manifest\",\n \"semanticInputs\",\n index,\n ]);\n }\n\n const artifactPaths = new Set<string>();\n for (const [index, artifact] of map.manifest.artifacts.entries()) {\n addDuplicateIssue(context, artifactPaths, artifact.path, [\n \"manifest\",\n \"artifacts\",\n index,\n \"path\",\n ]);\n }\n const expectedArtifacts = [...MAP_COMPANION_ARTIFACTS].sort();\n if (JSON.stringify([...artifactPaths].sort()) !== JSON.stringify(expectedArtifacts)) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"artifacts\"],\n message: \"manifest artifact hashes must exactly cover every companion artifact\",\n });\n }\n\n const counts = {\n files: map.files.length,\n symbols: map.symbols.length,\n relations: map.relations.length,\n diagnostics: map.diagnostics.length,\n };\n for (const key of Object.keys(counts) as Array<keyof typeof counts>) {\n if (map.project.counts[key] !== counts[key]) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"counts\", key],\n message: `${key} count does not match persisted records`,\n });\n }\n }\n\n const validEndpoints = new Set([...fileIds, ...symbolById.keys()]);\n const relationIdentities = new Set<string>();\n for (const [index, relation] of map.relations.entries()) {\n addDuplicateIssue(context, relationIdentities, relationIdentity(relation), [\n \"relations\",\n index,\n ]);\n if (relation.type === \"imports\") {\n const key = `${relation.from}\\u0000${relation.to}\\u0000${relation.origin.file}\\u0000${relation.origin.line}`;\n if (!expectedImportRelationKeys.has(key)) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: \"imports relation must have a matching file import record\",\n });\n }\n }\n for (const endpoint of [relation.from, relation.to]) {\n if (\n !validEndpoints.has(endpoint) &&\n !endpoint.startsWith(\"external:\") &&\n !endpoint.startsWith(\"route:\")\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: `relation references missing endpoint ${endpoint}`,\n });\n }\n }\n const originFile = fileByPath.get(relation.origin.file);\n if (!originFile) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"file\"],\n message: \"relation evidence references a missing file\",\n });\n } else {\n if (relation.origin.line !== relation.origin.range.startLine) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"line\"],\n message: \"relation origin line must match the start of its evidence range\",\n });\n }\n if (!rangeFitsFile(relation.origin.range, originFile)) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"range\"],\n message: \"relation evidence range must fit within its source file\",\n });\n }\n if (relation.type === \"contains\" || relation.type === \"exports\") {\n const fromFile = endpointSourceFile(relation.from, fileByPath, symbolById);\n const toFile = endpointSourceFile(relation.to, fileByPath, symbolById);\n if (\n fromFile !== relation.origin.file ||\n (relation.type === \"exports\" && toFile !== relation.origin.file)\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message:\n relation.type === \"exports\"\n ? \"exports endpoints and evidence must belong to the same file\"\n : \"contains evidence must belong to its source endpoint file\",\n });\n }\n\n const fromIsFile = relation.from.startsWith(\"file:\");\n const toSymbol = symbolById.get(relation.to);\n const fromSymbol = symbolById.get(relation.from);\n if (relation.type === \"contains\" && fromIsFile) {\n if (\n !toSymbol ||\n toSymbol.file !== relation.origin.file ||\n !rangesEqual(toSymbol.range, relation.origin.range)\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: \"file containment evidence must exactly identify a symbol owned by the file\",\n });\n }\n } else if (relation.type === \"contains\" && fromSymbol) {\n if (!toSymbol || !rangeContains(fromSymbol.range, relation.origin.range)) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"range\"],\n message:\n \"symbol containment must target a symbol and its evidence must fall within the source symbol\",\n });\n }\n }\n if (\n relation.type === \"exports\" &&\n (!fromIsFile ||\n !toSymbol ||\n !toSymbol.exported ||\n !rangesEqual(toSymbol.range, relation.origin.range))\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: \"exports evidence must exactly identify an exported symbol owned by the file\",\n });\n }\n }\n }\n }\n\n for (const [index, diagnostic] of map.diagnostics.entries()) {\n const file = diagnostic.file ? fileByPath.get(diagnostic.file) : undefined;\n if (file && diagnostic.line && diagnostic.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"diagnostics\", index, \"line\"],\n message: \"diagnostic line must fit within its source file\",\n });\n }\n }\n});\nexport type CodeMap = z.infer<typeof CodeMapSchema>;\n\nfunction addDuplicateIssue(\n context: z.RefinementCtx,\n seen: Set<string>,\n value: string,\n path: PropertyKey[],\n): void {\n if (seen.has(value)) {\n context.addIssue({ code: \"custom\", path, message: `duplicate value ${value}` });\n }\n seen.add(value);\n}\n\nfunction relationIdentity(relation: RelationRecord): string {\n const range = relation.origin.range;\n return [\n relation.from,\n relation.type,\n relation.to,\n relation.origin.file,\n range.startLine,\n range.startColumn,\n range.endLine,\n range.endColumn,\n ].join(\"\\u0000\");\n}\n\nfunction semanticInputIdentity(input: SemanticInputRecord): string {\n return input.kind === \"resolution-probe\"\n ? `${input.scope}\\u0000${input.path}\\u0000${input.kind}\\u0000${input.targetKind}`\n : input.kind === \"directory-listing\" || input.kind === \"symlink\"\n ? `${input.scope}\\u0000${input.path}\\u0000${input.kind}`\n : `${input.path}\\u0000${input.kind}`;\n}\n\nfunction rangeFitsFile(range: SourceRange, file: FileRecord): boolean {\n return range.startLine <= file.lines && range.endLine <= file.lines;\n}\n\nfunction rangesEqual(left: SourceRange, right: SourceRange): boolean {\n return (\n left.startLine === right.startLine &&\n left.startColumn === right.startColumn &&\n left.endLine === right.endLine &&\n left.endColumn === right.endColumn\n );\n}\n\nfunction rangeContains(outer: SourceRange, inner: SourceRange): boolean {\n const startsAfter =\n inner.startLine > outer.startLine ||\n (inner.startLine === outer.startLine && inner.startColumn >= outer.startColumn);\n const endsBefore =\n inner.endLine < outer.endLine ||\n (inner.endLine === outer.endLine && inner.endColumn <= outer.endColumn);\n return startsAfter && endsBefore;\n}\n\nfunction endpointSourceFile(\n endpoint: string,\n files: ReadonlyMap<string, FileRecord>,\n symbols: ReadonlyMap<string, SymbolRecord>,\n): string | undefined {\n if (endpoint.startsWith(\"file:\")) return files.get(endpoint.slice(\"file:\".length))?.path;\n return symbols.get(endpoint)?.file;\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { CodeMapError } from \"../errors.js\";\n\nexport function isAbsolutePath(value: string): boolean {\n const normalized = toPosixPath(value);\n return (\n path.posix.isAbsolute(normalized) ||\n /^[a-zA-Z]:[\\\\/]/.test(normalized) ||\n normalized.startsWith(\"//\")\n );\n}\n\nexport function isFileSystemUri(value: string): boolean {\n return /^file:(?:\\/\\/|\\/)/i.test(value.trim());\n}\n\nfunction hasEmbeddedDoubleSlashPath(value: string): boolean {\n const normalized = toPosixPath(value);\n let index = normalized.indexOf(\"//\");\n while (index >= 0) {\n const previous = index > 0 ? normalized[index - 1] : undefined;\n if (previous !== \":\") return true;\n index = normalized.indexOf(\"//\", index + 1);\n }\n return false;\n}\n\nexport function hasEmbeddedAbsolutePath(value: string): boolean {\n const normalized = toPosixPath(value);\n return (\n isAbsolutePath(normalized) ||\n isFileSystemUri(normalized) ||\n hasEmbeddedDoubleSlashPath(normalized) ||\n /(?:^|\\/)[A-Za-z]:(?:\\/|$)/.test(normalized) ||\n /(?:^|\\/)file:(?:\\/|$)/i.test(normalized)\n );\n}\n\nexport function isSafeRelativePathPattern(value: string): boolean {\n const normalized = toPosixPath(value);\n return (\n normalized.length > 0 &&\n !hasEmbeddedAbsolutePath(normalized) &&\n !normalized.split(\"/\").includes(\"..\")\n );\n}\n\n/** Distinguish recognizable host paths from ordinary web-route syntax. */\nexport function looksLikeHostFilePath(value: string, root?: string): boolean {\n const trimmed = value.trim();\n if (\n /file:(?:\\/\\/|\\/)/i.test(trimmed) ||\n /(?:^|[/])[A-Za-z]:[\\\\/]/.test(trimmed) ||\n /^\\\\\\\\/.test(trimmed) ||\n hasEmbeddedDoubleSlashPath(trimmed)\n ) {\n return true;\n }\n const normalized = toPosixPath(trimmed);\n if (root) {\n const normalizedRoot = toPosixPath(path.resolve(root));\n if (\n normalized === normalizedRoot ||\n normalized.startsWith(`${normalizedRoot}/`) ||\n normalized.includes(normalizedRoot)\n )\n return true;\n }\n return /^\\/(?:Users|home|root|private|tmp|var|etc|usr|opt|Volumes|mnt|proc|dev)(?:\\/|$)/.test(\n normalized,\n );\n}\n\nexport function toPosixPath(value: string): string {\n return value.replaceAll(\"\\\\\", \"/\");\n}\n\nexport function relativePosix(root: string, absolutePath: string): string {\n if (!isAbsolutePath(absolutePath)) {\n throw new CodeMapError(\n \"PATH_OUTSIDE_ROOT\",\n `Path ${absolutePath} is outside project root ${root}.`,\n );\n }\n const relative = path.relative(root, absolutePath);\n if (relative === \"\" || isRelativeInside(relative)) {\n return toPosixPath(relative || \".\");\n }\n throw new CodeMapError(\n \"PATH_OUTSIDE_ROOT\",\n `Path ${absolutePath} is outside project root ${root}.`,\n );\n}\n\nexport function isPathInside(root: string, candidate: string): boolean {\n if (isAbsolutePath(candidate) && !path.isAbsolute(candidate)) return false;\n const relative = path.relative(path.resolve(root), path.resolve(candidate));\n return relative === \"\" || isRelativeInside(relative);\n}\n\nexport async function isSafeRegularFile(root: string, candidate: string): Promise<boolean> {\n const absolute = path.resolve(candidate);\n if (!isPathInside(root, absolute)) return false;\n try {\n const stat = await fs.lstat(absolute);\n if (stat.isSymbolicLink() || !stat.isFile()) return false;\n const [realRoot, realFile] = await Promise.all([fs.realpath(root), fs.realpath(absolute)]);\n return isPathInside(realRoot, realFile);\n } catch {\n return false;\n }\n}\n\nexport async function readFileInsideRoot(root: string, candidate: string): Promise<Buffer> {\n const absolute = path.resolve(candidate);\n if (!(await isSafeRegularFile(root, absolute))) {\n throw new CodeMapError(\n \"PATH_OUTSIDE_ROOT\",\n `Refusing to read an unavailable, symbolic, or out-of-root file at ${absolute}.`,\n );\n }\n return fs.readFile(absolute);\n}\n\nfunction isRelativeInside(relative: string): boolean {\n const normalized = toPosixPath(relative);\n if (normalized === \"\" || normalized === \".\") return true;\n if (isAbsolutePath(normalized)) return false;\n return normalized !== \"..\" && !normalized.startsWith(\"../\") && !normalized.startsWith(\"..\\\\\");\n}\n\nexport function redactAbsolutePathsInText(message: string, root: string): string {\n const normalizedRoot = path.resolve(root);\n const redact = (candidate: string): string => {\n const trimmed = candidate.replace(/[)\\].,;:]+$/, \"\");\n if (!isAbsolutePath(trimmed) && !isFileSystemUri(trimmed)) return candidate;\n if (isFileSystemUri(trimmed)) return \"<outside-root>\";\n const foreignWindowsPath = path.win32.isAbsolute(trimmed) && !path.posix.isAbsolute(trimmed);\n if (foreignWindowsPath && path.posix.isAbsolute(normalizedRoot)) return \"<outside-root>\";\n try {\n if (isPathInside(normalizedRoot, trimmed)) {\n return relativePosix(normalizedRoot, trimmed);\n }\n } catch {\n // Fall back to opaque marker.\n }\n return \"<outside-root>\";\n };\n\n // Handle quoted paths and known roots first so spaces cannot split a machine path into\n // separately persisted fragments.\n let redacted = message.replace(\n /([\"'`])([^\"'`\\r\\n]+)\\1/g,\n (quoted: string, quote: string, contents: string) =>\n isAbsolutePath(contents) || isFileSystemUri(contents)\n ? `${quote}${redact(contents)}${quote}`\n : quoted,\n );\n for (const rootVariant of [normalizedRoot, toPosixPath(normalizedRoot)].sort(\n (a, b) => b.length - a.length,\n )) {\n if (rootVariant) redacted = redacted.replaceAll(rootVariant, \".\");\n }\n\n const chunks = redacted.split(\n /(\\s+(?:is|was|at|from|to|outside|inside|cannot|could|failed|for|and|or)\\s+)/gi,\n );\n return chunks\n .map((chunk) =>\n chunk.replace(\n /(?<![A-Za-z0-9_.-])[A-Za-z]:[\\\\/](?:[^\\\\/\\r\\n'\"`)\\],;:]+[\\\\/])*[^\\\\/\\s'\"`)\\],;:]+|(?<![A-Za-z0-9_.\\\\-])\\\\\\\\(?:[^\\\\\\r\\n'\"`)\\],;:]+\\\\)+[^\\\\\\s'\"`)\\],;:]+|(?<![A-Za-z0-9_.:/-])\\/\\/(?:[^/\\r\\n'\"`)\\],;:]+\\/)*[^/\\s'\"`)\\],;:]+|(?<![A-Za-z0-9_.:/-])\\/(?:[^/\\r\\n'\"`)\\],;:]+\\/)*[^/\\s'\"`)\\],;:]+/g,\n redact,\n ),\n )\n .join(\"\");\n}\n\nexport function normalizeStoredPath(value: string): string {\n const normalized = path.posix.normalize(toPosixPath(value));\n return normalized.startsWith(\"./\") ? normalized.slice(2) : normalized;\n}\n\n/** Keep user-authored module text useful without persisting host-specific absolute paths. */\nexport function sanitizeModuleSpecifier(value: string): string {\n return isAbsolutePath(value) || isFileSystemUri(value) || hasEmbeddedAbsolutePath(value)\n ? \"<absolute-import>\"\n : value;\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport type { JsonValue } from \"../types.js\";\n\nexport function compareText(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction safeRecordEntry(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => safeRecordEntry(entry));\n }\n if (value !== null && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const next: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort(compareText)) {\n const child = record[key];\n if (child !== undefined) {\n next[key] = safeRecordEntry(child);\n }\n }\n return next;\n }\n return value;\n}\n\nexport function stableValue<T>(value: T): T {\n if (Array.isArray(value)) {\n return safeRecordEntry(value) as T;\n }\n if (value !== null && typeof value === \"object\") {\n return safeRecordEntry(value) as T;\n }\n return value;\n}\n\nexport function stableJson(value: unknown, pretty = false): string {\n return `${JSON.stringify(stableValue(value), null, pretty ? 2 : undefined)}\\n`;\n}\n\nexport function stableJsonLine(value: unknown): string {\n return JSON.stringify(stableValue(value));\n}\n\nexport async function atomicWriteIfChanged(filePath: string, content: string): Promise<boolean> {\n const canonicalBytes = Buffer.from(content, \"utf8\");\n try {\n if ((await fs.readFile(filePath)).equals(canonicalBytes)) return false;\n } catch (error) {\n // A managed artifact that exists but cannot be read is not a reusable commit. Writing the\n // replacement through the containing directory lets an ordinary scan repair mode corruption\n // on platforms where atomic rename-over-existing is supported.\n if (!isNotFound(error) && !isPermissionDenied(error)) throw error;\n }\n\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const temporary = path.join(\n path.dirname(filePath),\n `.${path.basename(filePath)}.${process.pid}.${Math.random().toString(16).slice(2)}.tmp`,\n );\n try {\n await fs.writeFile(temporary, canonicalBytes, { mode: 0o644 });\n await fs.rename(temporary, filePath);\n } catch (error) {\n await fs.rm(temporary, { force: true }).catch(() => undefined);\n throw error;\n }\n return true;\n}\n\nexport function asJsonValue(value: unknown): JsonValue {\n return stableValue(value) as JsonValue;\n}\n\nexport function isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n}\n\nfunction isPermissionDenied(error: unknown): error is NodeJS.ErrnoException {\n return (\n error instanceof Error && \"code\" in error && (error.code === \"EACCES\" || error.code === \"EPERM\")\n );\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch (error) {\n if (isNotFound(error)) return false;\n throw error;\n }\n}\n\nexport async function mapLimit<T, R>(\n values: readonly T[],\n limit: number,\n operation: (value: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(values.length);\n let cursor = 0;\n const workers = Array.from({ length: Math.min(Math.max(1, limit), values.length) }, async () => {\n while (cursor < values.length) {\n const index = cursor++;\n const value = values[index] as T;\n if (value === undefined) return;\n results[index] = await operation(value, index);\n }\n });\n await Promise.all(workers);\n return results;\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { analyzeProject, defaultAnalyzers } from \"./analyze.js\";\nimport { initProject, resolveConfiguration } from \"./config.js\";\nimport { CodeMapError } from \"./errors.js\";\nimport { compareSources, inspectFreshness } from \"./freshness.js\";\nimport { loadManifestFrom, writeCodeMap } from \"./storage.js\";\nimport type {\n FrameworkAnalyzer,\n ManifestRecord,\n ScanOptions,\n ScanResult,\n SyntaxParserAdapter,\n} from \"./types.js\";\nimport {\n FallbackParserAdapter,\n isBuiltInTypeScriptParserAdapter,\n TypeScriptParserAdapter,\n} from \"./parser.js\";\n\nexport async function scanProject(options: ScanOptions = {}): Promise<ScanResult> {\n const started = performance.now();\n let resolved = await resolveConfiguration(options);\n let wroteConfig = false;\n if (!resolved.configExists) {\n const initialized = await initProject({\n ...(options.root ? { root: options.root } : {}),\n ...(options.config ? { config: options.config } : {}),\n ...(options.output ? { output: options.output } : {}),\n });\n wroteConfig = initialized.created;\n resolved = await resolveConfiguration(options);\n }\n\n let previous: ManifestRecord | undefined;\n try {\n previous = await loadManifestFrom(resolved.outputDir);\n } catch (error) {\n if (\n !(error instanceof CodeMapError) ||\n ![\"MAP_NOT_FOUND\", \"MAP_READ_FAILED\", \"INCOMPATIBLE_SCHEMA\", \"INVALID_MAP\"].includes(\n error.code,\n )\n ) {\n throw error;\n }\n }\n\n if (previous && !wroteConfig && usesDefaultAnalysisPipeline(options)) {\n const inspection = await inspectFreshness({\n root: resolved.root,\n config: resolved.configPath,\n output: resolved.outputDir,\n });\n if (inspection.result.current && inspection.map) {\n const map = inspection.map;\n return {\n map,\n root: resolved.root,\n outputDir: resolved.outputDir,\n wrote: false,\n changes: inspection.result.changes,\n elapsedMs: Math.round((performance.now() - started) * 100) / 100,\n counts: map.project.counts,\n criticalParseErrors: map.diagnostics.some(\n (diagnostic) => diagnostic.code === \"parse-error\" && diagnostic.severity === \"error\",\n ),\n };\n }\n }\n\n const analyzed = await analyzeProject({\n resolved,\n ...(options.analyzers ? { analyzers: options.analyzers } : {}),\n ...(options.parser ? { parser: options.parser } : {}),\n ...(options.semanticResolver ? { semanticResolver: options.semanticResolver } : {}),\n });\n const changes = compareSources(previous?.sourceFiles ?? [], analyzed.manifest.sourceFiles);\n const persisted = await writeCodeMap(resolved, analyzed);\n const map = persisted.map;\n const criticalParseErrors = map.diagnostics.some(\n (diagnostic) => diagnostic.code === \"parse-error\" && diagnostic.severity === \"error\",\n );\n return {\n map,\n root: resolved.root,\n outputDir: resolved.outputDir,\n wrote: wroteConfig || persisted.wrote,\n changes,\n elapsedMs: Math.round((performance.now() - started) * 100) / 100,\n counts: map.project.counts,\n criticalParseErrors,\n };\n}\n\nfunction usesDefaultAnalysisPipeline(options: ScanOptions): boolean {\n return (\n !options.analyzers &&\n (!options.parser || isBuiltInTypeScriptParserAdapter(options.parser)) &&\n !options.semanticResolver\n );\n}\n\nexport function createAnalyzer(\n options: {\n analyzers?: FrameworkAnalyzer[];\n parser?: SyntaxParserAdapter;\n semanticResolver?: import(\"./types.js\").SemanticResolver;\n } = {},\n) {\n const analyzers = [...defaultAnalyzers(), ...(options.analyzers ?? [])];\n const parser = options.parser\n ? new FallbackParserAdapter(options.parser, new TypeScriptParserAdapter())\n : new TypeScriptParserAdapter();\n return {\n analyzers,\n parser,\n scan: (scanOptions: ScanOptions = {}) =>\n scanProject({\n ...scanOptions,\n ...(options.analyzers && !scanOptions.analyzers ? { analyzers: options.analyzers } : {}),\n ...(options.parser && !scanOptions.parser ? { parser: options.parser } : {}),\n ...(options.semanticResolver && !scanOptions.semanticResolver\n ? { semanticResolver: options.semanticResolver }\n : {}),\n }),\n };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { ANALYZER_VERSION, SCHEMA_VERSION } from \"./constants.js\";\nimport { fileId, generatedCompilerUnitId } from \"./ids.js\";\nimport type {\n AnalysisContext,\n AnalysisContribution,\n CodeMap,\n CompilerUnitRecord,\n DiagnosticRecord,\n FileRecord,\n Framework,\n FrameworkAnalyzer,\n JsonValue,\n ProjectRecord,\n RelationRecord,\n SemanticResolver,\n SemanticInputObservation,\n SemanticInputRecord,\n SymbolRecord,\n SyntaxFact,\n SyntaxParserAdapter,\n SyntaxParseResult,\n} from \"./types.js\";\nimport {\n DiagnosticRecordSchema,\n FrameworkSchema,\n RelationRecordSchema,\n SymbolRecordSchema,\n} from \"./schemas.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport {\n hasEmbeddedAbsolutePath,\n isAbsolutePath,\n looksLikeHostFilePath,\n normalizeStoredPath,\n redactAbsolutePathsInText,\n} from \"./utils/path.js\";\nimport { compareText, mapLimit } from \"./utils/stable.js\";\nimport { CoreAnalyzer, extractFileStructure } from \"./analyzers/core.js\";\nimport { trustedNestJsAnalyzerMethods } from \"./analyzers/nestjs.js\";\nimport { trustedNextJsAnalyzerMethods } from \"./analyzers/nextjs.js\";\nimport { ReactAnalyzer } from \"./analyzers/react.js\";\nimport type { ResolvedConfiguration } from \"./config.js\";\nimport { customProducerRecord, defaultProducerRecord, prepareSemanticInputs } from \"./freshness.js\";\nimport {\n FallbackParserAdapter,\n isBuiltInTypeScriptParserAdapter,\n TypeScriptParserAdapter,\n} from \"./parser.js\";\nimport {\n compilerDiagnostic,\n createBoundedModuleResolver,\n TypeScriptSemanticResolver,\n} from \"./semantic.js\";\nimport type { CompilerUnitPlan } from \"./compiler-units.js\";\nimport { runCompilerUnitWorker } from \"./compiler-worker-client.js\";\n\ninterface PreparedSource {\n absolutePath: string;\n relativePath: string;\n content: string;\n hash: string;\n file: FileRecord;\n syntax?: AnalysisContext[\"syntax\"];\n}\n\nexport interface AnalyzeProjectOptions {\n resolved: ResolvedConfiguration;\n analyzers?: FrameworkAnalyzer[];\n parser?: SyntaxParserAdapter;\n semanticResolver?: SemanticResolver;\n}\n\nexport async function analyzeProject(options: AnalyzeProjectOptions): Promise<CodeMap> {\n const { resolved } = options;\n const semanticInputs = await prepareSemanticInputs(resolved.root, resolved.config);\n const {\n packageMetadata,\n frameworks: selectedFrameworks,\n discovered,\n compilerGraph,\n configHash,\n } = semanticInputs;\n const parser =\n options.parser && !isBuiltInTypeScriptParserAdapter(options.parser)\n ? new FallbackParserAdapter(options.parser, new TypeScriptParserAdapter())\n : undefined;\n const prepared = await mapLimit(\n discovered,\n resolved.config.concurrency ?? 16,\n async (source): Promise<PreparedSource> => {\n const bytes = await fs.readFile(source.absolutePath);\n const content = bytes.toString(\"utf8\");\n const hash = hashText(bytes);\n const syntax = parser\n ? await parser.parse({\n path: source.relativePath,\n language: source.language,\n source: content,\n })\n : undefined;\n return {\n ...source,\n content,\n hash,\n ...(syntax ? { syntax } : {}),\n file: {\n schemaVersion: SCHEMA_VERSION,\n id: fileId(source.relativePath),\n path: source.relativePath,\n compilerUnit:\n compilerGraph.ownership.get(source.relativePath) ?? generatedCompilerUnitId(\"fallback\"),\n language: source.language,\n frameworks: [],\n hash,\n lines: lineCount(content),\n imports: [],\n exports: [],\n symbolIds: [],\n env: [],\n operations: [],\n syntax: {\n parser: sanitizePersistedText(\n syntax?.parser ?? \"typescript-compiler-syntax\",\n resolved.root,\n ),\n factCount: syntax?.facts.length ?? 0,\n hadErrors: syntax?.hadErrors ?? false,\n ...(syntax?.fallbackFrom\n ? { fallbackFrom: sanitizePersistedText(syntax.fallbackFrom, resolved.root) }\n : {}),\n },\n },\n };\n },\n );\n\n const semanticResolver = options.semanticResolver ?? new TypeScriptSemanticResolver();\n const diagnostics: DiagnosticRecord[] = [...compilerGraph.diagnostics];\n for (const source of prepared) {\n const syntax = source.syntax;\n if (!syntax?.fallbackFrom) continue;\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"parser-fallback\",\n severity: \"warning\",\n message:\n syntax.issues[0]?.message ??\n `Parser ${syntax.fallbackFrom} was unavailable; used ${syntax.parser}.`,\n file: source.relativePath,\n });\n }\n const symbols: SymbolRecord[] = [];\n const relations: RelationRecord[] = [];\n const internalPipeline = defaultAnalyzerPipeline();\n const internalAnalyzers = internalPipeline.analyzers;\n const analyzers = uniqueAnalyzers([...internalAnalyzers, ...(options.analyzers ?? [])]);\n const trustedInternalAnalyzers = internalPipeline.methods;\n const preparedByAbsolute = new Map(\n prepared.map((source) => [source.absolutePath, source] as const),\n );\n const indexedSourcePaths = new Set(prepared.map((source) => source.relativePath));\n const unitAliases = new Map<string, Record<string, string[]>>();\n const observedSemanticInputs: SemanticInputObservation[] = [];\n\n const builtInProducer =\n !options.semanticResolver &&\n !options.analyzers &&\n (!options.parser || isBuiltInTypeScriptParserAdapter(options.parser));\n\n // A completed worker releases its compiler heap before the next unit or serialization.\n for (const unit of compilerGraph.units) {\n if (unit.ownedFiles.length === 0) continue;\n const unitInput: CompilerWorkerInput = {\n unit,\n root: resolved.root,\n packageDependencies: packageMetadata.dependencies,\n includePrivateSymbols: resolved.config.includePrivateSymbols,\n selectedFrameworks,\n preparedByAbsolute: new Map(\n unit.ownedFiles.flatMap((absolute) => {\n const source = preparedByAbsolute.get(absolute);\n return source ? [[absolute, source] as const] : [];\n }),\n ),\n indexedSourcePaths,\n };\n let contribution: CompilerUnitContribution;\n if (builtInProducer) {\n const result = await runCompilerUnitWorker(unitInput);\n contribution = result.contribution;\n for (const file of result.files) {\n const source = preparedByAbsolute.get(path.resolve(resolved.root, file.path));\n if (source) source.file = file;\n }\n } else {\n contribution = await analyzeCompilerUnit({\n ...unitInput,\n analyzers,\n trustedInternalAnalyzers,\n semanticResolver,\n });\n }\n unitAliases.set(unit.record.id, contribution.pathAliases);\n diagnostics.push(...contribution.diagnostics);\n symbols.push(...contribution.symbols);\n relations.push(...contribution.relations);\n observedSemanticInputs.push(...contribution.semanticInputs);\n }\n\n const merged = mergeSpecializedSymbols(symbols, relations);\n addFileRelations(prepared, merged.symbols, merged.relations);\n const normalizedRelations = normalizeRelations(\n merged.relations,\n prepared.map((source) => source.file),\n merged.symbols,\n merged.replacements,\n resolved.root,\n );\n for (const source of prepared) {\n source.file.symbolIds = merged.symbols\n .filter((symbol) => symbol.file === source.relativePath)\n .map((symbol) => symbol.id)\n .sort(compareText);\n }\n\n const compilerUnits = compilerGraph.units.map((unit) => ({\n ...unit.record,\n pathAliases: unitAliases.get(unit.record.id) ?? unit.record.pathAliases,\n }));\n const pathAliases = compatibilityPathAliases(compilerUnits, compilerGraph.primaryConfig);\n const persistedSymbols = merged.symbols.map((symbol) =>\n sanitizePersistedSymbol(symbol, resolved.root),\n );\n const normalizedDiagnostics = normalizeDiagnostics(diagnostics, resolved.root);\n const manifestSemanticInputs = normalizeSemanticInputs(\n observedSemanticInputs,\n new Set(prepared.map((source) => source.relativePath)),\n );\n const producerComponents = {\n semanticResolver: {\n name: sanitizePersistedText(semanticResolver.name, resolved.root),\n version: sanitizePersistedText(semanticResolver.version ?? \"unversioned\", resolved.root),\n },\n syntaxParser:\n options.parser && !isBuiltInTypeScriptParserAdapter(options.parser)\n ? {\n name: sanitizePersistedText(options.parser.name, resolved.root),\n version: sanitizePersistedText(options.parser.version ?? \"unversioned\", resolved.root),\n }\n : { name: \"typescript-compiler-syntax\", version: ts.version },\n analyzers: analyzers\n .map((analyzer) => ({\n name: sanitizePersistedText(analyzer.name, resolved.root),\n version: sanitizePersistedText(analyzer.version ?? \"unversioned\", resolved.root),\n }))\n .sort((a, b) => compareText(a.name, b.name)),\n };\n const project: ProjectRecord = {\n schemaVersion: SCHEMA_VERSION,\n name: sanitizePersistedText(packageMetadata.name, resolved.root),\n ...(packageMetadata.packageManager\n ? { packageManager: sanitizePersistedText(packageMetadata.packageManager, resolved.root) }\n : {}),\n frameworks: selectedFrameworks,\n ...(compilerGraph.primaryConfig ? { tsconfig: compilerGraph.primaryConfig } : {}),\n pathAliases,\n compilerUnits,\n entryPoints: packageMetadata.entryPoints,\n workspaces: packageMetadata.workspaces.map((workspace) => ({\n ...workspace,\n name: sanitizePersistedText(workspace.name, resolved.root),\n })),\n counts: {\n files: prepared.length,\n symbols: persistedSymbols.length,\n relations: normalizedRelations.length,\n diagnostics: normalizedDiagnostics.length,\n },\n };\n return {\n manifest: {\n schemaVersion: SCHEMA_VERSION,\n analyzerVersion: ANALYZER_VERSION,\n producer: builtInProducer\n ? defaultProducerRecord()\n : customProducerRecord(producerComponents),\n semanticResolver: producerComponents.semanticResolver,\n syntaxParser: producerComponents.syntaxParser,\n analyzers: producerComponents.analyzers,\n configHash,\n sourceFiles: prepared\n .map((source) => ({\n path: source.relativePath,\n hash: source.hash,\n compilerUnit: source.file.compilerUnit,\n lines: source.file.lines,\n }))\n .sort((a, b) => compareText(a.path, b.path)),\n semanticInputs: manifestSemanticInputs,\n artifacts: [],\n integrityHash: \"0\".repeat(64),\n },\n project,\n files: prepared.map((source) => source.file).sort((a, b) => compareText(a.path, b.path)),\n symbols: persistedSymbols,\n relations: normalizedRelations,\n diagnostics: normalizedDiagnostics,\n };\n}\n\ninterface AnalyzeCompilerUnitOptions {\n unit: CompilerUnitPlan;\n root: string;\n packageDependencies: AnalysisContext[\"packageDependencies\"];\n includePrivateSymbols: boolean;\n selectedFrameworks: Framework[];\n preparedByAbsolute: Map<string, PreparedSource>;\n indexedSourcePaths: Set<string>;\n analyzers: FrameworkAnalyzer[];\n trustedInternalAnalyzers: ReadonlyMap<FrameworkAnalyzer, TrustedAnalyzerMethods>;\n semanticResolver: SemanticResolver;\n}\n\ninterface CompilerUnitContribution {\n pathAliases: Record<string, string[]>;\n diagnostics: DiagnosticRecord[];\n symbols: SymbolRecord[];\n relations: RelationRecord[];\n semanticInputs: SemanticInputObservation[];\n}\n\nexport type CompilerWorkerInput = Omit<\n AnalyzeCompilerUnitOptions,\n \"analyzers\" | \"trustedInternalAnalyzers\" | \"semanticResolver\"\n>;\n\nexport interface CompilerWorkerResult {\n contribution: CompilerUnitContribution;\n files: FileRecord[];\n}\n\nexport async function analyzeDefaultCompilerUnit(\n input: CompilerWorkerInput,\n): Promise<CompilerWorkerResult> {\n const pipeline = defaultAnalyzerPipeline();\n const contribution = await analyzeCompilerUnit({\n ...input,\n analyzers: pipeline.analyzers,\n trustedInternalAnalyzers: pipeline.methods,\n // We expose type facts and syntactic diagnostics, not TS JSDoc link diagnostics or prose.\n // This mode still parses all JavaScript JSDoc, which can define types.\n semanticResolver: new TypeScriptSemanticResolver(ts.JSDocParsingMode.ParseForTypeInfo),\n });\n return {\n contribution,\n files: [...input.preparedByAbsolute.values()].map((source) => source.file),\n };\n}\n\nasync function analyzeCompilerUnit(\n options: AnalyzeCompilerUnitOptions,\n): Promise<CompilerUnitContribution> {\n const { unit } = options;\n const semantic = await options.semanticResolver.resolve({\n root: options.root,\n sourceFiles: unit.sourceFiles,\n ...(unit.record.config ? { tsconfig: unit.record.config } : {}),\n compilerUnit: unit.record.id,\n });\n const { program, checker } = semantic;\n const resolveModule =\n semantic.resolveModule ??\n createBoundedModuleResolver(\n options.root,\n path.resolve(options.root, unit.record.root),\n program.getCompilerOptions(),\n );\n const diagnostics: DiagnosticRecord[] = [...semantic.diagnostics];\n const symbols: SymbolRecord[] = [];\n const relations: RelationRecord[] = [];\n\n for (const absolutePath of unit.ownedFiles) {\n const source = options.preparedByAbsolute.get(absolutePath);\n if (!source) continue;\n const sourceFile = program.getSourceFile(source.absolutePath);\n if (!sourceFile) {\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"error\",\n message:\n \"TypeScript did not include this selected source file in the owning compiler unit.\",\n file: source.relativePath,\n });\n continue;\n }\n const sourceDiagnostics = parseDiagnostics(program, sourceFile, options.root);\n diagnostics.push(...sourceDiagnostics);\n const syntax = source.syntax ?? syntaxFromProgram(sourceFile, sourceDiagnostics);\n source.file.syntax = {\n parser: sanitizePersistedText(syntax.parser, options.root),\n factCount: syntax.facts.length,\n hadErrors: syntax.hadErrors,\n ...(syntax.fallbackFrom\n ? { fallbackFrom: sanitizePersistedText(syntax.fallbackFrom, options.root) }\n : {}),\n };\n const context: AnalysisContext = {\n root: options.root,\n relativePath: source.relativePath,\n sourceFile,\n program,\n checker,\n sourceHash: source.hash,\n file: source.file,\n packageDependencies: options.packageDependencies,\n syntax,\n includePrivateSymbols: options.includePrivateSymbols,\n compilerUnit: unit.record,\n indexedSourcePaths: options.indexedSourcePaths,\n resolveModule,\n };\n\n const structure = extractFileStructure(context);\n source.file.imports = structure.imports;\n source.file.exports = structure.exports;\n source.file.env = structure.env;\n source.file.operations = structure.operations;\n diagnostics.push(...structure.diagnostics);\n relations.push(...structure.relations);\n\n for (const analyzer of options.analyzers) {\n const trustedSupport = trustedAnalyzerMethods(analyzer, options.trustedInternalAnalyzers);\n let supported = false;\n try {\n supported = trustedSupport\n ? trustedSupport.supports(context)\n : analyzer.supports(isolateCustomAnalyzerContext(context));\n } catch {\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"warning\",\n message: `Analyzer ${analyzer.name} failed during capability detection; its contribution was skipped.`,\n file: source.relativePath,\n });\n continue;\n }\n if (!supported || !analyzerEnabled(analyzer, options.selectedFrameworks)) continue;\n try {\n // Re-resolve trust immediately before invocation. A supplied analyzer is never allowed to\n // retain a cached trusted decision and then swap behavior between supports() and analyze().\n const trustedAnalysis = trustedAnalyzerMethods(analyzer, options.trustedInternalAnalyzers);\n const rawContribution = trustedAnalysis\n ? await trustedAnalysis.analyze(context)\n : await analyzer.analyze(isolateCustomAnalyzerContext(context));\n const contribution = trustedAnalysis\n ? rawContribution\n : sanitizeCustomContribution(\n rawContribution,\n options.root,\n analyzer.name,\n source,\n symbols,\n );\n symbols.push(...(contribution.symbols ?? []));\n relations.push(...(contribution.relations ?? []));\n diagnostics.push(...(contribution.diagnostics ?? []));\n source.file.frameworks.push(...(contribution.frameworks ?? []));\n } catch {\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"warning\",\n message: `Analyzer ${analyzer.name} failed; its contribution was skipped.`,\n file: source.relativePath,\n });\n }\n }\n source.file.frameworks = [...new Set(source.file.frameworks)].sort();\n }\n\n return {\n pathAliases: semantic.pathAliases,\n diagnostics,\n symbols,\n relations,\n semanticInputs: semantic.semanticInputs?.() ?? [],\n };\n}\n\nfunction isolateCustomAnalyzerContext(context: AnalysisContext): AnalysisContext {\n return {\n ...context,\n file: structuredClone(context.file),\n syntax: structuredClone(context.syntax),\n compilerUnit: structuredClone(context.compilerUnit),\n packageDependencies: new Set(context.packageDependencies),\n ...(context.indexedSourcePaths\n ? { indexedSourcePaths: new Set(context.indexedSourcePaths) }\n : {}),\n };\n}\n\nfunction sanitizeCustomContribution(\n contribution: AnalysisContribution,\n root: string,\n analyzerName: string,\n source: PreparedSource,\n knownSymbols: SymbolRecord[],\n): AnalysisContribution {\n const sourceFileId = fileId(source.relativePath);\n const localSymbolIds = new Set<string>(\n knownSymbols.filter((symbol) => symbol.file === source.relativePath).map((symbol) => symbol.id),\n );\n const localSymbols = new Map<string, SymbolRecord>(\n knownSymbols\n .filter((symbol) => symbol.file === source.relativePath)\n .map((symbol) => [symbol.id, symbol]),\n );\n\n const symbolIds = new Map<string, string>();\n const warnings: DiagnosticRecord[] = [];\n const pushWarning = (message: string) => {\n warnings.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"warning\",\n message: sanitizePersistedText(message, root),\n file: source.relativePath,\n });\n };\n\n const rangeFitsSource = (range: SymbolRecord[\"range\"]): boolean =>\n range.startLine >= 1 &&\n range.endLine >= range.startLine &&\n range.endLine <= source.file.lines &&\n (range.endLine !== range.startLine || range.endColumn >= range.startColumn);\n const sanitizeEndpoint = (value: string): string =>\n symbolIds.get(value) ?? sanitizeCustomIdentifier(value, root);\n\n const symbols: SymbolRecord[] = [];\n for (const raw of contribution.symbols ?? []) {\n const sanitized = {\n ...raw,\n id: sanitizeCustomIdentifier(raw.id, root),\n name: sanitizePersistedText(raw.name, root),\n ...(raw.signature ? { signature: sanitizePersistedText(raw.signature, root) } : {}),\n ...(raw.documentation\n ? { documentation: sanitizePersistedText(raw.documentation, root) }\n : {}),\n facts: Object.fromEntries(\n Object.entries(raw.facts).map(([key, value]) => [\n sanitizePersistedText(key, root),\n sanitizeJsonValue(value, root),\n ]),\n ),\n };\n const parsed = SymbolRecordSchema.safeParse(sanitized);\n if (!parsed.success) {\n pushWarning(`Analyzer ${analyzerName} emitted an invalid custom symbol.`);\n continue;\n }\n if (parsed.data.file !== source.relativePath) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom symbol for non-local file ${parsed.data.file}.`,\n );\n continue;\n }\n if (parsed.data.sourceHash !== source.hash) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom symbol with a source hash mismatch for ${parsed.data.id}.`,\n );\n continue;\n }\n if (!rangeFitsSource(parsed.data.range)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom symbol with out-of-bounds source range for ${parsed.data.id}.`,\n );\n continue;\n }\n symbols.push(parsed.data);\n symbolIds.set(raw.id, parsed.data.id);\n localSymbolIds.add(parsed.data.id);\n localSymbols.set(parsed.data.id, parsed.data);\n }\n\n const relations: RelationRecord[] = [];\n for (const raw of contribution.relations ?? []) {\n const relation = {\n ...raw,\n from: sanitizeEndpoint(raw.from),\n to: sanitizeEndpoint(raw.to),\n origin: {\n ...raw.origin,\n explanation: sanitizePersistedText(raw.origin.explanation, root),\n analyzer: sanitizePersistedText(raw.origin.analyzer, root),\n },\n };\n const parsed = RelationRecordSchema.safeParse(relation);\n if (!parsed.success) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom relation from ${relation.from} to ${relation.to}.`,\n );\n continue;\n }\n if (\n parsed.data.origin.file !== source.relativePath ||\n parsed.data.origin.line !== parsed.data.origin.range.startLine ||\n parsed.data.origin.range.startLine < 1 ||\n parsed.data.origin.range.endLine > source.file.lines\n ) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom relation with invalid evidence bounds for ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n if (parsed.data.type === \"imports\") {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom imports relation; imports are core-owned and were skipped.`,\n );\n continue;\n } else if (parsed.data.type === \"contains\" || parsed.data.type === \"exports\") {\n const targetSymbol = localSymbols.get(parsed.data.to);\n if (!targetSymbol || !rangesEqual(parsed.data.origin.range, targetSymbol.range)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom structural relation ${parsed.data.type} ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n if (parsed.data.type === \"exports\") {\n if (parsed.data.from !== sourceFileId || !targetSymbol.exported) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom export relation ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n } else if (parsed.data.from !== sourceFileId) {\n const parentSymbol = localSymbols.get(parsed.data.from);\n if (!parentSymbol || !rangeContains(parentSymbol.range, parsed.data.origin.range)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom containment relation ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n } else if (!localSymbolIds.has(parsed.data.to)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom containment relation from file to non-local symbol ${parsed.data.to}.`,\n );\n continue;\n }\n }\n relations.push(parsed.data);\n }\n\n const diagnostics: DiagnosticRecord[] = [];\n for (const raw of contribution.diagnostics ?? []) {\n const diagnostic = {\n ...raw,\n message: sanitizePersistedText(raw.message, root),\n };\n const parsed = DiagnosticRecordSchema.safeParse(diagnostic);\n if (!parsed.success) {\n pushWarning(`Analyzer ${analyzerName} emitted an invalid custom diagnostic.`);\n continue;\n }\n if (parsed.data.file && parsed.data.file !== source.relativePath) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom diagnostic for non-local file ${parsed.data.file}.`,\n );\n continue;\n }\n if (parsed.data.file && parsed.data.line && parsed.data.line > source.file.lines) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom diagnostic with out-of-bounds line ${parsed.data.line}.`,\n );\n continue;\n }\n diagnostics.push(parsed.data);\n }\n\n const frameworks: Framework[] = [];\n for (const rawFramework of contribution.frameworks ?? []) {\n const parsed = FrameworkSchema.safeParse(rawFramework);\n if (!parsed.success) {\n pushWarning(`Analyzer ${analyzerName} emitted an invalid custom framework ${rawFramework}.`);\n continue;\n }\n frameworks.push(parsed.data);\n }\n return {\n ...(symbols.length ? { symbols } : {}),\n ...(relations.length ? { relations } : {}),\n ...(diagnostics.length || warnings.length\n ? {\n diagnostics: [...diagnostics, ...warnings],\n }\n : {}),\n ...(frameworks.length ? { frameworks } : {}),\n };\n}\n\nfunction sanitizeCustomIdentifier(value: string, root: string): string {\n if (value.startsWith(\"route:\")) {\n const route = value.slice(\"route:\".length);\n return looksLikeHostFilePath(route, root) ? \"route:<redacted>\" : value;\n }\n if (value.startsWith(\"external:\")) {\n const separator = value.lastIndexOf(\"#\");\n const moduleName = value.slice(\"external:\".length, separator > 0 ? separator : undefined);\n const exported = separator > 0 ? value.slice(separator + 1) : \"default\";\n const safeModule =\n isAbsolutePath(moduleName) || hasEmbeddedAbsolutePath(moduleName)\n ? \"<absolute-import>\"\n : sanitizePersistedText(moduleName, root);\n return `external:${safeModule}#${sanitizePersistedText(exported, root)}`;\n }\n const prefixEnd = value.indexOf(\":\");\n const nameStart = value.lastIndexOf(\"#\");\n if (prefixEnd >= 0) {\n const pathEnd = nameStart > prefixEnd ? nameStart : value.length;\n const candidatePath = value.slice(prefixEnd + 1, pathEnd);\n if (isAbsolutePath(candidatePath) || hasEmbeddedAbsolutePath(candidatePath)) {\n const safePath = sanitizePersistedText(candidatePath, root);\n const suffix = nameStart > prefixEnd ? value.slice(nameStart) : \"\";\n return `${value.slice(0, prefixEnd + 1)}${safePath}${sanitizePersistedText(suffix, root)}`;\n }\n }\n return sanitizePersistedText(value, root);\n}\n\nfunction rangesEqual(left: SymbolRecord[\"range\"], right: SymbolRecord[\"range\"]): boolean {\n return (\n left.startLine === right.startLine &&\n left.startColumn === right.startColumn &&\n left.endLine === right.endLine &&\n left.endColumn === right.endColumn\n );\n}\n\nfunction rangeContains(outer: SymbolRecord[\"range\"], inner: SymbolRecord[\"range\"]): boolean {\n if (\n outer.startLine > inner.startLine ||\n (outer.startLine === inner.startLine && outer.startColumn > inner.startColumn)\n )\n return false;\n if (\n outer.endLine < inner.endLine ||\n (outer.endLine === inner.endLine && outer.endColumn < inner.endColumn)\n )\n return false;\n return true;\n}\n\nfunction sanitizeJsonValue(value: JsonValue, root: string): JsonValue {\n if (typeof value === \"string\") return sanitizePersistedText(value, root);\n if (Array.isArray(value)) return value.map((item) => sanitizeJsonValue(item, root));\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n sanitizePersistedText(key, root),\n sanitizeJsonValue(item, root),\n ]),\n );\n }\n return value;\n}\n\nexport function defaultAnalyzers(): FrameworkAnalyzer[] {\n return [new CoreAnalyzer(), new ReactAnalyzer()];\n}\n\nconst canonicalCoreAnalyzerMethods: TrustedAnalyzerMethods = {\n supports: CoreAnalyzer.prototype.supports.bind(CoreAnalyzer.prototype),\n analyze: CoreAnalyzer.prototype.analyze.bind(CoreAnalyzer.prototype),\n};\nconst canonicalReactAnalyzerMethods: TrustedAnalyzerMethods = {\n supports: ReactAnalyzer.prototype.supports.bind(ReactAnalyzer.prototype),\n analyze: ReactAnalyzer.prototype.analyze.bind(ReactAnalyzer.prototype),\n};\n\nfunction defaultAnalyzerPipeline(): {\n analyzers: FrameworkAnalyzer[];\n methods: ReadonlyMap<FrameworkAnalyzer, TrustedAnalyzerMethods>;\n} {\n const core = new CoreAnalyzer();\n const react = new ReactAnalyzer();\n return {\n analyzers: [core, react],\n methods: new Map<FrameworkAnalyzer, TrustedAnalyzerMethods>([\n [core, canonicalCoreAnalyzerMethods],\n [react, canonicalReactAnalyzerMethods],\n ]),\n };\n}\n\nfunction uniqueAnalyzers(analyzers: FrameworkAnalyzer[]): FrameworkAnalyzer[] {\n const byName = new Map<string, FrameworkAnalyzer>();\n for (const analyzer of analyzers) byName.set(analyzer.name, analyzer);\n return [...byName.values()];\n}\n\nfunction analyzerEnabled(analyzer: FrameworkAnalyzer, frameworks: Framework[]): boolean {\n if (analyzer instanceof CoreAnalyzer) return true;\n const name = analyzer.name.toLowerCase();\n if (name.includes(\"react\")) return frameworks.includes(\"react\") || frameworks.includes(\"nextjs\");\n if (name.includes(\"next\")) return frameworks.includes(\"nextjs\");\n if (name.includes(\"nest\")) return frameworks.includes(\"nestjs\");\n return true;\n}\n\ninterface TrustedAnalyzerMethods {\n supports(context: AnalysisContext): boolean;\n analyze(context: AnalysisContext): AnalysisContribution | Promise<AnalysisContribution>;\n}\n\nfunction trustedAnalyzerMethods(\n analyzer: FrameworkAnalyzer,\n internal: ReadonlyMap<FrameworkAnalyzer, TrustedAnalyzerMethods>,\n): TrustedAnalyzerMethods | undefined {\n const internalMethods = internal.get(analyzer);\n if (internalMethods) return internalMethods;\n return trustedNextJsAnalyzerMethods(analyzer) ?? trustedNestJsAnalyzerMethods(analyzer);\n}\n\nfunction parseDiagnostics(\n program: ts.Program,\n sourceFile: ts.SourceFile,\n root: string,\n): DiagnosticRecord[] {\n return program\n .getSyntacticDiagnostics(sourceFile)\n .map((diagnostic) => compilerDiagnostic(diagnostic, root));\n}\n\nfunction syntaxFromProgram(\n sourceFile: ts.SourceFile,\n diagnostics: DiagnosticRecord[],\n): SyntaxParseResult {\n const parser = \"typescript-compiler-syntax\";\n const facts: SyntaxFact[] = [];\n for (const statement of sourceFile.statements) {\n const kind = ts.isImportDeclaration(statement)\n ? \"import\"\n : ts.isExportDeclaration(statement) || ts.isExportAssignment(statement)\n ? \"export\"\n : isTopLevelDeclaration(statement)\n ? \"declaration\"\n : undefined;\n if (!kind) continue;\n const name = syntaxStatementName(statement);\n facts.push({\n kind,\n nodeType: ts.SyntaxKind[statement.kind],\n ...(name ? { name } : {}),\n range: sourceRange(sourceFile, statement),\n evidence: { parser, exact: true },\n });\n }\n for (const diagnostic of diagnostics) {\n facts.push({\n kind: \"parse-error\",\n nodeType: \"typescript-diagnostic\",\n range: {\n startLine: diagnostic.line ?? 1,\n startColumn: diagnostic.column ?? 1,\n endLine: diagnostic.line ?? 1,\n endColumn: diagnostic.column ?? 1,\n },\n evidence: { parser, exact: true },\n });\n }\n return {\n parser,\n facts,\n issues: diagnostics.map((diagnostic) => ({ message: diagnostic.message })),\n hadErrors: diagnostics.length > 0,\n };\n}\n\nfunction isTopLevelDeclaration(statement: ts.Statement): boolean {\n return (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isVariableStatement(statement)\n );\n}\n\nfunction syntaxStatementName(statement: ts.Statement): string | undefined {\n if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {\n return statement.moduleSpecifier.text;\n }\n if (ts.isExportAssignment(statement)) return \"default\";\n if (ts.isExportDeclaration(statement)) {\n return statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : \"export\";\n }\n if (ts.isVariableStatement(statement)) {\n return statement.declarationList.declarations\n .map((declaration) => (ts.isIdentifier(declaration.name) ? declaration.name.text : undefined))\n .filter((name): name is string => name !== undefined)\n .join(\",\");\n }\n const name = (statement as unknown as ts.NamedDeclaration).name;\n return name && ts.isIdentifier(name) ? name.text : undefined;\n}\n\nfunction sourceRange(sourceFile: ts.SourceFile, node: ts.Node): SymbolRecord[\"range\"] {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile, false));\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n return {\n startLine: start.line + 1,\n startColumn: start.character + 1,\n endLine: end.line + 1,\n endColumn: end.character + 1,\n };\n}\n\ninterface MergedSymbols {\n symbols: SymbolRecord[];\n relations: RelationRecord[];\n replacements: Map<string, string>;\n}\n\nfunction mergeSpecializedSymbols(\n values: SymbolRecord[],\n relations: RelationRecord[],\n): MergedSymbols {\n const byLocation = new Map<string, SymbolRecord>();\n const replacements = new Map<string, string>();\n for (const value of values) {\n const key = `${value.file}:${value.range.startLine}:${value.range.startColumn}:${value.name}`;\n const existing = byLocation.get(key);\n if (!existing) {\n byLocation.set(key, value);\n continue;\n }\n const winner =\n specializationPriority(value.kind) >= specializationPriority(existing.kind)\n ? mergeSymbolFacts(value, existing)\n : mergeSymbolFacts(existing, value);\n const loser = winner.id === value.id ? existing : value;\n replacements.set(loser.id, winner.id);\n byLocation.set(key, winner);\n }\n return {\n symbols: [...byLocation.values()].sort((a, b) => compareText(a.id, b.id)),\n relations,\n replacements,\n };\n}\n\nfunction specializationPriority(kind: SymbolRecord[\"kind\"]): number {\n if (kind.startsWith(\"nest-\") || kind.startsWith(\"next-\") || kind === \"route\" || kind === \"dto\")\n return 3;\n if (kind.startsWith(\"react-\")) return 2;\n return 1;\n}\n\nfunction mergeSymbolFacts(primary: SymbolRecord, secondary: SymbolRecord): SymbolRecord {\n return {\n ...primary,\n exported: primary.exported || secondary.exported,\n ...(primary.defaultExport || secondary.defaultExport ? { defaultExport: true } : {}),\n ...((primary.signature ?? secondary.signature)\n ? { signature: primary.signature ?? secondary.signature }\n : {}),\n ...((primary.documentation ?? secondary.documentation)\n ? { documentation: primary.documentation ?? secondary.documentation }\n : {}),\n facts: { ...secondary.facts, ...primary.facts },\n };\n}\n\nfunction addFileRelations(\n prepared: PreparedSource[],\n symbols: SymbolRecord[],\n relations: RelationRecord[],\n): void {\n for (const symbol of symbols) {\n const source = prepared.find((candidate) => candidate.relativePath === symbol.file);\n if (!source) continue;\n relations.push({\n schemaVersion: SCHEMA_VERSION,\n from: fileId(symbol.file),\n type: \"contains\",\n to: symbol.id,\n confidence: 1,\n origin: {\n file: symbol.file,\n line: symbol.range.startLine,\n range: symbol.range,\n explanation: \"source containment\",\n classification: \"exact\",\n analyzer: \"typescript-node\",\n },\n });\n if (symbol.exported) {\n relations.push({\n schemaVersion: SCHEMA_VERSION,\n from: fileId(symbol.file),\n type: \"exports\",\n to: symbol.id,\n confidence: 1,\n origin: {\n file: symbol.file,\n line: symbol.range.startLine,\n range: symbol.range,\n explanation: \"export modifier\",\n classification: \"exact\",\n analyzer: \"typescript-node\",\n },\n });\n }\n }\n}\n\nfunction normalizeRelations(\n values: RelationRecord[],\n files: FileRecord[],\n symbols: SymbolRecord[],\n replacements: Map<string, string>,\n root: string,\n): RelationRecord[] {\n const knownFiles = new Set(files.map((file) => file.id));\n const byId = new Map(symbols.map((symbol) => [symbol.id, symbol]));\n const byFileAndName = new Map<string, SymbolRecord>();\n for (const symbol of symbols) byFileAndName.set(`${symbol.file}#${symbol.name}`, symbol);\n const resolveEndpoint = (id: string): string | undefined => {\n let resolved = id;\n const visited = new Set<string>();\n while (replacements.has(resolved) && !visited.has(resolved)) {\n visited.add(resolved);\n const replacement = replacements.get(resolved);\n if (!replacement) break;\n resolved = replacement;\n }\n if (\n knownFiles.has(resolved) ||\n byId.has(resolved) ||\n resolved.startsWith(\"external:\") ||\n resolved.startsWith(\"route:\")\n )\n return resolved;\n const parsed = /^(?:[^:]+):(.+)#([^#.]+)$/.exec(resolved);\n if (parsed) return byFileAndName.get(`${parsed[1]}#${parsed[2]}`)?.id;\n return undefined;\n };\n\n const all: RelationRecord[] = [];\n for (const value of values) {\n const from = resolveEndpoint(value.from);\n const to = resolveEndpoint(value.to);\n if (!from || !to || from === to) continue;\n all.push({\n ...value,\n from,\n to,\n confidence: clampConfidence(value.confidence),\n origin: {\n ...value.origin,\n explanation: sanitizePersistedText(value.origin.explanation, root),\n analyzer: sanitizePersistedText(value.origin.analyzer, root),\n },\n });\n }\n for (const value of [...all]) {\n if (!inverseEligible(value.type)) continue;\n all.push({\n ...value,\n from: value.to,\n type: \"used-by\",\n to: value.from,\n origin: {\n ...value.origin,\n explanation: `inverse of ${value.type}`,\n classification: \"derived\",\n analyzer: \"relation-normalizer\",\n },\n });\n }\n const map = new Map<string, RelationRecord>();\n for (const value of all) {\n const key = `${value.from}\\u0000${value.type}\\u0000${value.to}\\u0000${value.origin.file}\\u0000${value.origin.range.startLine}\\u0000${value.origin.range.startColumn}\\u0000${value.origin.range.endLine}\\u0000${value.origin.range.endColumn}`;\n const existing = map.get(key);\n if (!existing || relationWouldReplace(existing, value)) map.set(key, value);\n }\n return [...map.values()].sort((a, b) => compareText(relationKey(a), relationKey(b)));\n}\n\nfunction relationWouldReplace(existing: RelationRecord, candidate: RelationRecord): boolean {\n if (candidate.confidence > existing.confidence) return true;\n if (candidate.confidence < existing.confidence) return false;\n const candidateRank = relationDeterministicRank(candidate);\n const existingRank = relationDeterministicRank(existing);\n if (candidateRank !== existingRank) return candidateRank > existingRank;\n return compareText(relationKey(candidate), relationKey(existing)) < 0;\n}\n\nfunction relationDeterministicRank(relation: RelationRecord): number {\n switch (relation.origin.classification) {\n case \"exact\":\n return 2;\n case \"derived\":\n return 1;\n case \"framework-derived\":\n default:\n return 0;\n }\n}\n\nfunction inverseEligible(type: RelationRecord[\"type\"]): boolean {\n return [\"calls\", \"instantiates\", \"renders\", \"uses-hook\", \"depends-on\", \"injects\"].includes(type);\n}\n\nfunction clampConfidence(value: number): number {\n return Math.max(0, Math.min(1, Number.isFinite(value) ? value : 0));\n}\n\nfunction relationKey(value: RelationRecord): string {\n return [\n value.from,\n value.type,\n value.to,\n value.origin.file,\n String(value.origin.range.startLine).padStart(10, \"0\"),\n String(value.origin.range.startColumn).padStart(10, \"0\"),\n String(value.origin.range.endLine).padStart(10, \"0\"),\n String(value.origin.range.endColumn).padStart(10, \"0\"),\n value.origin.classification,\n value.origin.analyzer,\n value.origin.explanation,\n ].join(\"\\u0000\");\n}\n\nfunction normalizeDiagnostics(values: DiagnosticRecord[], root: string): DiagnosticRecord[] {\n const map = new Map<string, DiagnosticRecord>();\n for (const value of values) {\n const sanitized = { ...value, message: sanitizePersistedText(value.message, root) };\n const key = `${sanitized.file ?? \"\"}:${sanitized.line ?? 0}:${sanitized.column ?? 0}:${sanitized.code}:${sanitized.message}`;\n map.set(key, sanitized);\n }\n return [...map.values()].sort((a, b) => compareText(diagnosticKey(a), diagnosticKey(b)));\n}\n\nfunction sanitizePersistedSymbol(symbol: SymbolRecord, root: string): SymbolRecord {\n return {\n ...symbol,\n ...(symbol.signature ? { signature: sanitizePersistedText(symbol.signature, root) } : {}),\n ...(symbol.documentation\n ? { documentation: sanitizePersistedText(symbol.documentation, root) }\n : {}),\n };\n}\n\nfunction sanitizePersistedText(value: string, root: string): string {\n return redactAbsolutePathsInText(value, root) || \"<redacted>\";\n}\n\nfunction diagnosticKey(value: DiagnosticRecord): string {\n return `${value.file ?? \"\"}\\u0000${String(value.line ?? 0).padStart(10, \"0\")}\\u0000${value.code}\\u0000${value.message}`;\n}\n\nfunction lineCount(content: string): number {\n if (content.length === 0) return 0;\n return content.split(/\\r\\n|\\r|\\n/).length;\n}\n\nfunction normalizeSemanticInputs(\n values: SemanticInputObservation[],\n indexedSources: ReadonlySet<string>,\n): SemanticInputRecord[] {\n const byIdentity = new Map<string, SemanticInputRecord>();\n for (const value of values) {\n const normalized = normalizeStoredPath(value.path);\n if (!isSafeSemanticInputPath(normalized)) continue;\n if (value.kind === \"file\" && indexedSources.has(normalized)) continue;\n if (value.kind === \"symlink\") {\n const target = normalizeStoredPath(value.target);\n if (!isSafeSemanticInputPath(target)) continue;\n const record: SemanticInputRecord = {\n ...value,\n path: normalized,\n scope: value.scope ?? \"project\",\n target,\n };\n byIdentity.set(semanticInputIdentity(record), record);\n continue;\n }\n const record: SemanticInputRecord =\n value.kind === \"resolution-probe\" || value.kind === \"directory-listing\"\n ? { ...value, path: normalized, scope: value.scope ?? \"project\" }\n : { ...value, path: normalized };\n byIdentity.set(semanticInputIdentity(record), record);\n }\n for (const value of byIdentity.values()) {\n if (value.kind === \"file\") {\n byIdentity.delete(`resolution-probe\\u0000project\\u0000file\\u0000${value.path}`);\n byIdentity.delete(`resolution-probe\\u0000project\\u0000readable-file\\u0000${value.path}`);\n } else if (value.kind === \"toolchain-file\") {\n byIdentity.delete(`resolution-probe\\u0000toolchain\\u0000file\\u0000${value.path}`);\n byIdentity.delete(`resolution-probe\\u0000toolchain\\u0000readable-file\\u0000${value.path}`);\n } else if (value.kind === \"directory-listing\") {\n byIdentity.delete(`resolution-probe\\u0000${value.scope}\\u0000directory\\u0000${value.path}`);\n }\n }\n return [...byIdentity.values()].sort((a, b) =>\n compareText(semanticInputIdentity(a), semanticInputIdentity(b)),\n );\n}\n\nfunction semanticInputIdentity(value: SemanticInputRecord): string {\n return value.kind === \"resolution-probe\"\n ? `${value.kind}\\u0000${value.scope}\\u0000${value.targetKind}\\u0000${value.path}`\n : value.kind === \"directory-listing\" || value.kind === \"symlink\"\n ? `${value.kind}\\u0000${value.scope}\\u0000${value.path}`\n : `${value.kind}\\u0000${value.path}`;\n}\n\nfunction isSafeSemanticInputPath(value: string): boolean {\n return !isAbsolutePath(value) && value !== \"..\" && !value.startsWith(\"../\");\n}\n\nfunction compatibilityPathAliases(\n units: CompilerUnitRecord[],\n primaryConfig: string | undefined,\n): Record<string, string[]> {\n const primary = primaryConfig\n ? units.find((unit) => unit.config === primaryConfig)\n : units.find((unit) => unit.kind === \"configured\");\n return primary?.pathAliases ?? {};\n}\n","import type { SymbolKind } from \"./types.js\";\nimport { normalizeStoredPath, sanitizeModuleSpecifier } from \"./utils/path.js\";\n\nexport function fileId(filePath: string): string {\n return `file:${normalizeStoredPath(filePath)}`;\n}\n\nexport function symbolId(\n kind: SymbolKind,\n filePath: string,\n name: string,\n parent?: string,\n): string {\n const prefix = symbolPrefix(kind);\n const qualifiedName = parent ? `${parent}.${name}` : name;\n return `${prefix}:${normalizeStoredPath(filePath)}#${qualifiedName}`;\n}\n\nexport function externalId(moduleName: string, name = \"default\"): string {\n return `external:${sanitizeModuleSpecifier(moduleName)}#${name}`;\n}\n\nexport function configuredCompilerUnitId(configPath: string): string {\n return `compiler-unit:configured:${normalizeStoredPath(configPath)}`;\n}\n\nexport function generatedCompilerUnitId(name: string): string {\n return `compiler-unit:generated:${normalizeStoredPath(name)}`;\n}\n\nexport function routeId(method: string, route: string): string {\n return `route:${method.toUpperCase()}:${route || \"/\"}`;\n}\n\nfunction symbolPrefix(kind: SymbolKind): string {\n switch (kind) {\n case \"react-component\":\n return \"component\";\n case \"react-hook\":\n return \"hook\";\n case \"next-page\":\n case \"next-layout\":\n case \"next-route-handler\":\n case \"next-special-file\":\n return \"next\";\n case \"nest-module\":\n case \"nest-controller\":\n case \"nest-provider\":\n case \"nest-guard\":\n case \"nest-interceptor\":\n case \"nest-pipe\":\n case \"nest-filter\":\n case \"nest-gateway\":\n return \"nest\";\n case \"type-alias\":\n return \"type\";\n default:\n return kind;\n }\n}\n","import { createHash } from \"node:crypto\";\n\nexport function hashText(value: string | Buffer): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function shortHash(value: string | Buffer, length = 12): string {\n return hashText(value).slice(0, length);\n}\n","import { isBuiltin } from \"node:module\";\nimport path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { ANALYZER_VERSION, SCHEMA_VERSION } from \"../constants.js\";\nimport { externalId, fileId, symbolId } from \"../ids.js\";\nimport type {\n AnalysisContext,\n AnalysisContribution,\n DiagnosticRecord,\n ExportRecord,\n ExternalOperation,\n FileRecord,\n FrameworkAnalyzer,\n ImportRecord,\n RelationRecord,\n SymbolKind,\n SymbolRecord,\n} from \"../types.js\";\nimport { isPathInside, relativePosix, sanitizeModuleSpecifier } from \"../utils/path.js\";\nimport { compareText } from \"../utils/stable.js\";\nimport {\n getDeclarationName,\n hasDefaultModifier,\n hasExportModifier,\n hasModifier,\n makeSymbol,\n nodeLine,\n nodeRange,\n propertyNameText,\n visit,\n} from \"./helpers.js\";\n\nexport class CoreAnalyzer implements FrameworkAnalyzer {\n readonly name = \"typescript-node\";\n readonly version = ANALYZER_VERSION;\n\n supports(): boolean {\n return true;\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const symbols: SymbolRecord[] = [];\n const relations: RelationRecord[] = [];\n const seenSymbols = new Map<string, SymbolRecord>();\n\n for (const statement of context.sourceFile.statements) {\n extractTopLevelSymbol(context, statement, seenSymbols, relations);\n }\n symbols.push(...seenSymbols.values());\n\n const declarationIds = declarationIdMap(context, symbols);\n collectBehaviorRelations(context, declarationIds, relations);\n\n return {\n symbols: symbols.sort((a, b) => compareText(a.id, b.id)),\n relations,\n frameworks: [\"typescript\", \"node\"],\n };\n }\n}\n\nfunction extractTopLevelSymbol(\n context: AnalysisContext,\n statement: ts.Statement,\n output: Map<string, SymbolRecord>,\n relations: RelationRecord[],\n): void {\n if (ts.isFunctionDeclaration(statement)) {\n const name = statement.name?.text ?? \"default\";\n const record = makeSymbol(context, statement, \"function\", {\n name,\n exported: isNameExported(context, name, statement),\n facts: { async: hasModifier(statement, ts.SyntaxKind.AsyncKeyword) },\n });\n keepBestDeclaration(output, record, Boolean(statement.body));\n return;\n }\n if (ts.isClassDeclaration(statement)) {\n const className = statement.name?.text ?? \"default\";\n const classRecord = makeSymbol(context, statement, \"class\", {\n name: className,\n exported: isNameExported(context, className, statement),\n });\n keepBestDeclaration(output, classRecord, true);\n for (const member of statement.members) {\n if (!ts.isMethodDeclaration(member) && !ts.isConstructorDeclaration(member)) continue;\n if (hasModifier(member, ts.SyntaxKind.PrivateKeyword) && !isPrivateEnabled(context)) {\n continue;\n }\n const name = ts.isConstructorDeclaration(member)\n ? \"constructor\"\n : (propertyNameText(member.name) ?? \"anonymous\");\n const method = makeSymbol(context, member, \"method\", {\n name,\n parent: className,\n exported: classRecord.exported,\n facts: {\n async: ts.isMethodDeclaration(member)\n ? hasModifier(member, ts.SyntaxKind.AsyncKeyword)\n : false,\n },\n });\n keepBestDeclaration(output, method, Boolean(member.body));\n relations.push(\n relation(classRecord.id, \"contains\", method.id, context, member, 1, \"class member\"),\n );\n }\n return;\n }\n if (ts.isInterfaceDeclaration(statement)) {\n keepBestDeclaration(\n output,\n makeSymbol(context, statement, \"interface\", {\n exported: isNameExported(context, statement.name.text, statement),\n }),\n true,\n );\n return;\n }\n if (ts.isTypeAliasDeclaration(statement)) {\n keepBestDeclaration(\n output,\n makeSymbol(context, statement, \"type-alias\", {\n exported: isNameExported(context, statement.name.text, statement),\n }),\n true,\n );\n return;\n }\n if (ts.isVariableStatement(statement)) {\n const defaultExport = hasDefaultModifier(statement);\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue;\n const functionLike =\n declaration.initializer !== undefined &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer));\n const record = makeSymbol(context, declaration, functionLike ? \"function\" : \"variable\", {\n exported: isNameExported(context, declaration.name.text, statement),\n defaultExport,\n facts: functionLike\n ? { async: hasModifier(declaration.initializer, ts.SyntaxKind.AsyncKeyword) }\n : {},\n });\n keepBestDeclaration(output, record, true);\n }\n }\n}\n\nfunction isNameExported(context: AnalysisContext, name: string, node: ts.Node): boolean {\n if (hasExportModifier(node) || hasDefaultModifier(node)) return true;\n return context.file.exports.some(\n (entry) => !entry.source && (entry.local === name || (!entry.local && entry.name === name)),\n );\n}\n\nfunction isPrivateEnabled(context: AnalysisContext): boolean {\n return context.includePrivateSymbols;\n}\n\nfunction keepBestDeclaration(\n output: Map<string, SymbolRecord>,\n record: SymbolRecord,\n hasImplementation: boolean,\n): void {\n const existing = output.get(record.id);\n if (!existing || hasImplementation || !existing.signature) output.set(record.id, record);\n}\n\nfunction declarationIdMap(\n context: AnalysisContext,\n symbols: SymbolRecord[],\n): Map<ts.Declaration, string> {\n const byKey = new Map(symbols.map((symbol) => [`${symbol.kind}:${symbol.name}`, symbol.id]));\n const result = new Map<ts.Declaration, string>();\n for (const statement of context.sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement)) {\n const name = statement.name?.text ?? \"default\";\n const id = byKey.get(`function:${name}`);\n if (id) result.set(statement, id);\n } else if (ts.isClassDeclaration(statement)) {\n const name = statement.name?.text ?? \"default\";\n const id = byKey.get(`class:${name}`);\n if (id) result.set(statement, id);\n for (const member of statement.members) {\n if (!ts.isMethodDeclaration(member) && !ts.isConstructorDeclaration(member)) continue;\n const memberName = ts.isConstructorDeclaration(member)\n ? \"constructor\"\n : (propertyNameText(member.name) ?? \"anonymous\");\n const memberId = symbolId(\"method\", context.relativePath, memberName, name);\n result.set(member, memberId);\n }\n } else if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue;\n const kind =\n declaration.initializer &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer))\n ? \"function\"\n : \"variable\";\n const id = byKey.get(`${kind}:${declaration.name.text}`);\n if (id) result.set(declaration, id);\n }\n } else if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) {\n const kind = ts.isInterfaceDeclaration(statement) ? \"interface\" : \"type-alias\";\n const id = byKey.get(`${kind}:${statement.name.text}`);\n if (id) result.set(statement, id);\n }\n }\n return result;\n}\n\nfunction collectBehaviorRelations(\n context: AnalysisContext,\n declarationIds: Map<ts.Declaration, string>,\n output: RelationRecord[],\n): void {\n let currentOwner = fileId(context.relativePath);\n const walk = (node: ts.Node): void => {\n const previousOwner = currentOwner;\n if (\n ts.isFunctionDeclaration(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isConstructorDeclaration(node)\n ) {\n currentOwner = declarationIds.get(node) ?? currentOwner;\n } else if (\n (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) &&\n ts.isVariableDeclaration(node.parent)\n ) {\n currentOwner = declarationIds.get(node.parent) ?? currentOwner;\n } else if (ts.isClassDeclaration(node)) {\n currentOwner = declarationIds.get(node) ?? currentOwner;\n }\n\n if (ts.isCallExpression(node) && !isRequireCall(node)) {\n const target = resolveExpressionTarget(context, node.expression);\n if (target && target.id !== currentOwner) {\n output.push(\n relation(\n currentOwner,\n \"calls\",\n target.id,\n context,\n node,\n target.exact ? 1 : 0.35,\n target.exact ? \"TypeScript symbol resolution\" : \"unresolved call syntax\",\n ),\n );\n }\n } else if (ts.isNewExpression(node)) {\n const target = resolveExpressionTarget(context, node.expression);\n if (target && target.id !== currentOwner) {\n output.push(\n relation(\n currentOwner,\n \"instantiates\",\n target.id,\n context,\n node,\n target.exact ? 1 : 0.35,\n target.exact ? \"TypeScript constructor resolution\" : \"unresolved constructor syntax\",\n ),\n );\n }\n }\n\n if (ts.isIdentifier(node) && isReferenceIdentifier(node)) {\n const target = resolveExpressionTarget(context, node, false);\n if (target?.exact && target.id !== currentOwner && !target.id.startsWith(\"external:\")) {\n output.push(\n relation(\n currentOwner,\n \"references\",\n target.id,\n context,\n node,\n 1,\n \"TypeScript symbol reference\",\n ),\n );\n }\n }\n\n node.forEachChild(walk);\n currentOwner = previousOwner;\n };\n walk(context.sourceFile);\n\n for (const statement of context.sourceFile.statements) {\n if (!ts.isClassDeclaration(statement)) continue;\n const from = declarationIds.get(statement);\n if (!from) continue;\n for (const clause of statement.heritageClauses ?? []) {\n for (const type of clause.types) {\n const target = resolveExpressionTarget(context, type.expression);\n if (target) {\n output.push(\n relation(\n from,\n \"depends-on\",\n target.id,\n context,\n type,\n target.exact ? 1 : 0.35,\n target.exact ? \"TypeScript heritage resolution\" : \"unresolved heritage syntax\",\n ),\n );\n }\n }\n }\n }\n}\n\ninterface TargetResolution {\n id: string;\n exact: boolean;\n}\n\nfunction resolveExpressionTarget(\n context: AnalysisContext,\n expression: ts.Expression,\n allowFallback = true,\n): TargetResolution | undefined {\n let symbol = context.checker.getSymbolAtLocation(expression);\n if (!symbol && ts.isPropertyAccessExpression(expression)) {\n symbol = context.checker.getSymbolAtLocation(expression.name);\n }\n const externalBinding = importedExpressionBinding(context, expression);\n if (!symbol) {\n const imported = resolveImportedExpressionTarget(context, expression);\n if (imported) return { id: imported, exact: true };\n if (externalBinding) {\n return {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n };\n }\n const fallback = allowFallback ? expressionFallbackId(expression) : undefined;\n return fallback ? { id: fallback, exact: false } : undefined;\n }\n if (symbol.flags & ts.SymbolFlags.Alias) {\n try {\n symbol = context.checker.getAliasedSymbol(symbol);\n } catch {\n // An unresolved alias still gets an external fallback below.\n }\n }\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n if (!declaration) {\n const imported = resolveImportedExpressionTarget(context, expression);\n if (imported) return { id: imported, exact: true };\n if (externalBinding) {\n return {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n };\n }\n const fallback = allowFallback ? expressionFallbackId(expression) : undefined;\n return fallback ? { id: fallback, exact: false } : undefined;\n }\n const source = declaration.getSourceFile();\n if (!isPathInside(context.root, source.fileName)) {\n return externalBinding\n ? {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n }\n : allowFallback\n ? { id: externalId(\"unresolved\", symbol.getName()), exact: false }\n : undefined;\n }\n const relative = relativePosix(context.root, source.fileName);\n if (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative)) {\n return externalBinding\n ? {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n }\n : allowFallback\n ? { id: externalId(\"unresolved\", symbol.getName()), exact: false }\n : undefined;\n }\n const id = declarationToId(declaration, relative);\n if (id) return { id, exact: true };\n if (externalBinding) {\n return {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n };\n }\n const fallback = allowFallback ? expressionFallbackId(expression) : undefined;\n return fallback ? { id: fallback, exact: false } : undefined;\n}\n\nfunction resolveImportedExpressionTarget(\n context: AnalysisContext,\n expression: ts.Expression,\n): string | undefined {\n const binding = importedExpressionBinding(context, expression, true);\n if (!binding?.resolved) return undefined;\n if (ts.isIdentifier(expression)) {\n const sourceFile = context.program.getSourceFile(path.resolve(context.root, binding.resolved));\n if (!sourceFile) return undefined;\n const declaration = findExportedDeclaration(sourceFile, binding.imported);\n return declaration ? declarationToId(declaration, binding.resolved) : undefined;\n }\n if (!ts.isPropertyAccessExpression(expression)) return undefined;\n const sourceFile = context.program.getSourceFile(path.resolve(context.root, binding.resolved));\n if (!sourceFile) return undefined;\n const declaration = findExportedDeclaration(sourceFile, expression.name.text);\n return declaration ? declarationToId(declaration, binding.resolved) : undefined;\n}\n\nfunction findExportedDeclaration(\n sourceFile: ts.SourceFile,\n exportedName: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n (ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement)) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name?.text === exportedName)\n ) {\n return statement;\n }\n if (ts.isVariableStatement(statement)) {\n const declaration = statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === exportedName,\n );\n if (declaration) return declaration;\n }\n if (\n ts.isExportAssignment(statement) &&\n !statement.isExportEquals &&\n ts.isIdentifier(statement.expression)\n ) {\n if (exportedName === \"default\") {\n const declaration = findDeclarationByName(sourceFile, statement.expression.text);\n if (declaration) return declaration;\n }\n if (statement.expression.text === exportedName) {\n return findDeclarationByName(sourceFile, statement.expression.text);\n }\n }\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n ) {\n const specifier = statement.exportClause.elements.find(\n (item) => item.name.text === exportedName,\n );\n if (specifier && !statement.moduleSpecifier) {\n return findExportedDeclaration(\n sourceFile,\n specifier.propertyName?.text ?? specifier.name.text,\n );\n }\n }\n }\n return undefined;\n}\n\nfunction findDeclarationByName(\n sourceFile: ts.SourceFile,\n name: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n (ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement)) &&\n statement.name?.text === name\n ) {\n return statement;\n }\n if (ts.isVariableStatement(statement)) {\n const declaration = statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === name,\n );\n if (declaration) return declaration;\n }\n }\n return undefined;\n}\n\ninterface ImportedExpressionBinding {\n module: string;\n exported: string;\n imported: string;\n resolved?: string;\n}\n\nfunction importedExpressionBinding(\n context: AnalysisContext,\n expression: ts.Expression,\n includeLocal = false,\n): ImportedExpressionBinding | undefined {\n const root = leftMostIdentifierNode(expression);\n if (!root) return undefined;\n const rootSymbol = context.checker.getSymbolAtLocation(root);\n if (!rootSymbol) return undefined;\n const declaration = rootSymbol.declarations?.find(isImportBindingDeclaration);\n if (!declaration) return undefined;\n const importDeclaration = enclosingImportDeclaration(declaration);\n if (!importDeclaration || !ts.isStringLiteral(importDeclaration.moduleSpecifier))\n return undefined;\n const source = sanitizeModuleSpecifier(importDeclaration.moduleSpecifier.text);\n const line = nodeLine(context.sourceFile, importDeclaration);\n const imported = context.file.imports.find(\n (record) =>\n record.kind === \"esm\" &&\n record.source === source &&\n record.line === line &&\n record.specifiers.some((specifier) => specifier.local === root.text),\n );\n if (!imported || (!includeLocal && !imported.external)) return undefined;\n const specifier = imported.specifiers.find((item) => item.local === root.text);\n if (!specifier) return undefined;\n return {\n module: imported.source,\n exported: ts.isPropertyAccessExpression(expression) ? expression.name.text : specifier.imported,\n imported: specifier.imported,\n ...(imported.resolved ? { resolved: imported.resolved } : {}),\n };\n}\n\nfunction isImportBindingDeclaration(declaration: ts.Declaration): boolean {\n return (\n ts.isImportSpecifier(declaration) ||\n ts.isImportClause(declaration) ||\n ts.isNamespaceImport(declaration)\n );\n}\n\nfunction enclosingImportDeclaration(declaration: ts.Declaration): ts.ImportDeclaration | undefined {\n let current: ts.Node = declaration;\n while (!ts.isSourceFile(current)) {\n if (ts.isImportDeclaration(current)) return current;\n current = current.parent;\n }\n return undefined;\n}\n\nfunction declarationToId(declaration: ts.Declaration, filePath: string): string | undefined {\n if (ts.isFunctionDeclaration(declaration)) {\n return symbolId(\"function\", filePath, declaration.name?.text ?? \"default\");\n }\n if (ts.isClassDeclaration(declaration)) {\n return symbolId(\"class\", filePath, declaration.name?.text ?? \"default\");\n }\n if (ts.isMethodDeclaration(declaration)) {\n const parent = declaration.parent;\n const parentName =\n ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent)\n ? (parent.name?.text ?? \"default\")\n : \"anonymous\";\n return symbolId(\n \"method\",\n filePath,\n propertyNameText(declaration.name) ?? \"anonymous\",\n parentName,\n );\n }\n if (ts.isVariableDeclaration(declaration)) {\n const name = getDeclarationName(declaration);\n const kind: SymbolKind =\n declaration.initializer &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer))\n ? \"function\"\n : \"variable\";\n return symbolId(kind, filePath, name);\n }\n if (ts.isInterfaceDeclaration(declaration))\n return symbolId(\"interface\", filePath, declaration.name.text);\n if (ts.isTypeAliasDeclaration(declaration))\n return symbolId(\"type-alias\", filePath, declaration.name.text);\n return undefined;\n}\n\nfunction isReferenceIdentifier(node: ts.Identifier): boolean {\n const parent = node.parent;\n if (\n (parent as ts.NamedDeclaration).name === node ||\n ts.isImportSpecifier(parent) ||\n ts.isImportClause(parent) ||\n ts.isNamespaceImport(parent) ||\n ts.isExportSpecifier(parent) ||\n ts.isBindingElement(parent) ||\n (ts.isPropertyAccessExpression(parent) && parent.name === node) ||\n (ts.isPropertyAssignment(parent) && parent.name === node) ||\n (ts.isPropertySignature(parent) && parent.name === node) ||\n (ts.isPropertyDeclaration(parent) && parent.name === node) ||\n (ts.isMethodDeclaration(parent) && parent.name === node)\n ) {\n return false;\n }\n return true;\n}\n\nfunction expressionFallbackId(expression: ts.Expression): string | undefined {\n if (ts.isIdentifier(expression)) return externalId(\"unresolved\", expression.text);\n if (ts.isPropertyAccessExpression(expression)) {\n return externalId(\"unresolved\", expression.name.text);\n }\n return undefined;\n}\n\nfunction leftMostIdentifierNode(expression: ts.Expression): ts.Identifier | undefined {\n let current = expression;\n while (ts.isPropertyAccessExpression(current)) current = current.expression;\n return ts.isIdentifier(current) ? current : undefined;\n}\n\nexport function extractFileStructure(context: AnalysisContext): Pick<\n FileRecord,\n \"imports\" | \"exports\" | \"env\" | \"operations\"\n> & {\n diagnostics: DiagnosticRecord[];\n relations: RelationRecord[];\n} {\n const imports: ImportRecord[] = [];\n const exports: ExportRecord[] = [];\n const env = new Set<string>();\n const operations: ExternalOperation[] = [];\n const diagnostics: DiagnosticRecord[] = [];\n const relations: RelationRecord[] = [];\n const importedModules = new Map<string, string>();\n\n for (const statement of context.sourceFile.statements) {\n if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {\n const rawSource = statement.moduleSpecifier.text;\n const source = sanitizeModuleSpecifier(rawSource);\n const specifiers = importSpecifiers(statement);\n for (const specifier of specifiers) importedModules.set(specifier.local, source);\n const resolved = resolveImport(context, rawSource);\n imports.push({\n source,\n specifiers,\n ...(resolved.path ? { resolved: resolved.path } : {}),\n external: resolved.external,\n kind: \"esm\",\n line: nodeLine(context.sourceFile, statement),\n });\n addImportRelation(context, relations, statement, source, resolved);\n if (!resolved.found && !isBuiltin(rawSource))\n diagnostics.push(unresolvedImport(context, statement, source));\n } else if (ts.isExportDeclaration(statement)) {\n extractExportDeclaration(context, statement, exports, relations);\n } else if (ts.isExportAssignment(statement)) {\n exports.push({\n name: \"default\",\n local: ts.isIdentifier(statement.expression) ? statement.expression.text : \"default\",\n default: true,\n line: nodeLine(context.sourceFile, statement),\n });\n }\n }\n\n visit(context.sourceFile, (node) => {\n if (ts.isCallExpression(node) && isRequireCall(node)) {\n const argument = node.arguments[0];\n if (!argument || !ts.isStringLiteral(argument)) return;\n const rawSource = argument.text;\n const source = sanitizeModuleSpecifier(rawSource);\n const resolved = resolveImport(context, rawSource);\n imports.push({\n source,\n specifiers: [],\n ...(resolved.path ? { resolved: resolved.path } : {}),\n external: resolved.external,\n kind: \"commonjs\",\n line: nodeLine(context.sourceFile, node),\n });\n addImportRelation(context, relations, node, source, resolved);\n if (!resolved.found && !isBuiltin(rawSource))\n diagnostics.push(unresolvedImport(context, node, source));\n }\n const envName = processEnvName(node);\n if (envName) env.add(envName);\n const operation = externalOperation(node, context.sourceFile, importedModules);\n if (operation) operations.push(operation);\n });\n\n extractCommonJsExports(context, exports);\n return {\n imports: dedupeImports(imports),\n exports: dedupeExports(exports),\n env: [...env].sort(compareText),\n operations: dedupeOperations(operations),\n diagnostics,\n relations,\n };\n}\n\nfunction importSpecifiers(statement: ts.ImportDeclaration): ImportRecord[\"specifiers\"] {\n const clause = statement.importClause;\n if (!clause) return [];\n const output: ImportRecord[\"specifiers\"] = [];\n const clauseTypeOnly = clause.phaseModifier === ts.SyntaxKind.TypeKeyword;\n if (clause.name) {\n output.push({\n imported: \"default\",\n local: clause.name.text,\n ...(clauseTypeOnly ? { typeOnly: true } : {}),\n });\n }\n const bindings = clause.namedBindings;\n if (bindings && ts.isNamespaceImport(bindings)) {\n output.push({\n imported: \"*\",\n local: bindings.name.text,\n ...(clauseTypeOnly ? { typeOnly: true } : {}),\n });\n } else if (bindings && ts.isNamedImports(bindings)) {\n for (const element of bindings.elements) {\n output.push({\n imported: element.propertyName?.text ?? element.name.text,\n local: element.name.text,\n ...(clauseTypeOnly || element.isTypeOnly ? { typeOnly: true } : {}),\n });\n }\n }\n return output.sort((a, b) => compareText(`${a.imported}:${a.local}`, `${b.imported}:${b.local}`));\n}\n\nfunction extractExportDeclaration(\n context: AnalysisContext,\n statement: ts.ExportDeclaration,\n exports: ExportRecord[],\n relations: RelationRecord[],\n): void {\n const rawSource =\n statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : undefined;\n const source = rawSource ? sanitizeModuleSpecifier(rawSource) : undefined;\n const line = nodeLine(context.sourceFile, statement);\n if (!statement.exportClause) {\n exports.push({ name: \"*\", ...(source ? { source } : {}), default: false, line });\n } else if (ts.isNamespaceExport(statement.exportClause)) {\n exports.push({\n name: statement.exportClause.name.text,\n ...(source ? { source } : {}),\n default: false,\n line,\n });\n } else {\n for (const element of statement.exportClause.elements) {\n exports.push({\n name: element.name.text,\n local: element.propertyName?.text ?? element.name.text,\n ...(source ? { source } : {}),\n default: element.name.text === \"default\",\n ...(statement.isTypeOnly || element.isTypeOnly ? { typeOnly: true } : {}),\n line,\n });\n }\n }\n if (rawSource && source) {\n const resolved = resolveImport(context, rawSource);\n relations.push(\n relation(\n fileId(context.relativePath),\n \"reexports\",\n resolved.path ? fileId(resolved.path) : externalId(source),\n context,\n statement,\n resolved.found ? 1 : 0.5,\n resolved.found ? \"resolved re-export\" : \"unresolved re-export\",\n ),\n );\n }\n}\n\nfunction extractCommonJsExports(context: AnalysisContext, exports: ExportRecord[]): void {\n visit(context.sourceFile, (node) => {\n if (!ts.isBinaryExpression(node) || node.operatorToken.kind !== ts.SyntaxKind.EqualsToken)\n return;\n const left = node.left;\n const line = nodeLine(context.sourceFile, node);\n if (\n ts.isPropertyAccessExpression(left) &&\n ts.isIdentifier(left.expression) &&\n left.expression.text === \"module\" &&\n left.name.text === \"exports\"\n ) {\n exports.push({\n name: \"default\",\n ...(ts.isIdentifier(node.right) ? { local: node.right.text } : {}),\n default: true,\n line,\n });\n } else if (\n ts.isPropertyAccessExpression(left) &&\n ((ts.isIdentifier(left.expression) && left.expression.text === \"exports\") ||\n (ts.isPropertyAccessExpression(left.expression) &&\n ts.isIdentifier(left.expression.expression) &&\n left.expression.expression.text === \"module\" &&\n left.expression.name.text === \"exports\"))\n ) {\n exports.push({\n name: left.name.text,\n local: ts.isIdentifier(node.right) ? node.right.text : left.name.text,\n default: false,\n line,\n });\n }\n });\n}\n\ninterface ImportResolution {\n found: boolean;\n external: boolean;\n path?: string;\n}\n\nfunction resolveImport(context: AnalysisContext, moduleName: string): ImportResolution {\n if (isBuiltin(moduleName) || moduleName.startsWith(\"node:\"))\n return { found: true, external: true };\n const resolution = context.resolveModule?.(moduleName, context.sourceFile.fileName);\n if (!resolution) return { found: false, external: !moduleName.startsWith(\".\") };\n if (resolution.isExternalLibraryImport) return { found: true, external: true };\n if (!isPathInside(context.root, resolution.resolvedFileName)) {\n return { found: true, external: true };\n }\n const relative = relativePosix(context.root, resolution.resolvedFileName);\n if (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative)) {\n return { found: false, external: false };\n }\n return {\n found: true,\n external: false,\n path: relative,\n };\n}\n\nfunction addImportRelation(\n context: AnalysisContext,\n output: RelationRecord[],\n node: ts.Node,\n source: string,\n resolved: ImportResolution,\n): void {\n output.push(\n relation(\n fileId(context.relativePath),\n \"imports\",\n resolved.path ? fileId(resolved.path) : externalId(source),\n context,\n node,\n resolved.found ? 1 : 0.5,\n resolved.found ? \"module resolution\" : \"unresolved import text\",\n ),\n );\n}\n\nfunction unresolvedImport(\n context: AnalysisContext,\n node: ts.Node,\n source: string,\n): DiagnosticRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n code: \"unresolved-import\",\n severity: \"warning\",\n message: `Could not resolve import ${source}.`,\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n };\n}\n\nfunction processEnvName(node: ts.Node): string | undefined {\n if (\n ts.isPropertyAccessExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === \"process\" &&\n node.expression.name.text === \"env\"\n ) {\n return node.name.text;\n }\n if (\n ts.isElementAccessExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === \"process\" &&\n node.expression.name.text === \"env\" &&\n ts.isStringLiteral(node.argumentExpression)\n ) {\n return node.argumentExpression.text;\n }\n return undefined;\n}\n\nfunction externalOperation(\n node: ts.Node,\n sourceFile: ts.SourceFile,\n importedModules: Map<string, string>,\n): ExternalOperation | undefined {\n if (!ts.isCallExpression(node)) return undefined;\n let root: string | undefined;\n let api: string;\n if (ts.isIdentifier(node.expression)) {\n root = node.expression.text;\n api = root;\n } else if (ts.isPropertyAccessExpression(node.expression)) {\n root = leftMostIdentifierNode(node.expression)?.text;\n api = node.expression.getText(sourceFile);\n } else return undefined;\n const source = root ? importedModules.get(root) : undefined;\n let kind: ExternalOperation[\"kind\"] | undefined;\n if (\n root === \"fetch\" ||\n source === \"axios\" ||\n source === \"http\" ||\n source === \"https\" ||\n source?.startsWith(\"node:http\")\n )\n kind = \"http\";\n else if (source === \"fs\" || source === \"fs/promises\" || source?.startsWith(\"node:fs\"))\n kind = \"filesystem\";\n else if (source && /(?:prisma|typeorm|mongoose|sequelize|pg|mysql|database|redis)/i.test(source))\n kind = \"database\";\n else if (source && /(?:bull|queue|kafka|amqp|rabbit)/i.test(source)) kind = \"queue\";\n return kind ? { kind, api, line: nodeLine(sourceFile, node) } : undefined;\n}\n\nfunction isRequireCall(node: ts.CallExpression): boolean {\n return (\n ts.isIdentifier(node.expression) &&\n node.expression.text === \"require\" &&\n node.arguments.length > 0\n );\n}\n\nfunction dedupeImports(values: ImportRecord[]): ImportRecord[] {\n const map = new Map<string, ImportRecord>();\n for (const value of values) {\n map.set(`${value.kind}:${value.source}:${value.line}`, value);\n }\n return [...map.values()].sort((a, b) =>\n compareText(`${a.source}:${a.line}`, `${b.source}:${b.line}`),\n );\n}\n\nfunction dedupeExports(values: ExportRecord[]): ExportRecord[] {\n const map = new Map<string, ExportRecord>();\n for (const value of values) map.set(`${value.name}:${value.source ?? \"\"}:${value.line}`, value);\n return [...map.values()].sort((a, b) =>\n compareText(`${a.name}:${a.line}`, `${b.name}:${b.line}`),\n );\n}\n\nfunction dedupeOperations(values: ExternalOperation[]): ExternalOperation[] {\n const map = new Map<string, ExternalOperation>();\n for (const value of values) map.set(`${value.kind}:${value.api}:${value.line}`, value);\n return [...map.values()].sort((a, b) =>\n compareText(`${a.kind}:${a.line}:${a.api}`, `${b.kind}:${b.line}:${b.api}`),\n );\n}\n\nexport function relation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: confidence === 1 ? \"exact\" : \"heuristic\",\n analyzer: \"typescript-node\",\n },\n };\n}\n","import ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"../constants.js\";\nimport { symbolId } from \"../ids.js\";\nimport type {\n AnalysisContext,\n JsonValue,\n SourceRange,\n SymbolKind,\n SymbolRecord,\n} from \"../types.js\";\nimport { redactAbsolutePathsInText } from \"../utils/path.js\";\n\nexport function nodeRange(sourceFile: ts.SourceFile, node: ts.Node): SourceRange {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile, false));\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n return {\n startLine: start.line + 1,\n startColumn: start.character + 1,\n endLine: end.line + 1,\n endColumn: end.character + 1,\n };\n}\n\nexport function nodeLine(sourceFile: ts.SourceFile, node: ts.Node): number {\n return sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile, false)).line + 1;\n}\n\nexport function hasModifier(node: ts.Node, kind: ts.SyntaxKind): boolean {\n return Boolean(\n ts.canHaveModifiers(node) && ts.getModifiers(node)?.some((item) => item.kind === kind),\n );\n}\n\nexport function hasExportModifier(node: ts.Node): boolean {\n return hasModifier(node, ts.SyntaxKind.ExportKeyword);\n}\n\nexport function hasDefaultModifier(node: ts.Node): boolean {\n return hasModifier(node, ts.SyntaxKind.DefaultKeyword);\n}\n\nexport function getDeclarationName(node: ts.Declaration, fallback = \"default\"): string {\n const name = (node as ts.NamedDeclaration).name;\n if (name && ts.isIdentifier(name)) return name.text;\n if (name && (ts.isStringLiteral(name) || ts.isNumericLiteral(name))) return name.text;\n return fallback;\n}\n\nexport function getTopLevelDefaultExportDeclaration(\n sourceFile: ts.SourceFile,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (ts.isExportAssignment(statement) && ts.isIdentifier(statement.expression)) {\n const defaultName = statement.expression.text;\n const declaration = topLevelDeclarations(sourceFile).find(\n (item) => getDeclarationName(item, \"\") === defaultName,\n );\n if (declaration) return declaration;\n continue;\n }\n\n if (ts.isFunctionDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isClassDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isInterfaceDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isTypeAliasDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isEnumDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isVariableStatement(statement) && hasDefaultModifier(statement)) {\n const declaration = statement.declarationList.declarations.find((item) =>\n ts.isIdentifier(item.name),\n );\n return declaration;\n }\n }\n return undefined;\n}\n\nexport function hasAnyTopLevelExport(sourceFile: ts.SourceFile): boolean {\n return sourceFile.statements.some(\n (statement) => ts.isExportAssignment(statement) || hasExportModifier(statement),\n );\n}\n\nfunction topLevelDeclarations(sourceFile: ts.SourceFile): ts.Declaration[] {\n return sourceFile.statements.flatMap((statement): ts.Declaration[] => {\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEnumDeclaration(statement)\n ) {\n return [statement];\n }\n if (ts.isVariableStatement(statement)) return [...statement.declarationList.declarations];\n return [];\n });\n}\n\nexport function getSignature(context: AnalysisContext, node: ts.Node): string | undefined {\n const type = context.checker.getTypeAtLocation(node);\n const signatures = type.getCallSignatures();\n if (signatures.length > 0) {\n return [\n ...new Set(\n signatures.map((signature) =>\n context.checker.signatureToString(\n signature,\n node,\n ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n ),\n ),\n ),\n ]\n .map(redactStringLiterals)\n .join(\" | \");\n }\n if (ts.isClassDeclaration(node)) {\n return compactText(node.getText(context.sourceFile).split(/[\\r\\n{]/, 1)[0] ?? \"\");\n }\n if (ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node)) {\n return compactText(redactStringLiterals(node.getText(context.sourceFile)));\n }\n if (ts.isVariableDeclaration(node) && node.type) {\n return `${getDeclarationName(node)}: ${compactText(node.type.getText(context.sourceFile))}`;\n }\n return undefined;\n}\n\nexport function redactStringLiterals(value: string): string {\n return value.replace(/([\"'])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/g, '\"<literal>\"');\n}\n\nexport function makeSymbol(\n context: AnalysisContext,\n node: ts.Declaration | ts.SourceFile,\n kind: SymbolKind,\n options: {\n name?: string;\n parent?: string;\n exported?: boolean;\n defaultExport?: boolean;\n signature?: string;\n facts?: Record<string, JsonValue>;\n documentation?: string;\n } = {},\n): SymbolRecord {\n const name = options.name ?? (ts.isSourceFile(node) ? \"default\" : getDeclarationName(node));\n // Documentation is accepted only from an explicitly configured enricher. The base\n // scanner does not persist arbitrary JSDoc/source prose.\n const documentation = options.documentation;\n const signature =\n options.signature ?? (ts.isSourceFile(node) ? undefined : getSignature(context, node));\n const safeSignature = signature ? redactAbsolutePathsInText(signature, context.root) : undefined;\n const safeDocumentation = documentation\n ? redactAbsolutePathsInText(documentation, context.root)\n : undefined;\n return {\n schemaVersion: SCHEMA_VERSION,\n id: symbolId(kind, context.relativePath, name, options.parent),\n name,\n kind,\n file: context.relativePath,\n range: nodeRange(context.sourceFile, node),\n exported: options.exported ?? (!ts.isSourceFile(node) && hasExportModifier(node)),\n ...((options.defaultExport ?? (!ts.isSourceFile(node) && hasDefaultModifier(node)))\n ? { defaultExport: true }\n : {}),\n ...(safeSignature ? { signature: compactText(safeSignature) } : {}),\n ...(safeDocumentation ? { documentation: compactText(safeDocumentation) } : {}),\n facts: options.facts ?? {},\n sourceHash: context.sourceHash,\n };\n}\n\nexport function compactText(value: string, maxLength = 500): string {\n const compact = value.replace(/\\s+/g, \" \").trim();\n return compact.length > maxLength ? `${compact.slice(0, maxLength - 1)}…` : compact;\n}\n\nexport function visit(node: ts.Node, callback: (node: ts.Node) => void): void {\n callback(node);\n node.forEachChild((child) => visit(child, callback));\n}\n\nexport function decoratorName(decorator: ts.Decorator): string | undefined {\n const expression = decorator.expression;\n const target = ts.isCallExpression(expression) ? expression.expression : expression;\n return ts.isIdentifier(target) ? target.text : undefined;\n}\n\nexport function decoratorsOf(node: ts.Node): readonly ts.Decorator[] {\n return ts.canHaveDecorators(node) ? (ts.getDecorators(node) ?? []) : [];\n}\n\nexport function literalText(expression: ts.Expression | undefined): string | undefined {\n return expression &&\n (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression))\n ? expression.text\n : undefined;\n}\n\nexport function identifierText(expression: ts.Expression | undefined): string | undefined {\n return expression && ts.isIdentifier(expression) ? expression.text : undefined;\n}\n\nexport function propertyNameText(name: ts.PropertyName | undefined): string | undefined {\n if (!name) return undefined;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))\n return name.text;\n return undefined;\n}\n","import ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"../constants.js\";\nimport { routeId, symbolId } from \"../ids.js\";\nimport type {\n AnalysisContribution,\n AnalysisContext,\n FrameworkAnalyzer,\n RelationRecord,\n} from \"../types.js\";\nimport {\n compactText,\n decoratorsOf,\n hasDefaultModifier,\n hasExportModifier,\n makeSymbol,\n nodeLine,\n nodeRange,\n} from \"./helpers.js\";\n\nconst METHOD_DECORATORS = new Set([\n \"Get\",\n \"Post\",\n \"Put\",\n \"Patch\",\n \"Delete\",\n \"Head\",\n \"Options\",\n \"All\",\n]);\nconst NEST_DECORATORS = new Set([\n \"Module\",\n \"Controller\",\n \"Injectable\",\n \"Guard\",\n \"UseGuards\",\n \"Body\",\n \"Param\",\n ...METHOD_DECORATORS,\n]);\n\ninterface ImportAliasMap {\n named: Record<string, string>;\n namespaces: Set<string>;\n}\n\ninterface ModuleMetadata {\n controllers: string[];\n providers: string[];\n imports: string[];\n exports: string[];\n}\n\nconst registeredNestJsAnalyzers = new WeakSet();\n\nexport class NestJsAnalyzer implements FrameworkAnalyzer {\n readonly name = \"nestjs\";\n readonly version = \"0.1.0-experimental\";\n\n constructor() {\n registeredNestJsAnalyzers.add(this);\n }\n\n supports(context: AnalysisContext): boolean {\n if (!context.relativePath.endsWith(\".ts\")) return false;\n return hasAnyNestImport(context.sourceFile) || containsReferencedBodyDto(context);\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const symbols: AnalysisContribution[\"symbols\"] = [];\n const relations: RelationRecord[] = [];\n const bodyDtoSymbolIds = collectBodyDtoSymbolIds(context);\n\n const aliases = collectImportAliases(context.sourceFile);\n const moduleMembership = collectModuleMembership(context);\n\n for (const statement of context.sourceFile.statements) {\n if (!ts.isClassDeclaration(statement) || !statement.name) continue;\n\n const className = statement.name.text;\n const decoratorNames = collectDecoratorNames(decoratorsOf(statement), aliases);\n const kind = classifyClass(\n className,\n decoratorNames,\n symbolId(\"dto\", context.relativePath, className),\n bodyDtoSymbolIds,\n );\n\n if (kind === \"dto\") {\n symbols.push(\n makeSymbol(context, statement, \"dto\", {\n name: className,\n exported: hasExportModifier(statement),\n defaultExport: hasDefaultModifier(statement),\n facts: {\n name: className.toLowerCase(),\n kind: \"dto\",\n },\n }),\n );\n continue;\n }\n\n if (!kind) continue;\n\n const symbol = makeSymbol(context, statement, kind, {\n name: className,\n exported: hasExportModifier(statement),\n defaultExport: hasDefaultModifier(statement),\n facts: {\n name: className.toLowerCase(),\n kind,\n },\n });\n symbols.push(symbol);\n\n if (kind === \"nest-module\") {\n const metadata = collectModuleMetadata(statement, aliases);\n if (metadata.controllers.length > 0) {\n symbol.facts.controllers = compactText(metadata.controllers.join(\",\"));\n for (const controller of metadata.controllers) {\n const controllerId = resolveLocalClassId(context, controller, \"nest-controller\");\n if (!controllerId) continue;\n relations.push(\n makeRelation(\n symbol.id,\n \"contains\",\n controllerId,\n context,\n statement,\n 1,\n \"module controller\",\n ),\n );\n }\n }\n if (metadata.providers.length > 0) {\n symbol.facts.providers = compactText(metadata.providers.join(\",\"));\n for (const provider of metadata.providers) {\n const providerId = resolveLocalClassId(context, provider, \"nest-provider\");\n if (!providerId) continue;\n relations.push(\n makeRelation(\n symbol.id,\n \"contains\",\n providerId,\n context,\n statement,\n 1,\n \"module provider\",\n ),\n );\n }\n }\n if (metadata.imports.length > 0) {\n symbol.facts.imports = compactText(metadata.imports.join(\",\"));\n }\n if (metadata.exports.length > 0) {\n symbol.facts.exports = compactText(metadata.exports.join(\",\"));\n }\n }\n\n if (kind === \"nest-controller\") {\n const baseRoute = collectControllerRoute(statement, aliases);\n symbol.facts.baseRoute = baseRoute;\n symbol.facts.kind = \"controller\";\n\n const controllerRoutes = collectControllerMethods(context, statement, className, aliases);\n relations.push(...controllerRoutes.relations);\n if (controllerRoutes.summary.length > 0) {\n symbol.facts.routes = compactText(controllerRoutes.summary.join(\",\"));\n }\n\n const guards = collectClassUseGuards(statement, aliases);\n if (guards.length > 0) {\n symbol.facts.guards = compactText(guards.join(\",\"));\n }\n }\n\n for (const injected of collectConstructorInjections(context, statement)) {\n relations.push(\n makeRelation(\n symbol.id,\n \"injects\",\n injected,\n context,\n statement,\n 1,\n \"constructor injection\",\n ),\n );\n }\n\n const moduleId = moduleMembership.get(className);\n if (moduleId) {\n relations.push(\n makeRelation(\n symbol.id,\n \"belongs-to-module\",\n moduleId,\n context,\n statement,\n 1,\n \"module membership\",\n ),\n );\n }\n }\n\n return { symbols, relations, frameworks: [\"nestjs\"] };\n }\n}\n\nconst nestJsSupports = NestJsAnalyzer.prototype.supports.bind(NestJsAnalyzer.prototype);\nconst nestJsAnalyze = NestJsAnalyzer.prototype.analyze.bind(NestJsAnalyzer.prototype);\n\n/** Return immutable canonical methods only for an unmodified, directly constructed instance. */\nexport function trustedNestJsAnalyzerMethods(analyzer: FrameworkAnalyzer):\n | {\n supports(context: AnalysisContext): boolean;\n analyze(context: AnalysisContext): AnalysisContribution | Promise<AnalysisContribution>;\n }\n | undefined {\n if (!registeredNestJsAnalyzers.has(analyzer)) return undefined;\n if (Object.getPrototypeOf(analyzer) !== NestJsAnalyzer.prototype) return undefined;\n if (Object.hasOwn(analyzer, \"supports\") || Object.hasOwn(analyzer, \"analyze\")) {\n return undefined;\n }\n const name = Object.getOwnPropertyDescriptor(analyzer, \"name\");\n const version = Object.getOwnPropertyDescriptor(analyzer, \"version\");\n if (name?.value !== \"nestjs\" || version?.value !== \"0.1.0-experimental\") return undefined;\n return {\n supports: (context) => nestJsSupports(context),\n analyze: (context) => nestJsAnalyze(context),\n };\n}\n\nexport default NestJsAnalyzer;\n\nfunction hasAnyNestImport(sourceFile: ts.SourceFile): boolean {\n return sourceFile.statements.some(\n (statement) =>\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n statement.moduleSpecifier.text.startsWith(\"@nestjs/\"),\n );\n}\n\nfunction collectImportAliases(sourceFile: ts.SourceFile): ImportAliasMap {\n const aliases: ImportAliasMap = {\n named: {},\n namespaces: new Set<string>(),\n };\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))\n continue;\n if (!statement.moduleSpecifier.text.startsWith(\"@nestjs/\")) continue;\n const clause = statement.importClause;\n if (!clause || !clause.namedBindings) continue;\n if (ts.isNamespaceImport(clause.namedBindings)) {\n aliases.namespaces.add(clause.namedBindings.name.text);\n continue;\n }\n if (!ts.isNamedImports(clause.namedBindings)) continue;\n for (const item of clause.namedBindings.elements) {\n aliases.named[item.name.text] = item.propertyName ? item.propertyName.text : item.name.text;\n }\n }\n return aliases;\n}\n\nfunction classifyClass(\n className: string,\n decorators: string[],\n symbolIdValue: string,\n dtoSymbolIds: Set<string>,\n):\n | \"nest-module\"\n | \"nest-controller\"\n | \"nest-provider\"\n | \"nest-guard\"\n | \"nest-interceptor\"\n | \"nest-pipe\"\n | \"nest-filter\"\n | \"nest-gateway\"\n | \"dto\"\n | undefined {\n if (dtoSymbolIds.has(symbolIdValue)) return \"dto\";\n if (decorators.includes(\"Module\")) return \"nest-module\";\n if (decorators.includes(\"Controller\")) return \"nest-controller\";\n if (!decorators.includes(\"Injectable\")) return undefined;\n if (className.endsWith(\"Guard\")) return \"nest-guard\";\n if (className.endsWith(\"Interceptor\")) return \"nest-interceptor\";\n if (className.endsWith(\"Pipe\")) return \"nest-pipe\";\n if (className.endsWith(\"Filter\")) return \"nest-filter\";\n if (className.endsWith(\"Gateway\")) return \"nest-gateway\";\n return \"nest-provider\";\n}\n\nfunction collectDecoratorNames(\n decorators: readonly ts.Decorator[],\n aliases: ImportAliasMap,\n): string[] {\n const names: string[] = [];\n for (const decorator of decorators) {\n const name = resolveDecoratorName(decorator.expression, aliases);\n if (name && NEST_DECORATORS.has(name)) {\n names.push(name);\n }\n }\n return names;\n}\n\nfunction resolveDecoratorName(\n expression: ts.Expression,\n aliases: ImportAliasMap,\n): string | undefined {\n const target = ts.isCallExpression(expression) ? expression.expression : expression;\n if (ts.isIdentifier(target)) {\n const resolved = aliases.named[target.text];\n if (resolved) return resolved;\n return undefined;\n }\n if (ts.isPropertyAccessExpression(target) && ts.isIdentifier(target.expression)) {\n if (aliases.namespaces.has(target.expression.text)) return target.name.text;\n }\n return undefined;\n}\n\nfunction collectControllerRoute(classNode: ts.ClassDeclaration, aliases: ImportAliasMap): string {\n for (const decorator of decoratorsOf(classNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n const name = resolveDecoratorName(expression, aliases);\n if (!name) continue;\n if (name !== \"Controller\") continue;\n const arg = call.arguments[0];\n if (!arg) return \"/\";\n if (ts.isStringLiteral(arg) || ts.isNoSubstitutionTemplateLiteral(arg)) {\n const value = arg.text.trim();\n return value.startsWith(\"/\") ? value : `/${value}`;\n }\n }\n return \"/\";\n}\n\nfunction collectControllerMethods(\n context: AnalysisContext,\n controller: ts.ClassDeclaration,\n className: string,\n aliases: ImportAliasMap,\n): { relations: RelationRecord[]; summary: string[] } {\n const relations: RelationRecord[] = [];\n const summary: string[] = [];\n const baseRoute = collectControllerRoute(controller, aliases);\n\n for (const member of controller.members) {\n if (!ts.isMethodDeclaration(member) || !ts.isIdentifier(member.name)) continue;\n\n const methodName = member.name.text;\n const methodDecorators = collectDecoratorNames(decoratorsOf(member), aliases);\n const methodVerbs = methodDecorators.filter((name) => METHOD_DECORATORS.has(name));\n if (methodVerbs.length === 0) continue;\n\n const methodRoute = collectMethodRoute(member, aliases);\n const fullRoute = combineRoutes(baseRoute, methodRoute);\n\n for (const verb of methodVerbs) {\n const lower = verb.toLowerCase();\n const methodId = symbolId(\"method\", context.relativePath, methodName, className);\n relations.push(\n makeRelation(\n methodId,\n \"handles-route\",\n routeId(lower, fullRoute),\n context,\n member,\n 1,\n \"http method route\",\n ),\n );\n summary.push(`${lower} ${fullRoute}`);\n\n const dto = collectBodyDto(member, aliases, context);\n if (dto) {\n relations.push(\n makeRelation(methodId, \"consumes-dto\", dto, context, member, 1, \"dto usage\"),\n );\n }\n }\n }\n\n return { relations, summary: dedupe(summary) };\n\n function collectMethodRoute(\n methodNode: ts.MethodDeclaration,\n aliasesMap: ImportAliasMap,\n ): string {\n for (const decorator of decoratorsOf(methodNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n const name = resolveDecoratorName(expression, aliasesMap);\n if (!name) continue;\n if (!METHOD_DECORATORS.has(name)) continue;\n const arg = call.arguments[0];\n if (!arg) return \"/\";\n if (ts.isStringLiteral(arg) || ts.isNoSubstitutionTemplateLiteral(arg)) {\n const route = arg.text.trim();\n return route.startsWith(\"/\") ? route : `/${route}`;\n }\n }\n return \"/\";\n }\n}\n\nfunction collectBodyDto(\n method: ts.MethodDeclaration,\n aliases: ImportAliasMap,\n context: AnalysisContext,\n): string | undefined {\n return collectBodyDtoFromMethod(method, aliases, context);\n}\n\nfunction collectBodyDtoSymbolIds(context: AnalysisContext): Set<string> {\n const ids = new Set<string>();\n for (const source of context.program\n .getSourceFiles()\n .filter((source) => !source.isDeclarationFile)) {\n if (!hasAnyNestImport(source)) continue;\n const sourceRelative = relativeFromAbsolute(context.root, source.fileName);\n if (!sourceRelative) continue;\n const aliases = collectImportAliases(source);\n for (const statement of source.statements) {\n if (!ts.isClassDeclaration(statement)) continue;\n for (const member of statement.members) {\n if (!ts.isMethodDeclaration(member)) continue;\n const dtoId = collectBodyDtoFromMethod(member, aliases, context);\n if (dtoId) ids.add(dtoId);\n }\n }\n }\n return ids;\n}\n\nfunction collectBodyDtoFromMethod(\n method: ts.MethodDeclaration,\n aliases: ImportAliasMap,\n context: AnalysisContext,\n): string | undefined {\n const param = method.parameters.find((item) => hasDecorator(item, \"Body\", aliases));\n if (!param?.type || !ts.isTypeReferenceNode(param.type) || !ts.isIdentifier(param.type.typeName))\n return undefined;\n\n const declaration = resolveIdentifierDeclaration(context, param.type.typeName);\n if (!declaration || !ts.isClassDeclaration(declaration) || !declaration.name) return undefined;\n const relative = relativeFromRoot(context, declaration.getSourceFile().fileName);\n if (!relative) return undefined;\n\n return symbolId(\"dto\", relative, declaration.name.text);\n}\n\nfunction containsReferencedBodyDto(context: AnalysisContext): boolean {\n const dtoIds = collectBodyDtoSymbolIds(context);\n return context.sourceFile.statements.some(\n (statement) =>\n ts.isClassDeclaration(statement) &&\n statement.name !== undefined &&\n dtoIds.has(symbolId(\"dto\", context.relativePath, statement.name.text)),\n );\n}\n\nfunction resolveIdentifierDeclaration(\n context: AnalysisContext,\n identifier: ts.Identifier,\n): ts.Declaration | undefined {\n let symbol = context.checker.getSymbolAtLocation(identifier);\n if (!symbol) return undefined;\n if ((symbol.flags & ts.SymbolFlags.Alias) !== 0) {\n symbol = context.checker.getAliasedSymbol(symbol);\n }\n return symbol.valueDeclaration ?? symbol.declarations?.[0];\n}\n\nfunction resolveLocalClassId(\n context: AnalysisContext,\n localName: string,\n kind: \"nest-controller\" | \"nest-provider\",\n): string | undefined {\n const identifier = findTopLevelIdentifier(context.sourceFile, localName);\n if (!identifier) return undefined;\n const declaration = resolveIdentifierDeclaration(context, identifier);\n if (!declaration || !ts.isClassDeclaration(declaration) || !declaration.name) return undefined;\n const relative = relativeFromRoot(context, declaration.getSourceFile().fileName);\n if (!relative) return undefined;\n return symbolId(kind, relative, declaration.name.text);\n}\n\nfunction findTopLevelIdentifier(\n sourceFile: ts.SourceFile,\n localName: string,\n): ts.Identifier | undefined {\n for (const statement of sourceFile.statements) {\n if (ts.isClassDeclaration(statement) && statement.name?.text === localName) {\n return statement.name;\n }\n if (!ts.isImportDeclaration(statement)) continue;\n const clause = statement.importClause;\n if (clause?.name?.text === localName) return clause.name;\n if (!clause?.namedBindings || !ts.isNamedImports(clause.namedBindings)) continue;\n const match = clause.namedBindings.elements.find((item) => item.name.text === localName);\n if (match) return match.name;\n }\n return undefined;\n}\n\nfunction relativeFromAbsolute(root: string, absolutePath: string): string | undefined {\n const normalized = absolutePath.replace(/\\\\/g, \"/\");\n const normalizedRoot = root.replace(/\\\\/g, \"/\");\n if (normalized !== normalizedRoot && !normalized.startsWith(`${normalizedRoot}/`))\n return undefined;\n const remainder = normalized.slice(normalizedRoot.length);\n return remainder.startsWith(\"/\") ? remainder.slice(1) : remainder;\n}\n\nfunction hasDecorator(\n parameter: ts.ParameterDeclaration,\n target: string,\n aliases: ImportAliasMap,\n): boolean {\n for (const decorator of decoratorsOf(parameter)) {\n const resolved = resolveDecoratorName(decorator.expression, aliases);\n if (resolved === target) return true;\n }\n return false;\n}\n\nfunction collectConstructorInjections(\n context: AnalysisContext,\n classNode: ts.ClassDeclaration,\n): string[] {\n const constructorNode = classNode.members.find(ts.isConstructorDeclaration);\n if (!constructorNode) return [];\n\n const dependencies: string[] = [];\n for (const parameter of constructorNode.parameters) {\n if (\n !parameter.type ||\n !ts.isTypeReferenceNode(parameter.type) ||\n !ts.isIdentifier(parameter.type.typeName)\n )\n continue;\n\n const declaration = resolveIdentifierDeclaration(context, parameter.type.typeName);\n if (!declaration) continue;\n const relative = relativeFromRoot(context, declaration.getSourceFile().fileName);\n if (!relative) continue;\n const targetName =\n ts.isClassDeclaration(declaration) && declaration.name\n ? declaration.name.text\n : parameter.type.typeName.text;\n dependencies.push(symbolId(\"nest-provider\", relative, targetName));\n }\n\n return dedupe(dependencies);\n}\n\nfunction collectModuleMetadata(\n classNode: ts.ClassDeclaration,\n aliases: ImportAliasMap,\n): ModuleMetadata {\n const defaults: ModuleMetadata = { controllers: [], providers: [], imports: [], exports: [] };\n for (const decorator of decoratorsOf(classNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n\n const name = resolveDecoratorName(expression, aliases);\n if (!name) continue;\n if (name !== \"Module\" || call.arguments.length === 0) continue;\n const arg = call.arguments[0];\n if (!arg || !ts.isObjectLiteralExpression(arg)) continue;\n\n for (const property of arg.properties) {\n if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property))\n continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : undefined;\n if (!propertyName) continue;\n\n if (!(propertyName in defaults)) continue;\n const assigned = ts.isPropertyAssignment(property) ? property.initializer : property.name;\n if (propertyName === \"controllers\") {\n defaults.controllers.push(...collectIdentifiers(assigned));\n }\n if (propertyName === \"providers\") {\n defaults.providers.push(...collectIdentifiers(assigned));\n }\n if (propertyName === \"imports\") {\n defaults.imports.push(...collectIdentifiers(assigned));\n }\n if (propertyName === \"exports\") {\n defaults.exports.push(...collectIdentifiers(assigned));\n }\n }\n }\n\n return {\n controllers: dedupe(defaults.controllers),\n providers: dedupe(defaults.providers),\n imports: dedupe(defaults.imports),\n exports: dedupe(defaults.exports),\n };\n}\n\nfunction collectIdentifiers(node: ts.Expression | ts.BindingName): string[] {\n if (ts.isIdentifier(node)) return [node.text];\n if (ts.isPropertyAccessExpression(node)) return [node.name.text];\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements\n .map((item) =>\n ts.isIdentifier(item)\n ? item.text\n : ts.isPropertyAccessExpression(item)\n ? item.name.text\n : undefined,\n )\n .filter((value): value is string => Boolean(value));\n }\n return [];\n}\n\nfunction collectModuleMembership(context: AnalysisContext): Map<string, string> {\n const mapping = new Map<string, string>();\n for (const source of context.program.getSourceFiles().filter((file) => !file.isDeclarationFile)) {\n const aliases = collectImportAliases(source);\n for (const statement of source.statements) {\n if (!ts.isClassDeclaration(statement) || !statement.name) continue;\n const decorators = collectDecoratorNames(decoratorsOf(statement), aliases);\n if (!decorators.includes(\"Module\")) continue;\n\n const metadata = collectModuleMetadata(statement, aliases);\n const moduleId = symbolId(\n \"nest-module\",\n relativeFromRoot(context, source.fileName) ?? context.relativePath,\n statement.name.text,\n );\n for (const child of [...metadata.controllers, ...metadata.providers]) {\n mapping.set(child, moduleId);\n }\n }\n }\n\n return mapping;\n}\n\nfunction collectClassUseGuards(classNode: ts.ClassDeclaration, aliases: ImportAliasMap): string[] {\n const names: string[] = [];\n for (const decorator of decoratorsOf(classNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n const name = resolveDecoratorName(expression, aliases);\n if (!name) continue;\n if (name !== \"UseGuards\") continue;\n for (const arg of call.arguments) {\n if (ts.isIdentifier(arg)) names.push(arg.text);\n }\n }\n return dedupe(names);\n}\n\nfunction dedupe(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction combineRoutes(base: string, child: string): string {\n const segments = [base, child].map((value) => value.replace(/^\\/+|\\/+$/g, \"\")).filter(Boolean);\n return segments.length > 0 ? `/${segments.join(\"/\")}` : \"/\";\n}\n\nfunction makeRelation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: confidence === 1 ? \"framework-derived\" : \"heuristic\",\n analyzer: \"nestjs\",\n },\n };\n}\n\nfunction relativeFromRoot(context: AnalysisContext, absolutePath: string): string | undefined {\n const normalized = absolutePath.replace(/\\\\/g, \"/\");\n const root = context.root.replace(/\\\\/g, \"/\");\n if (normalized !== root && !normalized.startsWith(`${root}/`)) return undefined;\n const remainder = normalized.slice(root.length);\n return remainder.startsWith(\"/\") ? remainder.slice(1) : remainder;\n}\n","import path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"../constants.js\";\nimport { symbolId } from \"../ids.js\";\nimport type {\n AnalysisContribution,\n AnalysisContext,\n FrameworkAnalyzer,\n RelationRecord,\n} from \"../types.js\";\nimport {\n compactText,\n getDeclarationName,\n getTopLevelDefaultExportDeclaration,\n hasAnyTopLevelExport,\n makeSymbol,\n nodeLine,\n nodeRange,\n} from \"./helpers.js\";\n\nconst ROUTE_GROUP_SEGMENT = /^\\(.*\\)$/;\nconst ROUTE_METHODS = new Set([\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\", \"OPTIONS\"]);\nconst APP_FILES_EXTENSIONS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\"]);\n\ntype NextRouter = \"app\" | \"pages\";\ntype NextKind = \"page\" | \"layout\" | \"route\" | \"special\";\n\ninterface ParsedNextRoute {\n router: NextRouter;\n kind: NextKind;\n route: string;\n name: string;\n params: string[];\n}\n\nconst registeredNextJsAnalyzers = new WeakSet();\n\nexport class NextJsAnalyzer implements FrameworkAnalyzer {\n readonly name = \"nextjs\";\n readonly version = \"0.1.0-experimental\";\n\n constructor() {\n registeredNextJsAnalyzers.add(this);\n }\n\n supports(context: AnalysisContext): boolean {\n if (!APP_FILES_EXTENSIONS.has(path.extname(context.relativePath).toLowerCase())) return false;\n return (\n context.relativePath.startsWith(\"app/\") ||\n context.relativePath.startsWith(\"pages/\") ||\n context.relativePath === \"middleware.ts\"\n );\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const sourceFile = context.sourceFile;\n const route = parseNextRoute(context.relativePath);\n const defaultExportNode = getTopLevelDefaultExportDeclaration(sourceFile);\n const hasTopLevelExport = hasAnyTopLevelExport(sourceFile);\n const symbols: AnalysisContribution[\"symbols\"] = [];\n const relations: RelationRecord[] = [];\n\n if (!route) {\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n if (route.kind === \"page\") {\n const pageFacts = pageFactsForRoute(context, route);\n const symbol = makeSymbol(context, defaultExportNode ?? sourceFile, \"next-page\", {\n name: defaultExportNode ? getDeclarationName(defaultExportNode, route.name) : route.name,\n defaultExport: Boolean(defaultExportNode),\n exported: hasTopLevelExport,\n facts: pageFacts,\n });\n symbols.push(symbol);\n\n if (route.router === \"app\") {\n for (const layout of collectContainingAppLayouts(context.relativePath, context)) {\n relations.push(\n makeRelation(\n symbol.id,\n \"uses-layout\",\n symbolId(\"next-layout\", layout, \"layout\"),\n context,\n sourceFile,\n 1,\n \"app route layout chain\",\n ),\n );\n }\n }\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n if (route.kind === \"layout\") {\n symbols.push(\n makeSymbol(context, defaultExportNode ?? sourceFile, \"next-layout\", {\n exported: hasTopLevelExport,\n defaultExport: Boolean(defaultExportNode),\n name: \"layout\",\n facts: {\n router: route.router,\n route: route.route,\n runtime: runtimeFromSource(sourceFile),\n params: route.params.join(\",\"),\n metadata: compactText(collectMetadataMarkers(sourceFile).join(\",\")),\n },\n }),\n );\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n if (route.kind === \"route\") {\n const methods = collectRouteMethods(sourceFile);\n symbols.push(\n makeSymbol(context, sourceFile, \"next-route-handler\", {\n exported: hasTopLevelExport,\n name: \"route-handler\",\n facts: {\n router: route.router,\n route: route.route,\n methods,\n runtime: runtimeFromSource(sourceFile),\n metadata: compactText(collectMetadataMarkers(sourceFile).join(\",\")),\n },\n }),\n );\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n symbols.push(\n makeSymbol(context, sourceFile, \"next-special-file\", {\n exported: hasTopLevelExport,\n name: route.name,\n facts: {\n router: route.router,\n route: route.route,\n runtime: runtimeFromSource(sourceFile),\n },\n }),\n );\n\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n}\n\nconst nextJsSupports = NextJsAnalyzer.prototype.supports.bind(NextJsAnalyzer.prototype);\nconst nextJsAnalyze = NextJsAnalyzer.prototype.analyze.bind(NextJsAnalyzer.prototype);\n\n/** Return immutable canonical methods only for an unmodified, directly constructed instance. */\nexport function trustedNextJsAnalyzerMethods(analyzer: FrameworkAnalyzer):\n | {\n supports(context: AnalysisContext): boolean;\n analyze(context: AnalysisContext): AnalysisContribution | Promise<AnalysisContribution>;\n }\n | undefined {\n if (!registeredNextJsAnalyzers.has(analyzer)) return undefined;\n if (Object.getPrototypeOf(analyzer) !== NextJsAnalyzer.prototype) return undefined;\n if (Object.hasOwn(analyzer, \"supports\") || Object.hasOwn(analyzer, \"analyze\")) {\n return undefined;\n }\n const name = Object.getOwnPropertyDescriptor(analyzer, \"name\");\n const version = Object.getOwnPropertyDescriptor(analyzer, \"version\");\n if (name?.value !== \"nextjs\" || version?.value !== \"0.1.0-experimental\") return undefined;\n return {\n supports: (context) => nextJsSupports(context),\n analyze: (context) => nextJsAnalyze(context),\n };\n}\n\nexport default NextJsAnalyzer;\n\nfunction parseNextRoute(relativePath: string): ParsedNextRoute | undefined {\n const normalized = relativePath.replace(/\\\\/g, \"/\");\n if (!normalized.startsWith(\"app/\") && !normalized.startsWith(\"pages/\")) return undefined;\n\n const router: NextRouter = normalized.startsWith(\"app/\") ? \"app\" : \"pages\";\n const segments = normalized.split(\"/\").filter(Boolean);\n const fileName = segments.at(-1);\n if (!fileName) return undefined;\n const fileBase = fileName.replace(/\\.(ts|tsx|js|jsx)$/, \"\");\n\n if (router === \"app\") {\n const routeSegments = segments.slice(1, -1);\n const baseRoute = buildRouteFromSegments(routeSegments);\n\n if (fileBase === \"layout\") {\n return {\n router,\n kind: \"layout\",\n route: baseRoute,\n name: \"layout\",\n params: dynamicSegmentNames(routeSegments),\n };\n }\n\n if (fileBase === \"page\") {\n return {\n router,\n kind: \"page\",\n route: baseRoute,\n name: baseRoute.split(\"/\")[baseRoute.split(\"/\").length - 1] || \"page\",\n params: dynamicSegmentNames(routeSegments),\n };\n }\n\n if (fileBase === \"route\") {\n return {\n router,\n kind: \"route\",\n route: baseRoute,\n name: \"route\",\n params: dynamicSegmentNames(routeSegments),\n };\n }\n\n if (fileBase.startsWith(\"_\")) {\n return {\n router,\n kind: \"special\",\n route: \"/_\" + fileBase.replace(/^_/, \"\"),\n name: fileName,\n params: [],\n };\n }\n\n return undefined;\n }\n\n const pageSegments = segments.slice(1);\n if (pageSegments.length === 0) return undefined;\n const isApi = pageSegments[0] === \"api\";\n const routeSegments = pageSegments.slice(0, pageSegments.length - 1);\n const route = `/${buildRouteFromSegments([...routeSegments, fileBase === \"index\" ? \"\" : fileBase].filter(Boolean)).replace(/^\\//, \"\")}`;\n\n return {\n router,\n kind: isApi ? \"route\" : \"page\",\n route,\n name: route.split(\"/\")[route.split(\"/\").length - 1] || \"page\",\n params: [...routeSegments, fileBase].filter(isDynamicSegment).map(stripDynamicMarkers),\n };\n}\n\nfunction pageFactsForRoute(\n context: AnalysisContext,\n route: ParsedNextRoute,\n): Record<string, string> {\n const markers = compactText(collectMetadataMarkers(context.sourceFile).join(\",\"));\n return {\n router: route.router,\n route: route.route,\n params: route.params.join(\",\"),\n runtime: runtimeFromSource(context.sourceFile),\n metadata: markers,\n };\n}\n\nfunction collectMetadataMarkers(sourceFile: ts.SourceFile): string[] {\n const facts: string[] = [];\n const addMarker = (name: string): void => {\n if (name === \"generateMetadata\") facts.push(\"generatemetadata\");\n if (name === \"getServerSideProps\") facts.push(\"getserversideprops\");\n if (name === \"getStaticProps\") facts.push(\"getstaticprops\");\n if (name === \"getStaticPaths\") facts.push(\"getstaticpaths\");\n };\n\n for (const statement of sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n addMarker(statement.name.text);\n continue;\n }\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name)) addMarker(declaration.name.text);\n }\n }\n }\n return [...new Set(facts)];\n}\n\nfunction collectRouteMethods(sourceFile: ts.SourceFile): string {\n const methods = new Set<string>();\n\n const addFromDeclaration = (name: string | undefined): void => {\n if (!name) return;\n const normalized = name.toUpperCase();\n if (ROUTE_METHODS.has(normalized)) methods.add(normalized.toLowerCase());\n };\n\n for (const statement of sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n addFromDeclaration(statement.name.text);\n continue;\n }\n\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue;\n if (isFunctionLikeExpression(declaration.initializer)) {\n addFromDeclaration(declaration.name.text);\n }\n }\n }\n\n return [...methods].join(\",\");\n}\n\nfunction isFunctionLikeExpression(\n node: ts.Expression | undefined,\n): node is ts.ArrowFunction | ts.FunctionExpression {\n return node !== undefined && (ts.isArrowFunction(node) || ts.isFunctionExpression(node));\n}\n\nfunction runtimeFromSource(sourceFile: ts.SourceFile): string {\n if (hasDirective(sourceFile, \"use client\")) return \"client\";\n if (hasDirective(sourceFile, \"use server\")) return \"server\";\n return \"server\";\n}\n\nfunction hasDirective(sourceFile: ts.SourceFile, directive: string): boolean {\n return sourceFile.statements\n .slice(0, 8)\n .some(\n (statement) =>\n ts.isExpressionStatement(statement) &&\n ts.isStringLiteral(statement.expression) &&\n statement.expression.text === directive,\n );\n}\n\nfunction collectContainingAppLayouts(relativePath: string, context: AnalysisContext): string[] {\n const fileSegments = relativePath.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean);\n if (fileSegments[0] !== \"app\") return [];\n\n const layoutSegments = fileSegments.slice(1, -1);\n const candidates: string[] = [];\n for (let index = 0; index <= layoutSegments.length; index += 1) {\n const prefix = layoutSegments.slice(0, index);\n const candidateWithoutExt = [\"app\", ...prefix, \"layout\"].join(\"/\");\n const tsx = `${candidateWithoutExt}.tsx`;\n const ts = `${candidateWithoutExt}.ts`;\n if (programContainsSourceFile(context, tsx)) candidates.push(tsx);\n if (programContainsSourceFile(context, ts)) candidates.push(ts);\n }\n return candidates;\n}\n\nfunction programContainsSourceFile(context: AnalysisContext, candidateRelative: string): boolean {\n const absolute = path.resolve(context.root, candidateRelative);\n return context.program\n .getSourceFiles()\n .some((source) => normalizeSourcePath(source.fileName) === normalizeSourcePath(absolute));\n}\n\nfunction normalizeSourcePath(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction isDynamicSegment(segment: string): boolean {\n return /^\\[{1,2}\\.?.*\\]$/.test(segment);\n}\n\nfunction dynamicSegmentNames(segments: string[]): string[] {\n return segments.filter(isDynamicSegment).map(stripDynamicMarkers);\n}\n\nfunction stripDynamicMarkers(segment: string): string {\n return segment.replace(/^\\[\\[?\\.*/g, \"\").replace(/\\]$/g, \"\");\n}\n\nfunction buildRouteFromSegments(segments: string[]): string {\n const cleaned = segments\n .filter(Boolean)\n .filter((segment) => !ROUTE_GROUP_SEGMENT.test(segment))\n .map((segment) => segment);\n return `/${cleaned.length > 0 ? cleaned.join(\"/\") : \"\"}`;\n}\n\nfunction makeRelation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: confidence === 1 ? \"framework-derived\" : \"heuristic\",\n analyzer: \"nextjs\",\n },\n };\n}\n","import path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { ANALYZER_VERSION, SCHEMA_VERSION } from \"../constants.js\";\nimport { symbolId } from \"../ids.js\";\nimport type {\n AnalysisContribution,\n AnalysisContext,\n FrameworkAnalyzer,\n RelationRecord,\n} from \"../types.js\";\nimport { isPathInside, relativePosix } from \"../utils/path.js\";\nimport {\n compactText,\n hasDefaultModifier,\n hasExportModifier,\n makeSymbol,\n nodeLine,\n nodeRange,\n propertyNameText,\n redactStringLiterals,\n} from \"./helpers.js\";\n\nconst REACT_EXTENSIONS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\"]);\nconst REACT_BUILTIN_HOOKS = new Set([\n \"useState\",\n \"useReducer\",\n \"useMemo\",\n \"useCallback\",\n \"useEffect\",\n \"useLayoutEffect\",\n \"useContext\",\n]);\nconst REACT_FACTORYS = new Set([\"memo\", \"forwardRef\"]);\n\ninterface ImportProfile {\n hookAliases: Map<string, string>;\n namespaceAliases: Set<string>;\n localImports: Map<string, { source: string; imported: string }>;\n}\n\ninterface ComponentDescriptor {\n name: string;\n id: string;\n body: ts.ConciseBody;\n}\n\ninterface NamedSyntaxCandidate {\n name: string;\n node: ts.Node;\n}\n\nexport class ReactAnalyzer implements FrameworkAnalyzer {\n readonly name = \"react\";\n readonly version = ANALYZER_VERSION;\n\n supports(context: AnalysisContext): boolean {\n const extension = path.extname(context.relativePath).toLowerCase();\n if (!REACT_EXTENSIONS.has(extension)) return false;\n return (\n hasDirective(context.sourceFile, \"use client\") ||\n hasDirective(context.sourceFile, \"use server\") ||\n hasReactImport(context.sourceFile) ||\n hasAnyJsx(context.sourceFile)\n );\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const profile = collectImportProfile(context.sourceFile);\n const symbols: AnalysisContribution[\"symbols\"] = [];\n const relations: RelationRecord[] = [];\n const componentIds = new Map<string, string>();\n const hookIds = new Map<string, string>();\n const components: ComponentDescriptor[] = [];\n\n for (const statement of context.sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n const name = statement.name.text;\n if (isCustomHookName(name) && statement.body) {\n const symbol = makeSymbol(context, statement, \"react-hook\", {\n name,\n exported: isNameExported(context.sourceFile, statement),\n defaultExport: hasDefaultModifier(statement),\n facts: { runtime: inferRuntime(context.sourceFile) },\n });\n symbols.push(symbol);\n hookIds.set(name.toLowerCase(), symbol.id);\n continue;\n }\n if (statement.body && isComponentName(name, statement.body)) {\n const facts = collectComponentFacts(\n context,\n name,\n statement.parameters,\n statement.body,\n profile,\n );\n const symbol = makeSymbol(context, statement, \"react-component\", {\n name,\n exported: isNameExported(context.sourceFile, statement),\n defaultExport: hasDefaultModifier(statement),\n facts,\n });\n symbols.push(symbol);\n componentIds.set(name.toLowerCase(), symbol.id);\n components.push({ name, id: symbol.id, body: statement.body });\n continue;\n }\n }\n\n if (ts.isVariableStatement(statement)) {\n const exported = isNameExported(context.sourceFile, statement);\n const defaultExport = hasDefaultModifier(statement);\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue;\n const name = declaration.name.text;\n\n if (isContextFactory(declaration.initializer, profile)) {\n symbols.push(\n makeSymbol(context, declaration, \"react-context\", {\n name,\n exported,\n defaultExport,\n facts: { runtime: inferRuntime(context.sourceFile), type: \"react-context\" },\n }),\n );\n continue;\n }\n\n if (isCustomHookName(name) && isFunctionLikeExpression(declaration.initializer)) {\n const body = functionBody(declaration.initializer);\n if (body) {\n const symbol = makeSymbol(context, declaration, \"react-hook\", {\n name,\n exported,\n defaultExport,\n facts: { runtime: inferRuntime(context.sourceFile) },\n });\n symbols.push(symbol);\n hookIds.set(name.toLowerCase(), symbol.id);\n }\n continue;\n }\n\n const extracted = extractComponentFromExpression(declaration.initializer, name, profile);\n if (!extracted) continue;\n\n const facts = collectComponentFacts(\n context,\n name,\n extracted.parameters,\n extracted.body,\n profile,\n );\n const symbol = makeSymbol(context, declaration, \"react-component\", {\n name,\n exported,\n defaultExport,\n facts,\n });\n symbols.push(symbol);\n componentIds.set(name.toLowerCase(), symbol.id);\n components.push({ name, id: symbol.id, body: extracted.body });\n }\n }\n\n if (ts.isClassDeclaration(statement) && statement.name && isReactClassComponent(statement)) {\n const name = statement.name.text;\n const renderMethod = statement.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) &&\n ts.isIdentifier(member.name) &&\n member.name.text === \"render\" &&\n Boolean(member.body),\n );\n if (!renderMethod?.body) continue;\n const symbol = makeSymbol(context, statement, \"react-component\", {\n name,\n exported: isNameExported(context.sourceFile, statement),\n defaultExport: hasDefaultModifier(statement),\n facts: { runtime: inferRuntime(context.sourceFile), class: true },\n });\n symbols.push(symbol);\n componentIds.set(name.toLowerCase(), symbol.id);\n components.push({ name, id: symbol.id, body: renderMethod.body });\n }\n }\n\n for (const component of components) {\n const rendered = collectRenderedComponents(component.body);\n for (const candidate of rendered) {\n const to =\n componentIds.get(candidate.name.toLowerCase()) ??\n resolveReactCandidateWithChecker(context, candidate, \"react-component\") ??\n resolveImportedReactComponent(context, profile, candidate.name) ??\n symbolId(\"react-component\", context.relativePath, candidate.name);\n relations.push(\n makeRelation(component.id, \"renders\", to, context, candidate.node, 0.95, \"JSX render\"),\n );\n }\n\n for (const candidate of collectCalledCustomHooks(component.body, profile)) {\n const to =\n hookIds.get(candidate.name.toLowerCase()) ??\n resolveReactCandidateWithChecker(context, candidate, \"react-hook\") ??\n resolveImportedReactSymbol(context, profile, candidate.name, \"react-hook\") ??\n symbolId(\"react-hook\", context.relativePath, candidate.name);\n relations.push(\n makeRelation(\n component.id,\n \"uses-hook\",\n to,\n context,\n candidate.node,\n 0.95,\n \"custom hook call\",\n ),\n );\n }\n }\n\n return { symbols, relations, frameworks: [\"react\"] };\n }\n}\n\nexport default ReactAnalyzer;\n\nfunction hasReactImport(sourceFile: ts.SourceFile): boolean {\n return sourceFile.statements.some(\n (statement) =>\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n statement.moduleSpecifier.text === \"react\",\n );\n}\n\nfunction hasDirective(sourceFile: ts.SourceFile, value: string): boolean {\n return sourceFile.statements\n .slice(0, 8)\n .some(\n (statement) =>\n ts.isExpressionStatement(statement) &&\n ts.isStringLiteral(statement.expression) &&\n statement.expression.text === value,\n );\n}\n\nfunction hasAnyJsx(sourceFile: ts.SourceFile): boolean {\n let found = false;\n visit(sourceFile, (node) => {\n if (found) return;\n if (\n ts.isJsxElement(node) ||\n ts.isJsxSelfClosingElement(node) ||\n ts.isJsxOpeningElement(node) ||\n ts.isJsxFragment(node)\n ) {\n found = true;\n }\n });\n return found;\n}\n\nfunction inferRuntime(sourceFile: ts.SourceFile): string {\n if (hasDirective(sourceFile, \"use client\")) return \"client\";\n if (hasDirective(sourceFile, \"use server\")) return \"server\";\n return \"unclassified\";\n}\n\nfunction isNameExported(sourceFile: ts.SourceFile, node: ts.Node): boolean {\n return hasExportModifier(node);\n}\n\nfunction collectImportProfile(sourceFile: ts.SourceFile): ImportProfile {\n const hookAliases = new Map<string, string>();\n const namespaceAliases = new Set<string>();\n const localImports = new Map<string, { source: string; imported: string }>();\n\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))\n continue;\n const source = statement.moduleSpecifier.text;\n const clause = statement.importClause;\n if (!clause) continue;\n\n if (source === \"react\") {\n if (clause.name) {\n hookAliases.set(clause.name.text, clause.name.text);\n localImports.set(clause.name.text, { source, imported: \"default\" });\n }\n if (!clause.namedBindings) continue;\n if (ts.isNamespaceImport(clause.namedBindings)) {\n namespaceAliases.add(clause.namedBindings.name.text);\n continue;\n }\n for (const item of clause.namedBindings.elements) {\n const local = item.name.text;\n const imported = item.propertyName?.text ?? item.name.text;\n hookAliases.set(local, imported);\n localImports.set(local, { source, imported });\n }\n continue;\n }\n\n if (clause.name) {\n localImports.set(clause.name.text, { source, imported: \"default\" });\n }\n if (!clause.namedBindings) continue;\n if (ts.isNamedImports(clause.namedBindings)) {\n for (const item of clause.namedBindings.elements) {\n localImports.set(item.name.text, {\n source,\n imported: item.propertyName?.text ?? item.name.text,\n });\n }\n } else if (ts.isNamespaceImport(clause.namedBindings)) {\n localImports.set(clause.namedBindings.name.text, {\n source,\n imported: \"*\",\n });\n }\n }\n\n return { hookAliases, namespaceAliases, localImports };\n}\n\nfunction isCustomHookName(name: string): boolean {\n return /^use[A-Z]/.test(name);\n}\n\nfunction isComponentName(name: string, body: ts.ConciseBody | undefined): boolean {\n return Boolean(body && isUpperCase(name) && !isCustomHookName(name) && containsJsx(body));\n}\n\nfunction isUpperCase(name: string): boolean {\n return /^[A-Z]/.test(name);\n}\n\nfunction isContextFactory(value: ts.Expression, profile: ImportProfile): boolean {\n return (\n ts.isCallExpression(value) && resolveCallName(value.expression, profile) === \"createContext\"\n );\n}\n\nfunction extractComponentFromExpression(\n value: ts.Expression,\n name: string,\n profile: ImportProfile,\n): { body: ts.ConciseBody; parameters: readonly ts.ParameterDeclaration[] } | undefined {\n if (!isUpperCase(name) || isCustomHookName(name)) return undefined;\n\n if (isFunctionLikeExpression(value)) {\n return { body: value.body, parameters: value.parameters };\n }\n\n if (ts.isClassExpression(value)) {\n const renderMethod = value.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) &&\n ts.isIdentifier(member.name) &&\n member.name.text === \"render\" &&\n Boolean(member.body),\n );\n if (!renderMethod?.body) return undefined;\n return { body: renderMethod.body, parameters: renderMethod.parameters };\n }\n\n if (ts.isCallExpression(value)) {\n const calledName = resolveCallName(value.expression, profile);\n if (!calledName || !REACT_FACTORYS.has(calledName) || value.arguments.length === 0)\n return undefined;\n const first = value.arguments[0];\n if (!ts.isFunctionLike(first) || !containsJsx(first.body)) return undefined;\n return { body: first.body, parameters: first.parameters };\n }\n\n return undefined;\n}\n\nfunction isFunctionLikeExpression(\n expression: ts.Expression,\n): expression is ts.ArrowFunction | ts.FunctionExpression {\n return ts.isArrowFunction(expression) || ts.isFunctionExpression(expression);\n}\n\nfunction isReactClassComponent(statement: ts.ClassDeclaration): boolean {\n if (!statement.heritageClauses) return false;\n return statement.heritageClauses.some((clause) =>\n clause.types.some((item) => {\n const expr = item.expression;\n const typeName = ts.isIdentifier(expr)\n ? expr.text\n : ts.isPropertyAccessExpression(expr)\n ? expr.name.text\n : undefined;\n return typeName === \"Component\" || typeName === \"PureComponent\";\n }),\n );\n}\n\nfunction functionBody(expression: ts.Expression): ts.ConciseBody | undefined {\n return isFunctionLikeExpression(expression) ? expression.body : undefined;\n}\n\nfunction collectComponentFacts(\n context: AnalysisContext,\n name: string,\n parameters: readonly ts.ParameterDeclaration[],\n body: ts.ConciseBody,\n profile: ImportProfile,\n) {\n const facts: Record<string, string> = {\n runtime: inferRuntime(context.sourceFile),\n };\n\n const props = collectProps(context, parameters[0]);\n if (props.length > 0) {\n facts.props = `${name.toLowerCase()}props:${props.join(\",\")}`;\n }\n\n const behavior = collectComponentBehavior(context, body, profile);\n if (behavior.state.length > 0) facts.state = behavior.state.join(\",\");\n if (behavior.memo.length > 0) facts.memo = behavior.memo.join(\",\");\n if (behavior.effects.length > 0) facts.effects = behavior.effects.join(\",\");\n if (behavior.customHooks.length > 0) facts.hooks = behavior.customHooks.join(\",\");\n return facts;\n}\n\nfunction collectProps(context: AnalysisContext, parameter?: ts.ParameterDeclaration): string[] {\n if (!parameter) return [];\n const values: string[] = [];\n collectBindingNames(parameter.name, values);\n if (parameter.type) {\n values.push(...collectInterfaceMembers(parameter.type, context));\n }\n return dedupe(values);\n}\n\nfunction collectComponentBehavior(\n context: AnalysisContext,\n body: ts.ConciseBody,\n profile: ImportProfile,\n): { state: string[]; memo: string[]; effects: string[]; customHooks: string[] } {\n const state: string[] = [];\n const memo: string[] = [];\n const effects: string[] = [];\n const customHooks: string[] = [];\n\n visit(body, (node) => {\n if (!ts.isCallExpression(node)) return;\n const called = resolveCallName(node.expression, profile);\n if (!called) return;\n\n const declaration = variableDeclarationOfCall(node);\n if (called === \"useState\" || called === \"useReducer\") {\n if (declaration?.name) {\n const declaredNames: string[] = [];\n collectBindingNames(declaration.name, declaredNames);\n state.push(...declaredNames);\n }\n if (called === \"useReducer\") state.push(\"reducer\");\n return;\n }\n\n if (called === \"useMemo\" || called === \"useCallback\") {\n const target =\n declaration?.name && ts.isIdentifier(declaration.name) ? declaration.name.text : called;\n const dependencies = dependencyText(node.arguments[1], context.sourceFile);\n memo.push(`${called.toLowerCase()}:${target.toLowerCase()}<-${dependencies}`);\n return;\n }\n\n if (called === \"useEffect\" || called === \"useLayoutEffect\") {\n const deps = node.arguments[1]\n ? compactText(redactStringLiterals(node.arguments[1].getText(context.sourceFile)))\n : \"[]\";\n effects.push(`useeffect:${deps}`);\n return;\n }\n\n if (called.startsWith(\"use\") && !REACT_BUILTIN_HOOKS.has(called)) {\n customHooks.push(called.toLowerCase());\n }\n });\n\n return {\n state: dedupe(state),\n memo: dedupe(memo),\n effects: dedupe(effects),\n customHooks: dedupe(customHooks),\n };\n}\n\nfunction collectCalledCustomHooks(node: ts.Node, profile: ImportProfile): NamedSyntaxCandidate[] {\n const hooks: NamedSyntaxCandidate[] = [];\n visit(node, (current) => {\n if (!ts.isCallExpression(current)) return;\n const called = resolveCallName(current.expression, profile);\n if (called && called.startsWith(\"use\") && !REACT_BUILTIN_HOOKS.has(called)) {\n hooks.push({ name: called, node: current });\n }\n });\n return hooks;\n}\n\nfunction collectRenderedComponents(node: ts.Node): NamedSyntaxCandidate[] {\n const components: NamedSyntaxCandidate[] = [];\n visit(node, (current) => {\n if (!ts.isJsxElement(current) && !ts.isJsxSelfClosingElement(current)) return;\n const evidenceNode = ts.isJsxElement(current) ? current.openingElement : current;\n const tag = jsxTagName(evidenceNode.tagName);\n if (tag && isUpperCase(tag)) {\n components.push({ name: tag, node: evidenceNode });\n }\n });\n return components;\n}\n\nfunction resolveImportedReactComponent(\n context: AnalysisContext,\n profile: ImportProfile,\n renderedName: string,\n): string | undefined {\n return resolveImportedReactSymbol(context, profile, renderedName, \"react-component\");\n}\n\nfunction resolveReactCandidateWithChecker(\n context: AnalysisContext,\n candidate: NamedSyntaxCandidate,\n kind: \"react-component\" | \"react-hook\",\n): string | undefined {\n let location: ts.Node = candidate.node;\n if (ts.isJsxOpeningElement(candidate.node) || ts.isJsxSelfClosingElement(candidate.node)) {\n location = candidate.node.tagName;\n } else if (ts.isCallExpression(candidate.node)) {\n location = candidate.node.expression;\n }\n let symbol = context.checker.getSymbolAtLocation(location);\n if (!symbol && ts.isPropertyAccessExpression(location)) {\n symbol = context.checker.getSymbolAtLocation(location.name);\n }\n if (!symbol) return undefined;\n if (symbol.flags & ts.SymbolFlags.Alias) {\n try {\n symbol = context.checker.getAliasedSymbol(symbol);\n } catch {\n return undefined;\n }\n }\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n if (!declaration) return undefined;\n const sourceFile = declaration.getSourceFile();\n let relative: string;\n try {\n relative = path.relative(context.root, sourceFile.fileName).split(path.sep).join(\"/\");\n } catch {\n return undefined;\n }\n if (\n relative === \"\" ||\n relative === \"..\" ||\n relative.startsWith(\"../\") ||\n path.isAbsolute(relative) ||\n (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative))\n ) {\n return undefined;\n }\n return symbolId(kind, relative, declarationToSymbolName(declaration) ?? symbol.getName());\n}\n\nfunction resolveImportedReactSymbol(\n context: AnalysisContext,\n profile: ImportProfile,\n importedName: string,\n kind: \"react-component\" | \"react-hook\",\n): string | undefined {\n const source = profile.localImports.get(importedName);\n if (!source) return undefined;\n if (!source.source.startsWith(\"./\") && !source.source.startsWith(\"../\")) {\n const resolved = context.resolveModule?.(source.source, context.sourceFile.fileName);\n if (!resolved) return undefined;\n if (!isPathInside(context.root, resolved.resolvedFileName)) return undefined;\n const relative = relativePosix(context.root, resolved.resolvedFileName);\n if (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative)) return undefined;\n const sourceFile = context.program.getSourceFile(resolved.resolvedFileName);\n const declaration = sourceFile\n ? findExportedDeclaration(sourceFile, source.imported)\n : undefined;\n const actualName = declaration ? declarationToSymbolName(declaration) : undefined;\n if (actualName) return symbolId(kind, relative, actualName);\n return symbolId(kind, relative, source.imported);\n }\n const relative = path.posix.normalize(\n path.posix.join(path.posix.dirname(context.relativePath), source.source),\n );\n const candidates = [\n relative,\n `${relative}.ts`,\n `${relative}.tsx`,\n `${relative}.js`,\n `${relative}.jsx`,\n `${relative}.mjs`,\n `${relative}.cjs`,\n `${relative}/index.ts`,\n `${relative}/index.tsx`,\n `${relative}/index.jsx`,\n ];\n for (const candidate of candidates) {\n const absolute = path.resolve(context.root, candidate);\n const imported = context.program.getSourceFile(absolute);\n if (imported) {\n const declaration = findExportedDeclaration(imported, source.imported);\n if (declaration) {\n const symbolName = declarationToSymbolName(declaration);\n if (symbolName) return symbolId(kind, candidate, symbolName);\n }\n if (source.imported !== \"*\") return symbolId(kind, candidate, source.imported);\n }\n }\n const fallback = source.imported === \"*\" ? importedName : source.imported;\n return symbolId(kind, relative, fallback);\n}\n\nfunction declarationToSymbolName(declaration: ts.Declaration): string | undefined {\n if (ts.isFunctionDeclaration(declaration)) return declaration.name?.text ?? \"default\";\n if (ts.isClassDeclaration(declaration)) return declaration.name?.text ?? \"default\";\n if (ts.isInterfaceDeclaration(declaration) || ts.isTypeAliasDeclaration(declaration))\n return declaration.name.text;\n if (ts.isVariableDeclaration(declaration) && ts.isIdentifier(declaration.name))\n return declaration.name.text;\n return \"default\";\n}\n\nfunction findExportedDeclaration(\n sourceFile: ts.SourceFile,\n exportedName: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n ts.isFunctionDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name?.text === exportedName)\n )\n return statement;\n if (\n ts.isClassDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name?.text === exportedName)\n )\n return statement;\n if (\n ts.isInterfaceDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name.text === exportedName)\n )\n return statement;\n if (\n ts.isTypeAliasDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name.text === exportedName)\n )\n return statement;\n if (ts.isVariableStatement(statement)) {\n const declaration =\n exportedName === \"default\"\n ? statement.declarationList.declarations.find(\n (item) => hasDefaultModifier(statement) && ts.isIdentifier(item.name),\n )\n : statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === exportedName,\n );\n if (declaration && ts.isIdentifier(declaration.name)) return declaration;\n }\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n ) {\n const specifier = statement.exportClause.elements.find(\n (item) =>\n item.name.text === exportedName ||\n (item.name.text === \"default\" && item.propertyName?.text === exportedName),\n );\n if (!specifier) continue;\n return findExportedDeclaration(\n sourceFile,\n specifier.propertyName?.text ?? specifier.name.text,\n );\n }\n if (\n ts.isExportAssignment(statement) &&\n !statement.isExportEquals &&\n ts.isIdentifier(statement.expression)\n ) {\n return findDeclarationByName(sourceFile, statement.expression.text);\n }\n }\n return undefined;\n}\n\nfunction findDeclarationByName(\n sourceFile: ts.SourceFile,\n name: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement)\n ) {\n if (statement.name?.text === name) return statement;\n }\n if (ts.isVariableStatement(statement)) {\n const declaration = statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === name,\n );\n if (declaration) return declaration;\n }\n }\n return undefined;\n}\n\nfunction dependencyText(expression: ts.Expression | undefined, sourceFile: ts.SourceFile): string {\n if (!expression || !ts.isArrayLiteralExpression(expression)) return \"[]\";\n return expression.elements\n .map((element) => compactText(redactStringLiterals(element.getText(sourceFile))))\n .join(\",\");\n}\n\nfunction resolveCallName(\n expression: ts.LeftHandSideExpression,\n profile: ImportProfile,\n): string | undefined {\n if (ts.isIdentifier(expression)) {\n return profile.hookAliases.get(expression.text) ?? expression.text;\n }\n if (\n ts.isPropertyAccessExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n profile.namespaceAliases.has(expression.expression.text)\n ) {\n return expression.name.text;\n }\n return undefined;\n}\n\nfunction variableDeclarationOfCall(node: ts.CallExpression): ts.VariableDeclaration | undefined {\n let current = node.parent as ts.Node | undefined;\n while (current) {\n if (ts.isVariableDeclaration(current)) return current;\n current = current.parent;\n }\n return undefined;\n}\n\nfunction collectBindingNames(name: ts.BindingName, values: string[]): void {\n if (ts.isIdentifier(name)) {\n values.push(name.text.toLowerCase());\n return;\n }\n if (ts.isObjectBindingPattern(name) || ts.isArrayBindingPattern(name)) {\n for (const element of name.elements) {\n if (ts.isBindingElement(element)) collectBindingNames(element.name, values);\n }\n }\n}\n\nfunction collectInterfaceMembers(typeNode: ts.TypeNode, context: AnalysisContext): string[] {\n if (ts.isTypeLiteralNode(typeNode)) {\n return typeNode.members.flatMap((member) => {\n const name = propertyNameText(member.name);\n return name ? [name.toLowerCase()] : [];\n });\n }\n\n if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {\n const symbol = context.checker.getSymbolAtLocation(typeNode.typeName);\n const resolved =\n symbol && symbol.flags & ts.SymbolFlags.Alias\n ? context.checker.getAliasedSymbol(symbol)\n : symbol;\n const declaration = resolved?.declarations?.[0];\n if (declaration && ts.isInterfaceDeclaration(declaration)) {\n return declaration.members.flatMap((member) => {\n const name = propertyNameText(member.name);\n return name ? [name.toLowerCase()] : [];\n });\n }\n }\n\n return [];\n}\n\nfunction containsJsx(node: ts.Node): boolean {\n let found = false;\n visit(node, (current) => {\n if (\n ts.isJsxElement(current) ||\n ts.isJsxSelfClosingElement(current) ||\n ts.isJsxOpeningElement(current) ||\n ts.isJsxFragment(current)\n ) {\n found = true;\n }\n });\n return found;\n}\n\nfunction jsxTagName(tag: ts.JsxTagNameExpression): string | undefined {\n if (ts.isIdentifier(tag) || ts.isStringLiteral(tag)) return tag.text;\n if (ts.isPropertyAccessExpression(tag)) return tag.name.text;\n return undefined;\n}\n\nfunction visit(node: ts.Node, callback: (node: ts.Node) => void): void {\n callback(node);\n ts.forEachChild(node, (child) => visit(child, callback));\n}\n\nfunction dedupe(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction makeRelation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: \"framework-derived\",\n analyzer: \"react\",\n },\n };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport {\n ANALYZER_VERSION,\n CONFIG_VERSION,\n CUSTOM_PRODUCER_ID,\n DEFAULT_ANALYZER_NAMES,\n DEFAULT_PRODUCER_ID,\n DEFAULT_SEMANTIC_RESOLVER,\n DEFAULT_SYNTAX_PARSER,\n PRODUCER_CONTRACT_VERSION,\n SCHEMA_VERSION,\n} from \"./constants.js\";\nimport {\n buildCompilerUnitGraph,\n semanticDirectoryListingHash,\n type CompilerUnitGraph,\n} from \"./compiler-units.js\";\nimport { effectiveFrameworks, resolveConfiguration } from \"./config.js\";\nimport {\n discoverSourceFiles,\n readPackageMetadata,\n type DiscoveredSource,\n type PackageMetadata,\n} from \"./discovery.js\";\nimport { CodeMapError } from \"./errors.js\";\nimport { TYPESCRIPT_SEMANTIC_VERSION } from \"./semantic.js\";\nimport { loadCodeMapFrom } from \"./storage.js\";\nimport type {\n CodeMap,\n FreshnessResult,\n LoadCodeMapOptions,\n ProducerRecord,\n ScanChanges,\n SemanticInputRecord,\n WorkspacePackage,\n} from \"./types.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { isPathInside, normalizeStoredPath, relativePosix } from \"./utils/path.js\";\nimport { compareText, mapLimit, stableJson } from \"./utils/stable.js\";\n\nexport async function checkFreshness(options: LoadCodeMapOptions = {}): Promise<FreshnessResult> {\n return (await inspectFreshness(options)).result;\n}\n\nexport interface FreshnessInspection {\n result: FreshnessResult;\n map?: CodeMap;\n}\n\n/** Validate the committed artifact set once and retain it for the scan reuse fast path. */\nexport async function inspectFreshness(\n options: LoadCodeMapOptions = {},\n): Promise<FreshnessInspection> {\n const resolved = await resolveConfiguration(options);\n let map: CodeMap;\n try {\n map = await loadCodeMapFrom(resolved.outputDir);\n } catch (error) {\n if (error instanceof CodeMapError && error.code === \"MAP_NOT_FOUND\") {\n return {\n result: {\n status: \"missing\",\n current: false,\n root: resolved.root,\n outputDir: resolved.outputDir,\n reasons: [\"No complete map exists; run ai-code-map scan.\"],\n changes: emptyChanges(),\n },\n };\n }\n if (error instanceof CodeMapError) {\n return { result: invalidArtifactFreshness(resolved.root, resolved.outputDir, error) };\n }\n throw error;\n }\n const manifest = map.manifest;\n\n const prepared = await prepareSemanticInputs(resolved.root, resolved.config);\n const currentSources = await hashDiscoveredSources(\n prepared.discovered,\n resolved.config.concurrency ?? 16,\n );\n const changes = compareSources(manifest.sourceFiles, currentSources);\n const configHash = prepared.configHash;\n const reasons: string[] = [];\n if (manifest.analyzerVersion !== ANALYZER_VERSION) reasons.push(\"The analyzer version changed.\");\n const expectedSemanticResolver = {\n name: DEFAULT_SEMANTIC_RESOLVER,\n version: TYPESCRIPT_SEMANTIC_VERSION,\n };\n if (stableJson(manifest.semanticResolver) !== stableJson(expectedSemanticResolver)) {\n reasons.push(\"The semantic resolver or TypeScript version changed.\");\n }\n const expectedParser = { name: DEFAULT_SYNTAX_PARSER, version: ts.version };\n if (stableJson(manifest.syntaxParser) !== stableJson(expectedParser)) {\n reasons.push(\"The syntax parser or parser version changed.\");\n }\n const expectedAnalyzers = DEFAULT_ANALYZER_NAMES.map((name) => ({\n name,\n version: ANALYZER_VERSION,\n })).sort((a, b) => compareText(a.name, b.name));\n if (stableJson(manifest.analyzers) !== stableJson(expectedAnalyzers)) {\n reasons.push(\"The enabled analyzer or rule-pack version changed.\");\n }\n if (stableJson(manifest.producer) !== stableJson(defaultProducerRecord())) {\n reasons.push(\"The map was not produced by the compatible built-in analysis pipeline.\");\n }\n if (manifest.configHash !== configHash)\n reasons.push(\"Configuration or project metadata changed.\");\n const expectedCompilerUnits = prepared.compilerGraph.units.map((unit) => unit.record);\n const ownershipMismatch = map.files.some(\n (file) => prepared.compilerGraph.ownership.get(file.path) !== file.compilerUnit,\n );\n if (\n ownershipMismatch ||\n stableJson(map.project.compilerUnits) !== stableJson(expectedCompilerUnits)\n ) {\n reasons.push(\"The persisted compiler-unit graph or file ownership changed.\");\n }\n const persistedFiles = new Map(map.files.map((file) => [file.path, file]));\n if (currentSources.some((source) => persistedFiles.get(source.path)?.lines !== source.lines)) {\n reasons.push(\"Persisted source line counts no longer match the indexed source bytes.\");\n }\n const semanticInputChanges = await compareSemanticInputs(\n resolved.root,\n manifest.semanticInputs,\n resolved.config.concurrency ?? 16,\n );\n if (semanticInputChanges.length > 0) {\n reasons.push(`${semanticInputChanges.length} semantic compiler input(s) changed.`);\n }\n if (changes.added.length) reasons.push(`${changes.added.length} source file(s) were added.`);\n if (changes.modified.length)\n reasons.push(`${changes.modified.length} source file(s) were modified.`);\n if (changes.deleted.length)\n reasons.push(`${changes.deleted.length} source file(s) were deleted.`);\n if (changes.moved.length)\n reasons.push(`${changes.moved.length} source file(s) appear to have moved.`);\n const current = reasons.length === 0;\n const result: FreshnessResult = {\n status: current ? \"current\" : \"stale\",\n current,\n root: resolved.root,\n outputDir: resolved.outputDir,\n reasons: current ? [\"Map is current.\"] : reasons,\n changes,\n };\n return current ? { result, map } : { result };\n}\n\nexport function defaultProducerRecord(): ProducerRecord {\n return {\n id: DEFAULT_PRODUCER_ID,\n kind: \"built-in\",\n fingerprint: hashText(\n stableJson({\n id: DEFAULT_PRODUCER_ID,\n contract: PRODUCER_CONTRACT_VERSION,\n schema: SCHEMA_VERSION,\n analyzer: ANALYZER_VERSION,\n syntaxParser: { name: DEFAULT_SYNTAX_PARSER, version: ts.version },\n semanticResolver: {\n name: DEFAULT_SEMANTIC_RESOLVER,\n version: TYPESCRIPT_SEMANTIC_VERSION,\n },\n analyzers: [...DEFAULT_ANALYZER_NAMES],\n capabilities: [\n \"artifact-integrity-v2\",\n \"compiler-unit-ownership-v3\",\n \"module-provenance-v2\",\n \"portable-paths-v2\",\n \"semantic-input-closure-v2\",\n ],\n }),\n ),\n };\n}\n\nexport function customProducerRecord(components: unknown): ProducerRecord {\n return {\n id: CUSTOM_PRODUCER_ID,\n kind: \"custom\",\n fingerprint: hashText(\n stableJson({\n id: CUSTOM_PRODUCER_ID,\n contract: PRODUCER_CONTRACT_VERSION,\n components,\n }),\n ),\n };\n}\n\nexport interface PreparedSemanticInputs {\n packageMetadata: PackageMetadata;\n frameworks: ReturnType<typeof effectiveFrameworks>;\n discovered: DiscoveredSource[];\n compilerGraph: CompilerUnitGraph;\n configHash: string;\n}\n\n/** Shared scan/check construction for every semantic input that can affect canonical facts. */\nexport async function prepareSemanticInputs(\n root: string,\n config: Parameters<typeof discoverSourceFiles>[1],\n): Promise<PreparedSemanticInputs> {\n const packageMetadata = await readPackageMetadata(root);\n const frameworks = effectiveFrameworks(config.frameworks, packageMetadata.frameworks);\n const discovered = await discoverSourceFiles(root, config);\n const compilerGraph = await buildCompilerUnitGraph(\n root,\n config,\n discovered,\n packageMetadata.workspaces,\n );\n const configHash = await computeAnalysisConfigHash(\n root,\n config,\n frameworks,\n packageMetadata.raw,\n packageMetadata.workspaces,\n compilerGraph,\n );\n return { packageMetadata, frameworks, discovered, compilerGraph, configHash };\n}\n\nexport async function computeAnalysisConfigHash(\n root: string,\n config: Parameters<typeof discoverSourceFiles>[1],\n frameworks: string[],\n packageJson: Record<string, unknown>,\n workspaces: WorkspacePackage[],\n compilerGraph: CompilerUnitGraph,\n): Promise<string> {\n const inputFiles = [\n ...compilerGraph.configInputs,\n \"package.json\",\n \"pnpm-workspace.yaml\",\n \"pnpm-workspace.yml\",\n \"lerna.json\",\n \"rush.json\",\n ...semanticPackageInputs(workspaces),\n ];\n const analysisInputs = await hashExistingInputs(root, inputFiles);\n return hashText(\n stableJson({\n config: {\n version: config.version,\n include: [...config.include].sort(compareText),\n exclude: [...config.exclude].sort(compareText),\n ...(config.tsconfig ? { tsconfig: normalizeStoredPath(config.tsconfig) } : {}),\n frameworks: [...config.frameworks].sort(compareText),\n includePrivateSymbols: config.includePrivateSymbols,\n },\n frameworks,\n analysisInputs,\n package: packageJson,\n compilerUnits: compilerGraph.units.map((unit) => ({\n record: unit.record,\n programRoots: unit.sourceFiles.map((file) => relativePosix(root, file)),\n })),\n ownership: [...compilerGraph.ownership.entries()].sort(([a], [b]) => compareText(a, b)),\n toolchain: {\n schema: SCHEMA_VERSION,\n config: CONFIG_VERSION,\n analyzer: ANALYZER_VERSION,\n typescript: ts.version,\n semanticResolver: TYPESCRIPT_SEMANTIC_VERSION,\n syntaxParser: DEFAULT_SYNTAX_PARSER,\n analyzers: [...DEFAULT_ANALYZER_NAMES],\n },\n }),\n );\n}\n\nfunction semanticPackageInputs(workspaces: WorkspacePackage[]): string[] {\n const lockfiles = [\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n ];\n return [\n ...lockfiles,\n ...workspaces.flatMap((workspace) => [\n `${workspace.path}/package.json`,\n ...lockfiles.map((lockfile) => `${workspace.path}/${lockfile}`),\n ]),\n ];\n}\n\nasync function hashExistingInputs(\n root: string,\n relativePaths: string[],\n): Promise<Array<{ path: string; hash: string }>> {\n const output: Array<{ path: string; hash: string }> = [];\n for (const relative of [...new Set(relativePaths.map(normalizeStoredPath))].sort(compareText)) {\n const absolute = path.resolve(root, relative);\n const candidate = path.relative(root, absolute);\n if (candidate === \"..\" || candidate.startsWith(`..${path.sep}`) || path.isAbsolute(candidate)) {\n continue;\n }\n try {\n const stat = await fs.lstat(absolute);\n if (stat.isSymbolicLink() || !stat.isFile()) continue;\n const [realRoot, realInput] = await Promise.all([fs.realpath(root), fs.realpath(absolute)]);\n if (!isPathInside(realRoot, realInput)) continue;\n output.push({ path: relative, hash: hashText(await fs.readFile(absolute)) });\n } catch (error) {\n if (!(error instanceof Error && \"code\" in error && error.code === \"ENOENT\")) throw error;\n }\n }\n return output;\n}\n\nexport function compareSources(\n before: Array<{ path: string; hash: string }>,\n after: Array<{ path: string; hash: string }>,\n): ScanChanges {\n const beforeMap = new Map(before.map((file) => [file.path, file.hash]));\n const afterMap = new Map(after.map((file) => [file.path, file.hash]));\n const added = [...afterMap.keys()].filter((file) => !beforeMap.has(file));\n const deleted = [...beforeMap.keys()].filter((file) => !afterMap.has(file));\n const modified = [...afterMap.keys()].filter(\n (file) => beforeMap.has(file) && beforeMap.get(file) !== afterMap.get(file),\n );\n const moved: ScanChanges[\"moved\"] = [];\n const remainingAdded = new Set(added);\n const remainingDeleted = new Set(deleted);\n for (const oldPath of deleted.sort(compareText)) {\n const hash = beforeMap.get(oldPath);\n const newPath = [...remainingAdded]\n .sort(compareText)\n .find((candidate) => afterMap.get(candidate) === hash);\n if (newPath) {\n moved.push({ from: oldPath, to: newPath });\n remainingAdded.delete(newPath);\n remainingDeleted.delete(oldPath);\n }\n }\n return {\n added: [...remainingAdded].sort(compareText),\n modified: modified.sort(compareText),\n deleted: [...remainingDeleted].sort(compareText),\n moved,\n };\n}\n\nasync function hashDiscoveredSources(\n files: DiscoveredSource[],\n concurrency: number,\n): Promise<Array<{ path: string; hash: string; lines: number }>> {\n return mapLimit(files, concurrency, async (file) => {\n const bytes = await fs.readFile(file.absolutePath);\n const content = bytes.toString(\"utf8\");\n return {\n path: file.relativePath,\n hash: hashText(bytes),\n lines: content.length === 0 ? 0 : content.split(/\\r\\n|\\r|\\n/).length,\n };\n });\n}\n\nasync function compareSemanticInputs(\n root: string,\n before: SemanticInputRecord[],\n concurrency: number,\n): Promise<string[]> {\n const realRoot = await fs.realpath(root);\n const toolchainRoot = await fs.realpath(path.dirname(ts.getDefaultLibFilePath({})));\n const current = await mapLimit(before, concurrency, async (input) => {\n let changed: boolean;\n switch (input.kind) {\n case \"file\":\n changed = (await hashSemanticFileInput(root, realRoot, input.path)) !== input.hash;\n break;\n case \"resolution-probe\":\n changed =\n (await semanticProbeState(\n input.scope === \"toolchain\" ? toolchainRoot : root,\n input.scope === \"toolchain\" ? toolchainRoot : realRoot,\n input.path,\n input.targetKind,\n )) !== input.exists;\n break;\n case \"directory-listing\":\n changed =\n (await hashSemanticDirectoryInput(\n input.scope === \"toolchain\" ? toolchainRoot : root,\n input.scope === \"toolchain\" ? toolchainRoot : realRoot,\n input.path,\n )) !== input.hash;\n break;\n case \"symlink\":\n changed =\n (await semanticSymlinkTarget(\n input.scope === \"toolchain\" ? toolchainRoot : root,\n input.scope === \"toolchain\" ? toolchainRoot : realRoot,\n input.path,\n )) !== input.target;\n break;\n case \"toolchain-file\":\n changed = (await hashToolchainFileInput(input.path)) !== input.hash;\n break;\n }\n return { path: input.path, changed };\n });\n return current\n .filter((input) => input.changed)\n .map((input) => input.path)\n .sort(compareText);\n}\n\nasync function hashSemanticFileInput(\n root: string,\n realRoot: string,\n relative: string,\n): Promise<string | null> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return null;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput)) return null;\n const stat = await fs.stat(realInput);\n if (!stat.isFile()) return null;\n return hashText(await fs.readFile(realInput));\n } catch {\n return null;\n }\n}\n\nasync function semanticProbeState(\n root: string,\n realRoot: string,\n relative: string,\n targetKind: \"file\" | \"directory\" | \"readable-file\",\n): Promise<boolean> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return false;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput)) return false;\n const stat = await fs.stat(realInput);\n if (targetKind === \"file\") return stat.isFile();\n if (targetKind === \"directory\") return stat.isDirectory();\n if (!stat.isFile()) return false;\n const handle = await fs.open(realInput, \"r\");\n await handle.close();\n return true;\n } catch {\n return false;\n }\n}\n\nasync function hashSemanticDirectoryInput(\n root: string,\n realRoot: string,\n relative: string,\n): Promise<string | null> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return null;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput) || !(await fs.stat(realInput)).isDirectory())\n return null;\n const candidates = ts.sys.getDirectories(absolute).sort(compareText);\n const permitted: string[] = [];\n for (const candidate of candidates) {\n try {\n const resolved = path.resolve(absolute, candidate);\n const realCandidate = await fs.realpath(resolved);\n if (isPathInside(realRoot, realCandidate)) permitted.push(candidate);\n } catch {\n // The bounded compiler host also excludes inaccessible entries.\n }\n }\n return semanticDirectoryListingHash(absolute, permitted);\n } catch {\n return null;\n }\n}\n\nasync function semanticSymlinkTarget(\n root: string,\n realRoot: string,\n relative: string,\n): Promise<string | null> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return null;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput)) return \"<outside-root>\";\n return relativePosix(realRoot, realInput);\n } catch {\n return null;\n }\n}\n\nasync function hashToolchainFileInput(relative: string): Promise<string | null> {\n try {\n const libraryRoot = await fs.realpath(path.dirname(ts.getDefaultLibFilePath({})));\n const absolute = path.resolve(libraryRoot, relative);\n if (!isPathInside(libraryRoot, absolute)) return null;\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(libraryRoot, realInput) || !(await fs.stat(realInput)).isFile()) return null;\n return hashText(await fs.readFile(realInput));\n } catch {\n return null;\n }\n}\n\nfunction invalidArtifactFreshness(\n root: string,\n outputDir: string,\n error: CodeMapError,\n): FreshnessResult {\n const reason = error.message.includes(\"manifest integrity hash\")\n ? \"The persisted manifest's analyzer, producer, configuration, semantic-input, or artifact metadata failed its integrity check.\"\n : `The persisted artifact set is incomplete, invalid, or incompatible (${error.code}).`;\n return {\n status: \"stale\",\n current: false,\n root,\n outputDir,\n reasons: [reason],\n changes: emptyChanges(),\n };\n}\n\nfunction emptyChanges(): ScanChanges {\n return { added: [], modified: [], deleted: [], moved: [] };\n}\n","import { existsSync, lstatSync, readFileSync, realpathSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport fg from \"fast-glob\";\nimport ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"./constants.js\";\nimport type {\n CodeMapConfig,\n CompilerUnitRecord,\n DiagnosticRecord,\n SemanticInputObservation,\n WorkspacePackage,\n} from \"./types.js\";\nimport type { DiscoveredSource } from \"./discovery.js\";\nimport {\n isPathInside,\n isSafeRelativePathPattern,\n normalizeStoredPath,\n relativePosix,\n} from \"./utils/path.js\";\nimport { configuredCompilerUnitId, generatedCompilerUnitId } from \"./ids.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nconst CONFIG_PATTERNS = [\"**/tsconfig.json\", \"**/jsconfig.json\", \"**/tsconfig.*.json\"];\nconst CONFIG_IGNORES = [\n \"**/node_modules/**\",\n \"**/.git/**\",\n \"**/.ai/**\",\n \"**/.next/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/out/**\",\n \"**/coverage/**\",\n];\nconst FALLBACK_UNIT_ID = generatedCompilerUnitId(\"fallback\");\n\nexport interface CompilerUnitPlan {\n record: CompilerUnitRecord;\n sourceFiles: string[];\n ownedFiles: string[];\n}\n\nexport interface CompilerUnitGraph {\n units: CompilerUnitPlan[];\n ownership: Map<string, string>;\n configInputs: string[];\n diagnostics: DiagnosticRecord[];\n primaryConfig?: string;\n}\n\ninterface ParsedConfigNode {\n absolutePath: string;\n relativePath: string;\n parsed: ts.ParsedCommandLine;\n source: ts.TsConfigSourceFile;\n sourceFiles: string[];\n sourceFileKeys: Set<string>;\n references: string[];\n extends: string[];\n pathAliases: Record<string, string[]>;\n hasOwnFileSelection: boolean;\n allowJs: boolean;\n valid: boolean;\n}\n\n/**\n * Build the bounded compiler configuration graph and assign every indexed source exactly once.\n * The returned plan contains normalized records only; compiler objects are intentionally omitted.\n */\nexport async function buildCompilerUnitGraph(\n root: string,\n config: CodeMapConfig,\n sources: readonly DiscoveredSource[],\n workspaces: readonly WorkspacePackage[],\n): Promise<CompilerUnitGraph> {\n const realRoot = realpathSync(root);\n const diagnostics: DiagnosticRecord[] = [];\n const fileSystem = new BoundedTypeScriptFileSystem(realRoot);\n const candidatePaths = await discoverConfigCandidates(realRoot, config, diagnostics);\n const parsedByPath = new Map<string, ParsedConfigNode>();\n const queue = [...candidatePaths];\n\n while (queue.length > 0) {\n const candidate = queue.shift();\n if (!candidate) continue;\n const logical = normalizeStoredPath(candidate);\n if (parsedByPath.has(logical)) continue;\n const absolute = path.resolve(realRoot, logical);\n const node = parseConfigNode(realRoot, absolute, fileSystem, diagnostics);\n if (!node) continue;\n parsedByPath.set(node.relativePath, node);\n for (const reference of node.references) {\n if (!parsedByPath.has(reference) && !queue.includes(reference)) queue.push(reference);\n }\n queue.sort(compareText);\n }\n\n const indexedKeys = new Set(sources.map((source) => canonicalPath(source.absolutePath)));\n const boundaryPaths = [\".\", ...workspaces.map((workspace) => workspace.path)].sort((a, b) =>\n compareText(a, b),\n );\n const seedPaths = new Set<string>();\n const configured = configuredTsconfigPath(realRoot, config.tsconfig, diagnostics);\n if (configured) seedPaths.add(configured);\n for (const conventional of [\"tsconfig.json\", \"jsconfig.json\"]) {\n if (parsedByPath.has(conventional)) seedPaths.add(conventional);\n }\n const extendedDependencies = new Set([...parsedByPath.values()].flatMap((node) => node.extends));\n const referenceTargets = new Set([...parsedByPath.values()].flatMap((node) => node.references));\n for (const node of parsedByPath.values()) {\n const directory = normalizeStoredPath(path.posix.dirname(node.relativePath));\n const atBoundary = boundaryPaths.includes(directory);\n const intersects = [...node.sourceFileKeys].some((file) => indexedKeys.has(file));\n const conventional = [\"tsconfig.json\", \"jsconfig.json\"].includes(\n path.posix.basename(node.relativePath),\n );\n const extendsOnlyBase =\n extendedDependencies.has(node.relativePath) &&\n !node.hasOwnFileSelection &&\n !conventional &&\n !referenceTargets.has(node.relativePath) &&\n configured !== node.relativePath;\n if (!extendsOnlyBase && (atBoundary || intersects)) seedPaths.add(node.relativePath);\n }\n\n // References from a retained solution/config node remain graph nodes even when they own no files.\n const retained = new Set<string>();\n const retainQueue = [...seedPaths].sort(compareText);\n while (retainQueue.length > 0) {\n const current = retainQueue.shift();\n if (!current || retained.has(current)) continue;\n const node = parsedByPath.get(current);\n if (!node) continue;\n retained.add(current);\n for (const reference of node.references) {\n if (!retained.has(reference)) retainQueue.push(reference);\n }\n retainQueue.sort(compareText);\n }\n\n const nodes = [...retained]\n .map((relative) => parsedByPath.get(relative))\n .filter((node): node is ParsedConfigNode => node !== undefined && node.valid)\n .sort((a, b) => compareText(a.relativePath, b.relativePath));\n const validNodePaths = new Set(nodes.map((node) => node.relativePath));\n const ownership = new Map<string, string>();\n const ownedByUnit = new Map<string, string[]>();\n const jsFallbackWarnings = new Set<string>();\n\n for (const source of [...sources].sort((a, b) => compareText(a.relativePath, b.relativePath))) {\n const sourceKey = canonicalPath(source.absolutePath);\n const selected = nodes.filter((node) => node.sourceFileKeys.has(sourceKey));\n const jsSource = isJavaScriptSourceFile(source.absolutePath);\n const eligible = jsSource ? selected.filter((node) => node.allowJs) : selected;\n const owner = chooseOwner(eligible, source.absolutePath, realRoot, boundaryPaths);\n if (jsSource && !owner && !jsFallbackWarnings.has(source.relativePath)) {\n jsFallbackWarnings.add(source.relativePath);\n const underDisallowingConfig = nodes.some(\n (node) =>\n !node.allowJs && isPathInside(path.dirname(node.absolutePath), source.absolutePath),\n );\n const underAllowingConfig = nodes.some(\n (node) =>\n node.allowJs && isPathInside(path.dirname(node.absolutePath), source.absolutePath),\n );\n const reason =\n selected.length > 0 || underDisallowingConfig\n ? \"the applicable configuration does not allow JavaScript\"\n : underAllowingConfig\n ? \"the nearby JavaScript-enabled configuration does not include the file\"\n : \"no eligible configuration includes the file\";\n diagnostics.push({\n ...graphDiagnostic(\n `A selected JavaScript source uses fallback compiler ownership because ${reason}.`,\n source.relativePath,\n ),\n severity: \"warning\",\n });\n }\n const ownerId = owner ? configuredCompilerUnitId(owner.relativePath) : FALLBACK_UNIT_ID;\n ownership.set(source.relativePath, ownerId);\n const owned = ownedByUnit.get(ownerId) ?? [];\n owned.push(source.absolutePath);\n ownedByUnit.set(ownerId, owned);\n }\n\n const units: CompilerUnitPlan[] = nodes.map((node) => {\n const rootPath = normalizeStoredPath(path.posix.dirname(node.relativePath));\n const id = configuredCompilerUnitId(node.relativePath);\n return {\n record: {\n id,\n kind: \"configured\",\n root: rootPath,\n config: node.relativePath,\n references: node.references.filter((reference) => validNodePaths.has(reference)),\n extends: node.extends,\n pathAliases: node.pathAliases,\n },\n sourceFiles: node.sourceFiles,\n ownedFiles: (ownedByUnit.get(id) ?? []).sort(compareText),\n };\n });\n\n units.push({\n record: {\n id: FALLBACK_UNIT_ID,\n kind: \"fallback\",\n root: \".\",\n references: [],\n extends: [],\n pathAliases: {},\n },\n sourceFiles: (ownedByUnit.get(FALLBACK_UNIT_ID) ?? []).sort(compareText),\n ownedFiles: (ownedByUnit.get(FALLBACK_UNIT_ID) ?? []).sort(compareText),\n });\n\n const configInputs = new Set<string>();\n for (const node of parsedByPath.values()) {\n configInputs.add(node.relativePath);\n for (const extended of node.extends) configInputs.add(extended);\n }\n\n const primaryConfig =\n configured && validNodePaths.has(configured)\n ? configured\n : [\"tsconfig.json\", \"jsconfig.json\"].find((candidate) => validNodePaths.has(candidate));\n return {\n units: units.sort((a, b) => compareText(a.record.id, b.record.id)),\n ownership,\n configInputs: [...configInputs].sort(compareText),\n diagnostics: normalizeGraphDiagnostics(diagnostics),\n ...(primaryConfig ? { primaryConfig } : {}),\n };\n}\n\nasync function discoverConfigCandidates(\n root: string,\n config: CodeMapConfig,\n diagnostics: DiagnosticRecord[],\n): Promise<string[]> {\n const matches = await fg(CONFIG_PATTERNS, {\n cwd: root,\n onlyFiles: true,\n unique: true,\n dot: false,\n followSymbolicLinks: false,\n ignore: [...CONFIG_IGNORES, ...config.exclude],\n });\n const candidates = new Set(matches.map(normalizeStoredPath));\n if (config.tsconfig) {\n const configured = configuredTsconfigPath(root, config.tsconfig, diagnostics);\n if (configured) candidates.add(configured);\n }\n return [...candidates]\n .filter((candidate) => safeRegularFile(root, path.resolve(root, candidate)))\n .sort(compareText);\n}\n\nfunction configuredTsconfigPath(\n root: string,\n configured: string | undefined,\n diagnostics: DiagnosticRecord[],\n): string | undefined {\n if (!configured) return undefined;\n const absolute = path.resolve(root, configured);\n if (!isPathInside(root, absolute) || !safeRegularFile(root, absolute)) {\n diagnostics.push(\n graphDiagnostic(\"The configured TypeScript project is unavailable or unsafe.\"),\n );\n return undefined;\n }\n return relativePosix(root, absolute);\n}\n\nfunction parseConfigNode(\n root: string,\n absolutePath: string,\n fileSystem: BoundedTypeScriptFileSystem,\n diagnostics: DiagnosticRecord[],\n): ParsedConfigNode | undefined {\n if (!safeRegularFile(root, absolutePath)) {\n diagnostics.push(graphDiagnostic(\"A TypeScript project reference was unavailable or unsafe.\"));\n return undefined;\n }\n const relativePath = relativePosix(root, absolutePath);\n let source: ts.TsConfigSourceFile;\n try {\n source = ts.readJsonConfigFile(absolutePath, fileSystem.readFile);\n } catch {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript configuration could not be read.\", relativePath),\n );\n return undefined;\n }\n const host = fileSystem.parseHost(path.dirname(absolutePath));\n let parsed: ts.ParsedCommandLine;\n try {\n parsed = ts.parseJsonSourceFileConfigFileContent(\n source,\n host,\n path.dirname(absolutePath),\n undefined,\n absolutePath,\n undefined,\n undefined,\n fileSystem.extendedConfigCache,\n );\n } catch {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript configuration could not be parsed.\", relativePath),\n );\n return undefined;\n }\n\n const optionSafety = sanitizeCompilerOptions(parsed.options, root, path.dirname(absolutePath));\n if (!optionSafety.valid) {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript configuration option escaped the selected root.\", relativePath),\n );\n }\n const parsedSourceFiles = parsed.fileNames\n .filter((fileName) => safeRegularFile(root, fileName))\n .map((fileName) => realpathSync(fileName))\n .filter((fileName, index, values) => values.indexOf(fileName) === index)\n .sort(compareText);\n const sourceFiles = parsedSourceFiles\n .filter((fileName) => {\n if (parsed.options.allowJs === true) return true;\n return !isJavaScriptSourceFile(fileName);\n })\n .sort(compareText);\n const references: string[] = [];\n const safeReferences: ts.ProjectReference[] = [];\n for (const reference of parsed.projectReferences ?? []) {\n const target = ts.resolveProjectReferencePath(reference);\n if (!safeRegularFile(root, target)) {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript project reference escaped the selected root.\", relativePath),\n );\n continue;\n }\n references.push(relativePosix(root, target));\n safeReferences.push(reference);\n }\n parsed.projectReferences = safeReferences.sort((a, b) =>\n compareText(ts.resolveProjectReferencePath(a), ts.resolveProjectReferencePath(b)),\n );\n\n const extended = (source.extendedSourceFiles ?? [])\n .filter((fileName) => safeRegularFile(root, fileName))\n .map((fileName) => relativePosix(root, realpathSync(fileName)))\n .filter((fileName, index, values) => values.indexOf(fileName) === index)\n .sort(compareText);\n if ((source.extendedSourceFiles ?? []).length !== extended.length) {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript extends dependency escaped the selected root.\", relativePath),\n );\n }\n for (const error of parsed.errors) {\n if (error.category === ts.DiagnosticCategory.Error) {\n diagnostics.push(\n graphDiagnostic(\"TypeScript reported an invalid project configuration.\", relativePath),\n );\n break;\n }\n }\n const configText = fileSystem.readFile(absolutePath) ?? \"\";\n const rawConfig = ts.parseConfigFileTextToJson(absolutePath, configText).config as\n Record<string, unknown> | undefined;\n\n return {\n absolutePath,\n relativePath,\n parsed,\n source,\n sourceFiles,\n sourceFileKeys: new Set(parsedSourceFiles.map(canonicalPath)),\n references: [...new Set(references)].sort(compareText),\n extends: extended,\n pathAliases: normalizePathAliases(root, path.dirname(absolutePath), parsed.options),\n hasOwnFileSelection: Boolean(\n rawConfig &&\n (Object.prototype.hasOwnProperty.call(rawConfig, \"files\") ||\n Object.prototype.hasOwnProperty.call(rawConfig, \"include\")),\n ),\n allowJs: parsed.options.allowJs === true,\n valid: optionSafety.valid,\n };\n}\n\nfunction sanitizeCompilerOptions(\n options: ts.CompilerOptions,\n root: string,\n unitDirectory: string,\n): { valid: boolean } {\n let valid = true;\n const validatePath = (value: string | undefined): string | undefined => {\n if (!value) return value;\n const absolute = path.resolve(value);\n if (!isPathInside(root, absolute)) {\n valid = false;\n return undefined;\n }\n return absolute;\n };\n options.baseUrl = validatePath(options.baseUrl);\n options.rootDir = validatePath(options.rootDir);\n options.outDir = validatePath(options.outDir);\n options.declarationDir = validatePath(options.declarationDir);\n if (options.rootDirs) {\n const values = options.rootDirs\n .map((entry) => validatePath(entry))\n .filter((entry): entry is string => entry !== undefined);\n options.rootDirs = values;\n }\n if (options.typeRoots) {\n const values = options.typeRoots\n .map((entry) => validatePath(entry))\n .filter((entry): entry is string => entry !== undefined);\n options.typeRoots = values;\n } else {\n options.typeRoots = boundedTypeRoots(root, unitDirectory);\n }\n sanitizeCompilerPathAliases(options);\n options.configFilePath = options.configFilePath ?? path.join(unitDirectory, \"tsconfig.json\");\n return { valid };\n}\n\nexport function sanitizeCompilerPathAliases(options: ts.CompilerOptions): void {\n if (!options.paths) return;\n const sanitized: Record<string, string[]> = {};\n for (const [alias, targets] of Object.entries(options.paths).sort(([a], [b]) =>\n compareText(a, b),\n )) {\n if (!isSafeRelativePathPattern(alias)) continue;\n const safeTargets = targets.filter(isSafeRelativePathPattern);\n if (safeTargets.length > 0) sanitized[alias] = safeTargets;\n }\n options.paths = sanitized;\n}\n\nfunction boundedTypeRoots(root: string, start: string): string[] {\n const values: string[] = [];\n let current = path.resolve(start);\n while (isPathInside(root, current)) {\n values.push(path.join(current, \"node_modules\", \"@types\"));\n if (current === path.resolve(root)) break;\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return [...new Set(values)];\n}\n\nfunction normalizePathAliases(\n root: string,\n configDirectory: string,\n options: ts.CompilerOptions,\n): Record<string, string[]> {\n const base =\n options.baseUrl ??\n (options as ts.CompilerOptions & { pathsBasePath?: string }).pathsBasePath ??\n configDirectory;\n const output: Record<string, string[]> = {};\n const paths = (options.paths ?? {}) as Record<string, string[]>;\n for (const [alias, targets] of Object.entries(paths).sort(([a], [b]) => compareText(a, b))) {\n if (!isSafeRelativePathPattern(alias)) continue;\n const normalized: string[] = [];\n for (const target of targets) {\n if (!isSafeRelativePathPattern(target)) continue;\n const absolute = path.resolve(base, target);\n if (!isPathInside(root, absolute)) continue;\n normalized.push(relativePosix(root, absolute));\n }\n output[alias] = [...new Set(normalized)].sort(compareText);\n }\n return output;\n}\n\nfunction chooseOwner(\n eligible: ParsedConfigNode[],\n sourceFile: string,\n root: string,\n boundaries: string[],\n): ParsedConfigNode | undefined {\n return [...eligible].sort((a, b) => {\n const packageDepthA = deepestSharedBoundaryDepth(a.absolutePath, sourceFile, root, boundaries);\n const packageDepthB = deepestSharedBoundaryDepth(b.absolutePath, sourceFile, root, boundaries);\n if (packageDepthA !== packageDepthB) return packageDepthB - packageDepthA;\n const directoryDepthA = ancestorDepth(path.dirname(a.absolutePath), sourceFile, root);\n const directoryDepthB = ancestorDepth(path.dirname(b.absolutePath), sourceFile, root);\n if (directoryDepthA !== directoryDepthB) return directoryDepthB - directoryDepthA;\n return compareText(a.relativePath, b.relativePath);\n })[0];\n}\n\nfunction deepestSharedBoundaryDepth(\n configPath: string,\n sourcePath: string,\n root: string,\n boundaries: string[],\n): number {\n let depth = -1;\n for (const boundary of boundaries) {\n const absolute = path.resolve(root, boundary);\n if (isPathInside(absolute, configPath) && isPathInside(absolute, sourcePath)) {\n depth = Math.max(depth, pathDepth(relativePosix(root, absolute)));\n }\n }\n return depth;\n}\n\nfunction ancestorDepth(directory: string, sourcePath: string, root: string): number {\n return isPathInside(directory, sourcePath) ? pathDepth(relativePosix(root, directory)) : -1;\n}\n\nfunction pathDepth(value: string): number {\n return value === \".\" ? 0 : value.split(\"/\").length;\n}\n\nfunction isJavaScriptSourceFile(filePath: string): boolean {\n const extension = path.extname(filePath).toLowerCase();\n return (\n extension === \".js\" || extension === \".jsx\" || extension === \".mjs\" || extension === \".cjs\"\n );\n}\n\nfunction safeRegularFile(root: string, candidate: string): boolean {\n try {\n const absolute = path.resolve(candidate);\n if (!isPathInside(root, absolute)) return false;\n if (lstatSync(absolute).isSymbolicLink() || !statSync(absolute).isFile()) return false;\n return isPathInside(realpathSync(root), realpathSync(absolute));\n } catch {\n return false;\n }\n}\n\nfunction canonicalPath(fileName: string): string {\n try {\n const real = realpathSync(fileName);\n return ts.sys.useCaseSensitiveFileNames ? real : real.toLowerCase();\n } catch {\n const absolute = path.resolve(fileName);\n return ts.sys.useCaseSensitiveFileNames ? absolute : absolute.toLowerCase();\n }\n}\n\nfunction graphDiagnostic(message: string, file?: string): DiagnosticRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n code: \"compiler-config\",\n severity: \"warning\",\n message,\n ...(file ? { file } : {}),\n };\n}\n\nfunction normalizeGraphDiagnostics(values: DiagnosticRecord[]): DiagnosticRecord[] {\n const byKey = new Map<string, DiagnosticRecord>();\n for (const value of values) byKey.set(`${value.file ?? \"\"}\\u0000${value.message}`, value);\n return [...byKey.values()].sort((a, b) =>\n compareText(`${a.file ?? \"\"}\\u0000${a.message}`, `${b.file ?? \"\"}\\u0000${b.message}`),\n );\n}\n\n/** A synchronous, root-anchored host for TypeScript config parsing and Program construction. */\nexport class BoundedTypeScriptFileSystem {\n readonly extendedConfigCache = new Map<string, ts.ExtendedConfigCacheEntry>();\n private readonly root: string;\n private readonly typeScriptLib: string;\n private readonly observedInputs = new Map<string, SemanticInputObservation>();\n\n constructor(root: string) {\n this.root = realpathSync(root);\n this.typeScriptLib = realpathSync(path.dirname(ts.getDefaultLibFilePath({})));\n }\n\n readonly fileExists = (fileName: string): boolean => {\n const absolute = this.absolute(fileName);\n if (!this.isPermitted(absolute)) return false;\n try {\n const exists = statSync(absolute).isFile();\n this.recordProbe(absolute, \"file\", exists);\n return exists;\n } catch {\n this.recordProbe(absolute, \"file\", false);\n return false;\n }\n };\n\n readonly readFile = (fileName: string): string | undefined => {\n const absolute = this.absolute(fileName);\n if (!this.isPermitted(absolute)) return undefined;\n try {\n const contents = readFileSync(absolute);\n this.recordRead(absolute, contents);\n return contents.toString(\"utf8\");\n } catch {\n let exists = false;\n try {\n exists = statSync(absolute).isFile();\n } catch {\n // The file is absent or cannot be inspected.\n }\n this.recordProbe(absolute, \"file\", exists);\n this.recordProbe(absolute, \"readable-file\", false);\n return undefined;\n }\n };\n\n readonly directoryExists = (directory: string): boolean => {\n const absolute = this.absolute(directory);\n if (!this.isPermitted(absolute)) return false;\n try {\n const exists = statSync(absolute).isDirectory();\n this.recordProbe(absolute, \"directory\", exists);\n return exists;\n } catch {\n this.recordProbe(absolute, \"directory\", false);\n return false;\n }\n };\n\n readonly getDirectories = (directory: string): string[] => {\n const absolute = this.absolute(directory);\n if (!this.isPermitted(absolute)) return [];\n if (!this.directoryExists(absolute)) return [];\n const directories = ts.sys\n .getDirectories(absolute)\n .filter((entry) => this.isPermitted(path.resolve(absolute, entry)))\n .sort(compareText);\n this.recordDirectoryListing(absolute, directories);\n return directories;\n };\n\n readonly readDirectory: ts.ParseConfigHost[\"readDirectory\"] = (\n rootDir,\n extensions,\n excludes,\n includes,\n depth,\n ) => {\n const absolute = this.absolute(rootDir);\n if (!this.isPermitted(absolute)) return [];\n return ts.sys\n .readDirectory(absolute, extensions, excludes, includes, depth)\n .filter((entry) => this.isPermitted(path.resolve(absolute, entry)))\n .sort(compareText);\n };\n\n readonly realpath = (candidate: string): string => {\n const absolute = this.absolute(candidate);\n if (!this.isPermitted(absolute)) return absolute;\n try {\n const real = realpathSync(absolute);\n this.recordSymlink(absolute, real);\n return real;\n } catch {\n return absolute;\n }\n };\n\n parseHost(currentDirectory: string): ts.ParseConfigFileHost {\n return {\n useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,\n getCurrentDirectory: () => currentDirectory,\n fileExists: this.fileExists,\n readFile: this.readFile,\n readDirectory: this.readDirectory,\n directoryExists: this.directoryExists,\n getDirectories: this.getDirectories,\n realpath: this.realpath,\n onUnRecoverableConfigFileDiagnostic: () => undefined,\n };\n }\n\n semanticInputs(): SemanticInputObservation[] {\n return [...this.observedInputs.values()].sort((a, b) =>\n compareText(semanticObservationKey(a), semanticObservationKey(b)),\n );\n }\n\n private recordProbe(\n absolute: string,\n targetKind: \"file\" | \"directory\" | \"readable-file\",\n exists: boolean,\n ): void {\n const scoped = this.semanticScope(absolute);\n if (!scoped) return;\n const relative = relativePosix(scoped.root, absolute);\n const contentKey =\n targetKind === \"directory\"\n ? `directory-listing\\u0000${scoped.scope}\\u0000${relative}`\n : scoped.scope === \"toolchain\"\n ? `toolchain-file\\u0000${relative}`\n : `file\\u0000${relative}`;\n if (this.observedInputs.has(contentKey)) return;\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"resolution-probe\",\n scope: scoped.scope,\n targetKind,\n exists,\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n\n private recordRead(absolute: string, contents: Buffer): void {\n if (isPathInside(this.root, absolute)) {\n const relative = relativePosix(this.root, absolute);\n this.observedInputs.delete(`resolution-probe\\u0000project\\u0000file\\u0000${relative}`);\n this.observedInputs.delete(\n `resolution-probe\\u0000project\\u0000readable-file\\u0000${relative}`,\n );\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"file\",\n hash: hashText(contents),\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n return;\n }\n if (isPathInside(this.typeScriptLib, absolute)) {\n const relative = relativePosix(this.typeScriptLib, absolute);\n this.observedInputs.delete(`resolution-probe\\u0000toolchain\\u0000file\\u0000${relative}`);\n this.observedInputs.delete(\n `resolution-probe\\u0000toolchain\\u0000readable-file\\u0000${relative}`,\n );\n const observation: SemanticInputObservation = {\n // Preserve the lexical file TypeScript opened. Hashing only a resolved target would miss\n // a same-version standard-library symlink being repointed to different bytes.\n path: relative,\n kind: \"toolchain-file\",\n hash: hashText(contents),\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n }\n\n private recordDirectoryListing(absolute: string, entries: string[]): void {\n const scoped = this.semanticScope(absolute);\n if (!scoped) return;\n const relative = relativePosix(scoped.root, absolute);\n this.observedInputs.delete(\n `resolution-probe\\u0000${scoped.scope}\\u0000directory\\u0000${relative}`,\n );\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"directory-listing\",\n scope: scoped.scope,\n hash: semanticDirectoryListingHash(absolute, entries),\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n\n private recordSymlink(absolute: string, real: string): void {\n const scoped = this.semanticScope(absolute);\n if (!scoped) return;\n const relative = relativePosix(scoped.root, absolute);\n const target = isPathInside(scoped.root, real)\n ? relativePosix(scoped.root, real)\n : \"<outside-root>\";\n if (relative === target) return;\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"symlink\",\n scope: scoped.scope,\n target,\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n\n private semanticScope(\n absolute: string,\n ): { scope: \"project\" | \"toolchain\"; root: string } | undefined {\n if (isPathInside(this.root, absolute)) return { scope: \"project\", root: this.root };\n if (isPathInside(this.typeScriptLib, absolute)) {\n return { scope: \"toolchain\", root: this.typeScriptLib };\n }\n return undefined;\n }\n\n private isPermitted(candidate: string): boolean {\n const absolute = this.absolute(candidate);\n const lexicalInRoot = isPathInside(this.root, absolute);\n const lexicalInToolchain = isPathInside(this.typeScriptLib, absolute);\n const lexicalAllowed = lexicalInRoot || lexicalInToolchain;\n if (!lexicalAllowed) return false;\n if (!existsSync(absolute)) return true;\n try {\n const real = realpathSync(absolute);\n this.recordSymlink(absolute, real);\n return (\n (lexicalInRoot && isPathInside(this.root, real)) ||\n (lexicalInToolchain && isPathInside(this.typeScriptLib, real))\n );\n } catch {\n return false;\n }\n }\n\n private absolute(candidate: string): string {\n return path.isAbsolute(candidate)\n ? path.resolve(candidate)\n : path.resolve(this.root, candidate);\n }\n}\n\nexport function semanticDirectoryListingHash(directory: string, entries: string[]): string {\n const normalized = entries\n .map((entry) => normalizeStoredPath(path.relative(directory, path.resolve(directory, entry))))\n .sort(compareText);\n return hashText(Buffer.from(normalized.join(\"\\u0000\"), \"utf8\"));\n}\n\nfunction semanticObservationKey(observation: SemanticInputObservation): string {\n return observation.kind === \"resolution-probe\"\n ? `${observation.kind}\\u0000${observation.scope ?? \"project\"}\\u0000${observation.targetKind}\\u0000${observation.path}`\n : observation.kind === \"directory-listing\" || observation.kind === \"symlink\"\n ? `${observation.kind}\\u0000${observation.scope ?? \"project\"}\\u0000${observation.path}`\n : `${observation.kind}\\u0000${observation.path}`;\n}\n\nexport function fallbackCompilerOptions(root: string): ts.CompilerOptions {\n return {\n target: ts.ScriptTarget.ES2022,\n module: ts.ModuleKind.NodeNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n allowJs: true,\n checkJs: false,\n noEmit: true,\n skipLibCheck: true,\n jsx: ts.JsxEmit.Preserve,\n experimentalDecorators: true,\n configFilePath: path.join(root, \"tsconfig.fallback.json\"),\n typeRoots: boundedTypeRoots(root, root),\n };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport fg from \"fast-glob\";\n\nimport type { CodeMapConfig, Framework, Language, WorkspacePackage } from \"./types.js\";\nimport { packageEntryPoints } from \"./package-metadata.js\";\nimport {\n isPathInside,\n normalizeStoredPath,\n readFileInsideRoot,\n relativePosix,\n} from \"./utils/path.js\";\nimport { compareText, mapLimit } from \"./utils/stable.js\";\nimport { createWorkspaceDiscovery } from \"./workspaces.js\";\nimport { createGitIgnoreAdapter } from \"./ignore.js\";\n\nconst SOURCE_EXTENSION = /\\.(?:[cm]?[jt]sx?)$/i;\n\nexport interface PackageMetadata {\n name: string;\n packageManager?: string;\n dependencies: Set<string>;\n frameworks: Framework[];\n entryPoints: string[];\n workspaces: WorkspacePackage[];\n raw: Record<string, unknown>;\n}\n\nexport interface DiscoveredSource {\n absolutePath: string;\n relativePath: string;\n language: Language;\n}\n\nexport async function readPackageMetadata(root: string): Promise<PackageMetadata> {\n const raw = JSON.parse(\n (await readFileInsideRoot(root, path.join(root, \"package.json\"))).toString(\"utf8\"),\n ) as Record<string, unknown>;\n const workspaceDiscovery = await createWorkspaceDiscovery().discover(root);\n const dependencies = new Set<string>();\n const manifests = [raw];\n for (const workspace of workspaceDiscovery.packages) {\n try {\n manifests.push(\n JSON.parse(\n (\n await readFileInsideRoot(root, path.join(root, workspace.path, \"package.json\"))\n ).toString(\"utf8\"),\n ) as Record<string, unknown>,\n );\n } catch {\n // Workspace discovery already degrades safely; malformed child metadata is non-fatal here.\n }\n }\n for (const manifest of manifests) {\n for (const field of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]) {\n const values = manifest[field];\n if (values && typeof values === \"object\") {\n for (const name of Object.keys(values)) dependencies.add(name);\n }\n }\n }\n\n const frameworks: Framework[] = [\"typescript\", \"node\"];\n if (dependencies.has(\"react\")) frameworks.push(\"react\");\n if (dependencies.has(\"next\")) frameworks.push(\"nextjs\", \"react\");\n if (dependencies.has(\"@nestjs/core\") || dependencies.has(\"@nestjs/common\"))\n frameworks.push(\"nestjs\");\n\n return {\n name: typeof raw.name === \"string\" ? raw.name : \"unnamed-project\",\n ...(typeof raw.packageManager === \"string\" ? { packageManager: raw.packageManager } : {}),\n dependencies,\n frameworks: [...new Set(frameworks)].sort(),\n entryPoints: packageEntryPoints(raw),\n workspaces: workspaceDiscovery.packages,\n raw,\n };\n}\n\nexport async function discoverSourceFiles(\n root: string,\n config: CodeMapConfig,\n): Promise<DiscoveredSource[]> {\n const workspaceDiscovery = await createWorkspaceDiscovery().discover(root);\n const include = [\n ...config.include,\n ...workspaceDiscovery.packages.flatMap((workspace) =>\n config.include.map((pattern) => prefixGlob(workspace.path, pattern)),\n ),\n ];\n const matches = await fg(include, {\n cwd: root,\n onlyFiles: true,\n unique: true,\n dot: false,\n followSymbolicLinks: false,\n ignore: config.exclude,\n });\n\n const permitted = new Set(await createGitIgnoreAdapter().filter(root, matches));\n const candidates = matches\n .filter((relative) => permitted.has(normalizeStoredPath(relative)))\n .filter((relative) => SOURCE_EXTENSION.test(relative))\n .map((relative) => ({\n absolutePath: path.resolve(root, relative),\n relativePath: normalizeStoredPath(relative),\n language: languageFromPath(relative),\n }))\n .sort((a, b) => compareText(a.relativePath, b.relativePath));\n\n const safe = await mapLimit(candidates, config.concurrency ?? 16, async (candidate) => {\n const stat = await fs.lstat(candidate.absolutePath);\n if (stat.isSymbolicLink() || !stat.isFile()) return undefined;\n const [realRoot, real] = await Promise.all([\n fs.realpath(root),\n fs.realpath(candidate.absolutePath),\n ]);\n return isPathInside(realRoot, real) ? candidate : undefined;\n });\n return safe.filter((candidate): candidate is DiscoveredSource => candidate !== undefined);\n}\n\nfunction prefixGlob(directory: string, pattern: string): string {\n const normalized = normalizeStoredPath(pattern).replace(/^\\/+/, \"\");\n return `${normalizeStoredPath(directory)}/${normalized}`;\n}\n\nexport async function locateTsconfig(\n root: string,\n configured?: string,\n): Promise<string | undefined> {\n const candidates = configured ? [configured] : [\"tsconfig.json\", \"jsconfig.json\"];\n for (const candidate of candidates) {\n const absolute = path.resolve(root, candidate);\n if (!isPathInside(root, absolute)) continue;\n try {\n if ((await fs.stat(absolute)).isFile()) return relativePosix(root, absolute);\n } catch {\n // Missing candidates are expected during discovery.\n }\n }\n return undefined;\n}\n\nfunction languageFromPath(filePath: string): Language {\n const extension = path.extname(filePath).slice(1).toLowerCase();\n return extension as Language;\n}\n","import { normalizeStoredPath } from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport function packageEntryPoints(raw: Record<string, unknown>): string[] {\n const entries = new Set<string>();\n for (const field of [\"main\", \"module\", \"types\", \"typings\", \"bin\"]) {\n const value = raw[field];\n if (typeof value === \"string\") addEntry(value, entries);\n else if (value && typeof value === \"object\") {\n for (const item of Object.values(value)) {\n if (typeof item === \"string\") addEntry(item, entries);\n }\n }\n }\n collectExportPaths(raw.exports, entries);\n return [...entries].sort(compareText);\n}\n\nfunction collectExportPaths(value: unknown, output: Set<string>): void {\n if (typeof value === \"string\" && !value.includes(\"*\")) {\n addEntry(value, output);\n } else if (value && typeof value === \"object\") {\n for (const nested of Object.values(value)) collectExportPaths(nested, output);\n }\n}\n\nfunction addEntry(value: string, output: Set<string>): void {\n const normalized = normalizeStoredPath(value);\n if (isSafeStoredPath(normalized) && normalized !== \".\") output.add(normalized);\n}\n\nfunction isSafeStoredPath(value: string): boolean {\n return (\n value.length > 0 &&\n !value.includes(\"\\\\\") &&\n !value.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(value) &&\n !value.split(\"/\").includes(\"..\")\n );\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { getPackages } from \"@manypkg/get-packages\";\n\nimport { packageEntryPoints } from \"./package-metadata.js\";\nimport type { WorkspaceDiscovery, WorkspaceDiscoveryResult, WorkspacePackage } from \"./types.js\";\nimport {\n isPathInside,\n isSafeRegularFile,\n normalizeStoredPath,\n readFileInsideRoot,\n} from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport class ManypkgWorkspaceDiscovery implements WorkspaceDiscovery {\n readonly name = \"manypkg\";\n\n async discover(root: string): Promise<WorkspaceDiscoveryResult> {\n try {\n if (!(await isWorkspaceRoot(root))) {\n return { tool: \"single-package\", packages: [] };\n }\n const discovered = await getPackages(root);\n const [selectedRoot, discoveredRoot] = await Promise.all([\n fs.realpath(root),\n fs.realpath(discovered.rootDir),\n ]);\n // getPackages searches ancestors. A scan rooted at a child package must not silently\n // expand to its parent workspace and expose sibling metadata.\n if (selectedRoot !== discoveredRoot) return { tool: \"single-package\", packages: [] };\n\n const packages: WorkspacePackage[] = [];\n for (const workspace of discovered.packages) {\n const realDirectory = await fs.realpath(workspace.dir);\n if (realDirectory === selectedRoot || !isPathInside(selectedRoot, realDirectory)) continue;\n const manifestPath = path.join(realDirectory, \"package.json\");\n if (!(await isSafeRegularFile(selectedRoot, manifestPath))) continue;\n const manifest = JSON.parse(\n (await readFileInsideRoot(selectedRoot, manifestPath)).toString(\"utf8\"),\n ) as Record<string, unknown>;\n packages.push({\n name: typeof manifest.name === \"string\" ? manifest.name : path.basename(realDirectory),\n path: normalizeStoredPath(path.relative(selectedRoot, realDirectory)),\n entryPoints: packageEntryPoints(manifest),\n });\n }\n packages.sort((a, b) => compareText(a.path, b.path));\n return { tool: discovered.tool.type, packages };\n } catch {\n // A malformed or unsupported workspace manifest must not prevent single-package scanning.\n return { tool: \"single-package\", packages: [] };\n }\n }\n}\n\nexport function createWorkspaceDiscovery(): WorkspaceDiscovery {\n return new ManypkgWorkspaceDiscovery();\n}\n\nasync function isWorkspaceRoot(root: string): Promise<boolean> {\n for (const marker of [\"pnpm-workspace.yaml\", \"pnpm-workspace.yml\", \"lerna.json\", \"rush.json\"]) {\n if (await isSafeRegularFile(root, path.join(root, marker))) return true;\n }\n try {\n const packageJson = JSON.parse(\n (await readFileInsideRoot(root, path.join(root, \"package.json\"))).toString(\"utf8\"),\n ) as { workspaces?: unknown };\n return (\n Array.isArray(packageJson.workspaces) ||\n Boolean(\n packageJson.workspaces &&\n typeof packageJson.workspaces === \"object\" &&\n \"packages\" in packageJson.workspaces,\n )\n );\n } catch {\n return false;\n }\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport fg from \"fast-glob\";\nimport createIgnore, { type Ignore } from \"ignore\";\n\nimport type { IgnoreAdapter } from \"./types.js\";\nimport { isPathInside, normalizeStoredPath } from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\ninterface IgnoreRuleSet {\n directory: string;\n matcher: Ignore;\n}\n\nexport class GitIgnoreAdapter implements IgnoreAdapter {\n readonly name = \"ignore\";\n\n async filter(root: string, paths: readonly string[]): Promise<string[]> {\n const rules = await loadIgnoreRules(root);\n return paths\n .map(normalizeStoredPath)\n .filter(isSafeRelativePath)\n .filter((candidate) => !isIgnored(candidate, rules))\n .sort(compareText);\n }\n}\n\nexport function createGitIgnoreAdapter(): IgnoreAdapter {\n return new GitIgnoreAdapter();\n}\n\nasync function loadIgnoreRules(root: string): Promise<IgnoreRuleSet[]> {\n const ignoreFiles = await fg([\".gitignore\", \"**/.gitignore\"], {\n cwd: root,\n onlyFiles: true,\n unique: true,\n dot: true,\n followSymbolicLinks: false,\n ignore: [\"**/.git/**\", \"**/node_modules/**\"],\n });\n const rules: IgnoreRuleSet[] = [];\n for (const relative of ignoreFiles.sort(compareIgnoreFiles)) {\n const normalizedRelative = normalizeStoredPath(relative);\n const directory = normalizeStoredPath(path.posix.dirname(normalizedRelative));\n if (directory !== \".\" && isIgnoredDirectory(directory, rules)) continue;\n const absolute = path.resolve(root, relative);\n const stat = await fs.lstat(absolute);\n if (stat.isSymbolicLink() || !stat.isFile()) continue;\n const real = await fs.realpath(absolute);\n if (!isPathInside(root, real)) continue;\n rules.push({\n directory,\n matcher: createIgnore().add(await fs.readFile(real, \"utf8\")),\n });\n }\n return rules;\n}\n\nfunction isIgnoredDirectory(directory: string, rules: IgnoreRuleSet[]): boolean {\n let ignored = false;\n for (const rule of rules) {\n const relative = relativeToRule(`${directory}/`, rule.directory);\n if (!relative) continue;\n const result = rule.matcher.test(relative);\n if (result.ignored) ignored = true;\n else if (result.unignored) ignored = false;\n }\n return ignored;\n}\n\nfunction isIgnored(candidate: string, rules: IgnoreRuleSet[]): boolean {\n let ignored = false;\n for (const rule of rules) {\n const relative = relativeToRule(candidate, rule.directory);\n if (!relative) continue;\n const result = rule.matcher.test(relative);\n if (result.ignored) ignored = true;\n else if (result.unignored) ignored = false;\n }\n return ignored;\n}\n\nfunction relativeToRule(candidate: string, directory: string): string | undefined {\n if (directory === \".\") return candidate;\n const prefix = `${directory}/`;\n return candidate.startsWith(prefix) ? candidate.slice(prefix.length) : undefined;\n}\n\nfunction compareIgnoreFiles(a: string, b: string): number {\n const depth = (value: string) => normalizeStoredPath(value).split(\"/\").length;\n return depth(a) - depth(b) || compareText(a, b);\n}\n\nfunction isSafeRelativePath(value: string): boolean {\n return (\n value.length > 0 &&\n value !== \".\" &&\n !value.includes(\"\\\\\") &&\n !value.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(value) &&\n !value.split(\"/\").includes(\"..\")\n );\n}\n","import path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"./constants.js\";\nimport {\n BoundedTypeScriptFileSystem,\n fallbackCompilerOptions,\n sanitizeCompilerPathAliases,\n} from \"./compiler-units.js\";\nimport type {\n DiagnosticRecord,\n SemanticResolution,\n SemanticResolveInput,\n SemanticResolver,\n} from \"./types.js\";\nimport {\n isPathInside,\n isSafeRelativePathPattern,\n normalizeStoredPath,\n relativePosix,\n redactAbsolutePathsInText,\n} from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport const TYPESCRIPT_SEMANTIC_VERSION = `compiler-units-v4+typescript-${ts.version}`;\n\n/** TypeScript remains authoritative for all TypeScript/JavaScript semantic facts. */\nexport class TypeScriptSemanticResolver implements SemanticResolver {\n readonly name = \"typescript-program\";\n readonly version = TYPESCRIPT_SEMANTIC_VERSION;\n\n constructor(private readonly jsDocParsingMode = ts.JSDocParsingMode.ParseAll) {}\n\n resolve(input: SemanticResolveInput): SemanticResolution {\n const compiler = loadCompilerConfiguration(input.root, input.tsconfig);\n const currentDirectory = input.tsconfig\n ? path.dirname(path.resolve(input.root, input.tsconfig))\n : input.root;\n const fileSystem = compiler.fileSystem;\n const host = createBoundedCompilerHost(\n input.root,\n currentDirectory,\n compiler.options,\n fileSystem,\n compiler.parsedCommands,\n );\n // Built-in scans need type evidence; public/custom resolvers retain full JSDoc by default.\n host.jsDocParsingMode = this.jsDocParsingMode;\n const cache = ts.createModuleResolutionCache(\n currentDirectory,\n (fileName) => host.getCanonicalFileName(fileName),\n compiler.options,\n );\n const resolveProjectReferenceModule = createProjectReferenceModuleResolver(\n input.root,\n compiler.projectReferences ?? [],\n fileSystem,\n compiler.parsedCommands,\n );\n const resolveModule = (\n moduleName: string,\n containingFile: string,\n ): ts.ResolvedModuleFull | undefined => {\n const normal = ts.resolveModuleName(\n moduleName,\n containingFile,\n compiler.options,\n host,\n cache,\n ).resolvedModule;\n return resolveProjectReferenceModule(moduleName) ?? normal;\n };\n host.resolveModuleNameLiterals = (moduleLiterals, containingFile) =>\n moduleLiterals.map((literal) => {\n const resolvedModule = resolveModule(literal.text, containingFile);\n return { resolvedModule };\n });\n const rootNames = [...new Set(input.sourceFiles.map((file) => path.resolve(file)))].sort(\n compareText,\n );\n const program = ts.createProgram({\n rootNames,\n options: compiler.options,\n ...(compiler.projectReferences?.length\n ? { projectReferences: compiler.projectReferences }\n : {}),\n host,\n // Reference edges are parsed and fingerprinted by the compiler-unit graph. A read-only\n // scanner resolves their source imports directly so correctness never depends on prebuilt\n // declaration outputs being present beside a referenced project.\n configFileParsingDiagnostics: compiler.rawDiagnostics,\n });\n return {\n program,\n checker: program.getTypeChecker(),\n pathAliases: compiler.pathAliases,\n diagnostics: compiler.diagnostics,\n semanticInputs: () => fileSystem.semanticInputs(),\n resolveModule(moduleName, containingFile) {\n const resolved = resolveModule(moduleName, containingFile);\n return resolved\n ? {\n resolvedFileName: resolved.resolvedFileName,\n isExternalLibraryImport: Boolean(resolved.isExternalLibraryImport),\n }\n : undefined;\n },\n };\n }\n}\n\ninterface ReferencedPackage {\n name: string;\n root: string;\n manifest: Record<string, unknown>;\n parsed: ts.ParsedCommandLine;\n}\n\n/**\n * TypeScript normally resolves a referenced package through its emitted declaration entrypoint.\n * A scanner cannot require users to build first, so map a missing referenced-package output back\n * to a source owned by that referenced project. This is deliberately limited to direct, in-root\n * references and static package metadata.\n */\nfunction createProjectReferenceModuleResolver(\n root: string,\n references: readonly ts.ProjectReference[],\n fileSystem: BoundedTypeScriptFileSystem,\n parsedCommands: Map<string, ts.ParsedCommandLine>,\n): (moduleName: string) => ts.ResolvedModuleFull | undefined {\n const packages: ReferencedPackage[] = [];\n for (const reference of references) {\n const configPath = ts.resolveProjectReferencePath(reference);\n if (!isPathInside(root, configPath)) continue;\n const parsed = parseCommand(root, configPath, fileSystem, parsedCommands);\n if (!parsed) continue;\n const packageRoot = path.dirname(configPath);\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n const raw = fileSystem.readFile(packageJsonPath);\n if (!raw) continue;\n try {\n const manifest = JSON.parse(raw) as Record<string, unknown>;\n if (typeof manifest.name !== \"string\" || manifest.name.length === 0) continue;\n packages.push({ name: manifest.name, root: packageRoot, manifest, parsed });\n } catch {\n // Invalid package metadata remains a normal unresolved import.\n }\n }\n packages.sort((a, b) => b.name.length - a.name.length || compareText(a.name, b.name));\n\n return (moduleName) => {\n const referenced = packages.find(\n (candidate) => moduleName === candidate.name || moduleName.startsWith(`${candidate.name}/`),\n );\n if (!referenced) return undefined;\n const subpath =\n moduleName === referenced.name ? \"\" : moduleName.slice(referenced.name.length + 1);\n const source = referencedPackageSource(referenced, subpath, fileSystem);\n if (!source) return undefined;\n return {\n resolvedFileName: source,\n extension: moduleExtension(source),\n isExternalLibraryImport: false,\n };\n };\n}\n\nfunction referencedPackageSource(\n referenced: ReferencedPackage,\n subpath: string,\n fileSystem: BoundedTypeScriptFileSystem,\n): string | undefined {\n const { parsed, root: packageRoot, manifest } = referenced;\n // Composite project references default rootDir to the configuration directory. Assuming a\n // conventional src/ directory breaks valid root-level packages and declaration redirects.\n const rootDir = parsed.options.rootDir ?? packageRoot;\n if (!isPathInside(packageRoot, rootDir)) return undefined;\n const owned = new Set(parsed.fileNames.map((fileName) => path.resolve(fileName)));\n const requestedTargets = packageEntryTargets(manifest, subpath);\n const bases: string[] = [];\n\n for (const target of requestedTargets) {\n const absoluteTarget = path.resolve(packageRoot, target);\n if (!isPathInside(packageRoot, absoluteTarget)) continue;\n const outDir = parsed.options.outDir;\n if (outDir && isPathInside(outDir, absoluteTarget)) {\n bases.push(path.resolve(rootDir, path.relative(outDir, absoluteTarget)));\n }\n bases.push(absoluteTarget);\n }\n bases.push(path.resolve(rootDir, subpath || \"index\"));\n\n for (const base of bases) {\n for (const candidate of sourceModuleCandidates(base)) {\n const absolute = path.resolve(candidate);\n if (\n isPathInside(packageRoot, absolute) &&\n owned.has(absolute) &&\n fileSystem.fileExists(absolute)\n ) {\n return fileSystem.realpath(absolute);\n }\n }\n }\n\n const expectedStem = normalizeModuleStem(subpath || \"index\");\n const matching = [...owned]\n .filter((fileName) => isPathInside(rootDir, fileName))\n .filter((fileName) => {\n const relative = normalizeModuleStem(relativePosix(rootDir, fileName));\n return relative === expectedStem || relative === `${expectedStem}/index`;\n })\n .sort(compareText);\n return matching[0];\n}\n\nfunction packageEntryTargets(manifest: Record<string, unknown>, subpath: string): string[] {\n const output: string[] = [];\n const exportKey = subpath ? `./${subpath}` : \".\";\n const exportsValue = manifest.exports;\n if (exportsValue && typeof exportsValue === \"object\" && !Array.isArray(exportsValue)) {\n const exportsRecord = exportsValue as Record<string, unknown>;\n const keyed = exportsRecord[exportKey];\n collectStaticPackageTargets(\n keyed ?? (!subpath && !(\".\" in exportsRecord) ? exportsValue : undefined),\n output,\n );\n } else if (!subpath) {\n collectStaticPackageTargets(exportsValue, output);\n }\n if (!subpath) {\n for (const field of [\"types\", \"typings\", \"source\", \"module\", \"main\"] as const) {\n const value = manifest[field];\n if (typeof value === \"string\") output.push(value);\n }\n }\n return [...new Set(output)];\n}\n\nfunction collectStaticPackageTargets(value: unknown, output: string[]): void {\n if (typeof value === \"string\") {\n output.push(value);\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) collectStaticPackageTargets(item, output);\n return;\n }\n if (!value || typeof value !== \"object\") return;\n const record = value as Record<string, unknown>;\n for (const key of [\"types\", \"import\", \"default\", \"require\", \"node\"]) {\n if (key in record) collectStaticPackageTargets(record[key], output);\n }\n}\n\nfunction sourceModuleCandidates(value: string): string[] {\n const stem = value\n .replace(/\\.d\\.(?:ts|mts|cts)$/i, \"\")\n .replace(/\\.(?:tsx?|mts|cts|jsx?|mjs|cjs)$/i, \"\");\n const extensions = [\".ts\", \".tsx\", \".mts\", \".cts\", \".js\", \".jsx\", \".mjs\", \".cjs\"];\n return [\n value,\n ...extensions.map((extension) => `${stem}${extension}`),\n ...extensions.map((extension) => path.join(stem, `index${extension}`)),\n ];\n}\n\nfunction normalizeModuleStem(value: string): string {\n return normalizeStoredPath(value)\n .replace(/\\.d\\.(?:ts|mts|cts)$/i, \"\")\n .replace(/\\.(?:tsx?|mts|cts|jsx?|mjs|cjs)$/i, \"\");\n}\n\nfunction moduleExtension(fileName: string): ts.Extension {\n const lower = fileName.toLowerCase();\n if (lower.endsWith(\".tsx\")) return ts.Extension.Tsx;\n if (lower.endsWith(\".mts\")) return ts.Extension.Mts;\n if (lower.endsWith(\".cts\")) return ts.Extension.Cts;\n if (lower.endsWith(\".jsx\")) return ts.Extension.Jsx;\n if (lower.endsWith(\".mjs\")) return ts.Extension.Mjs;\n if (lower.endsWith(\".cjs\")) return ts.Extension.Cjs;\n if (lower.endsWith(\".js\")) return ts.Extension.Js;\n return ts.Extension.Ts;\n}\n\nexport function createTypeScriptSemanticResolver(): SemanticResolver {\n return new TypeScriptSemanticResolver();\n}\n\nexport function createBoundedModuleResolver(\n root: string,\n currentDirectory: string,\n options: ts.CompilerOptions,\n): NonNullable<SemanticResolution[\"resolveModule\"]> {\n const fileSystem = new BoundedTypeScriptFileSystem(root);\n const cache = ts.createModuleResolutionCache(\n currentDirectory,\n (fileName) => (ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase()),\n options,\n );\n const host: ts.ModuleResolutionHost = {\n fileExists: fileSystem.fileExists,\n readFile: fileSystem.readFile,\n directoryExists: fileSystem.directoryExists,\n getDirectories: fileSystem.getDirectories,\n realpath: fileSystem.realpath,\n getCurrentDirectory: () => currentDirectory,\n useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,\n };\n return (moduleName, containingFile) => {\n const resolved = ts.resolveModuleName(\n moduleName,\n containingFile,\n options,\n host,\n cache,\n ).resolvedModule;\n return resolved\n ? {\n resolvedFileName: resolved.resolvedFileName,\n isExternalLibraryImport: Boolean(resolved.isExternalLibraryImport),\n }\n : undefined;\n };\n}\n\ninterface CompilerConfiguration {\n options: ts.CompilerOptions;\n projectReferences?: readonly ts.ProjectReference[];\n pathAliases: Record<string, string[]>;\n diagnostics: DiagnosticRecord[];\n rawDiagnostics: readonly ts.Diagnostic[];\n fileSystem: BoundedTypeScriptFileSystem;\n parsedCommands: Map<string, ts.ParsedCommandLine>;\n}\n\nfunction loadCompilerConfiguration(root: string, tsconfig?: string): CompilerConfiguration {\n const fileSystem = new BoundedTypeScriptFileSystem(root);\n if (!tsconfig) {\n return {\n options: fallbackCompilerOptions(root),\n pathAliases: {},\n diagnostics: [],\n rawDiagnostics: [],\n fileSystem,\n parsedCommands: new Map(),\n };\n }\n\n const absolute = path.resolve(root, tsconfig);\n if (!isPathInside(root, absolute) || !fileSystem.fileExists(absolute)) {\n const diagnostic: DiagnosticRecord = {\n schemaVersion: SCHEMA_VERSION,\n code: \"compiler-config\",\n severity: \"warning\",\n message:\n \"The owning TypeScript configuration was unavailable or unsafe; fallback options were used.\",\n ...(isPathInside(root, absolute) ? { file: relativePosix(root, absolute) } : {}),\n };\n return {\n options: fallbackCompilerOptions(root),\n pathAliases: {},\n diagnostics: [diagnostic],\n rawDiagnostics: [],\n fileSystem,\n parsedCommands: new Map(),\n };\n }\n\n const parsedCommands = new Map<string, ts.ParsedCommandLine>();\n const parsed = parseCommand(root, absolute, fileSystem, parsedCommands);\n if (!parsed) {\n return {\n options: fallbackCompilerOptions(root),\n pathAliases: {},\n diagnostics: [\n {\n schemaVersion: SCHEMA_VERSION,\n code: \"compiler-config\",\n severity: \"warning\",\n message:\n \"The owning TypeScript configuration could not be parsed; fallback options were used.\",\n file: relativePosix(root, absolute),\n },\n ],\n rawDiagnostics: [],\n fileSystem,\n parsedCommands,\n };\n }\n const projectReferences = (parsed.projectReferences ?? []).filter((reference) => {\n const target = ts.resolveProjectReferencePath(reference);\n return isPathInside(root, target) && fileSystem.fileExists(target);\n });\n const options = parsed.options;\n anchorCompilerOptions(root, path.dirname(absolute), options);\n return {\n options,\n ...(projectReferences.length > 0 ? { projectReferences } : {}),\n pathAliases: pathAliases(root, path.dirname(absolute), options),\n diagnostics: parsed.errors.map((diagnostic) => compilerDiagnostic(diagnostic, root)),\n rawDiagnostics: parsed.errors,\n fileSystem,\n parsedCommands,\n };\n}\n\nfunction parseCommand(\n root: string,\n configPath: string,\n fileSystem: BoundedTypeScriptFileSystem,\n cache: Map<string, ts.ParsedCommandLine>,\n): ts.ParsedCommandLine | undefined {\n const absolute = path.resolve(configPath);\n const cached = cache.get(absolute);\n if (cached) return cached;\n if (!isPathInside(root, absolute) || !fileSystem.fileExists(absolute)) return undefined;\n try {\n const source = ts.readJsonConfigFile(absolute, fileSystem.readFile);\n const parsed = ts.parseJsonSourceFileConfigFileContent(\n source,\n fileSystem.parseHost(path.dirname(absolute)),\n path.dirname(absolute),\n undefined,\n absolute,\n undefined,\n undefined,\n fileSystem.extendedConfigCache,\n );\n parsed.projectReferences = (parsed.projectReferences ?? []).filter((reference) => {\n const target = ts.resolveProjectReferencePath(reference);\n return isPathInside(root, target) && fileSystem.fileExists(target);\n });\n anchorCompilerOptions(root, path.dirname(absolute), parsed.options);\n cache.set(absolute, parsed);\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nfunction createBoundedCompilerHost(\n root: string,\n currentDirectory: string,\n options: ts.CompilerOptions,\n fileSystem: BoundedTypeScriptFileSystem,\n parsedCommands: Map<string, ts.ParsedCommandLine>,\n): ts.CompilerHost {\n const host = ts.createCompilerHost(options, true) as ts.CompilerHost & {\n useSourceOfProjectReferenceRedirect?: () => boolean;\n };\n host.getCurrentDirectory = () => currentDirectory;\n host.fileExists = fileSystem.fileExists;\n host.readFile = fileSystem.readFile;\n host.directoryExists = fileSystem.directoryExists;\n host.getDirectories = fileSystem.getDirectories;\n host.readDirectory = (rootDir, extensions, excludes, includes, depth) => [\n ...fileSystem.readDirectory(rootDir, extensions, excludes, includes, depth),\n ];\n host.realpath = fileSystem.realpath;\n host.getEnvironmentVariable = () => \"\";\n host.writeFile = () => undefined;\n host.getParsedCommandLine = (configFileName) =>\n parseCommand(root, configFileName, fileSystem, parsedCommands);\n host.useSourceOfProjectReferenceRedirect = () => true;\n return host;\n}\n\nfunction anchorCompilerOptions(\n root: string,\n unitDirectory: string,\n options: ts.CompilerOptions,\n): void {\n options.configFilePath = options.configFilePath ?? path.join(unitDirectory, \"tsconfig.json\");\n if (!options.typeRoots) options.typeRoots = boundedTypeRoots(root, unitDirectory);\n else options.typeRoots = options.typeRoots.filter((entry) => isPathInside(root, entry));\n if (options.baseUrl && !isPathInside(root, options.baseUrl)) options.baseUrl = undefined;\n if (options.rootDirs)\n options.rootDirs = options.rootDirs.filter((entry) => isPathInside(root, entry));\n sanitizeCompilerPathAliases(options);\n}\n\nfunction boundedTypeRoots(root: string, start: string): string[] {\n const values: string[] = [];\n let current = path.resolve(start);\n while (isPathInside(root, current)) {\n values.push(path.join(current, \"node_modules\", \"@types\"));\n if (current === path.resolve(root)) break;\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return [...new Set(values)];\n}\n\nfunction pathAliases(\n root: string,\n configDirectory: string,\n options: ts.CompilerOptions,\n): Record<string, string[]> {\n const base =\n options.baseUrl ??\n (options as ts.CompilerOptions & { pathsBasePath?: string }).pathsBasePath ??\n configDirectory;\n const paths = (options.paths ?? {}) as Record<string, string[]>;\n return Object.fromEntries(\n Object.entries(paths)\n .filter(([alias]) => isSafeRelativePathPattern(alias))\n .sort(([a], [b]) => compareText(a, b))\n .map(([alias, values]) => [\n alias,\n values\n .filter(isSafeRelativePathPattern)\n .map((value) => path.resolve(base, value))\n .filter((value) => isPathInside(root, value))\n .map((value) => normalizeStoredPath(relativePosix(root, value)))\n .filter((value, index, entries) => entries.indexOf(value) === index)\n .sort(compareText),\n ]),\n );\n}\n\nexport function compilerDiagnostic(diagnostic: ts.Diagnostic, root: string): DiagnosticRecord {\n const message = sanitizeCompilerMessage(\n ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n root,\n );\n const file = diagnostic.file;\n const start =\n file && diagnostic.start !== undefined\n ? file.getLineAndCharacterOfPosition(diagnostic.start)\n : undefined;\n let relativeFile: string | undefined;\n if (file) {\n try {\n relativeFile = relativePosix(root, file.fileName);\n } catch {\n // Never persist absolute or out-of-root compiler paths.\n }\n }\n return {\n schemaVersion: SCHEMA_VERSION,\n code: diagnostic.file ? \"parse-error\" : \"compiler-config\",\n severity:\n diagnostic.category === ts.DiagnosticCategory.Error\n ? \"error\"\n : diagnostic.category === ts.DiagnosticCategory.Warning\n ? \"warning\"\n : \"info\",\n message,\n ...(relativeFile ? { file: relativeFile } : {}),\n ...(start ? { line: start.line + 1, column: start.character + 1 } : {}),\n };\n}\n\nfunction sanitizeCompilerMessage(message: string, root: string): string {\n return redactAbsolutePathsInText(message, root) || \"TypeScript reported a compiler diagnostic.\";\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { z, type ZodType } from \"zod\";\n\nimport { MANAGED_ARTIFACTS, MAP_COMPANION_ARTIFACTS, SCHEMA_VERSION } from \"./constants.js\";\nimport type { ResolvedConfiguration } from \"./config.js\";\nimport { CodeMapError, errorMessage } from \"./errors.js\";\nimport {\n CodeMapSchema,\n DiagnosticRecordSchema,\n FileRecordSchema,\n ManifestRecordSchema,\n ProjectRecordSchema,\n RelationRecordSchema,\n SymbolRecordSchema,\n} from \"./schemas.js\";\nimport type { CodeMap, LoadCodeMapOptions, ManifestRecord } from \"./types.js\";\nimport { resolveConfiguration } from \"./config.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { atomicWriteIfChanged, isNotFound, stableJson, stableJsonLine } from \"./utils/stable.js\";\n\ntype CompanionArtifact = (typeof MAP_COMPANION_ARTIFACTS)[number];\ntype CompanionContents = Record<CompanionArtifact, string>;\n\nexport async function writeCodeMap(\n resolved: ResolvedConfiguration,\n map: CodeMap,\n): Promise<{ wrote: boolean; map: CodeMap }> {\n const validated = finalizeCodeMap(map);\n const contents = buildCompanionContents(validated);\n await fs.mkdir(resolved.outputDir, { recursive: true });\n let wrote = false;\n const write = async (\n name: (typeof MANAGED_ARTIFACTS)[number],\n content: string,\n ): Promise<void> => {\n wrote = (await atomicWriteIfChanged(path.join(resolved.outputDir, name), content)) || wrote;\n };\n\n // The manifest is committed last so readers never see a new manifest before its records exist.\n for (const name of MAP_COMPANION_ARTIFACTS) await write(name, contents[name]);\n await write(\"manifest.json\", stableJson(validated.manifest, true));\n return { wrote, map: validated };\n}\n\nexport function finalizeCodeMap(map: CodeMap): CodeMap {\n const withoutIntegrity: CodeMap = {\n ...map,\n manifest: { ...map.manifest, artifacts: [], integrityHash: \"0\".repeat(64) },\n };\n const contents = buildCompanionContents(withoutIntegrity);\n const manifestWithArtifacts: ManifestRecord = {\n ...withoutIntegrity.manifest,\n artifacts: MAP_COMPANION_ARTIFACTS.map((artifactPath) => ({\n path: artifactPath,\n hash: hashText(Buffer.from(contents[artifactPath], \"utf8\")),\n })),\n };\n const finalized: CodeMap = {\n ...withoutIntegrity,\n manifest: {\n ...manifestWithArtifacts,\n integrityHash: computeManifestIntegrityHash(manifestWithArtifacts),\n },\n };\n return parseWithSchema(CodeMapSchema, finalized, \"generated code map\");\n}\n\nexport function buildOverview(map: CodeMap): string {\n const lines = [\n \"# AI Code Map\",\n \"\",\n `Project: ${map.project.name}`,\n `Frameworks: ${map.project.frameworks.join(\", \") || \"none detected\"}`,\n \"\",\n \"## Counts\",\n \"\",\n `- Files: ${map.project.counts.files}`,\n `- Symbols: ${map.project.counts.symbols}`,\n `- Relations: ${map.project.counts.relations}`,\n `- Diagnostics: ${map.project.counts.diagnostics}`,\n \"\",\n \"## Entry points\",\n \"\",\n ...(map.project.entryPoints.length > 0\n ? map.project.entryPoints.map((entry) => `- ${entry}`)\n : [\"- None declared in package.json\"]),\n \"\",\n \"## Indexed files\",\n \"\",\n ...map.files.map(\n (file) =>\n `- ${file.path} (${file.symbolIds.length} symbols; ${file.frameworks.join(\", \") || \"generic\"})`,\n ),\n \"\",\n \"> This map is a navigation aid. Inspect the actual source before changing code; source is authoritative.\",\n \"\",\n ];\n return lines.join(\"\\n\");\n}\n\nexport async function loadCodeMap(options: LoadCodeMapOptions = {}): Promise<CodeMap> {\n const resolved = await resolveConfiguration(options);\n return loadCodeMapFrom(resolved.outputDir);\n}\n\nexport async function loadCodeMapFrom(outputDir: string): Promise<CodeMap> {\n try {\n const manifest = await readJson(\n path.join(outputDir, \"manifest.json\"),\n \"manifest\",\n ManifestRecordSchema,\n );\n verifyManifestIntegrity(manifest, outputDir);\n const rawEntries = await Promise.all(\n MAP_COMPANION_ARTIFACTS.map(\n async (name) => [name, await fs.readFile(path.join(outputDir, name))] as const,\n ),\n );\n const raw = Object.fromEntries(rawEntries) as Record<CompanionArtifact, Buffer>;\n verifyArtifactIntegrity(manifest, raw, outputDir);\n\n const overview = raw[\"overview.md\"].toString(\"utf8\");\n const project = parseJsonBuffer(raw[\"project.json\"], \"project\", ProjectRecordSchema);\n const files = parseJsonLinesBuffer(raw[\"files.jsonl\"], \"file\", FileRecordSchema);\n const symbols = parseJsonLinesBuffer(raw[\"symbols.jsonl\"], \"symbol\", SymbolRecordSchema);\n const relations = parseJsonLinesBuffer(\n raw[\"relations.jsonl\"],\n \"relation\",\n RelationRecordSchema,\n );\n const diagnostics = parseJsonBuffer(\n raw[\"diagnostics.json\"],\n \"diagnostics\",\n z.array(DiagnosticRecordSchema),\n );\n const map = parseWithSchema(\n CodeMapSchema,\n {\n manifest,\n project,\n files,\n symbols,\n relations,\n diagnostics,\n },\n \"persisted code map\",\n );\n if (overview !== buildOverview(map)) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `The overview artifact at ${outputDir} does not match the persisted code map. Rescan the project.`,\n );\n }\n return map;\n } catch (error) {\n if (isNotFound(error)) {\n throw new CodeMapError(\n \"MAP_NOT_FOUND\",\n `No complete code map exists at ${outputDir}. Run ai-code-map scan.`,\n );\n }\n if (error instanceof CodeMapError) throw error;\n throw new CodeMapError(\n \"MAP_READ_FAILED\",\n `Could not load code map at ${outputDir}: ${errorMessage(error)}`,\n { cause: error },\n );\n }\n}\n\nfunction buildCompanionContents(map: CodeMap): CompanionContents {\n return {\n \"overview.md\": buildOverview(map),\n \"project.json\": stableJson(map.project, true),\n \"files.jsonl\": jsonLines(map.files),\n \"symbols.jsonl\": jsonLines(map.symbols),\n \"relations.jsonl\": jsonLines(map.relations),\n \"diagnostics.json\": stableJson(map.diagnostics, true),\n };\n}\n\nfunction verifyArtifactIntegrity(\n manifest: ManifestRecord,\n raw: Record<CompanionArtifact, Buffer>,\n outputDir: string,\n): void {\n const declared = new Map(manifest.artifacts.map((artifact) => [artifact.path, artifact.hash]));\n if (\n declared.size !== MAP_COMPANION_ARTIFACTS.length ||\n MAP_COMPANION_ARTIFACTS.some((name) => !declared.has(name))\n ) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid persisted code map: the manifest at ${outputDir} does not cover the complete companion artifact set. Rescan the project.`,\n );\n }\n for (const name of MAP_COMPANION_ARTIFACTS) {\n if (declared.get(name) !== hashText(raw[name])) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid persisted code map: the ${name} artifact at ${outputDir} does not match its manifest hash. Rescan the project.`,\n );\n }\n }\n}\n\nexport function computeManifestIntegrityHash(manifest: ManifestRecord): string {\n const content: Record<string, unknown> = { ...manifest };\n delete content.integrityHash;\n return hashText(Buffer.from(stableJson(content), \"utf8\"));\n}\n\nfunction verifyManifestIntegrity(manifest: ManifestRecord, outputDir: string): void {\n if (manifest.integrityHash !== computeManifestIntegrityHash(manifest)) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid persisted code map: the manifest integrity hash at ${outputDir} is inconsistent. Rescan the project.`,\n );\n }\n}\n\n/** Read only the commit-marker artifact for freshness/change checks without retaining the map. */\nexport async function loadManifestFrom(outputDir: string): Promise<ManifestRecord> {\n try {\n const manifest = await readJson(\n path.join(outputDir, \"manifest.json\"),\n \"manifest\",\n ManifestRecordSchema,\n );\n verifyManifestIntegrity(manifest, outputDir);\n return manifest;\n } catch (error) {\n if (isNotFound(error)) {\n throw new CodeMapError(\n \"MAP_NOT_FOUND\",\n `No complete code map exists at ${outputDir}. Run ai-code-map scan.`,\n );\n }\n if (error instanceof CodeMapError) throw error;\n throw new CodeMapError(\n \"MAP_READ_FAILED\",\n `Could not load code map manifest at ${outputDir}: ${errorMessage(error)}`,\n { cause: error },\n );\n }\n}\n\nfunction jsonLines(records: readonly unknown[]): string {\n if (records.length === 0) return \"\";\n return `${records.map(stableJsonLine).join(\"\\n\")}\\n`;\n}\n\nasync function readJson<T>(filePath: string, label: string, schema: ZodType<T>): Promise<T> {\n try {\n return parseJsonBuffer(await fs.readFile(filePath), label, schema);\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid JSON in ${label} artifact ${filePath}. Rescan the project.`,\n );\n }\n throw error;\n }\n}\n\nfunction parseJsonBuffer<T>(contents: Buffer, label: string, schema: ZodType<T>): T {\n try {\n const raw: unknown = JSON.parse(contents.toString(\"utf8\"));\n return parseWithSchema(schema, raw, label);\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid JSON in ${label} artifact. Rescan the project.`,\n );\n }\n throw error;\n }\n}\n\nfunction parseJsonLinesBuffer<T>(\n contents: Buffer,\n label: string,\n schema: ZodType<T>,\n filePath = label,\n): T[] {\n const text = contents.toString(\"utf8\");\n const records: T[] = [];\n for (const [index, line] of text.split(/\\r?\\n/).entries()) {\n if (!line.trim()) continue;\n try {\n const raw: unknown = JSON.parse(line);\n records.push(parseWithSchema(schema, raw, `${label} at line ${index + 1}`));\n } catch (error) {\n if (error instanceof CodeMapError) throw error;\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid JSON in ${label} artifact ${filePath} at line ${index + 1}. Rescan the project.`,\n );\n }\n }\n return records;\n}\n\nfunction parseWithSchema<T>(schema: ZodType<T>, value: unknown, label: string): T {\n if (\n value &&\n typeof value === \"object\" &&\n \"schemaVersion\" in value &&\n (value as { schemaVersion?: unknown }).schemaVersion !== SCHEMA_VERSION\n ) {\n throw new CodeMapError(\n \"INCOMPATIBLE_SCHEMA\",\n `Unsupported ${label} schema version ${String((value as { schemaVersion?: unknown }).schemaVersion)}; this build supports version ${SCHEMA_VERSION}. Run ai-code-map scan to regenerate the map.`,\n );\n }\n const parsed = schema.safeParse(value);\n if (parsed.success) return parsed.data;\n const details = parsed.error.issues\n .slice(0, 5)\n .map((issue) => `${issue.path.join(\".\") || label}: ${issue.message}`)\n .join(\"; \");\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid ${label}: ${details}. Run ai-code-map scan to regenerate the map.`,\n );\n}\n","import ts from \"typescript\";\n\nimport { DEFAULT_SYNTAX_PARSER } from \"./constants.js\";\nimport type {\n Language,\n SourceRange,\n SyntaxFact,\n SyntaxIssue,\n SyntaxParseInput,\n SyntaxParseResult,\n SyntaxParserAdapter,\n} from \"./types.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nconst registeredTypeScriptParsers = new WeakSet();\n\nexport class TypeScriptParserAdapter implements SyntaxParserAdapter {\n readonly name = \"typescript-compiler-syntax\";\n readonly version = ts.version;\n\n constructor() {\n registeredTypeScriptParsers.add(this);\n }\n\n supports(language: Language): boolean {\n return [\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"cts\", \"mjs\", \"cjs\"].includes(language);\n }\n\n parse(input: SyntaxParseInput): SyntaxParseResult {\n const sourceFile = ts.createSourceFile(\n input.path,\n input.source,\n ts.ScriptTarget.Latest,\n true,\n scriptKind(input.language),\n );\n const facts: SyntaxFact[] = [];\n visitSyntax(sourceFile, sourceFile, this.name, facts);\n const parseDiagnostics =\n (sourceFile as unknown as { parseDiagnostics?: readonly ts.DiagnosticWithLocation[] })\n .parseDiagnostics ?? [];\n const issues: SyntaxIssue[] = parseDiagnostics.map((diagnostic) => ({\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n range: offsetRange(sourceFile, diagnostic.start, diagnostic.length),\n }));\n for (const issue of issues) {\n facts.push({\n kind: \"parse-error\",\n nodeType: \"typescript-diagnostic\",\n ...(issue.range ? { range: issue.range } : { range: pointRange(1, 1) }),\n evidence: { parser: this.name, exact: true },\n });\n }\n return {\n parser: this.name,\n facts: facts.sort(compareFacts),\n issues,\n hadErrors: issues.length > 0,\n };\n }\n}\n\nexport class FallbackParserAdapter implements SyntaxParserAdapter {\n readonly name: string;\n\n constructor(\n readonly primary: SyntaxParserAdapter,\n readonly fallback: SyntaxParserAdapter = new TypeScriptParserAdapter(),\n ) {\n this.name = `${primary.name}-with-${fallback.name}-fallback`;\n }\n\n async supports(language: Language): Promise<boolean> {\n return (await this.primary.supports(language)) || (await this.fallback.supports(language));\n }\n\n async parse(input: SyntaxParseInput): Promise<SyntaxParseResult> {\n try {\n if (await this.primary.supports(input.language)) {\n const result = await this.primary.parse(input);\n if (!result.issues.some((issue) => issue.fatal)) return result;\n return await this.parseFallback(\n input,\n `Parser ${this.primary.name} reported a fatal syntax failure.`,\n );\n }\n return await this.parseFallback(\n input,\n `Parser ${this.primary.name} does not support ${input.language}.`,\n );\n } catch {\n // Adapter errors are deliberately not persisted: third-party messages can contain\n // absolute paths, source text, or environment-derived values.\n return this.parseFallback(\n input,\n `Parser ${this.primary.name} failed; used ${this.fallback.name}.`,\n );\n }\n }\n\n private async parseFallback(input: SyntaxParseInput, reason: string): Promise<SyntaxParseResult> {\n const fallback = await this.fallback.parse(input);\n return {\n ...fallback,\n fallbackFrom: this.primary.name,\n issues: [{ message: reason }, ...fallback.issues],\n };\n }\n}\n\nexport function createTypeScriptParserAdapter(): SyntaxParserAdapter {\n return new TypeScriptParserAdapter();\n}\n\nexport function isBuiltInTypeScriptParserAdapter(\n parser: SyntaxParserAdapter,\n): parser is TypeScriptParserAdapter {\n // The registration check is intentionally first: a Proxy around a genuine instance is a\n // different object and cannot spoof provenance through alternating property reads.\n if (!registeredTypeScriptParsers.has(parser)) return false;\n if (Object.getPrototypeOf(parser) !== TypeScriptParserAdapter.prototype) return false;\n if (Object.hasOwn(parser, \"supports\") || Object.hasOwn(parser, \"parse\")) return false;\n const name = Object.getOwnPropertyDescriptor(parser, \"name\");\n const version = Object.getOwnPropertyDescriptor(parser, \"version\");\n return name?.value === DEFAULT_SYNTAX_PARSER && version?.value === ts.version;\n}\n\nfunction visitSyntax(\n sourceFile: ts.SourceFile,\n node: ts.Node,\n parser: string,\n output: SyntaxFact[],\n): void {\n const add = (kind: SyntaxFact[\"kind\"], nodeType: string, name?: string): void => {\n output.push({\n kind,\n nodeType,\n ...(name ? { name } : {}),\n range: nodeRange(sourceFile, node),\n evidence: { parser, exact: true },\n });\n };\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n add(\"import\", \"import-declaration\", node.moduleSpecifier.text);\n } else if (ts.isExportDeclaration(node)) {\n const moduleName =\n node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)\n ? node.moduleSpecifier.text\n : undefined;\n add(\"export\", \"export-declaration\", moduleName ?? exportNames(node));\n } else if (ts.isExportAssignment(node)) {\n add(\"export\", \"export-assignment\", \"default\");\n } else if (isNamedDeclarationFact(node)) {\n add(\"declaration\", ts.SyntaxKind[node.kind], declarationName(node));\n if (hasExport(node)) add(\"export\", \"export-modifier\", declarationName(node));\n } else if (ts.isCallExpression(node)) {\n add(\"call\", \"call-expression\", expressionName(node.expression));\n } else if (ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node)) {\n add(\"jsx-element\", \"jsx-element\", node.tagName.getText(sourceFile));\n }\n node.forEachChild((child) => visitSyntax(sourceFile, child, parser, output));\n}\n\nfunction isNamedDeclarationFact(\n node: ts.Node,\n): node is\n | ts.FunctionDeclaration\n | ts.ClassDeclaration\n | ts.InterfaceDeclaration\n | ts.TypeAliasDeclaration\n | ts.VariableDeclaration\n | ts.MethodDeclaration {\n return (\n ts.isFunctionDeclaration(node) ||\n ts.isClassDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isVariableDeclaration(node) ||\n ts.isMethodDeclaration(node)\n );\n}\n\nfunction declarationName(node: ts.NamedDeclaration): string | undefined {\n const name = node.name;\n if (!name) return \"default\";\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))\n return name.text;\n return undefined;\n}\n\nfunction hasExport(node: ts.Node): boolean {\n const owner = ts.isVariableDeclaration(node) ? node.parent.parent : node;\n return Boolean(\n ts.canHaveModifiers(owner) &&\n ts.getModifiers(owner)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword),\n );\n}\n\nfunction exportNames(node: ts.ExportDeclaration): string | undefined {\n if (!node.exportClause) return \"*\";\n if (ts.isNamespaceExport(node.exportClause)) return node.exportClause.name.text;\n return node.exportClause.elements\n .map((element) => element.name.text)\n .sort(compareText)\n .join(\",\");\n}\n\nfunction expressionName(expression: ts.Expression): string | undefined {\n if (ts.isIdentifier(expression)) return expression.text;\n if (ts.isPropertyAccessExpression(expression)) return expression.name.text;\n return undefined;\n}\n\nfunction scriptKind(language: Language): ts.ScriptKind {\n if (language === \"tsx\") return ts.ScriptKind.TSX;\n if (language === \"jsx\") return ts.ScriptKind.JSX;\n if ([\"js\", \"mjs\", \"cjs\"].includes(language)) return ts.ScriptKind.JS;\n return ts.ScriptKind.TS;\n}\n\nfunction nodeRange(sourceFile: ts.SourceFile, node: ts.Node): SourceRange {\n return offsetRange(\n sourceFile,\n node.getStart(sourceFile, false),\n node.getEnd() - node.getStart(sourceFile, false),\n );\n}\n\nfunction offsetRange(sourceFile: ts.SourceFile, startOffset: number, length: number): SourceRange {\n const start = sourceFile.getLineAndCharacterOfPosition(startOffset);\n const end = sourceFile.getLineAndCharacterOfPosition(startOffset + length);\n return {\n startLine: start.line + 1,\n startColumn: start.character + 1,\n endLine: end.line + 1,\n endColumn: end.character + 1,\n };\n}\n\nfunction pointRange(line: number, column: number): SourceRange {\n return { startLine: line, startColumn: column, endLine: line, endColumn: column };\n}\n\nfunction compareFacts(a: SyntaxFact, b: SyntaxFact): number {\n const key = (fact: SyntaxFact) =>\n `${String(fact.range.startLine).padStart(10, \"0\")}:${String(fact.range.startColumn).padStart(10, \"0\")}:${fact.kind}:${fact.name ?? \"\"}`;\n return compareText(key(a), key(b));\n}\n","import { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport { Worker } from \"node:worker_threads\";\n\nimport type { CompilerWorkerInput, CompilerWorkerResult } from \"./analyze.js\";\n\nexport function runCompilerUnitWorker(input: CompilerWorkerInput): Promise<CompilerWorkerResult> {\n let entry = new URL(\"./compiler-worker.js\", import.meta.url);\n if (import.meta.url.endsWith(\".ts\")) {\n // Source execution (tsx/Vitest) uses the development loader; packed code needs only Node.\n const loader = pathToFileURL(createRequire(import.meta.url).resolve(\"tsx/esm/api\")).href;\n const source = new URL(\"./compiler-worker.ts\", import.meta.url).href;\n const bootstrap = `import { tsImport } from ${JSON.stringify(loader)}; await tsImport(${JSON.stringify(source)}, ${JSON.stringify(import.meta.url)});`;\n entry = new URL(`data:text/javascript,${encodeURIComponent(bootstrap)}`);\n }\n return new Promise((resolve, reject) => {\n const worker = new Worker(entry, { workerData: input });\n let result: CompilerWorkerResult | undefined;\n worker.once(\"message\", (message: CompilerWorkerResult) => {\n result = message;\n });\n worker.once(\"error\", reject);\n worker.once(\"exit\", (code) => {\n if (code !== 0 || !result) {\n reject(new Error(`Compiler worker exited without a complete result (code ${code}).`));\n } else {\n resolve(result);\n }\n });\n });\n}\n","import type { CodeMap, ShowResult, SymbolKind, SymbolRecord } from \"./types.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nconst KIND_ALIASES: Record<string, SymbolKind> = {\n component: \"react-component\",\n hook: \"react-hook\",\n function: \"function\",\n class: \"class\",\n method: \"method\",\n interface: \"interface\",\n type: \"type-alias\",\n variable: \"variable\",\n page: \"next-page\",\n controller: \"nest-controller\",\n module: \"nest-module\",\n};\n\nexport function showSymbol(map: CodeMap, selector: string): ShowResult {\n const normalized = selector.trim();\n const exactId = map.symbols.filter((symbol) => symbol.id === normalized);\n let symbols = exactId;\n if (symbols.length === 0) {\n const shorthand = /^([a-z-]+):([^/#]+)$/i.exec(normalized);\n if (!shorthand) {\n // no-op\n } else {\n const kindToken = shorthand[1];\n const name = shorthand[2];\n if (kindToken && name) {\n const kind = KIND_ALIASES[kindToken.toLowerCase()];\n if (kind) {\n symbols = map.symbols.filter((symbol) => symbol.kind === kind && symbol.name === name);\n }\n }\n }\n }\n if (symbols.length === 0) {\n const [fileSelector, nameSelector] = splitFileSelector(normalized);\n if (nameSelector) {\n symbols = map.symbols.filter(\n (symbol) => symbol.file === fileSelector && symbol.name === nameSelector,\n );\n } else {\n symbols = map.symbols.filter(\n (symbol) => symbol.name === normalized || symbol.file === normalized,\n );\n }\n }\n if (symbols.length === 0) {\n const lower = normalized.toLowerCase();\n symbols = map.symbols.filter((symbol) => symbol.name.toLowerCase() === lower);\n }\n\n return {\n selector: normalized,\n matches: symbols\n .sort((a, b) => compareText(a.id, b.id))\n .map((symbol) => {\n const file = map.files.find((item) => item.path === symbol.file);\n if (!file) return undefined;\n return {\n symbol,\n file,\n inbound: map.relations\n .filter((relation) => relation.to === symbol.id)\n .sort(compareRelations),\n outbound: map.relations\n .filter((relation) => relation.from === symbol.id)\n .sort(compareRelations),\n };\n })\n .filter((match): match is NonNullable<typeof match> => match !== undefined),\n };\n}\n\nexport function formatShowResult(result: ShowResult): string {\n return result.matches\n .map(({ symbol, inbound, outbound }) => {\n const lines = [\n `${symbol.name} [${symbol.kind}]`,\n `id: ${symbol.id}`,\n `path: ${symbol.file}:${symbol.range.startLine}:${symbol.range.startColumn}`,\n `exported: ${String(symbol.exported)}`,\n ];\n if (symbol.signature) lines.push(`signature: ${symbol.signature}`);\n if (symbol.documentation) lines.push(`documentation: ${symbol.documentation}`);\n if (Object.keys(symbol.facts).length > 0) {\n lines.push(\"facts:\", ...formatFacts(symbol.facts));\n }\n const relations = [\n ...outbound.map(\n (relation) => ` -> ${relation.type} -> ${relation.to} (${relation.confidence})`,\n ),\n ...inbound\n .filter((relation) => relation.type !== \"used-by\")\n .map((relation) => ` <- ${relation.type} <- ${relation.from} (${relation.confidence})`),\n ];\n if (relations.length > 0) lines.push(\"relations:\", ...relations);\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n\");\n}\n\nfunction splitFileSelector(selector: string): [string, string | undefined] {\n const hash = selector.lastIndexOf(\"#\");\n return hash > 0 ? [selector.slice(0, hash), selector.slice(hash + 1)] : [selector, undefined];\n}\n\nfunction compareRelations(\n a: ShowResult[\"matches\"][number][\"inbound\"][number],\n b: ShowResult[\"matches\"][number][\"inbound\"][number],\n): number {\n return compareText(`${a.type}:${a.from}:${a.to}`, `${b.type}:${b.from}:${b.to}`);\n}\n\nfunction formatFacts(facts: SymbolRecord[\"facts\"]): string[] {\n return Object.entries(facts)\n .sort(([a], [b]) => compareText(a, b))\n .map(([key, value]) => ` ${key}: ${formatFactValue(value)}`);\n}\n\nfunction formatFactValue(value: SymbolRecord[\"facts\"][string]): string {\n if (Array.isArray(value)) return value.map((entry) => formatFactValue(entry)).join(\", \");\n if (value !== null && typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n"],"mappings":"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","names":["fs","path","path","fs","path","path","relation","path","fs","fs","path","ts","path","ts","ts","fallback","sourceFile","path","declaration","specifier","ts","ts","ts","source","path","ts","path","makeRelation","routeSegments","ts","path","makeRelation","path","ts","path","hasDirective","ts","isNameExported","isFunctionLikeExpression","symbol","makeRelation","ts","hasDirective","visit","isNameExported","isFunctionLikeExpression","dedupe","path","relative","findExportedDeclaration","findDeclarationByName","makeRelation","fs","path","ts","path","ts","path","ts","fs","path","fg","fs","path","fs","path","fs","path","fg","fg","path","fs","path","fg","fs","path","path","ts","ts","path","boundedTypeRoots","fs","path","z","fs","path","z","ts","path","fs","ts","ts","parseDiagnostics","nodeRange","fs","path","pathAliases","ts","path","relation","rangesEqual","rangeContains","ts","name","record","semanticInputIdentity","map","relation"]}
1
+ {"version":3,"sources":["../src/context.ts","../src/errors.ts","../src/utils/stable.ts","../src/search.ts","../src/read-navigation.ts","../src/utils/path.ts","../src/utils/hash.ts","../src/read.ts","../src/project-map.ts","../src/constants.ts","../src/config.ts","../src/schemas.ts","../src/scan.ts","../src/analyze.ts","../src/ids.ts","../src/analyzers/core.ts","../src/analyzers/helpers.ts","../src/analyzers/nestjs.ts","../src/analyzers/nextjs.ts","../src/analyzers/react.ts","../src/freshness.ts","../src/compiler-units.ts","../src/discovery.ts","../src/package-metadata.ts","../src/workspaces.ts","../src/ignore.ts","../src/semantic.ts","../src/storage.ts","../src/parser.ts","../src/compiler-worker-client.ts","../src/show.ts"],"sourcesContent":["import path from \"node:path\";\nimport type { CodeMap, SymbolRecord } from \"./types.js\";\nimport { CodeMapError } from \"./errors.js\";\nimport { findSymbols, type SymbolSearchMatch } from \"./search.js\";\nimport { buildReadNavigation } from \"./read-navigation.js\";\nimport { readFileInsideRoot } from \"./utils/path.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport interface ContextOptions {\n root: string;\n /** Shared source-line budget, 1..2000; default 800. */\n maxLines?: number;\n /** Shared source-character budget including line separators, 256..64000; default 32000. */\n maxChars?: number;\n /** Maximum search matches to expand, 1..5; default 3. */\n seeds?: number;\n}\nexport interface ContextSnippet {\n file: string;\n startLine: number;\n endLine: number;\n source: string;\n}\nexport interface ContextOmission {\n id: string;\n file: string;\n startLine: number;\n endLine: number;\n}\nexport interface ContextResult {\n query: string;\n matches: SymbolSearchMatch[];\n moreMatches: number;\n selected: { id: string; role: \"match\" | \"neighbor\" }[];\n snippets: ContextSnippet[];\n omitted: ContextOmission[];\n fileReferences: { file: string; line: number }[];\n tests: { file: string; line: number }[];\n omittedNavigation: number;\n usedLines: number;\n usedChars: number;\n limits: { maxLines: number; maxChars: number; seeds: number };\n}\n\nconst behavior = new Set([\"function\", \"method\", \"react-hook\", \"react-component\", \"class\"]);\nfunction budget(value: number, min: number, max: number, name: string): number {\n if (!Number.isInteger(value) || value < min || value > max)\n throw new RangeError(`${name} must be an integer between ${min} and ${max}`);\n return value;\n}\n\n/** Expand matches and small outgoing dependencies into bounded current source. */\nexport async function buildSourceContext(\n map: CodeMap,\n query: string,\n options: ContextOptions,\n): Promise<ContextResult> {\n const maxLines = budget(options.maxLines ?? 800, 1, 2000, \"context maxLines\");\n const maxChars = budget(options.maxChars ?? 32000, 256, 64000, \"context maxChars\");\n const seeds = budget(options.seeds ?? 3, 1, 5, \"context seeds\");\n const files = new Map<string, { lines: string[]; included: Set<number> }>();\n const indexedFiles = new Map(map.files.map((f) => [f.path, f]));\n const sourceFile = async (symbol: Pick<SymbolSearchMatch, \"id\" | \"file\" | \"range\">) => {\n let file = files.get(symbol.file);\n if (!file) {\n const indexed = indexedFiles.get(symbol.file);\n if (!indexed) throw new CodeMapError(\"SOURCE_NOT_FOUND\", `No indexed file for ${symbol.id}`);\n const bytes = await readFileInsideRoot(options.root, path.resolve(options.root, symbol.file));\n if (hashText(bytes) !== indexed.hash)\n throw new CodeMapError(\n \"STALE_SOURCE\",\n `Source ${symbol.file} changed. Run ai-code-map scan.`,\n );\n const lines = bytes.toString(\"utf8\").split(/\\r\\n|\\n|\\r/);\n if (lines.at(-1) === \"\") lines.pop();\n file = { lines, included: new Set() };\n files.set(symbol.file, file);\n }\n validateRange(symbol, file.lines.length);\n return file;\n };\n const found = findSymbols(map, query, { limit: 50 });\n const exact = found.matches.filter((s) => s.id === query.trim() || s.name === query.trim());\n let ranked = exact.length\n ? exact\n : [...found.matches].sort(\n (a, b) =>\n (a.unmatchedTerms?.length ?? 0) - (b.unmatchedTerms?.length ?? 0) ||\n Number(!behavior.has(a.kind)) - Number(!behavior.has(b.kind)),\n );\n // Resolve partial name/path matches using their current bodies. Repeated action\n // words distinguish an implementation from a list of allowed filter values.\n // Only inspect the existing bounded candidate set; this is not a repository scan.\n const missing = ranked[0]?.unmatchedTerms?.length ?? 0;\n if (!exact.length && missing > 0) {\n let best = 0;\n let promoted: SymbolSearchMatch[] = [];\n for (const match of ranked) {\n if (\n !behavior.has(match.kind) ||\n match.kind === \"class\" ||\n match.unmatchedTerms?.length !== missing\n )\n continue;\n const file = await sourceFile(match);\n const body = file.lines\n .slice(match.range.startLine - 1, match.range.endLine)\n .join(\"\\n\")\n .toLowerCase();\n let score = 0;\n for (const term of match.unmatchedTerms) {\n let hits = 0;\n for (\n let at = body.indexOf(term);\n at >= 0 && hits < 3;\n at = body.indexOf(term, at + term.length)\n )\n hits++;\n if (hits) score += 10 + hits;\n }\n if (score > best) {\n best = score;\n promoted = [];\n }\n if (score === best) promoted.push(match);\n }\n if (best > 0) ranked = promoted;\n }\n const matches = ranked.slice(0, seeds);\n const result: ContextResult = {\n query,\n matches,\n moreMatches: found.total - matches.length,\n selected: [],\n snippets: [],\n omitted: [],\n fileReferences: [],\n tests: [],\n omittedNavigation: 0,\n usedLines: 0,\n usedChars: 0,\n limits: { maxLines, maxChars, seeds },\n };\n const byId = new Map(map.symbols.map((s) => [s.id, s]));\n const selected = new Map<string, \"match\" | \"neighbor\">(matches.map((s) => [s.id, \"match\"]));\n const outgoingNeighbors = new Set<string>();\n const tests = new Map<string, { file: string; line: number }>();\n // Expand only the original matches. Following every new neighbor would recreate the whole graph.\n for (const match of matches) {\n const nav = buildReadNavigation(map, match.id);\n result.omittedNavigation += nav.omittedLinks + nav.omittedTests;\n for (const link of nav.links) {\n if (link.direction === \"outgoing\") outgoingNeighbors.add(link.id);\n if (selected.has(link.id)) continue;\n // A reference to the class namespace is not a request for every method body.\n if (link.type === \"references\" && byId.get(link.id)?.kind === \"class\") {\n result.omittedNavigation++;\n continue;\n }\n selected.set(link.id, \"neighbor\");\n }\n for (const site of nav.tests) tests.set(`${site.file}:${site.line}`, site);\n }\n const testSites = [...tests.values()].sort(\n (a, b) => compareText(a.file, b.file) || a.line - b.line,\n );\n result.tests = testSites.slice(0, 8);\n result.omittedNavigation += Math.max(0, testSites.length - result.tests.length);\n // Top-level registrations have a file endpoint, so symbol-only navigation\n // cannot return them. Keep their mapped call/reference sites explicitly.\n const roots = new Set(matches.map((match) => match.id));\n const filesById = new Map(map.files.map((file) => [file.id, file]));\n const references = new Map<string, { file: string; line: number }>();\n for (const relation of map.relations) {\n if (!roots.has(relation.to) || ![\"calls\", \"references\"].includes(relation.type)) continue;\n const origin = relation.origin;\n if (![\"exact\", \"framework-derived\"].includes(origin.classification)) continue;\n const file = filesById.get(relation.from);\n if (\n !file ||\n file.path !== origin.file ||\n /(?:^|\\/)__tests__\\/|\\.(?:test|spec)\\.[^/]+$/.test(file.path)\n )\n continue;\n references.set(`${file.path}:${origin.line}`, { file: file.path, line: origin.line });\n }\n const fileSites = [...references.values()].sort(\n (a, b) => compareText(a.file, b.file) || a.line - b.line,\n );\n result.fileReferences = fileSites.slice(0, 4);\n result.omittedNavigation += Math.max(0, fileSites.length - result.fileReferences.length);\n const requested: ContextOmission[] = [];\n const includeWindow = (\n id: string,\n name: string,\n file: { lines: string[]; included: Set<number> },\n first: number,\n last: number,\n ) => {\n requested.push({ id, file: name, startLine: first, endLine: last });\n for (let line = first; line <= last; line++) {\n if (file.included.has(line)) continue;\n // Count a separator for every line, conservatively also for each snippet's final line.\n const chars = (file.lines[line - 1]?.length ?? 0) + 1;\n if (result.usedLines >= maxLines || result.usedChars + chars > maxChars) break;\n file.included.add(line);\n result.usedLines++;\n result.usedChars += chars;\n }\n };\n for (const [id] of selected) {\n const symbol = byId.get(id);\n if (!symbol) throw new CodeMapError(\"SYMBOL_NOT_FOUND\", `Missing context symbol: ${id}`);\n const file = await sourceFile(symbol);\n includeWindow(\n id,\n symbol.file,\n file,\n Math.max(1, symbol.range.startLine - 2),\n Math.min(file.lines.length, symbol.range.endLine + 2),\n );\n }\n for (const site of result.fileReferences) {\n const indexed = indexedFiles.get(site.file);\n if (!indexed) throw new CodeMapError(\"SOURCE_NOT_FOUND\", `No indexed file for ${site.file}`);\n const file = await sourceFile({\n id: indexed.id,\n file: site.file,\n range: { startLine: site.line, endLine: site.line, startColumn: 1, endColumn: 1 },\n });\n const small = file.lines.length <= 80;\n includeWindow(\n indexed.id,\n site.file,\n file,\n small ? 1 : Math.max(1, site.line - 8),\n small ? file.lines.length : Math.min(file.lines.length, site.line + 8),\n );\n }\n // Small dependencies avoid a separate find/read round trip. Fill them last so\n // they cannot displace the matched flow or its entry points. Never recurse.\n const dependencies = new Map<string, { symbol: SymbolRecord; call: boolean }>();\n for (const relation of map.relations) {\n if (\n !outgoingNeighbors.has(relation.from) ||\n selected.get(relation.from) !== \"neighbor\" ||\n selected.has(relation.to) ||\n ![\"calls\", \"references\"].includes(relation.type) ||\n ![\"exact\", \"framework-derived\"].includes(relation.origin.classification)\n )\n continue;\n const symbol = byId.get(relation.to);\n if (\n !symbol ||\n symbol.kind === \"class\" ||\n (!behavior.has(symbol.kind) && symbol.kind !== \"variable\")\n )\n continue;\n const call = relation.type === \"calls\";\n if (!dependencies.has(symbol.id) || call) dependencies.set(symbol.id, { symbol, call });\n }\n const small = [...dependencies.values()].filter(\n ({ symbol }) => symbol.range.endLine - symbol.range.startLine + 1 <= 80,\n );\n small.sort((a, b) => Number(b.call) - Number(a.call) || compareText(a.symbol.id, b.symbol.id));\n result.omittedNavigation += dependencies.size - Math.min(small.length, 4);\n for (const { symbol } of small.slice(0, 4)) {\n const file = await sourceFile(symbol);\n selected.set(symbol.id, \"neighbor\");\n includeWindow(\n symbol.id,\n symbol.file,\n file,\n Math.max(1, symbol.range.startLine - 2),\n Math.min(file.lines.length, symbol.range.endLine + 2),\n );\n }\n result.selected = [...selected].map(([id, role]) => ({ id, role }));\n // Report unread intervals after all candidates have contributed their potentially shared lines.\n for (const request of requested) {\n const file = files.get(request.file);\n if (!file) continue;\n const last = request.endLine;\n let missingStart: number | undefined;\n for (let line = request.startLine; line <= last + 1; line++) {\n const missing = line <= last && !file.included.has(line);\n if (missing && missingStart === undefined) missingStart = line;\n if (!missing && missingStart !== undefined) {\n result.omitted.push({ ...request, startLine: missingStart, endLine: line - 1 });\n missingStart = undefined;\n }\n }\n }\n for (const [name, file] of files) {\n const lines = [...file.included].sort((a, b) => a - b);\n let start: number | undefined,\n end = 0;\n const append = (): void => {\n if (start === undefined) return;\n result.snippets.push({\n file: name,\n startLine: start,\n endLine: end,\n source: file.lines.slice(start - 1, end).join(\"\\n\"),\n });\n };\n for (const line of lines) {\n if (start === undefined || line !== end + 1) {\n append();\n start = line;\n }\n end = line;\n }\n append();\n }\n return result;\n}\n\nfunction validateRange(symbol: Pick<SymbolRecord, \"range\" | \"file\">, length: number): void {\n const { startLine, endLine } = symbol.range;\n if (\n !Number.isInteger(startLine) ||\n !Number.isInteger(endLine) ||\n startLine < 1 ||\n endLine < startLine ||\n endLine > length\n )\n throw new CodeMapError(\n \"INVALID_SOURCE_RANGE\",\n `Mapped range is outside ${symbol.file}. Run ai-code-map scan.`,\n );\n}\n\nexport function formatSourceContext(result: ContextResult): string {\n if (!result.matches.length)\n return \"No indexed matches. Include action and subject words, or use find/targeted rg. No source was read.\";\n const lines = [\n `Context: ${result.selected.length} selected symbols, ${result.usedLines}/${result.limits.maxLines} source lines; ${result.usedChars}/${result.limits.maxChars} source characters.`,\n `Matches: ${result.matches.map((m) => `${m.name}${m.unmatchedTerms?.length ? ` (unmatched: ${m.unmatchedTerms.join(\", \")})` : \"\"}`).join(\", \")}.`,\n \"Scope: matches, direct exact/framework-derived neighbors, file-level reference sites and up to four small outgoing dependencies; reference-only classes are not expanded. Source determines behavior.\",\n ];\n if (result.fileReferences.length)\n lines.push(\n `File reference sites: ${result.fileReferences.map((site) => `${site.file}:${site.line}`).join(\", \")}.`,\n );\n for (const snippet of result.snippets) {\n lines.push(`\\n${snippet.file}:${snippet.startLine}-${snippet.endLine}`);\n lines.push(...snippet.source.split(\"\\n\").map((line, i) => `${snippet.startLine + i}: ${line}`));\n }\n if (result.tests.length)\n lines.push(\n \"\\nTest call sites (navigation hints, not coverage):\",\n ...result.tests.map((s) => `${s.file}:${s.line}`),\n );\n if (result.omitted.length)\n lines.push(\n \"\\nBudget omitted source; read only a needed missing range:\",\n ...result.omitted.slice(0, 12).map((o) => `${o.file}:${o.startLine}-${o.endLine} (${o.id})`),\n ...(result.omitted.length > 12\n ? [`${result.omitted.length - 12} further omitted ranges; use --json for all.`]\n : []),\n );\n lines.push(\n `\\nOther search matches: ${result.moreMatches}; navigation entries omitted: ${result.omittedNavigation}. Follow up only for a missing fact; reuse source already returned.`,\n );\n return lines.join(\"\\n\");\n}\n","export class CodeMapError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"CodeMapError\";\n this.code = code;\n }\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport type { JsonValue } from \"../types.js\";\n\nexport function compareText(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction safeRecordEntry(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => safeRecordEntry(entry));\n }\n if (value !== null && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const next: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort(compareText)) {\n const child = record[key];\n if (child !== undefined) {\n next[key] = safeRecordEntry(child);\n }\n }\n return next;\n }\n return value;\n}\n\nexport function stableValue<T>(value: T): T {\n if (Array.isArray(value)) {\n return safeRecordEntry(value) as T;\n }\n if (value !== null && typeof value === \"object\") {\n return safeRecordEntry(value) as T;\n }\n return value;\n}\n\nexport function stableJson(value: unknown, pretty = false): string {\n return `${JSON.stringify(stableValue(value), null, pretty ? 2 : undefined)}\\n`;\n}\n\nexport function stableJsonLine(value: unknown): string {\n return JSON.stringify(stableValue(value));\n}\n\nexport async function atomicWriteIfChanged(filePath: string, content: string): Promise<boolean> {\n const canonicalBytes = Buffer.from(content, \"utf8\");\n try {\n if ((await fs.readFile(filePath)).equals(canonicalBytes)) return false;\n } catch (error) {\n // A managed artifact that exists but cannot be read is not a reusable commit. Writing the\n // replacement through the containing directory lets an ordinary scan repair mode corruption\n // on platforms where atomic rename-over-existing is supported.\n if (!isNotFound(error) && !isPermissionDenied(error)) throw error;\n }\n\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const temporary = path.join(\n path.dirname(filePath),\n `.${path.basename(filePath)}.${process.pid}.${Math.random().toString(16).slice(2)}.tmp`,\n );\n try {\n await fs.writeFile(temporary, canonicalBytes, { mode: 0o644 });\n await fs.rename(temporary, filePath);\n } catch (error) {\n await fs.rm(temporary, { force: true }).catch(() => undefined);\n throw error;\n }\n return true;\n}\n\nexport function asJsonValue(value: unknown): JsonValue {\n return stableValue(value) as JsonValue;\n}\n\nexport function isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n}\n\nfunction isPermissionDenied(error: unknown): error is NodeJS.ErrnoException {\n return (\n error instanceof Error && \"code\" in error && (error.code === \"EACCES\" || error.code === \"EPERM\")\n );\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch (error) {\n if (isNotFound(error)) return false;\n throw error;\n }\n}\n\nexport async function mapLimit<T, R>(\n values: readonly T[],\n limit: number,\n operation: (value: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(values.length);\n let cursor = 0;\n const workers = Array.from({ length: Math.min(Math.max(1, limit), values.length) }, async () => {\n while (cursor < values.length) {\n const index = cursor++;\n const value = values[index] as T;\n if (value === undefined) return;\n results[index] = await operation(value, index);\n }\n });\n await Promise.all(workers);\n return results;\n}\n","import type { CodeMap, SourceRange, SymbolKind, SymbolRecord } from \"./types.js\";\n\nimport { compareText } from \"./utils/stable.js\";\n\nconst DEFAULT_LIMIT = 10;\nconst MAX_LIMIT = 50;\n\nexport interface SymbolSearchOptions {\n limit?: number;\n}\n\nexport interface SymbolSearchMatch {\n id: string;\n name: string;\n kind: SymbolKind;\n file: string;\n range: SourceRange;\n /** Normalized query words not found in a partial word match. */\n unmatchedTerms?: string[];\n}\n\nexport interface SymbolSearchResult {\n query: string;\n total: number;\n truncated: boolean;\n matches: SymbolSearchMatch[];\n}\n\nexport function findSymbols(\n map: CodeMap,\n query: string,\n options: SymbolSearchOptions = {},\n): SymbolSearchResult {\n const normalized = query.trim();\n if (!normalized) throw new Error(\"Symbol search query must not be empty.\");\n\n const limit = options.limit ?? DEFAULT_LIMIT;\n if (!Number.isInteger(limit) || limit < 1 || limit > MAX_LIMIT) {\n throw new RangeError(`Symbol search limit must be an integer from 1 to ${MAX_LIMIT}.`);\n }\n\n const qualified = splitQualifiedSelector(normalized);\n const queryWords = [...new Set(words(normalized))];\n const ranked = map.symbols\n .map((symbol) => {\n const nameWords = new Set(words(symbol.name));\n const symbolWords = new Set([...nameWords, ...words(symbol.file)]);\n const unmatchedTerms = queryWords.filter((word) => !symbolWords.has(word));\n const matched = queryWords.length - unmatchedTerms.length;\n const nameMatches = queryWords.filter((word) => nameWords.has(word)).length;\n let rank = matchRank(\n symbol,\n normalized,\n qualified,\n queryWords.length > 0 && unmatchedTerms.length === 0,\n );\n // Partial matches need both context and a name hit, not just a shared directory.\n if (\n rank === undefined &&\n !qualified &&\n /\\s/.test(normalized) &&\n queryWords.length >= 3 &&\n matched >= Math.max(2, Math.ceil(queryWords.length / 2)) &&\n nameMatches > 0\n )\n rank = 9;\n return rank === undefined\n ? undefined\n : { symbol, rank, matched, nameMatches, unmatchedTerms };\n })\n .filter((candidate): candidate is NonNullable<typeof candidate> => candidate !== undefined)\n .sort(\n (left, right) =>\n left.rank - right.rank ||\n right.matched - left.matched ||\n right.nameMatches - left.nameMatches ||\n compareText(left.symbol.id, right.symbol.id),\n );\n\n const matches = ranked.slice(0, limit).map(({ symbol, rank, unmatchedTerms }) => ({\n ...toMatch(symbol),\n ...(rank === 9 ? { unmatchedTerms } : {}),\n }));\n return {\n query: normalized,\n total: ranked.length,\n truncated: ranked.length > matches.length,\n matches,\n };\n}\n\nfunction matchRank(\n symbol: SymbolRecord,\n query: string,\n qualified: { file: string; member: string } | undefined,\n allWordsMatch: boolean,\n): number | undefined {\n if (symbol.id === query) return 0;\n if (symbol.name === query) return 1;\n\n const lowerQuery = query.toLowerCase();\n if (qualified) {\n if (symbol.file !== qualified.file) return undefined;\n const terminalName = qualified.member.split(\".\").at(-1) ?? qualified.member;\n if (symbol.name === qualified.member || symbol.name === terminalName) return 2;\n if (\n symbol.name.toLowerCase() === qualified.member.toLowerCase() ||\n symbol.name.toLowerCase() === terminalName.toLowerCase()\n ) {\n return 3;\n }\n return undefined;\n }\n\n const lowerName = symbol.name.toLowerCase();\n const lowerFile = symbol.file.toLowerCase();\n if (lowerName === lowerQuery) return 3;\n if (lowerName.startsWith(lowerQuery)) return 4;\n if (lowerName.includes(lowerQuery)) return 5;\n if (lowerFile.includes(lowerQuery)) return 6;\n\n if (allWordsMatch) return 7;\n\n if (/^[a-z0-9]+$/i.test(query)) {\n const compactQuery = compact(query);\n const compactName = compact(symbol.name);\n if (\n compactQuery.length >= 4 &&\n compactQuery.length <= 128 &&\n compactName.length >= 4 &&\n compactName.length <= 128 &&\n editDistance(compactQuery, compactName) <= (compactQuery.length >= 8 ? 2 : 1)\n ) {\n return 8;\n }\n }\n return undefined;\n}\n\nfunction splitQualifiedSelector(value: string): { file: string; member: string } | undefined {\n const index = value.indexOf(\"#\");\n if (index <= 0 || index === value.length - 1) return undefined;\n return { file: value.slice(0, index), member: value.slice(index + 1) };\n}\n\nfunction words(value: string): string[] {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter(Boolean)\n .map((word) => {\n if (word.length > 4 && word.endsWith(\"ies\")) return `${word.slice(0, -3)}y`;\n if (word.length > 3 && word.endsWith(\"s\") && !/(ss|us|is)$/.test(word))\n return word.slice(0, -1);\n return word;\n });\n}\n\nfunction compact(value: string): string {\n return value.replace(/[^a-z0-9]/gi, \"\").toLowerCase();\n}\n\nfunction editDistance(left: string, right: string): number {\n if (Math.abs(left.length - right.length) > 2) return 3;\n const previous = Array.from({ length: right.length + 1 }, (_, index) => index);\n for (let leftIndex = 1; leftIndex <= left.length; leftIndex += 1) {\n let diagonal = previous[0] ?? 0;\n previous[0] = leftIndex;\n for (let rightIndex = 1; rightIndex <= right.length; rightIndex += 1) {\n const above = previous[rightIndex] ?? 0;\n previous[rightIndex] = Math.min(\n (previous[rightIndex - 1] ?? 0) + 1,\n above + 1,\n diagonal + (left[leftIndex - 1] === right[rightIndex - 1] ? 0 : 1),\n );\n diagonal = above;\n }\n }\n return previous[right.length] ?? 0;\n}\n\nfunction toMatch(symbol: SymbolRecord): SymbolSearchMatch {\n return {\n id: symbol.id,\n name: symbol.name,\n kind: symbol.kind,\n file: symbol.file,\n range: symbol.range,\n };\n}\n","import type { CodeMap, RelationType } from \"./types.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport interface ReadNavigationLink {\n direction: \"outgoing\" | \"incoming\";\n type: RelationType;\n id: string;\n file: string;\n startLine: number;\n endLine: number;\n classification: \"exact\" | \"framework-derived\";\n}\n\nexport interface ReadNavigation {\n links: ReadNavigationLink[];\n /** Exact incoming call sites in paths named *.test.*, *.spec.* or __tests__/. */\n tests: { file: string; line: number }[];\n /** Unique eligible neighbors/sites excluded by the row or character limits. */\n omittedLinks: number;\n omittedTests: number;\n}\n\n/** First-page navigation only; the source remains the authority on behavior. */\nexport function buildReadNavigation(map: CodeMap, id: string): ReadNavigation {\n const symbols = new Map(map.symbols.map((symbol) => [symbol.id, symbol]));\n const candidates: ReadNavigationLink[] = [];\n const tests = new Map<string, ReadNavigation[\"tests\"][number]>();\n for (const relation of map.relations) {\n if (relation.from !== id && relation.to !== id) continue;\n const classification = relation.origin.classification;\n if (classification !== \"exact\" && classification !== \"framework-derived\") continue;\n if ([\"contains\", \"exports\", \"used-by\"].includes(relation.type)) continue;\n const outgoing = relation.from === id;\n const target = outgoing ? relation.to : relation.from;\n if (target === id) continue;\n if (\n !outgoing &&\n relation.type === \"calls\" &&\n classification === \"exact\" &&\n /(?:^|\\/)__tests__\\/|\\.(?:test|spec)\\.[^/]+$/.test(relation.origin.file)\n ) {\n const site = { file: relation.origin.file, line: relation.origin.line };\n tests.set(`${site.file}:${site.line}`, site);\n continue;\n }\n const symbol = symbols.get(target);\n if (!symbol) continue;\n candidates.push({\n direction: outgoing ? \"outgoing\" : \"incoming\",\n type: relation.type,\n id: symbol.id,\n file: symbol.file,\n startLine: symbol.range.startLine,\n endLine: symbol.range.endLine,\n classification,\n });\n }\n candidates.sort(\n (a, b) =>\n Number(a.type === \"references\") - Number(b.type === \"references\") ||\n Number(a.direction === \"incoming\") - Number(b.direction === \"incoming\") ||\n Number(a.classification !== \"exact\") - Number(b.classification !== \"exact\") ||\n compareText(`${a.type}:${a.id}`, `${b.type}:${b.id}`),\n );\n // One reusable ID per direction, even when calls, references and uses-hook overlap.\n const links = new Map<string, ReadNavigationLink>();\n for (const link of candidates) {\n const key = `${link.direction}:${link.id}`;\n if (!links.has(key)) links.set(key, link);\n }\n const result: ReadNavigation = { links: [], tests: [], omittedLinks: 0, omittedTests: 0 };\n // Reserve room for keys, counters and punctuation within 4,000 compact JSON characters.\n let remaining = 3600;\n // Give test sites a small reserved opportunity before filling the symbol rows.\n for (const site of [...tests.values()].sort(\n (a, b) => compareText(a.file, b.file) || a.line - b.line,\n )) {\n const size = JSON.stringify(site).length;\n if (result.tests.length < 4 && size <= Math.min(remaining, 900)) {\n result.tests.push(site);\n remaining -= size;\n } else result.omittedTests++;\n }\n for (const link of links.values()) {\n const size = JSON.stringify(link).length;\n if (result.links.length < 8 && size <= remaining) {\n result.links.push(link);\n remaining -= size;\n } else result.omittedLinks++;\n }\n return result;\n}\n\nexport function formatReadNavigation(navigation: ReadNavigation): string[] {\n return [\n `Map links: ${navigation.links.length} shown; ${navigation.omittedLinks} omitted. Read an ID only if needed.`,\n ...navigation.links.map(\n (link) =>\n ` ${link.direction === \"outgoing\" ? \"->\" : \"<-\"} ${link.type} ${link.id} [lines ${link.startLine}-${link.endLine}; ${link.classification}]`,\n ),\n `Test call sites: ${navigation.tests.length} shown; ${navigation.omittedTests} omitted (path-based; not a coverage claim).`,\n ...navigation.tests.map((site) => ` ${site.file}:${site.line}`),\n ];\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { CodeMapError } from \"../errors.js\";\n\nexport function isAbsolutePath(value: string): boolean {\n const normalized = toPosixPath(value);\n return (\n path.posix.isAbsolute(normalized) ||\n /^[a-zA-Z]:[\\\\/]/.test(normalized) ||\n normalized.startsWith(\"//\")\n );\n}\n\nexport function isFileSystemUri(value: string): boolean {\n return /^file:(?:\\/\\/|\\/)/i.test(value.trim());\n}\n\nfunction hasEmbeddedDoubleSlashPath(value: string): boolean {\n const normalized = toPosixPath(value);\n let index = normalized.indexOf(\"//\");\n while (index >= 0) {\n const previous = index > 0 ? normalized[index - 1] : undefined;\n if (previous !== \":\") return true;\n index = normalized.indexOf(\"//\", index + 1);\n }\n return false;\n}\n\nexport function hasEmbeddedAbsolutePath(value: string): boolean {\n const normalized = toPosixPath(value);\n return (\n isAbsolutePath(normalized) ||\n isFileSystemUri(normalized) ||\n hasEmbeddedDoubleSlashPath(normalized) ||\n /(?:^|\\/)[A-Za-z]:(?:\\/|$)/.test(normalized) ||\n /(?:^|\\/)file:(?:\\/|$)/i.test(normalized)\n );\n}\n\nexport function isSafeRelativePathPattern(value: string): boolean {\n const normalized = toPosixPath(value);\n return (\n normalized.length > 0 &&\n !hasEmbeddedAbsolutePath(normalized) &&\n !normalized.split(\"/\").includes(\"..\")\n );\n}\n\n/** Distinguish recognizable host paths from ordinary web-route syntax. */\nexport function looksLikeHostFilePath(value: string, root?: string): boolean {\n const trimmed = value.trim();\n if (\n /file:(?:\\/\\/|\\/)/i.test(trimmed) ||\n /(?:^|[/])[A-Za-z]:[\\\\/]/.test(trimmed) ||\n /^\\\\\\\\/.test(trimmed) ||\n hasEmbeddedDoubleSlashPath(trimmed)\n ) {\n return true;\n }\n const normalized = toPosixPath(trimmed);\n if (root) {\n const normalizedRoot = toPosixPath(path.resolve(root));\n if (\n normalized === normalizedRoot ||\n normalized.startsWith(`${normalizedRoot}/`) ||\n normalized.includes(normalizedRoot)\n )\n return true;\n }\n return /^\\/(?:Users|home|root|private|tmp|var|etc|usr|opt|Volumes|mnt|proc|dev)(?:\\/|$)/.test(\n normalized,\n );\n}\n\nexport function toPosixPath(value: string): string {\n return value.replaceAll(\"\\\\\", \"/\");\n}\n\nexport function relativePosix(root: string, absolutePath: string): string {\n if (!isAbsolutePath(absolutePath)) {\n throw new CodeMapError(\n \"PATH_OUTSIDE_ROOT\",\n `Path ${absolutePath} is outside project root ${root}.`,\n );\n }\n const relative = path.relative(root, absolutePath);\n if (relative === \"\" || isRelativeInside(relative)) {\n return toPosixPath(relative || \".\");\n }\n throw new CodeMapError(\n \"PATH_OUTSIDE_ROOT\",\n `Path ${absolutePath} is outside project root ${root}.`,\n );\n}\n\nexport function isPathInside(root: string, candidate: string): boolean {\n if (isAbsolutePath(candidate) && !path.isAbsolute(candidate)) return false;\n const relative = path.relative(path.resolve(root), path.resolve(candidate));\n return relative === \"\" || isRelativeInside(relative);\n}\n\nexport async function isSafeRegularFile(root: string, candidate: string): Promise<boolean> {\n const absolute = path.resolve(candidate);\n if (!isPathInside(root, absolute)) return false;\n try {\n const stat = await fs.lstat(absolute);\n if (stat.isSymbolicLink() || !stat.isFile()) return false;\n const [realRoot, realFile] = await Promise.all([fs.realpath(root), fs.realpath(absolute)]);\n return isPathInside(realRoot, realFile);\n } catch {\n return false;\n }\n}\n\nexport async function readFileInsideRoot(root: string, candidate: string): Promise<Buffer> {\n const absolute = path.resolve(candidate);\n if (!(await isSafeRegularFile(root, absolute))) {\n throw new CodeMapError(\n \"PATH_OUTSIDE_ROOT\",\n `Refusing to read an unavailable, symbolic, or out-of-root file at ${absolute}.`,\n );\n }\n return fs.readFile(absolute);\n}\n\nfunction isRelativeInside(relative: string): boolean {\n const normalized = toPosixPath(relative);\n if (normalized === \"\" || normalized === \".\") return true;\n if (isAbsolutePath(normalized)) return false;\n return normalized !== \"..\" && !normalized.startsWith(\"../\") && !normalized.startsWith(\"..\\\\\");\n}\n\nexport function redactAbsolutePathsInText(message: string, root: string): string {\n const normalizedRoot = path.resolve(root);\n const redact = (candidate: string): string => {\n const trimmed = candidate.replace(/[)\\].,;:]+$/, \"\");\n if (!isAbsolutePath(trimmed) && !isFileSystemUri(trimmed)) return candidate;\n if (isFileSystemUri(trimmed)) return \"<outside-root>\";\n const foreignWindowsPath = path.win32.isAbsolute(trimmed) && !path.posix.isAbsolute(trimmed);\n if (foreignWindowsPath && path.posix.isAbsolute(normalizedRoot)) return \"<outside-root>\";\n try {\n if (isPathInside(normalizedRoot, trimmed)) {\n return relativePosix(normalizedRoot, trimmed);\n }\n } catch {\n // Fall back to opaque marker.\n }\n return \"<outside-root>\";\n };\n\n // Handle quoted paths and known roots first so spaces cannot split a machine path into\n // separately persisted fragments.\n let redacted = message.replace(\n /([\"'`])([^\"'`\\r\\n]+)\\1/g,\n (quoted: string, quote: string, contents: string) =>\n isAbsolutePath(contents) || isFileSystemUri(contents)\n ? `${quote}${redact(contents)}${quote}`\n : quoted,\n );\n for (const rootVariant of [normalizedRoot, toPosixPath(normalizedRoot)].sort(\n (a, b) => b.length - a.length,\n )) {\n if (rootVariant) redacted = redacted.replaceAll(rootVariant, \".\");\n }\n\n const chunks = redacted.split(\n /(\\s+(?:is|was|at|from|to|outside|inside|cannot|could|failed|for|and|or)\\s+)/gi,\n );\n return chunks\n .map((chunk) =>\n chunk.replace(\n /(?<![A-Za-z0-9_.-])[A-Za-z]:[\\\\/](?:[^\\\\/\\r\\n'\"`)\\],;:]+[\\\\/])*[^\\\\/\\s'\"`)\\],;:]+|(?<![A-Za-z0-9_.\\\\-])\\\\\\\\(?:[^\\\\\\r\\n'\"`)\\],;:]+\\\\)+[^\\\\\\s'\"`)\\],;:]+|(?<![A-Za-z0-9_.:/-])\\/\\/(?:[^/\\r\\n'\"`)\\],;:]+\\/)*[^/\\s'\"`)\\],;:]+|(?<![A-Za-z0-9_.:/-])\\/(?:[^/\\r\\n'\"`)\\],;:]+\\/)*[^/\\s'\"`)\\],;:]+/g,\n redact,\n ),\n )\n .join(\"\");\n}\n\nexport function normalizeStoredPath(value: string): string {\n const normalized = path.posix.normalize(toPosixPath(value));\n return normalized.startsWith(\"./\") ? normalized.slice(2) : normalized;\n}\n\n/** Keep user-authored module text useful without persisting host-specific absolute paths. */\nexport function sanitizeModuleSpecifier(value: string): string {\n return isAbsolutePath(value) || isFileSystemUri(value) || hasEmbeddedAbsolutePath(value)\n ? \"<absolute-import>\"\n : value;\n}\n","import { createHash } from \"node:crypto\";\n\nexport function hashText(value: string | Buffer): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function shortHash(value: string | Buffer, length = 12): string {\n return hashText(value).slice(0, length);\n}\n","import path from \"node:path\";\nimport { CodeMapError } from \"./errors.js\";\nimport type { CodeMap, SourceRange } from \"./types.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { readFileInsideRoot } from \"./utils/path.js\";\nimport { buildReadNavigation, type ReadNavigation } from \"./read-navigation.js\";\n\nexport interface ReadSourceOptions {\n root: string;\n /** Maximum source lines per page; integer 1..200, default 80. */\n limit?: number;\n /** Zero-based offset within the symbol's window, including two context lines. */\n offset?: number;\n}\nexport interface ReadSourceResult {\n id: string;\n file: string;\n symbolRange: SourceRange;\n startLine: number;\n endLine: number;\n source: string;\n truncated: boolean;\n nextOffset?: number;\n /** Bounded direct links and test call sites, present only at offset zero. */\n navigation?: ReadNavigation;\n}\n\n/** Read current source using an exact map ID, never a fuzzy selector. */\nexport async function readSymbolSource(\n map: CodeMap,\n id: string,\n options: ReadSourceOptions,\n): Promise<ReadSourceResult> {\n const limit = options.limit ?? 80;\n const offset = options.offset ?? 0;\n if (!Number.isInteger(limit) || limit < 1 || limit > 200)\n throw new RangeError(\"read limit must be an integer between 1 and 200\");\n if (!Number.isSafeInteger(offset) || offset < 0)\n throw new RangeError(\"read offset must be a nonnegative safe integer\");\n const symbol = map.symbols.find((item) => item.id === id);\n if (!symbol)\n throw new CodeMapError(\n \"SYMBOL_NOT_FOUND\",\n \"Use an exact symbol ID returned by ai-code-map find.\",\n );\n const file = map.files.find((item) => item.path === symbol.file);\n const absolute = path.resolve(options.root, symbol.file);\n if (!file)\n throw new CodeMapError(\"SOURCE_NOT_FOUND\", \"Symbol has no indexed file. Run ai-code-map scan.\");\n const bytes = await readFileInsideRoot(options.root, absolute);\n if (hashText(bytes) !== file.hash)\n throw new CodeMapError(\n \"STALE_SOURCE\",\n `Source ${symbol.file} changed. Run ai-code-map scan before reading its mapped range.`,\n );\n const lines = bytes.toString(\"utf8\").split(/\\r\\n|\\n|\\r/);\n if (lines.at(-1) === \"\") lines.pop();\n const first = Math.max(1, symbol.range.startLine - 2);\n const last = Math.min(lines.length, symbol.range.endLine + 2);\n if (symbol.range.startLine < 1 || symbol.range.endLine > lines.length || first > last)\n throw new CodeMapError(\n \"INVALID_SOURCE_RANGE\",\n \"Mapped range is outside the source. Run ai-code-map scan.\",\n );\n if (offset >= last - first + 1) throw new RangeError(\"read offset is outside the symbol window\");\n const startLine = first + offset;\n const endLine = Math.min(last, startLine + limit - 1);\n const source = lines.slice(startLine - 1, endLine).join(\"\\n\");\n if (source.length > 12000)\n throw new CodeMapError(\n \"SOURCE_WINDOW_TOO_LARGE\",\n \"Source window exceeds 12000 characters. Reduce --limit; for a single oversized line use targeted source search.\",\n );\n const truncated = endLine < last;\n return {\n id: symbol.id,\n file: symbol.file,\n symbolRange: symbol.range,\n startLine,\n endLine,\n source,\n truncated,\n ...(truncated ? { nextOffset: offset + endLine - startLine + 1 } : {}),\n ...(offset === 0 ? { navigation: buildReadNavigation(map, id) } : {}),\n };\n}\n","import type {\n CodeMap,\n RelationEvidenceClassification,\n RelationType,\n SourceRange,\n SymbolKind,\n} from \"./types.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport interface ProjectMapView {\n project: string;\n counts: {\n files: number;\n symbols: number;\n endpoints: number;\n relationGroups: number;\n relationRecords: number;\n };\n files: { ref: string; id: string; path: string }[];\n symbols: {\n ref: string;\n id: string;\n name: string;\n kind: SymbolKind;\n file: string;\n range: SourceRange;\n }[];\n endpoints: { ref: string; id: string }[];\n relations: {\n from: string;\n type: RelationType;\n classification: RelationEvidenceClassification;\n targets: { ref: string; count: number }[];\n }[];\n}\n\n/** Complete structural projection; no source text or per-occurrence evidence. */\nexport function buildProjectMap(map: CodeMap): ProjectMapView {\n const refs = new Map<string, string>();\n const ref = (id: string): string => {\n const value = refs.get(id);\n if (!value) throw new Error(`Unknown map endpoint: ${id}`);\n return value;\n };\n const files = [...map.files]\n .sort((a, b) => compareText(a.path, b.path))\n .map((file, index) => {\n const key = `f${index + 1}`;\n refs.set(file.id, key);\n return { ref: key, id: file.id, path: file.path };\n });\n const symbols = [...map.symbols]\n .sort((a, b) => compareText(a.id, b.id))\n .map((symbol, index) => {\n const key = `s${index + 1}`;\n refs.set(symbol.id, key);\n return {\n ref: key,\n id: symbol.id,\n name: symbol.name,\n kind: symbol.kind,\n file: ref(`file:${symbol.file}`),\n range: { ...symbol.range },\n };\n });\n const otherIds = new Set<string>();\n for (const relation of map.relations) {\n if (!refs.has(relation.from)) otherIds.add(relation.from);\n if (!refs.has(relation.to)) otherIds.add(relation.to);\n }\n const endpoints = [...otherIds].sort(compareText).map((id, index) => {\n const key = `e${index + 1}`;\n refs.set(id, key);\n return { ref: key, id };\n });\n const groups = new Map<\n string,\n {\n from: string;\n type: RelationType;\n classification: RelationEvidenceClassification;\n targets: Map<string, number>;\n }\n >();\n for (const relation of map.relations) {\n const from = ref(relation.from);\n const to = ref(relation.to);\n const classification = relation.origin.classification;\n const key = JSON.stringify([from, relation.type, classification]);\n let group = groups.get(key);\n if (!group) {\n group = { from, type: relation.type, classification, targets: new Map() };\n groups.set(key, group);\n }\n group.targets.set(to, (group.targets.get(to) ?? 0) + 1);\n }\n const relations = [...groups.entries()]\n .sort(([a], [b]) => compareText(a, b))\n .map(([, group]) => ({\n ...group,\n targets: [...group.targets.entries()]\n .sort(([a], [b]) => compareText(a, b))\n .map(([ref, count]) => ({ ref, count })),\n }));\n return {\n project: map.project.name,\n counts: {\n files: files.length,\n symbols: symbols.length,\n endpoints: endpoints.length,\n relationGroups: relations.length,\n relationRecords: map.relations.length,\n },\n files,\n symbols,\n endpoints,\n relations,\n };\n}\n\nexport function formatProjectMap(map: ProjectMapView): string {\n const { counts } = map;\n return [\n `Complete structural map: ${map.project}`,\n `${counts.files} files; ${counts.symbols} symbols; ${counts.endpoints} other endpoints; ${counts.relationRecords} relation records in ${counts.relationGroups} adjacency groups.`,\n \"All indexed nodes and relations included. No source, signatures, facts or per-occurrence evidence.\",\n \"f/s/e refs are local to this output. Read source using a symbol's stable ID, not its short ref.\",\n \"Relations: FROM TYPE [evidence classification] -> TARGET[*occurrences]. Heuristic/derived links are not exact calls.\",\n \"\",\n \"Files (ref path)\",\n ...map.files.map((file) => `${file.ref} ${file.path}`),\n \"\",\n \"Symbols (ref file:start-end kind stable-ID)\",\n ...map.symbols.map(\n (symbol) =>\n `${symbol.ref} ${symbol.file}:${symbol.range.startLine}-${symbol.range.endLine} ${symbol.kind} ${symbol.id}`,\n ),\n \"\",\n \"Other endpoints (ref ID)\",\n ...map.endpoints.map((endpoint) => `${endpoint.ref} ${endpoint.id}`),\n \"\",\n \"Relations\",\n ...map.relations.map(\n (group) =>\n `${group.from} ${group.type} [${group.classification}] -> ${group.targets.map((target) => `${target.ref}${target.count > 1 ? `*${target.count}` : \"\"}`).join(\",\")}`,\n ),\n \"\",\n \"End of map. If this marker is missing, the calling tool may have truncated the output.\",\n ].join(\"\\n\");\n}\n","export const SCHEMA_VERSION = 4 as const;\nexport const CONFIG_VERSION = 1 as const;\nexport const ANALYZER_VERSION = \"0.4.0\";\nexport const DEFAULT_SYNTAX_PARSER = \"typescript-compiler-syntax\";\nexport const DEFAULT_SEMANTIC_RESOLVER = \"typescript-program\";\nexport const DEFAULT_ANALYZER_NAMES = [\"typescript-node\", \"react\"] as const;\nexport const DEFAULT_PRODUCER_ID = \"ai-code-map/default-pipeline\";\nexport const CUSTOM_PRODUCER_ID = \"ai-code-map/custom-pipeline\";\nexport const PRODUCER_CONTRACT_VERSION = 1 as const;\n\nexport const DEFAULT_OUTPUT = \".ai/code-map\";\nexport const DEFAULT_INCLUDE = [\n \"src/**/*\",\n \"app/**/*\",\n \"pages/**/*\",\n \"lib/**/*\",\n \"server/**/*\",\n \"*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}\",\n] as const;\nexport const DEFAULT_EXCLUDE = [\n \"**/node_modules/**\",\n \"**/.next/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/.git/**\",\n \"**/.ai/**\",\n \"**/*.generated.*\",\n] as const;\n\nexport const MANAGED_ARTIFACTS = [\n \"overview.md\",\n \"manifest.json\",\n \"project.json\",\n \"files.jsonl\",\n \"symbols.jsonl\",\n \"relations.jsonl\",\n \"diagnostics.json\",\n] as const;\n\nexport const MAP_COMPANION_ARTIFACTS = [\n \"overview.md\",\n \"project.json\",\n \"files.jsonl\",\n \"symbols.jsonl\",\n \"relations.jsonl\",\n \"diagnostics.json\",\n] as const;\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { CONFIG_VERSION, DEFAULT_EXCLUDE, DEFAULT_INCLUDE, DEFAULT_OUTPUT } from \"./constants.js\";\nimport { CodeMapError, errorMessage } from \"./errors.js\";\nimport { ConfigSchema } from \"./schemas.js\";\nimport type { CodeMapConfig, FrameworkSelection, LoadCodeMapOptions } from \"./types.js\";\nimport { isSafeRegularFile, toPosixPath } from \"./utils/path.js\";\nimport { atomicWriteIfChanged, isNotFound, stableJson } from \"./utils/stable.js\";\n\nexport interface ResolvedConfiguration {\n root: string;\n outputDir: string;\n configPath: string;\n config: CodeMapConfig;\n configExists: boolean;\n}\n\nexport interface InitOptions extends LoadCodeMapOptions {\n force?: boolean;\n}\n\nexport interface InitResult {\n root: string;\n configPath: string;\n created: boolean;\n}\n\nexport function createDefaultConfig(\n root: string,\n configPath: string,\n output?: string,\n): CodeMapConfig {\n const configDirectory = path.dirname(configPath);\n const relativeRoot = toPosixPath(path.relative(configDirectory, root) || \".\");\n const outputValue = output\n ? path.isAbsolute(output)\n ? toPosixPath(path.relative(root, output))\n : toPosixPath(output)\n : DEFAULT_OUTPUT;\n return {\n version: CONFIG_VERSION,\n root: relativeRoot,\n include: [...DEFAULT_INCLUDE],\n exclude: [...DEFAULT_EXCLUDE],\n tsconfig: \"tsconfig.json\",\n frameworks: [\"auto\"],\n output: outputValue,\n includePrivateSymbols: false,\n };\n}\n\nexport async function findProjectRoot(start = process.cwd()): Promise<string> {\n let current = path.resolve(start);\n try {\n if (!(await fs.stat(current)).isDirectory()) current = path.dirname(current);\n } catch (error) {\n throw new CodeMapError(\"ROOT_NOT_FOUND\", `Cannot access project root candidate ${current}.`, {\n cause: error,\n });\n }\n\n while (current !== path.dirname(current)) {\n const packagePath = path.join(current, \"package.json\");\n if (await isSafeRegularFile(current, packagePath)) {\n return await fs.realpath(current);\n }\n const parent = path.dirname(current);\n current = parent;\n }\n throw new CodeMapError(\n \"PROJECT_NOT_FOUND\",\n `No package.json was found at or above ${path.resolve(start)}. Pass --root explicitly.`,\n );\n}\n\nfunction resolveConfigArgument(base: string, config?: string): string {\n if (!config) return path.join(base, DEFAULT_OUTPUT, \"config.json\");\n return path.resolve(base, config);\n}\n\nexport async function resolveConfiguration(\n options: LoadCodeMapOptions = {},\n): Promise<ResolvedConfiguration> {\n const requestedStart = path.resolve(options.root ?? process.cwd());\n const discoveredRoot = await findProjectRoot(requestedStart);\n const configPath = options.config\n ? resolveConfigArgument(requestedStart, options.config)\n : path.join(\n options.output\n ? path.resolve(discoveredRoot, options.output)\n : path.join(discoveredRoot, DEFAULT_OUTPUT),\n \"config.json\",\n );\n let parsed: CodeMapConfig;\n let configExists = true;\n try {\n const raw: unknown = JSON.parse(await fs.readFile(configPath, \"utf8\"));\n const result = ConfigSchema.safeParse(raw);\n if (!result.success) {\n const details = result.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"config\"}: ${issue.message}`)\n .join(\"; \");\n throw new CodeMapError(\n \"INVALID_CONFIG\",\n `Invalid configuration at ${configPath}: ${details}`,\n );\n }\n parsed = result.data;\n } catch (error) {\n if (isNotFound(error)) {\n configExists = false;\n parsed = createDefaultConfig(discoveredRoot, configPath, options.output);\n } else if (error instanceof SyntaxError) {\n throw new CodeMapError(\"INVALID_CONFIG\", `Invalid JSON in ${configPath}: ${error.message}`);\n } else {\n throw error;\n }\n }\n\n const configuredRoot = configExists\n ? path.resolve(path.dirname(configPath), parsed.root)\n : discoveredRoot;\n let root: string;\n try {\n root = await fs.realpath(configuredRoot);\n } catch (error) {\n throw new CodeMapError(\n \"ROOT_NOT_FOUND\",\n `Configured project root cannot be resolved: ${configuredRoot}.`,\n { cause: error },\n );\n }\n const outputValue = options.output ?? parsed.output;\n const outputDir = path.isAbsolute(outputValue)\n ? path.normalize(outputValue)\n : path.resolve(root, outputValue);\n return { root, outputDir, configPath, config: parsed, configExists };\n}\n\nexport async function initProject(options: InitOptions = {}): Promise<InitResult> {\n const requestedStart = path.resolve(options.root ?? process.cwd());\n const root = await findProjectRoot(requestedStart);\n const defaultOutputDir = options.output\n ? path.resolve(root, options.output)\n : path.join(root, DEFAULT_OUTPUT);\n const configPath = options.config\n ? path.resolve(requestedStart, options.config)\n : path.join(defaultOutputDir, \"config.json\");\n\n try {\n await fs.access(configPath);\n if (!options.force) return { root, configPath, created: false };\n } catch (error) {\n if (!isNotFound(error)) {\n throw new CodeMapError(\n \"CONFIG_ACCESS_FAILED\",\n `Cannot access ${configPath}: ${errorMessage(error)}`,\n );\n }\n }\n\n const config = createDefaultConfig(root, configPath, options.output);\n await atomicWriteIfChanged(configPath, stableJson(config, true));\n return { root, configPath, created: true };\n}\n\nexport function effectiveFrameworks(\n configured: FrameworkSelection[],\n detected: Exclude<FrameworkSelection, \"auto\">[],\n): Exclude<FrameworkSelection, \"auto\">[] {\n const selected = configured.includes(\"auto\")\n ? [...detected]\n : configured.filter((entry): entry is Exclude<FrameworkSelection, \"auto\"> => entry !== \"auto\");\n return [...new Set(selected)].sort();\n}\n","import path from \"node:path\";\n\nimport { z } from \"zod\";\n\nimport {\n CONFIG_VERSION,\n DEFAULT_EXCLUDE,\n DEFAULT_INCLUDE,\n DEFAULT_OUTPUT,\n MAP_COMPANION_ARTIFACTS,\n SCHEMA_VERSION,\n} from \"./constants.js\";\nimport {\n hasEmbeddedAbsolutePath,\n isAbsolutePath,\n normalizeStoredPath,\n toPosixPath,\n} from \"./utils/path.js\";\nimport { compareText, stableJson } from \"./utils/stable.js\";\n\nexport const JsonValueSchema = z.json();\nexport type JsonValue = z.infer<typeof JsonValueSchema>;\nexport type JsonPrimitive = Extract<JsonValue, string | number | boolean | null>;\n\nexport const LanguageSchema = z.enum([\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"cts\", \"mjs\", \"cjs\"]);\nexport type Language = z.infer<typeof LanguageSchema>;\n\nexport const FrameworkSchema = z.enum([\"typescript\", \"node\", \"react\", \"nextjs\", \"nestjs\"]);\nexport type Framework = z.infer<typeof FrameworkSchema>;\n\nexport const FrameworkSelectionSchema = z.union([FrameworkSchema, z.literal(\"auto\")]);\nexport type FrameworkSelection = z.infer<typeof FrameworkSelectionSchema>;\n\nexport const ConfigSchema = z\n .object({\n version: z.literal(CONFIG_VERSION).default(CONFIG_VERSION),\n root: z.string().min(1).default(\"../..\"),\n include: z\n .array(z.string().min(1))\n .min(1)\n .default([...DEFAULT_INCLUDE]),\n exclude: z.array(z.string().min(1)).default([...DEFAULT_EXCLUDE]),\n tsconfig: z.string().min(1).optional(),\n frameworks: z.array(FrameworkSelectionSchema).min(1).default([\"auto\"]),\n output: z.string().min(1).default(DEFAULT_OUTPUT),\n includePrivateSymbols: z.boolean().default(false),\n concurrency: z.number().int().min(1).max(64).optional(),\n })\n .strict()\n .superRefine((config, context) => {\n if (new Set(config.frameworks).size !== config.frameworks.length) {\n context.addIssue({\n code: \"custom\",\n path: [\"frameworks\"],\n message: \"framework selections must be unique\",\n });\n }\n if (config.frameworks.includes(\"auto\") && config.frameworks.length > 1) {\n context.addIssue({\n code: \"custom\",\n path: [\"frameworks\"],\n message: \"auto cannot be combined with explicit framework selections\",\n });\n }\n });\nexport type CodeMapConfig = z.infer<typeof ConfigSchema>;\n\nexport const SourceRangeSchema = z\n .object({\n startLine: z.number().int().positive(),\n startColumn: z.number().int().positive(),\n endLine: z.number().int().positive(),\n endColumn: z.number().int().positive(),\n })\n .strict()\n .superRefine((range, context) => {\n if (\n range.endLine < range.startLine ||\n (range.endLine === range.startLine && range.endColumn < range.startColumn)\n ) {\n context.addIssue({ code: \"custom\", message: \"range end must not precede its start\" });\n }\n });\nexport type SourceRange = z.infer<typeof SourceRangeSchema>;\n\nexport const StoredPathSchema = z\n .string()\n .min(1)\n .refine(\n (value) =>\n !value.includes(\"\\\\\") &&\n !value.startsWith(\"/\") &&\n !hasEmbeddedAbsolutePath(value) &&\n !value.split(\"/\").includes(\"..\"),\n \"must be a repository-relative POSIX path\",\n )\n .refine((value) => value === normalizeStoredPath(value), \"must be normalized\");\n\nconst StoredFilePathSchema = StoredPathSchema.refine(\n (value) => value !== \".\",\n \"must identify a file or non-root project path\",\n);\n\nconst StoredModuleAliasSchema = z\n .string()\n .min(1)\n .refine(\n (value) => !isAbsolutePath(value) && !toPosixPath(value).split(\"/\").includes(\"..\"),\n \"must not contain an absolute or parent-traversing path\",\n );\n\nexport const ImportSpecifierRecordSchema = z\n .object({\n imported: z.string(),\n local: z.string(),\n typeOnly: z.boolean().optional(),\n })\n .strict();\nexport type ImportSpecifierRecord = z.infer<typeof ImportSpecifierRecordSchema>;\n\nexport const ImportRecordSchema = z\n .object({\n source: z\n .string()\n .min(1)\n .refine((value) => !isAbsolutePath(value), \"must not expose an absolute module path\"),\n specifiers: z.array(ImportSpecifierRecordSchema),\n resolved: StoredFilePathSchema.optional(),\n external: z.boolean(),\n kind: z.enum([\"esm\", \"commonjs\"]),\n line: z.number().int().positive(),\n })\n .strict();\nexport type ImportRecord = z.infer<typeof ImportRecordSchema>;\n\nexport const ExportRecordSchema = z\n .object({\n name: z.string(),\n local: z.string().optional(),\n source: z\n .string()\n .refine((value) => !isAbsolutePath(value), \"must not expose an absolute module path\")\n .optional(),\n default: z.boolean(),\n typeOnly: z.boolean().optional(),\n line: z.number().int().positive(),\n })\n .strict();\nexport type ExportRecord = z.infer<typeof ExportRecordSchema>;\n\nexport const ExternalOperationKindSchema = z.enum([\"filesystem\", \"http\", \"database\", \"queue\"]);\nexport type ExternalOperationKind = z.infer<typeof ExternalOperationKindSchema>;\n\nexport const ExternalOperationSchema = z\n .object({\n kind: ExternalOperationKindSchema,\n api: z.string().min(1),\n line: z.number().int().positive(),\n })\n .strict();\nexport type ExternalOperation = z.infer<typeof ExternalOperationSchema>;\n\nexport const SyntaxSummarySchema = z\n .object({\n parser: z.string().min(1),\n factCount: z.number().int().nonnegative(),\n hadErrors: z.boolean(),\n fallbackFrom: z.string().min(1).optional(),\n })\n .strict();\nexport type SyntaxSummary = z.infer<typeof SyntaxSummarySchema>;\n\nexport const FileRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n id: z.string().min(1),\n compilerUnit: z.string().min(1),\n path: StoredFilePathSchema,\n language: LanguageSchema,\n frameworks: z.array(FrameworkSchema),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n lines: z.number().int().nonnegative(),\n imports: z.array(ImportRecordSchema),\n exports: z.array(ExportRecordSchema),\n symbolIds: z.array(z.string().min(1)),\n env: z.array(z.string()),\n operations: z.array(ExternalOperationSchema),\n syntax: SyntaxSummarySchema,\n })\n .strict();\nexport type FileRecord = z.infer<typeof FileRecordSchema>;\n\nexport const CompilerUnitRecordSchema = z\n .object({\n id: z.string().min(1),\n kind: z.enum([\"configured\", \"fallback\"]),\n root: StoredPathSchema,\n config: StoredFilePathSchema.optional(),\n references: z.array(StoredFilePathSchema),\n extends: z.array(StoredFilePathSchema),\n pathAliases: z.record(StoredModuleAliasSchema, z.array(StoredPathSchema)),\n })\n .strict();\nexport type CompilerUnitRecord = z.infer<typeof CompilerUnitRecordSchema>;\n\nexport const SymbolKindSchema = z.enum([\n \"function\",\n \"class\",\n \"method\",\n \"interface\",\n \"type-alias\",\n \"variable\",\n \"react-component\",\n \"react-hook\",\n \"react-context\",\n \"next-page\",\n \"next-layout\",\n \"next-route-handler\",\n \"next-special-file\",\n \"nest-module\",\n \"nest-controller\",\n \"nest-provider\",\n \"nest-guard\",\n \"nest-interceptor\",\n \"nest-pipe\",\n \"nest-filter\",\n \"nest-gateway\",\n \"dto\",\n \"route\",\n]);\nexport type SymbolKind = z.infer<typeof SymbolKindSchema>;\n\nexport const SymbolRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n id: z.string().min(1),\n name: z.string(),\n kind: SymbolKindSchema,\n file: StoredFilePathSchema,\n range: SourceRangeSchema,\n exported: z.boolean(),\n defaultExport: z.boolean().optional(),\n signature: z.string().optional(),\n documentation: z.string().optional(),\n facts: z.record(z.string(), JsonValueSchema),\n sourceHash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type SymbolRecord = z.infer<typeof SymbolRecordSchema>;\n\nexport const RelationTypeSchema = z.enum([\n \"imports\",\n \"exports\",\n \"reexports\",\n \"calls\",\n \"instantiates\",\n \"renders\",\n \"uses-hook\",\n \"reads-state\",\n \"depends-on\",\n \"used-by\",\n \"contains\",\n \"references\",\n \"injects\",\n \"handles-route\",\n \"consumes-dto\",\n \"belongs-to-module\",\n \"uses-layout\",\n]);\nexport type RelationType = z.infer<typeof RelationTypeSchema>;\n\nexport const RelationEvidenceClassificationSchema = z.enum([\n \"exact\",\n \"framework-derived\",\n \"heuristic\",\n \"derived\",\n]);\nexport type RelationEvidenceClassification = z.infer<typeof RelationEvidenceClassificationSchema>;\n\nexport const RelationOriginSchema = z\n .object({\n file: StoredFilePathSchema,\n line: z.number().int().positive(),\n range: SourceRangeSchema,\n explanation: z.string().min(1),\n classification: RelationEvidenceClassificationSchema,\n analyzer: z.string().min(1),\n })\n .strict();\nexport type RelationOrigin = z.infer<typeof RelationOriginSchema>;\n\nexport const RelationRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n from: z.string().min(1),\n type: RelationTypeSchema,\n to: z.string().min(1),\n confidence: z.number().min(0).max(1),\n origin: RelationOriginSchema,\n })\n .strict();\nexport type RelationRecord = z.infer<typeof RelationRecordSchema>;\n\nexport const DiagnosticSeveritySchema = z.enum([\"info\", \"warning\", \"error\"]);\nexport type DiagnosticSeverity = z.infer<typeof DiagnosticSeveritySchema>;\n\nexport const DiagnosticCodeSchema = z.enum([\n \"parse-error\",\n \"unresolved-import\",\n \"invalid-config\",\n \"unsupported-file\",\n \"analysis-error\",\n \"parser-fallback\",\n \"compiler-config\",\n]);\nexport type DiagnosticCode = z.infer<typeof DiagnosticCodeSchema>;\n\nexport const DiagnosticRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n code: DiagnosticCodeSchema,\n severity: DiagnosticSeveritySchema,\n message: z.string().min(1),\n file: StoredFilePathSchema.optional(),\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n })\n .strict();\nexport type DiagnosticRecord = z.infer<typeof DiagnosticRecordSchema>;\n\nexport const WorkspacePackageSchema = z\n .object({\n name: z.string(),\n path: StoredFilePathSchema,\n entryPoints: z.array(StoredFilePathSchema),\n })\n .strict();\nexport type WorkspacePackage = z.infer<typeof WorkspacePackageSchema>;\n\nexport const MapCountsSchema = z\n .object({\n files: z.number().int().nonnegative(),\n symbols: z.number().int().nonnegative(),\n relations: z.number().int().nonnegative(),\n diagnostics: z.number().int().nonnegative(),\n })\n .strict();\nexport type MapCounts = z.infer<typeof MapCountsSchema>;\n\nexport const ProjectRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n name: z.string(),\n packageManager: z.string().optional(),\n frameworks: z.array(FrameworkSchema),\n compilerUnits: z.array(CompilerUnitRecordSchema),\n tsconfig: StoredFilePathSchema.optional(),\n pathAliases: z.record(StoredModuleAliasSchema, z.array(StoredPathSchema)),\n entryPoints: z.array(StoredFilePathSchema),\n workspaces: z.array(WorkspacePackageSchema),\n counts: MapCountsSchema,\n })\n .strict();\nexport type ProjectRecord = z.infer<typeof ProjectRecordSchema>;\n\nexport const ManifestSourceFileSchema = z\n .object({\n path: StoredFilePathSchema,\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n compilerUnit: z.string().min(1),\n lines: z.number().int().nonnegative(),\n })\n .strict();\nexport type ManifestSourceFile = z.infer<typeof ManifestSourceFileSchema>;\n\nconst SemanticFileInputRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"file\"),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nconst SemanticResolutionProbeRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"resolution-probe\"),\n scope: z.enum([\"project\", \"toolchain\"]),\n targetKind: z.enum([\"file\", \"directory\", \"readable-file\"]),\n exists: z.boolean(),\n })\n .strict();\nconst SemanticDirectoryListingRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"directory-listing\"),\n scope: z.enum([\"project\", \"toolchain\"]),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nconst SemanticSymlinkRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"symlink\"),\n scope: z.enum([\"project\", \"toolchain\"]),\n target: StoredPathSchema,\n })\n .strict();\nconst SemanticToolchainFileRecordSchema = z\n .object({\n path: StoredPathSchema,\n kind: z.literal(\"toolchain-file\"),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport const SemanticInputRecordSchema = z.discriminatedUnion(\"kind\", [\n SemanticFileInputRecordSchema,\n SemanticResolutionProbeRecordSchema,\n SemanticDirectoryListingRecordSchema,\n SemanticSymlinkRecordSchema,\n SemanticToolchainFileRecordSchema,\n]);\nexport type SemanticInputRecord = z.infer<typeof SemanticInputRecordSchema>;\n\nexport const ArtifactIntegrityRecordSchema = z\n .object({\n path: z.enum(MAP_COMPANION_ARTIFACTS),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type ArtifactIntegrityRecord = z.infer<typeof ArtifactIntegrityRecordSchema>;\n\nexport const ProducerRecordSchema = z\n .object({\n id: z.string().min(1),\n kind: z.enum([\"built-in\", \"custom\"]),\n fingerprint: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type ProducerRecord = z.infer<typeof ProducerRecordSchema>;\n\nconst VersionedToolSchema = z\n .object({\n name: z.string().min(1),\n version: z.string().min(1),\n })\n .strict();\n\nexport const ManifestRecordSchema = z\n .object({\n schemaVersion: z.literal(SCHEMA_VERSION),\n analyzerVersion: z.string().min(1),\n producer: ProducerRecordSchema,\n semanticResolver: VersionedToolSchema,\n syntaxParser: VersionedToolSchema,\n analyzers: z.array(VersionedToolSchema),\n configHash: z.string().regex(/^[a-f0-9]{64}$/),\n sourceFiles: z.array(ManifestSourceFileSchema),\n semanticInputs: z.array(SemanticInputRecordSchema),\n artifacts: z.array(ArtifactIntegrityRecordSchema),\n integrityHash: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\nexport type ManifestRecord = z.infer<typeof ManifestRecordSchema>;\n\nconst CodeMapShapeSchema = z\n .object({\n manifest: ManifestRecordSchema,\n project: ProjectRecordSchema,\n files: z.array(FileRecordSchema),\n symbols: z.array(SymbolRecordSchema),\n relations: z.array(RelationRecordSchema),\n diagnostics: z.array(DiagnosticRecordSchema),\n })\n .strict();\nexport const CodeMapSchema = CodeMapShapeSchema.superRefine((map, context) => {\n const fileByPath = new Map(map.files.map((file) => [file.path, file]));\n const fileIds = new Set<string>();\n const filePaths = new Set<string>();\n const compilerUnitsById = new Map(map.project.compilerUnits.map((unit) => [unit.id, unit]));\n const compilerUnitIds = new Set<string>();\n let fallbackCount = 0;\n for (const [index, file] of map.files.entries()) {\n addDuplicateIssue(context, fileIds, file.id, [\"files\", index, \"id\"]);\n addDuplicateIssue(context, filePaths, file.path, [\"files\", index, \"path\"]);\n if (file.id !== `file:${file.path}`) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", index, \"id\"],\n message: \"file ID must be derived from its path\",\n });\n }\n }\n\n for (const [index, unit] of map.project.compilerUnits.entries()) {\n addDuplicateIssue(context, compilerUnitIds, unit.id, [\"project\", \"compilerUnits\", index, \"id\"]);\n if (unit.kind === \"configured\" && !unit.config) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"config\"],\n message: \"configured compiler units require config\",\n });\n }\n if (unit.kind === \"fallback\" && unit.config) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"config\"],\n message: \"fallback compiler units must not have config\",\n });\n }\n if (unit.kind === \"fallback\") {\n fallbackCount += 1;\n if (\n unit.id !== \"compiler-unit:generated:fallback\" ||\n unit.root !== \".\" ||\n unit.references.length > 0 ||\n unit.extends.length > 0 ||\n Object.keys(unit.pathAliases).length > 0\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index],\n message: \"fallback compiler unit must use the canonical generated identity and shape\",\n });\n }\n }\n if (unit.kind === \"configured\" && unit.config) {\n if (unit.id !== `compiler-unit:configured:${unit.config}`) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"id\"],\n message: \"configured compiler-unit ID must be derived from its config path\",\n });\n }\n if (unit.root !== normalizeStoredPath(path.posix.dirname(unit.config))) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"root\"],\n message: \"configured compiler-unit root must match its config directory\",\n });\n }\n }\n }\n if (fallbackCount !== 1) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\"],\n message: \"exactly one fallback compiler unit is required\",\n });\n }\n const configuredPaths = new Set(\n map.project.compilerUnits.flatMap((unit) =>\n unit.kind === \"configured\" && unit.config ? [unit.config] : [],\n ),\n );\n if (map.project.tsconfig && !configuredPaths.has(map.project.tsconfig)) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"tsconfig\"],\n message: \"project tsconfig must resolve to a configured compiler unit\",\n });\n }\n const compatibilityUnit = map.project.tsconfig\n ? map.project.compilerUnits.find((unit) => unit.config === map.project.tsconfig)\n : map.project.compilerUnits\n .filter((unit) => unit.kind === \"configured\")\n .sort((left, right) => compareText(left.id, right.id))[0];\n if (stableJson(map.project.pathAliases) !== stableJson(compatibilityUnit?.pathAliases ?? {})) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"pathAliases\"],\n message: \"project path aliases must match the compatibility compiler unit\",\n });\n }\n for (const [index, unit] of map.project.compilerUnits.entries()) {\n for (const reference of unit.references) {\n if (!configuredPaths.has(reference)) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"compilerUnits\", index, \"references\"],\n message: \"compiler-unit reference must resolve to a configured unit\",\n });\n }\n }\n }\n\n const symbolById = new Map<string, (typeof map.symbols)[number]>();\n for (const [index, symbol] of map.symbols.entries()) {\n if (symbolById.has(symbol.id)) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"id\"],\n message: `duplicate symbol ID ${symbol.id}`,\n });\n }\n symbolById.set(symbol.id, symbol);\n const owner = fileByPath.get(symbol.file);\n if (!owner) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"file\"],\n message: \"symbol references a missing file\",\n });\n } else if (owner.hash !== symbol.sourceHash) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"sourceHash\"],\n message: \"symbol source hash does not match its file\",\n });\n } else if (!rangeFitsFile(symbol.range, owner)) {\n context.addIssue({\n code: \"custom\",\n path: [\"symbols\", index, \"range\"],\n message: \"symbol range must fit within its source file\",\n });\n }\n }\n\n const importRelationKeys = new Set(\n map.relations\n .filter((relation) => relation.type === \"imports\")\n .map(\n (relation) =>\n `${relation.from}\\u0000${relation.to}\\u0000${relation.origin.file}\\u0000${relation.origin.line}`,\n ),\n );\n const expectedImportRelationKeys = new Set<string>();\n\n for (const [fileIndex, file] of map.files.entries()) {\n const unit = compilerUnitsById.get(file.compilerUnit);\n if (!unit) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"compilerUnit\"],\n message: \"file compiler unit must resolve to exactly one compiler unit\",\n });\n }\n\n const expected = map.symbols\n .filter((symbol) => symbol.file === file.path)\n .map((symbol) => symbol.id)\n .sort();\n const actual = [...file.symbolIds].sort();\n if (JSON.stringify(actual) !== JSON.stringify(expected)) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"symbolIds\"],\n message: \"file symbol IDs must exactly match symbols owned by the file\",\n });\n }\n\n for (const [importIndex, importRecord] of file.imports.entries()) {\n if (importRecord.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex, \"line\"],\n message: \"import line must fit within its source file\",\n });\n }\n if (importRecord.external && importRecord.resolved) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex],\n message: \"external imports must not name an internal resolved path\",\n });\n }\n if (importRecord.resolved && !fileByPath.has(importRecord.resolved)) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex, \"resolved\"],\n message: \"resolved import must reference a persisted file\",\n });\n }\n const target = importRecord.resolved\n ? `file:${importRecord.resolved}`\n : `external:${importRecord.source}#default`;\n const key = `${file.id}\\u0000${target}\\u0000${file.path}\\u0000${importRecord.line}`;\n expectedImportRelationKeys.add(key);\n if (!importRelationKeys.has(key)) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"imports\", importIndex],\n message: \"import record must have matching relation evidence\",\n });\n }\n }\n for (const [exportIndex, exportRecord] of file.exports.entries()) {\n if (exportRecord.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"exports\", exportIndex, \"line\"],\n message: \"export line must fit within its source file\",\n });\n }\n }\n for (const [operationIndex, operation] of file.operations.entries()) {\n if (operation.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"files\", fileIndex, \"operations\", operationIndex, \"line\"],\n message: \"operation line must fit within its source file\",\n });\n }\n }\n }\n\n const manifestPaths = new Set<string>();\n for (const [index, source] of map.manifest.sourceFiles.entries()) {\n addDuplicateIssue(context, manifestPaths, source.path, [\n \"manifest\",\n \"sourceFiles\",\n index,\n \"path\",\n ]);\n const file = fileByPath.get(source.path);\n if (!file || file.hash !== source.hash) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\", index],\n message: \"manifest source must match a persisted file and hash\",\n });\n } else if (file.compilerUnit !== source.compilerUnit) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\", index, \"compilerUnit\"],\n message: \"manifest source ownership must match the persisted file compiler unit\",\n });\n } else if (file.lines !== source.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\", index, \"lines\"],\n message: \"manifest source line count must match the persisted file\",\n });\n }\n }\n if (manifestPaths.size !== fileByPath.size) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"sourceFiles\"],\n message: \"manifest sources must exactly cover persisted files\",\n });\n }\n\n const semanticInputIdentities = new Set<string>();\n for (const [index, input] of map.manifest.semanticInputs.entries()) {\n addDuplicateIssue(context, semanticInputIdentities, semanticInputIdentity(input), [\n \"manifest\",\n \"semanticInputs\",\n index,\n ]);\n }\n\n const artifactPaths = new Set<string>();\n for (const [index, artifact] of map.manifest.artifacts.entries()) {\n addDuplicateIssue(context, artifactPaths, artifact.path, [\n \"manifest\",\n \"artifacts\",\n index,\n \"path\",\n ]);\n }\n const expectedArtifacts = [...MAP_COMPANION_ARTIFACTS].sort();\n if (JSON.stringify([...artifactPaths].sort()) !== JSON.stringify(expectedArtifacts)) {\n context.addIssue({\n code: \"custom\",\n path: [\"manifest\", \"artifacts\"],\n message: \"manifest artifact hashes must exactly cover every companion artifact\",\n });\n }\n\n const counts = {\n files: map.files.length,\n symbols: map.symbols.length,\n relations: map.relations.length,\n diagnostics: map.diagnostics.length,\n };\n for (const key of Object.keys(counts) as Array<keyof typeof counts>) {\n if (map.project.counts[key] !== counts[key]) {\n context.addIssue({\n code: \"custom\",\n path: [\"project\", \"counts\", key],\n message: `${key} count does not match persisted records`,\n });\n }\n }\n\n const validEndpoints = new Set([...fileIds, ...symbolById.keys()]);\n const relationIdentities = new Set<string>();\n for (const [index, relation] of map.relations.entries()) {\n addDuplicateIssue(context, relationIdentities, relationIdentity(relation), [\n \"relations\",\n index,\n ]);\n if (relation.type === \"imports\") {\n const key = `${relation.from}\\u0000${relation.to}\\u0000${relation.origin.file}\\u0000${relation.origin.line}`;\n if (!expectedImportRelationKeys.has(key)) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: \"imports relation must have a matching file import record\",\n });\n }\n }\n for (const endpoint of [relation.from, relation.to]) {\n if (\n !validEndpoints.has(endpoint) &&\n !endpoint.startsWith(\"external:\") &&\n !endpoint.startsWith(\"route:\")\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: `relation references missing endpoint ${endpoint}`,\n });\n }\n }\n const originFile = fileByPath.get(relation.origin.file);\n if (!originFile) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"file\"],\n message: \"relation evidence references a missing file\",\n });\n } else {\n if (relation.origin.line !== relation.origin.range.startLine) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"line\"],\n message: \"relation origin line must match the start of its evidence range\",\n });\n }\n if (!rangeFitsFile(relation.origin.range, originFile)) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"range\"],\n message: \"relation evidence range must fit within its source file\",\n });\n }\n if (relation.type === \"contains\" || relation.type === \"exports\") {\n const fromFile = endpointSourceFile(relation.from, fileByPath, symbolById);\n const toFile = endpointSourceFile(relation.to, fileByPath, symbolById);\n if (\n fromFile !== relation.origin.file ||\n (relation.type === \"exports\" && toFile !== relation.origin.file)\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message:\n relation.type === \"exports\"\n ? \"exports endpoints and evidence must belong to the same file\"\n : \"contains evidence must belong to its source endpoint file\",\n });\n }\n\n const fromIsFile = relation.from.startsWith(\"file:\");\n const toSymbol = symbolById.get(relation.to);\n const fromSymbol = symbolById.get(relation.from);\n if (relation.type === \"contains\" && fromIsFile) {\n if (\n !toSymbol ||\n toSymbol.file !== relation.origin.file ||\n !rangesEqual(toSymbol.range, relation.origin.range)\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: \"file containment evidence must exactly identify a symbol owned by the file\",\n });\n }\n } else if (relation.type === \"contains\" && fromSymbol) {\n if (!toSymbol || !rangeContains(fromSymbol.range, relation.origin.range)) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index, \"origin\", \"range\"],\n message:\n \"symbol containment must target a symbol and its evidence must fall within the source symbol\",\n });\n }\n }\n if (\n relation.type === \"exports\" &&\n (!fromIsFile ||\n !toSymbol ||\n !toSymbol.exported ||\n !rangesEqual(toSymbol.range, relation.origin.range))\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"relations\", index],\n message: \"exports evidence must exactly identify an exported symbol owned by the file\",\n });\n }\n }\n }\n }\n\n for (const [index, diagnostic] of map.diagnostics.entries()) {\n const file = diagnostic.file ? fileByPath.get(diagnostic.file) : undefined;\n if (file && diagnostic.line && diagnostic.line > file.lines) {\n context.addIssue({\n code: \"custom\",\n path: [\"diagnostics\", index, \"line\"],\n message: \"diagnostic line must fit within its source file\",\n });\n }\n }\n});\nexport type CodeMap = z.infer<typeof CodeMapSchema>;\n\nfunction addDuplicateIssue(\n context: z.RefinementCtx,\n seen: Set<string>,\n value: string,\n path: PropertyKey[],\n): void {\n if (seen.has(value)) {\n context.addIssue({ code: \"custom\", path, message: `duplicate value ${value}` });\n }\n seen.add(value);\n}\n\nfunction relationIdentity(relation: RelationRecord): string {\n const range = relation.origin.range;\n return [\n relation.from,\n relation.type,\n relation.to,\n relation.origin.file,\n range.startLine,\n range.startColumn,\n range.endLine,\n range.endColumn,\n ].join(\"\\u0000\");\n}\n\nfunction semanticInputIdentity(input: SemanticInputRecord): string {\n return input.kind === \"resolution-probe\"\n ? `${input.scope}\\u0000${input.path}\\u0000${input.kind}\\u0000${input.targetKind}`\n : input.kind === \"directory-listing\" || input.kind === \"symlink\"\n ? `${input.scope}\\u0000${input.path}\\u0000${input.kind}`\n : `${input.path}\\u0000${input.kind}`;\n}\n\nfunction rangeFitsFile(range: SourceRange, file: FileRecord): boolean {\n return range.startLine <= file.lines && range.endLine <= file.lines;\n}\n\nfunction rangesEqual(left: SourceRange, right: SourceRange): boolean {\n return (\n left.startLine === right.startLine &&\n left.startColumn === right.startColumn &&\n left.endLine === right.endLine &&\n left.endColumn === right.endColumn\n );\n}\n\nfunction rangeContains(outer: SourceRange, inner: SourceRange): boolean {\n const startsAfter =\n inner.startLine > outer.startLine ||\n (inner.startLine === outer.startLine && inner.startColumn >= outer.startColumn);\n const endsBefore =\n inner.endLine < outer.endLine ||\n (inner.endLine === outer.endLine && inner.endColumn <= outer.endColumn);\n return startsAfter && endsBefore;\n}\n\nfunction endpointSourceFile(\n endpoint: string,\n files: ReadonlyMap<string, FileRecord>,\n symbols: ReadonlyMap<string, SymbolRecord>,\n): string | undefined {\n if (endpoint.startsWith(\"file:\")) return files.get(endpoint.slice(\"file:\".length))?.path;\n return symbols.get(endpoint)?.file;\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { analyzeProject, defaultAnalyzers } from \"./analyze.js\";\nimport { initProject, resolveConfiguration } from \"./config.js\";\nimport { CodeMapError } from \"./errors.js\";\nimport { compareSources, inspectFreshness } from \"./freshness.js\";\nimport { loadManifestFrom, writeCodeMap } from \"./storage.js\";\nimport type {\n FrameworkAnalyzer,\n ManifestRecord,\n ScanOptions,\n ScanResult,\n SyntaxParserAdapter,\n} from \"./types.js\";\nimport {\n FallbackParserAdapter,\n isBuiltInTypeScriptParserAdapter,\n TypeScriptParserAdapter,\n} from \"./parser.js\";\n\nexport async function scanProject(options: ScanOptions = {}): Promise<ScanResult> {\n const started = performance.now();\n let resolved = await resolveConfiguration(options);\n let wroteConfig = false;\n if (!resolved.configExists) {\n const initialized = await initProject({\n ...(options.root ? { root: options.root } : {}),\n ...(options.config ? { config: options.config } : {}),\n ...(options.output ? { output: options.output } : {}),\n });\n wroteConfig = initialized.created;\n resolved = await resolveConfiguration(options);\n }\n\n let previous: ManifestRecord | undefined;\n try {\n previous = await loadManifestFrom(resolved.outputDir);\n } catch (error) {\n if (\n !(error instanceof CodeMapError) ||\n ![\"MAP_NOT_FOUND\", \"MAP_READ_FAILED\", \"INCOMPATIBLE_SCHEMA\", \"INVALID_MAP\"].includes(\n error.code,\n )\n ) {\n throw error;\n }\n }\n\n if (previous && !wroteConfig && usesDefaultAnalysisPipeline(options)) {\n const inspection = await inspectFreshness({\n root: resolved.root,\n config: resolved.configPath,\n output: resolved.outputDir,\n });\n if (inspection.result.current && inspection.map) {\n const map = inspection.map;\n return {\n map,\n root: resolved.root,\n outputDir: resolved.outputDir,\n wrote: false,\n changes: inspection.result.changes,\n elapsedMs: Math.round((performance.now() - started) * 100) / 100,\n counts: map.project.counts,\n criticalParseErrors: map.diagnostics.some(\n (diagnostic) => diagnostic.code === \"parse-error\" && diagnostic.severity === \"error\",\n ),\n };\n }\n }\n\n const analyzed = await analyzeProject({\n resolved,\n ...(options.analyzers ? { analyzers: options.analyzers } : {}),\n ...(options.parser ? { parser: options.parser } : {}),\n ...(options.semanticResolver ? { semanticResolver: options.semanticResolver } : {}),\n });\n const changes = compareSources(previous?.sourceFiles ?? [], analyzed.manifest.sourceFiles);\n const persisted = await writeCodeMap(resolved, analyzed);\n const map = persisted.map;\n const criticalParseErrors = map.diagnostics.some(\n (diagnostic) => diagnostic.code === \"parse-error\" && diagnostic.severity === \"error\",\n );\n return {\n map,\n root: resolved.root,\n outputDir: resolved.outputDir,\n wrote: wroteConfig || persisted.wrote,\n changes,\n elapsedMs: Math.round((performance.now() - started) * 100) / 100,\n counts: map.project.counts,\n criticalParseErrors,\n };\n}\n\nfunction usesDefaultAnalysisPipeline(options: ScanOptions): boolean {\n return (\n !options.analyzers &&\n (!options.parser || isBuiltInTypeScriptParserAdapter(options.parser)) &&\n !options.semanticResolver\n );\n}\n\nexport function createAnalyzer(\n options: {\n analyzers?: FrameworkAnalyzer[];\n parser?: SyntaxParserAdapter;\n semanticResolver?: import(\"./types.js\").SemanticResolver;\n } = {},\n) {\n const analyzers = [...defaultAnalyzers(), ...(options.analyzers ?? [])];\n const parser = options.parser\n ? new FallbackParserAdapter(options.parser, new TypeScriptParserAdapter())\n : new TypeScriptParserAdapter();\n return {\n analyzers,\n parser,\n scan: (scanOptions: ScanOptions = {}) =>\n scanProject({\n ...scanOptions,\n ...(options.analyzers && !scanOptions.analyzers ? { analyzers: options.analyzers } : {}),\n ...(options.parser && !scanOptions.parser ? { parser: options.parser } : {}),\n ...(options.semanticResolver && !scanOptions.semanticResolver\n ? { semanticResolver: options.semanticResolver }\n : {}),\n }),\n };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { ANALYZER_VERSION, SCHEMA_VERSION } from \"./constants.js\";\nimport { fileId, generatedCompilerUnitId } from \"./ids.js\";\nimport type {\n AnalysisContext,\n AnalysisContribution,\n CodeMap,\n CompilerUnitRecord,\n DiagnosticRecord,\n FileRecord,\n Framework,\n FrameworkAnalyzer,\n JsonValue,\n ProjectRecord,\n RelationRecord,\n SemanticResolver,\n SemanticInputObservation,\n SemanticInputRecord,\n SymbolRecord,\n SyntaxFact,\n SyntaxParserAdapter,\n SyntaxParseResult,\n} from \"./types.js\";\nimport {\n DiagnosticRecordSchema,\n FrameworkSchema,\n RelationRecordSchema,\n SymbolRecordSchema,\n} from \"./schemas.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport {\n hasEmbeddedAbsolutePath,\n isAbsolutePath,\n looksLikeHostFilePath,\n normalizeStoredPath,\n redactAbsolutePathsInText,\n} from \"./utils/path.js\";\nimport { compareText, mapLimit } from \"./utils/stable.js\";\nimport { CoreAnalyzer, extractFileStructure } from \"./analyzers/core.js\";\nimport { trustedNestJsAnalyzerMethods } from \"./analyzers/nestjs.js\";\nimport { trustedNextJsAnalyzerMethods } from \"./analyzers/nextjs.js\";\nimport { ReactAnalyzer } from \"./analyzers/react.js\";\nimport type { ResolvedConfiguration } from \"./config.js\";\nimport { customProducerRecord, defaultProducerRecord, prepareSemanticInputs } from \"./freshness.js\";\nimport {\n FallbackParserAdapter,\n isBuiltInTypeScriptParserAdapter,\n TypeScriptParserAdapter,\n} from \"./parser.js\";\nimport {\n compilerDiagnostic,\n createBoundedModuleResolver,\n TypeScriptSemanticResolver,\n} from \"./semantic.js\";\nimport type { CompilerUnitPlan } from \"./compiler-units.js\";\nimport { runCompilerUnitWorker } from \"./compiler-worker-client.js\";\n\ninterface PreparedSource {\n absolutePath: string;\n relativePath: string;\n content: string;\n hash: string;\n file: FileRecord;\n syntax?: AnalysisContext[\"syntax\"];\n}\n\nexport interface AnalyzeProjectOptions {\n resolved: ResolvedConfiguration;\n analyzers?: FrameworkAnalyzer[];\n parser?: SyntaxParserAdapter;\n semanticResolver?: SemanticResolver;\n}\n\nexport async function analyzeProject(options: AnalyzeProjectOptions): Promise<CodeMap> {\n const { resolved } = options;\n const semanticInputs = await prepareSemanticInputs(resolved.root, resolved.config);\n const {\n packageMetadata,\n frameworks: selectedFrameworks,\n discovered,\n compilerGraph,\n configHash,\n } = semanticInputs;\n const parser =\n options.parser && !isBuiltInTypeScriptParserAdapter(options.parser)\n ? new FallbackParserAdapter(options.parser, new TypeScriptParserAdapter())\n : undefined;\n const prepared = await mapLimit(\n discovered,\n resolved.config.concurrency ?? 16,\n async (source): Promise<PreparedSource> => {\n const bytes = await fs.readFile(source.absolutePath);\n const content = bytes.toString(\"utf8\");\n const hash = hashText(bytes);\n const syntax = parser\n ? await parser.parse({\n path: source.relativePath,\n language: source.language,\n source: content,\n })\n : undefined;\n return {\n ...source,\n content,\n hash,\n ...(syntax ? { syntax } : {}),\n file: {\n schemaVersion: SCHEMA_VERSION,\n id: fileId(source.relativePath),\n path: source.relativePath,\n compilerUnit:\n compilerGraph.ownership.get(source.relativePath) ?? generatedCompilerUnitId(\"fallback\"),\n language: source.language,\n frameworks: [],\n hash,\n lines: lineCount(content),\n imports: [],\n exports: [],\n symbolIds: [],\n env: [],\n operations: [],\n syntax: {\n parser: sanitizePersistedText(\n syntax?.parser ?? \"typescript-compiler-syntax\",\n resolved.root,\n ),\n factCount: syntax?.facts.length ?? 0,\n hadErrors: syntax?.hadErrors ?? false,\n ...(syntax?.fallbackFrom\n ? { fallbackFrom: sanitizePersistedText(syntax.fallbackFrom, resolved.root) }\n : {}),\n },\n },\n };\n },\n );\n\n const semanticResolver = options.semanticResolver ?? new TypeScriptSemanticResolver();\n const diagnostics: DiagnosticRecord[] = [...compilerGraph.diagnostics];\n for (const source of prepared) {\n const syntax = source.syntax;\n if (!syntax?.fallbackFrom) continue;\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"parser-fallback\",\n severity: \"warning\",\n message:\n syntax.issues[0]?.message ??\n `Parser ${syntax.fallbackFrom} was unavailable; used ${syntax.parser}.`,\n file: source.relativePath,\n });\n }\n const symbols: SymbolRecord[] = [];\n const relations: RelationRecord[] = [];\n const internalPipeline = defaultAnalyzerPipeline();\n const internalAnalyzers = internalPipeline.analyzers;\n const analyzers = uniqueAnalyzers([...internalAnalyzers, ...(options.analyzers ?? [])]);\n const trustedInternalAnalyzers = internalPipeline.methods;\n const preparedByAbsolute = new Map(\n prepared.map((source) => [source.absolutePath, source] as const),\n );\n const indexedSourcePaths = new Set(prepared.map((source) => source.relativePath));\n const unitAliases = new Map<string, Record<string, string[]>>();\n const observedSemanticInputs: SemanticInputObservation[] = [];\n\n const builtInProducer =\n !options.semanticResolver &&\n !options.analyzers &&\n (!options.parser || isBuiltInTypeScriptParserAdapter(options.parser));\n\n // A completed worker releases its compiler heap before the next unit or serialization.\n for (const unit of compilerGraph.units) {\n if (unit.ownedFiles.length === 0) continue;\n const unitInput: CompilerWorkerInput = {\n unit,\n root: resolved.root,\n packageDependencies: packageMetadata.dependencies,\n includePrivateSymbols: resolved.config.includePrivateSymbols,\n selectedFrameworks,\n preparedByAbsolute: new Map(\n unit.ownedFiles.flatMap((absolute) => {\n const source = preparedByAbsolute.get(absolute);\n return source ? [[absolute, source] as const] : [];\n }),\n ),\n indexedSourcePaths,\n };\n let contribution: CompilerUnitContribution;\n if (builtInProducer) {\n const result = await runCompilerUnitWorker(unitInput);\n contribution = result.contribution;\n for (const file of result.files) {\n const source = preparedByAbsolute.get(path.resolve(resolved.root, file.path));\n if (source) source.file = file;\n }\n } else {\n contribution = await analyzeCompilerUnit({\n ...unitInput,\n analyzers,\n trustedInternalAnalyzers,\n semanticResolver,\n });\n }\n unitAliases.set(unit.record.id, contribution.pathAliases);\n diagnostics.push(...contribution.diagnostics);\n symbols.push(...contribution.symbols);\n relations.push(...contribution.relations);\n observedSemanticInputs.push(...contribution.semanticInputs);\n }\n\n const merged = mergeSpecializedSymbols(symbols, relations);\n addFileRelations(prepared, merged.symbols, merged.relations);\n const normalizedRelations = normalizeRelations(\n merged.relations,\n prepared.map((source) => source.file),\n merged.symbols,\n merged.replacements,\n resolved.root,\n );\n for (const source of prepared) {\n source.file.symbolIds = merged.symbols\n .filter((symbol) => symbol.file === source.relativePath)\n .map((symbol) => symbol.id)\n .sort(compareText);\n }\n\n const compilerUnits = compilerGraph.units.map((unit) => ({\n ...unit.record,\n pathAliases: unitAliases.get(unit.record.id) ?? unit.record.pathAliases,\n }));\n const pathAliases = compatibilityPathAliases(compilerUnits, compilerGraph.primaryConfig);\n const persistedSymbols = merged.symbols.map((symbol) =>\n sanitizePersistedSymbol(symbol, resolved.root),\n );\n const normalizedDiagnostics = normalizeDiagnostics(diagnostics, resolved.root);\n const manifestSemanticInputs = normalizeSemanticInputs(\n observedSemanticInputs,\n new Set(prepared.map((source) => source.relativePath)),\n );\n const producerComponents = {\n semanticResolver: {\n name: sanitizePersistedText(semanticResolver.name, resolved.root),\n version: sanitizePersistedText(semanticResolver.version ?? \"unversioned\", resolved.root),\n },\n syntaxParser:\n options.parser && !isBuiltInTypeScriptParserAdapter(options.parser)\n ? {\n name: sanitizePersistedText(options.parser.name, resolved.root),\n version: sanitizePersistedText(options.parser.version ?? \"unversioned\", resolved.root),\n }\n : { name: \"typescript-compiler-syntax\", version: ts.version },\n analyzers: analyzers\n .map((analyzer) => ({\n name: sanitizePersistedText(analyzer.name, resolved.root),\n version: sanitizePersistedText(analyzer.version ?? \"unversioned\", resolved.root),\n }))\n .sort((a, b) => compareText(a.name, b.name)),\n };\n const project: ProjectRecord = {\n schemaVersion: SCHEMA_VERSION,\n name: sanitizePersistedText(packageMetadata.name, resolved.root),\n ...(packageMetadata.packageManager\n ? { packageManager: sanitizePersistedText(packageMetadata.packageManager, resolved.root) }\n : {}),\n frameworks: selectedFrameworks,\n ...(compilerGraph.primaryConfig ? { tsconfig: compilerGraph.primaryConfig } : {}),\n pathAliases,\n compilerUnits,\n entryPoints: packageMetadata.entryPoints,\n workspaces: packageMetadata.workspaces.map((workspace) => ({\n ...workspace,\n name: sanitizePersistedText(workspace.name, resolved.root),\n })),\n counts: {\n files: prepared.length,\n symbols: persistedSymbols.length,\n relations: normalizedRelations.length,\n diagnostics: normalizedDiagnostics.length,\n },\n };\n return {\n manifest: {\n schemaVersion: SCHEMA_VERSION,\n analyzerVersion: ANALYZER_VERSION,\n producer: builtInProducer\n ? defaultProducerRecord()\n : customProducerRecord(producerComponents),\n semanticResolver: producerComponents.semanticResolver,\n syntaxParser: producerComponents.syntaxParser,\n analyzers: producerComponents.analyzers,\n configHash,\n sourceFiles: prepared\n .map((source) => ({\n path: source.relativePath,\n hash: source.hash,\n compilerUnit: source.file.compilerUnit,\n lines: source.file.lines,\n }))\n .sort((a, b) => compareText(a.path, b.path)),\n semanticInputs: manifestSemanticInputs,\n artifacts: [],\n integrityHash: \"0\".repeat(64),\n },\n project,\n files: prepared.map((source) => source.file).sort((a, b) => compareText(a.path, b.path)),\n symbols: persistedSymbols,\n relations: normalizedRelations,\n diagnostics: normalizedDiagnostics,\n };\n}\n\ninterface AnalyzeCompilerUnitOptions {\n unit: CompilerUnitPlan;\n root: string;\n packageDependencies: AnalysisContext[\"packageDependencies\"];\n includePrivateSymbols: boolean;\n selectedFrameworks: Framework[];\n preparedByAbsolute: Map<string, PreparedSource>;\n indexedSourcePaths: Set<string>;\n analyzers: FrameworkAnalyzer[];\n trustedInternalAnalyzers: ReadonlyMap<FrameworkAnalyzer, TrustedAnalyzerMethods>;\n semanticResolver: SemanticResolver;\n}\n\ninterface CompilerUnitContribution {\n pathAliases: Record<string, string[]>;\n diagnostics: DiagnosticRecord[];\n symbols: SymbolRecord[];\n relations: RelationRecord[];\n semanticInputs: SemanticInputObservation[];\n}\n\nexport type CompilerWorkerInput = Omit<\n AnalyzeCompilerUnitOptions,\n \"analyzers\" | \"trustedInternalAnalyzers\" | \"semanticResolver\"\n>;\n\nexport interface CompilerWorkerResult {\n contribution: CompilerUnitContribution;\n files: FileRecord[];\n}\n\nexport async function analyzeDefaultCompilerUnit(\n input: CompilerWorkerInput,\n): Promise<CompilerWorkerResult> {\n const pipeline = defaultAnalyzerPipeline();\n const contribution = await analyzeCompilerUnit({\n ...input,\n analyzers: pipeline.analyzers,\n trustedInternalAnalyzers: pipeline.methods,\n // We expose type facts and syntactic diagnostics, not TS JSDoc link diagnostics or prose.\n // This mode still parses all JavaScript JSDoc, which can define types.\n semanticResolver: new TypeScriptSemanticResolver(ts.JSDocParsingMode.ParseForTypeInfo),\n });\n return {\n contribution,\n files: [...input.preparedByAbsolute.values()].map((source) => source.file),\n };\n}\n\nasync function analyzeCompilerUnit(\n options: AnalyzeCompilerUnitOptions,\n): Promise<CompilerUnitContribution> {\n const { unit } = options;\n const semantic = await options.semanticResolver.resolve({\n root: options.root,\n sourceFiles: unit.sourceFiles,\n ...(unit.record.config ? { tsconfig: unit.record.config } : {}),\n compilerUnit: unit.record.id,\n });\n const { program, checker } = semantic;\n const resolveModule =\n semantic.resolveModule ??\n createBoundedModuleResolver(\n options.root,\n path.resolve(options.root, unit.record.root),\n program.getCompilerOptions(),\n );\n const diagnostics: DiagnosticRecord[] = [...semantic.diagnostics];\n const symbols: SymbolRecord[] = [];\n const relations: RelationRecord[] = [];\n\n for (const absolutePath of unit.ownedFiles) {\n const source = options.preparedByAbsolute.get(absolutePath);\n if (!source) continue;\n const sourceFile = program.getSourceFile(source.absolutePath);\n if (!sourceFile) {\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"error\",\n message:\n \"TypeScript did not include this selected source file in the owning compiler unit.\",\n file: source.relativePath,\n });\n continue;\n }\n const sourceDiagnostics = parseDiagnostics(program, sourceFile, options.root);\n diagnostics.push(...sourceDiagnostics);\n const syntax = source.syntax ?? syntaxFromProgram(sourceFile, sourceDiagnostics);\n source.file.syntax = {\n parser: sanitizePersistedText(syntax.parser, options.root),\n factCount: syntax.facts.length,\n hadErrors: syntax.hadErrors,\n ...(syntax.fallbackFrom\n ? { fallbackFrom: sanitizePersistedText(syntax.fallbackFrom, options.root) }\n : {}),\n };\n const context: AnalysisContext = {\n root: options.root,\n relativePath: source.relativePath,\n sourceFile,\n program,\n checker,\n sourceHash: source.hash,\n file: source.file,\n packageDependencies: options.packageDependencies,\n syntax,\n includePrivateSymbols: options.includePrivateSymbols,\n compilerUnit: unit.record,\n indexedSourcePaths: options.indexedSourcePaths,\n resolveModule,\n };\n\n const structure = extractFileStructure(context);\n source.file.imports = structure.imports;\n source.file.exports = structure.exports;\n source.file.env = structure.env;\n source.file.operations = structure.operations;\n diagnostics.push(...structure.diagnostics);\n relations.push(...structure.relations);\n\n for (const analyzer of options.analyzers) {\n const trustedSupport = trustedAnalyzerMethods(analyzer, options.trustedInternalAnalyzers);\n let supported = false;\n try {\n supported = trustedSupport\n ? trustedSupport.supports(context)\n : analyzer.supports(isolateCustomAnalyzerContext(context));\n } catch {\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"warning\",\n message: `Analyzer ${analyzer.name} failed during capability detection; its contribution was skipped.`,\n file: source.relativePath,\n });\n continue;\n }\n if (!supported || !analyzerEnabled(analyzer, options.selectedFrameworks)) continue;\n try {\n // Re-resolve trust immediately before invocation. A supplied analyzer is never allowed to\n // retain a cached trusted decision and then swap behavior between supports() and analyze().\n const trustedAnalysis = trustedAnalyzerMethods(analyzer, options.trustedInternalAnalyzers);\n const rawContribution = trustedAnalysis\n ? await trustedAnalysis.analyze(context)\n : await analyzer.analyze(isolateCustomAnalyzerContext(context));\n const contribution = trustedAnalysis\n ? rawContribution\n : sanitizeCustomContribution(\n rawContribution,\n options.root,\n analyzer.name,\n source,\n symbols,\n );\n symbols.push(...(contribution.symbols ?? []));\n relations.push(...(contribution.relations ?? []));\n diagnostics.push(...(contribution.diagnostics ?? []));\n source.file.frameworks.push(...(contribution.frameworks ?? []));\n } catch {\n diagnostics.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"warning\",\n message: `Analyzer ${analyzer.name} failed; its contribution was skipped.`,\n file: source.relativePath,\n });\n }\n }\n source.file.frameworks = [...new Set(source.file.frameworks)].sort();\n }\n\n return {\n pathAliases: semantic.pathAliases,\n diagnostics,\n symbols,\n relations,\n semanticInputs: semantic.semanticInputs?.() ?? [],\n };\n}\n\nfunction isolateCustomAnalyzerContext(context: AnalysisContext): AnalysisContext {\n return {\n ...context,\n file: structuredClone(context.file),\n syntax: structuredClone(context.syntax),\n compilerUnit: structuredClone(context.compilerUnit),\n packageDependencies: new Set(context.packageDependencies),\n ...(context.indexedSourcePaths\n ? { indexedSourcePaths: new Set(context.indexedSourcePaths) }\n : {}),\n };\n}\n\nfunction sanitizeCustomContribution(\n contribution: AnalysisContribution,\n root: string,\n analyzerName: string,\n source: PreparedSource,\n knownSymbols: SymbolRecord[],\n): AnalysisContribution {\n const sourceFileId = fileId(source.relativePath);\n const localSymbolIds = new Set<string>(\n knownSymbols.filter((symbol) => symbol.file === source.relativePath).map((symbol) => symbol.id),\n );\n const localSymbols = new Map<string, SymbolRecord>(\n knownSymbols\n .filter((symbol) => symbol.file === source.relativePath)\n .map((symbol) => [symbol.id, symbol]),\n );\n\n const symbolIds = new Map<string, string>();\n const warnings: DiagnosticRecord[] = [];\n const pushWarning = (message: string) => {\n warnings.push({\n schemaVersion: SCHEMA_VERSION,\n code: \"analysis-error\",\n severity: \"warning\",\n message: sanitizePersistedText(message, root),\n file: source.relativePath,\n });\n };\n\n const rangeFitsSource = (range: SymbolRecord[\"range\"]): boolean =>\n range.startLine >= 1 &&\n range.endLine >= range.startLine &&\n range.endLine <= source.file.lines &&\n (range.endLine !== range.startLine || range.endColumn >= range.startColumn);\n const sanitizeEndpoint = (value: string): string =>\n symbolIds.get(value) ?? sanitizeCustomIdentifier(value, root);\n\n const symbols: SymbolRecord[] = [];\n for (const raw of contribution.symbols ?? []) {\n const sanitized = {\n ...raw,\n id: sanitizeCustomIdentifier(raw.id, root),\n name: sanitizePersistedText(raw.name, root),\n ...(raw.signature ? { signature: sanitizePersistedText(raw.signature, root) } : {}),\n ...(raw.documentation\n ? { documentation: sanitizePersistedText(raw.documentation, root) }\n : {}),\n facts: Object.fromEntries(\n Object.entries(raw.facts).map(([key, value]) => [\n sanitizePersistedText(key, root),\n sanitizeJsonValue(value, root),\n ]),\n ),\n };\n const parsed = SymbolRecordSchema.safeParse(sanitized);\n if (!parsed.success) {\n pushWarning(`Analyzer ${analyzerName} emitted an invalid custom symbol.`);\n continue;\n }\n if (parsed.data.file !== source.relativePath) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom symbol for non-local file ${parsed.data.file}.`,\n );\n continue;\n }\n if (parsed.data.sourceHash !== source.hash) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom symbol with a source hash mismatch for ${parsed.data.id}.`,\n );\n continue;\n }\n if (!rangeFitsSource(parsed.data.range)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom symbol with out-of-bounds source range for ${parsed.data.id}.`,\n );\n continue;\n }\n symbols.push(parsed.data);\n symbolIds.set(raw.id, parsed.data.id);\n localSymbolIds.add(parsed.data.id);\n localSymbols.set(parsed.data.id, parsed.data);\n }\n\n const relations: RelationRecord[] = [];\n for (const raw of contribution.relations ?? []) {\n const relation = {\n ...raw,\n from: sanitizeEndpoint(raw.from),\n to: sanitizeEndpoint(raw.to),\n origin: {\n ...raw.origin,\n explanation: sanitizePersistedText(raw.origin.explanation, root),\n analyzer: sanitizePersistedText(raw.origin.analyzer, root),\n },\n };\n const parsed = RelationRecordSchema.safeParse(relation);\n if (!parsed.success) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom relation from ${relation.from} to ${relation.to}.`,\n );\n continue;\n }\n if (\n parsed.data.origin.file !== source.relativePath ||\n parsed.data.origin.line !== parsed.data.origin.range.startLine ||\n parsed.data.origin.range.startLine < 1 ||\n parsed.data.origin.range.endLine > source.file.lines\n ) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom relation with invalid evidence bounds for ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n if (parsed.data.type === \"imports\") {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom imports relation; imports are core-owned and were skipped.`,\n );\n continue;\n } else if (parsed.data.type === \"contains\" || parsed.data.type === \"exports\") {\n const targetSymbol = localSymbols.get(parsed.data.to);\n if (!targetSymbol || !rangesEqual(parsed.data.origin.range, targetSymbol.range)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom structural relation ${parsed.data.type} ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n if (parsed.data.type === \"exports\") {\n if (parsed.data.from !== sourceFileId || !targetSymbol.exported) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom export relation ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n } else if (parsed.data.from !== sourceFileId) {\n const parentSymbol = localSymbols.get(parsed.data.from);\n if (!parentSymbol || !rangeContains(parentSymbol.range, parsed.data.origin.range)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom containment relation ${parsed.data.from} -> ${parsed.data.to}.`,\n );\n continue;\n }\n } else if (!localSymbolIds.has(parsed.data.to)) {\n pushWarning(\n `Analyzer ${analyzerName} emitted an invalid custom containment relation from file to non-local symbol ${parsed.data.to}.`,\n );\n continue;\n }\n }\n relations.push(parsed.data);\n }\n\n const diagnostics: DiagnosticRecord[] = [];\n for (const raw of contribution.diagnostics ?? []) {\n const diagnostic = {\n ...raw,\n message: sanitizePersistedText(raw.message, root),\n };\n const parsed = DiagnosticRecordSchema.safeParse(diagnostic);\n if (!parsed.success) {\n pushWarning(`Analyzer ${analyzerName} emitted an invalid custom diagnostic.`);\n continue;\n }\n if (parsed.data.file && parsed.data.file !== source.relativePath) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom diagnostic for non-local file ${parsed.data.file}.`,\n );\n continue;\n }\n if (parsed.data.file && parsed.data.line && parsed.data.line > source.file.lines) {\n pushWarning(\n `Analyzer ${analyzerName} emitted a custom diagnostic with out-of-bounds line ${parsed.data.line}.`,\n );\n continue;\n }\n diagnostics.push(parsed.data);\n }\n\n const frameworks: Framework[] = [];\n for (const rawFramework of contribution.frameworks ?? []) {\n const parsed = FrameworkSchema.safeParse(rawFramework);\n if (!parsed.success) {\n pushWarning(`Analyzer ${analyzerName} emitted an invalid custom framework ${rawFramework}.`);\n continue;\n }\n frameworks.push(parsed.data);\n }\n return {\n ...(symbols.length ? { symbols } : {}),\n ...(relations.length ? { relations } : {}),\n ...(diagnostics.length || warnings.length\n ? {\n diagnostics: [...diagnostics, ...warnings],\n }\n : {}),\n ...(frameworks.length ? { frameworks } : {}),\n };\n}\n\nfunction sanitizeCustomIdentifier(value: string, root: string): string {\n if (value.startsWith(\"route:\")) {\n const route = value.slice(\"route:\".length);\n return looksLikeHostFilePath(route, root) ? \"route:<redacted>\" : value;\n }\n if (value.startsWith(\"external:\")) {\n const separator = value.lastIndexOf(\"#\");\n const moduleName = value.slice(\"external:\".length, separator > 0 ? separator : undefined);\n const exported = separator > 0 ? value.slice(separator + 1) : \"default\";\n const safeModule =\n isAbsolutePath(moduleName) || hasEmbeddedAbsolutePath(moduleName)\n ? \"<absolute-import>\"\n : sanitizePersistedText(moduleName, root);\n return `external:${safeModule}#${sanitizePersistedText(exported, root)}`;\n }\n const prefixEnd = value.indexOf(\":\");\n const nameStart = value.lastIndexOf(\"#\");\n if (prefixEnd >= 0) {\n const pathEnd = nameStart > prefixEnd ? nameStart : value.length;\n const candidatePath = value.slice(prefixEnd + 1, pathEnd);\n if (isAbsolutePath(candidatePath) || hasEmbeddedAbsolutePath(candidatePath)) {\n const safePath = sanitizePersistedText(candidatePath, root);\n const suffix = nameStart > prefixEnd ? value.slice(nameStart) : \"\";\n return `${value.slice(0, prefixEnd + 1)}${safePath}${sanitizePersistedText(suffix, root)}`;\n }\n }\n return sanitizePersistedText(value, root);\n}\n\nfunction rangesEqual(left: SymbolRecord[\"range\"], right: SymbolRecord[\"range\"]): boolean {\n return (\n left.startLine === right.startLine &&\n left.startColumn === right.startColumn &&\n left.endLine === right.endLine &&\n left.endColumn === right.endColumn\n );\n}\n\nfunction rangeContains(outer: SymbolRecord[\"range\"], inner: SymbolRecord[\"range\"]): boolean {\n if (\n outer.startLine > inner.startLine ||\n (outer.startLine === inner.startLine && outer.startColumn > inner.startColumn)\n )\n return false;\n if (\n outer.endLine < inner.endLine ||\n (outer.endLine === inner.endLine && outer.endColumn < inner.endColumn)\n )\n return false;\n return true;\n}\n\nfunction sanitizeJsonValue(value: JsonValue, root: string): JsonValue {\n if (typeof value === \"string\") return sanitizePersistedText(value, root);\n if (Array.isArray(value)) return value.map((item) => sanitizeJsonValue(item, root));\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n sanitizePersistedText(key, root),\n sanitizeJsonValue(item, root),\n ]),\n );\n }\n return value;\n}\n\nexport function defaultAnalyzers(): FrameworkAnalyzer[] {\n return [new CoreAnalyzer(), new ReactAnalyzer()];\n}\n\nconst canonicalCoreAnalyzerMethods: TrustedAnalyzerMethods = {\n supports: CoreAnalyzer.prototype.supports.bind(CoreAnalyzer.prototype),\n analyze: CoreAnalyzer.prototype.analyze.bind(CoreAnalyzer.prototype),\n};\nconst canonicalReactAnalyzerMethods: TrustedAnalyzerMethods = {\n supports: ReactAnalyzer.prototype.supports.bind(ReactAnalyzer.prototype),\n analyze: ReactAnalyzer.prototype.analyze.bind(ReactAnalyzer.prototype),\n};\n\nfunction defaultAnalyzerPipeline(): {\n analyzers: FrameworkAnalyzer[];\n methods: ReadonlyMap<FrameworkAnalyzer, TrustedAnalyzerMethods>;\n} {\n const core = new CoreAnalyzer();\n const react = new ReactAnalyzer();\n return {\n analyzers: [core, react],\n methods: new Map<FrameworkAnalyzer, TrustedAnalyzerMethods>([\n [core, canonicalCoreAnalyzerMethods],\n [react, canonicalReactAnalyzerMethods],\n ]),\n };\n}\n\nfunction uniqueAnalyzers(analyzers: FrameworkAnalyzer[]): FrameworkAnalyzer[] {\n const byName = new Map<string, FrameworkAnalyzer>();\n for (const analyzer of analyzers) byName.set(analyzer.name, analyzer);\n return [...byName.values()];\n}\n\nfunction analyzerEnabled(analyzer: FrameworkAnalyzer, frameworks: Framework[]): boolean {\n if (analyzer instanceof CoreAnalyzer) return true;\n const name = analyzer.name.toLowerCase();\n if (name.includes(\"react\")) return frameworks.includes(\"react\") || frameworks.includes(\"nextjs\");\n if (name.includes(\"next\")) return frameworks.includes(\"nextjs\");\n if (name.includes(\"nest\")) return frameworks.includes(\"nestjs\");\n return true;\n}\n\ninterface TrustedAnalyzerMethods {\n supports(context: AnalysisContext): boolean;\n analyze(context: AnalysisContext): AnalysisContribution | Promise<AnalysisContribution>;\n}\n\nfunction trustedAnalyzerMethods(\n analyzer: FrameworkAnalyzer,\n internal: ReadonlyMap<FrameworkAnalyzer, TrustedAnalyzerMethods>,\n): TrustedAnalyzerMethods | undefined {\n const internalMethods = internal.get(analyzer);\n if (internalMethods) return internalMethods;\n return trustedNextJsAnalyzerMethods(analyzer) ?? trustedNestJsAnalyzerMethods(analyzer);\n}\n\nfunction parseDiagnostics(\n program: ts.Program,\n sourceFile: ts.SourceFile,\n root: string,\n): DiagnosticRecord[] {\n return program\n .getSyntacticDiagnostics(sourceFile)\n .map((diagnostic) => compilerDiagnostic(diagnostic, root));\n}\n\nfunction syntaxFromProgram(\n sourceFile: ts.SourceFile,\n diagnostics: DiagnosticRecord[],\n): SyntaxParseResult {\n const parser = \"typescript-compiler-syntax\";\n const facts: SyntaxFact[] = [];\n for (const statement of sourceFile.statements) {\n const kind = ts.isImportDeclaration(statement)\n ? \"import\"\n : ts.isExportDeclaration(statement) || ts.isExportAssignment(statement)\n ? \"export\"\n : isTopLevelDeclaration(statement)\n ? \"declaration\"\n : undefined;\n if (!kind) continue;\n const name = syntaxStatementName(statement);\n facts.push({\n kind,\n nodeType: ts.SyntaxKind[statement.kind],\n ...(name ? { name } : {}),\n range: sourceRange(sourceFile, statement),\n evidence: { parser, exact: true },\n });\n }\n for (const diagnostic of diagnostics) {\n facts.push({\n kind: \"parse-error\",\n nodeType: \"typescript-diagnostic\",\n range: {\n startLine: diagnostic.line ?? 1,\n startColumn: diagnostic.column ?? 1,\n endLine: diagnostic.line ?? 1,\n endColumn: diagnostic.column ?? 1,\n },\n evidence: { parser, exact: true },\n });\n }\n return {\n parser,\n facts,\n issues: diagnostics.map((diagnostic) => ({ message: diagnostic.message })),\n hadErrors: diagnostics.length > 0,\n };\n}\n\nfunction isTopLevelDeclaration(statement: ts.Statement): boolean {\n return (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isVariableStatement(statement)\n );\n}\n\nfunction syntaxStatementName(statement: ts.Statement): string | undefined {\n if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {\n return statement.moduleSpecifier.text;\n }\n if (ts.isExportAssignment(statement)) return \"default\";\n if (ts.isExportDeclaration(statement)) {\n return statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : \"export\";\n }\n if (ts.isVariableStatement(statement)) {\n return statement.declarationList.declarations\n .map((declaration) => (ts.isIdentifier(declaration.name) ? declaration.name.text : undefined))\n .filter((name): name is string => name !== undefined)\n .join(\",\");\n }\n const name = (statement as unknown as ts.NamedDeclaration).name;\n return name && ts.isIdentifier(name) ? name.text : undefined;\n}\n\nfunction sourceRange(sourceFile: ts.SourceFile, node: ts.Node): SymbolRecord[\"range\"] {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile, false));\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n return {\n startLine: start.line + 1,\n startColumn: start.character + 1,\n endLine: end.line + 1,\n endColumn: end.character + 1,\n };\n}\n\ninterface MergedSymbols {\n symbols: SymbolRecord[];\n relations: RelationRecord[];\n replacements: Map<string, string>;\n}\n\nfunction mergeSpecializedSymbols(\n values: SymbolRecord[],\n relations: RelationRecord[],\n): MergedSymbols {\n const byLocation = new Map<string, SymbolRecord>();\n const replacements = new Map<string, string>();\n for (const value of values) {\n const key = `${value.file}:${value.range.startLine}:${value.range.startColumn}:${value.name}`;\n const existing = byLocation.get(key);\n if (!existing) {\n byLocation.set(key, value);\n continue;\n }\n const winner =\n specializationPriority(value.kind) >= specializationPriority(existing.kind)\n ? mergeSymbolFacts(value, existing)\n : mergeSymbolFacts(existing, value);\n const loser = winner.id === value.id ? existing : value;\n replacements.set(loser.id, winner.id);\n byLocation.set(key, winner);\n }\n return {\n symbols: [...byLocation.values()].sort((a, b) => compareText(a.id, b.id)),\n relations,\n replacements,\n };\n}\n\nfunction specializationPriority(kind: SymbolRecord[\"kind\"]): number {\n if (kind.startsWith(\"nest-\") || kind.startsWith(\"next-\") || kind === \"route\" || kind === \"dto\")\n return 3;\n if (kind.startsWith(\"react-\")) return 2;\n return 1;\n}\n\nfunction mergeSymbolFacts(primary: SymbolRecord, secondary: SymbolRecord): SymbolRecord {\n return {\n ...primary,\n exported: primary.exported || secondary.exported,\n ...(primary.defaultExport || secondary.defaultExport ? { defaultExport: true } : {}),\n ...((primary.signature ?? secondary.signature)\n ? { signature: primary.signature ?? secondary.signature }\n : {}),\n ...((primary.documentation ?? secondary.documentation)\n ? { documentation: primary.documentation ?? secondary.documentation }\n : {}),\n facts: { ...secondary.facts, ...primary.facts },\n };\n}\n\nfunction addFileRelations(\n prepared: PreparedSource[],\n symbols: SymbolRecord[],\n relations: RelationRecord[],\n): void {\n for (const symbol of symbols) {\n const source = prepared.find((candidate) => candidate.relativePath === symbol.file);\n if (!source) continue;\n relations.push({\n schemaVersion: SCHEMA_VERSION,\n from: fileId(symbol.file),\n type: \"contains\",\n to: symbol.id,\n confidence: 1,\n origin: {\n file: symbol.file,\n line: symbol.range.startLine,\n range: symbol.range,\n explanation: \"source containment\",\n classification: \"exact\",\n analyzer: \"typescript-node\",\n },\n });\n if (symbol.exported) {\n relations.push({\n schemaVersion: SCHEMA_VERSION,\n from: fileId(symbol.file),\n type: \"exports\",\n to: symbol.id,\n confidence: 1,\n origin: {\n file: symbol.file,\n line: symbol.range.startLine,\n range: symbol.range,\n explanation: \"export modifier\",\n classification: \"exact\",\n analyzer: \"typescript-node\",\n },\n });\n }\n }\n}\n\nfunction normalizeRelations(\n values: RelationRecord[],\n files: FileRecord[],\n symbols: SymbolRecord[],\n replacements: Map<string, string>,\n root: string,\n): RelationRecord[] {\n const knownFiles = new Set(files.map((file) => file.id));\n const byId = new Map(symbols.map((symbol) => [symbol.id, symbol]));\n const byFileAndName = new Map<string, SymbolRecord>();\n for (const symbol of symbols) byFileAndName.set(`${symbol.file}#${symbol.name}`, symbol);\n const resolveEndpoint = (id: string): string | undefined => {\n let resolved = id;\n const visited = new Set<string>();\n while (replacements.has(resolved) && !visited.has(resolved)) {\n visited.add(resolved);\n const replacement = replacements.get(resolved);\n if (!replacement) break;\n resolved = replacement;\n }\n if (\n knownFiles.has(resolved) ||\n byId.has(resolved) ||\n resolved.startsWith(\"external:\") ||\n resolved.startsWith(\"route:\")\n )\n return resolved;\n const parsed = /^(?:[^:]+):(.+)#([^#.]+)$/.exec(resolved);\n if (parsed) return byFileAndName.get(`${parsed[1]}#${parsed[2]}`)?.id;\n return undefined;\n };\n\n const all: RelationRecord[] = [];\n for (const value of values) {\n const from = resolveEndpoint(value.from);\n const to = resolveEndpoint(value.to);\n if (!from || !to || from === to) continue;\n all.push({\n ...value,\n from,\n to,\n confidence: clampConfidence(value.confidence),\n origin: {\n ...value.origin,\n explanation: sanitizePersistedText(value.origin.explanation, root),\n analyzer: sanitizePersistedText(value.origin.analyzer, root),\n },\n });\n }\n for (const value of [...all]) {\n if (!inverseEligible(value.type)) continue;\n all.push({\n ...value,\n from: value.to,\n type: \"used-by\",\n to: value.from,\n origin: {\n ...value.origin,\n explanation: `inverse of ${value.type}`,\n classification: \"derived\",\n analyzer: \"relation-normalizer\",\n },\n });\n }\n const map = new Map<string, RelationRecord>();\n for (const value of all) {\n const key = `${value.from}\\u0000${value.type}\\u0000${value.to}\\u0000${value.origin.file}\\u0000${value.origin.range.startLine}\\u0000${value.origin.range.startColumn}\\u0000${value.origin.range.endLine}\\u0000${value.origin.range.endColumn}`;\n const existing = map.get(key);\n if (!existing || relationWouldReplace(existing, value)) map.set(key, value);\n }\n return [...map.values()].sort((a, b) => compareText(relationKey(a), relationKey(b)));\n}\n\nfunction relationWouldReplace(existing: RelationRecord, candidate: RelationRecord): boolean {\n if (candidate.confidence > existing.confidence) return true;\n if (candidate.confidence < existing.confidence) return false;\n const candidateRank = relationDeterministicRank(candidate);\n const existingRank = relationDeterministicRank(existing);\n if (candidateRank !== existingRank) return candidateRank > existingRank;\n return compareText(relationKey(candidate), relationKey(existing)) < 0;\n}\n\nfunction relationDeterministicRank(relation: RelationRecord): number {\n switch (relation.origin.classification) {\n case \"exact\":\n return 2;\n case \"derived\":\n return 1;\n case \"framework-derived\":\n default:\n return 0;\n }\n}\n\nfunction inverseEligible(type: RelationRecord[\"type\"]): boolean {\n return [\"calls\", \"instantiates\", \"renders\", \"uses-hook\", \"depends-on\", \"injects\"].includes(type);\n}\n\nfunction clampConfidence(value: number): number {\n return Math.max(0, Math.min(1, Number.isFinite(value) ? value : 0));\n}\n\nfunction relationKey(value: RelationRecord): string {\n return [\n value.from,\n value.type,\n value.to,\n value.origin.file,\n String(value.origin.range.startLine).padStart(10, \"0\"),\n String(value.origin.range.startColumn).padStart(10, \"0\"),\n String(value.origin.range.endLine).padStart(10, \"0\"),\n String(value.origin.range.endColumn).padStart(10, \"0\"),\n value.origin.classification,\n value.origin.analyzer,\n value.origin.explanation,\n ].join(\"\\u0000\");\n}\n\nfunction normalizeDiagnostics(values: DiagnosticRecord[], root: string): DiagnosticRecord[] {\n const map = new Map<string, DiagnosticRecord>();\n for (const value of values) {\n const sanitized = { ...value, message: sanitizePersistedText(value.message, root) };\n const key = `${sanitized.file ?? \"\"}:${sanitized.line ?? 0}:${sanitized.column ?? 0}:${sanitized.code}:${sanitized.message}`;\n map.set(key, sanitized);\n }\n return [...map.values()].sort((a, b) => compareText(diagnosticKey(a), diagnosticKey(b)));\n}\n\nfunction sanitizePersistedSymbol(symbol: SymbolRecord, root: string): SymbolRecord {\n return {\n ...symbol,\n ...(symbol.signature ? { signature: sanitizePersistedText(symbol.signature, root) } : {}),\n ...(symbol.documentation\n ? { documentation: sanitizePersistedText(symbol.documentation, root) }\n : {}),\n };\n}\n\nfunction sanitizePersistedText(value: string, root: string): string {\n return redactAbsolutePathsInText(value, root) || \"<redacted>\";\n}\n\nfunction diagnosticKey(value: DiagnosticRecord): string {\n return `${value.file ?? \"\"}\\u0000${String(value.line ?? 0).padStart(10, \"0\")}\\u0000${value.code}\\u0000${value.message}`;\n}\n\nfunction lineCount(content: string): number {\n if (content.length === 0) return 0;\n return content.split(/\\r\\n|\\r|\\n/).length;\n}\n\nfunction normalizeSemanticInputs(\n values: SemanticInputObservation[],\n indexedSources: ReadonlySet<string>,\n): SemanticInputRecord[] {\n const byIdentity = new Map<string, SemanticInputRecord>();\n for (const value of values) {\n const normalized = normalizeStoredPath(value.path);\n if (!isSafeSemanticInputPath(normalized)) continue;\n if (value.kind === \"file\" && indexedSources.has(normalized)) continue;\n if (value.kind === \"symlink\") {\n const target = normalizeStoredPath(value.target);\n if (!isSafeSemanticInputPath(target)) continue;\n const record: SemanticInputRecord = {\n ...value,\n path: normalized,\n scope: value.scope ?? \"project\",\n target,\n };\n byIdentity.set(semanticInputIdentity(record), record);\n continue;\n }\n const record: SemanticInputRecord =\n value.kind === \"resolution-probe\" || value.kind === \"directory-listing\"\n ? { ...value, path: normalized, scope: value.scope ?? \"project\" }\n : { ...value, path: normalized };\n byIdentity.set(semanticInputIdentity(record), record);\n }\n for (const value of byIdentity.values()) {\n if (value.kind === \"file\") {\n byIdentity.delete(`resolution-probe\\u0000project\\u0000file\\u0000${value.path}`);\n byIdentity.delete(`resolution-probe\\u0000project\\u0000readable-file\\u0000${value.path}`);\n } else if (value.kind === \"toolchain-file\") {\n byIdentity.delete(`resolution-probe\\u0000toolchain\\u0000file\\u0000${value.path}`);\n byIdentity.delete(`resolution-probe\\u0000toolchain\\u0000readable-file\\u0000${value.path}`);\n } else if (value.kind === \"directory-listing\") {\n byIdentity.delete(`resolution-probe\\u0000${value.scope}\\u0000directory\\u0000${value.path}`);\n }\n }\n return [...byIdentity.values()].sort((a, b) =>\n compareText(semanticInputIdentity(a), semanticInputIdentity(b)),\n );\n}\n\nfunction semanticInputIdentity(value: SemanticInputRecord): string {\n return value.kind === \"resolution-probe\"\n ? `${value.kind}\\u0000${value.scope}\\u0000${value.targetKind}\\u0000${value.path}`\n : value.kind === \"directory-listing\" || value.kind === \"symlink\"\n ? `${value.kind}\\u0000${value.scope}\\u0000${value.path}`\n : `${value.kind}\\u0000${value.path}`;\n}\n\nfunction isSafeSemanticInputPath(value: string): boolean {\n return !isAbsolutePath(value) && value !== \"..\" && !value.startsWith(\"../\");\n}\n\nfunction compatibilityPathAliases(\n units: CompilerUnitRecord[],\n primaryConfig: string | undefined,\n): Record<string, string[]> {\n const primary = primaryConfig\n ? units.find((unit) => unit.config === primaryConfig)\n : units.find((unit) => unit.kind === \"configured\");\n return primary?.pathAliases ?? {};\n}\n","import type { SymbolKind } from \"./types.js\";\nimport { normalizeStoredPath, sanitizeModuleSpecifier } from \"./utils/path.js\";\n\nexport function fileId(filePath: string): string {\n return `file:${normalizeStoredPath(filePath)}`;\n}\n\nexport function symbolId(\n kind: SymbolKind,\n filePath: string,\n name: string,\n parent?: string,\n): string {\n const prefix = symbolPrefix(kind);\n const qualifiedName = parent ? `${parent}.${name}` : name;\n return `${prefix}:${normalizeStoredPath(filePath)}#${qualifiedName}`;\n}\n\nexport function externalId(moduleName: string, name = \"default\"): string {\n return `external:${sanitizeModuleSpecifier(moduleName)}#${name}`;\n}\n\nexport function configuredCompilerUnitId(configPath: string): string {\n return `compiler-unit:configured:${normalizeStoredPath(configPath)}`;\n}\n\nexport function generatedCompilerUnitId(name: string): string {\n return `compiler-unit:generated:${normalizeStoredPath(name)}`;\n}\n\nexport function routeId(method: string, route: string): string {\n return `route:${method.toUpperCase()}:${route || \"/\"}`;\n}\n\nfunction symbolPrefix(kind: SymbolKind): string {\n switch (kind) {\n case \"react-component\":\n return \"component\";\n case \"react-hook\":\n return \"hook\";\n case \"next-page\":\n case \"next-layout\":\n case \"next-route-handler\":\n case \"next-special-file\":\n return \"next\";\n case \"nest-module\":\n case \"nest-controller\":\n case \"nest-provider\":\n case \"nest-guard\":\n case \"nest-interceptor\":\n case \"nest-pipe\":\n case \"nest-filter\":\n case \"nest-gateway\":\n return \"nest\";\n case \"type-alias\":\n return \"type\";\n default:\n return kind;\n }\n}\n","import { isBuiltin } from \"node:module\";\nimport path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { ANALYZER_VERSION, SCHEMA_VERSION } from \"../constants.js\";\nimport { externalId, fileId, symbolId } from \"../ids.js\";\nimport type {\n AnalysisContext,\n AnalysisContribution,\n DiagnosticRecord,\n ExportRecord,\n ExternalOperation,\n FileRecord,\n FrameworkAnalyzer,\n ImportRecord,\n RelationRecord,\n SymbolKind,\n SymbolRecord,\n} from \"../types.js\";\nimport { isPathInside, relativePosix, sanitizeModuleSpecifier } from \"../utils/path.js\";\nimport { compareText } from \"../utils/stable.js\";\nimport {\n getDeclarationName,\n hasDefaultModifier,\n hasExportModifier,\n hasModifier,\n makeSymbol,\n nodeLine,\n nodeRange,\n propertyNameText,\n visit,\n} from \"./helpers.js\";\n\nexport class CoreAnalyzer implements FrameworkAnalyzer {\n readonly name = \"typescript-node\";\n readonly version = ANALYZER_VERSION;\n\n supports(): boolean {\n return true;\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const symbols: SymbolRecord[] = [];\n const relations: RelationRecord[] = [];\n const seenSymbols = new Map<string, SymbolRecord>();\n\n for (const statement of context.sourceFile.statements) {\n extractTopLevelSymbol(context, statement, seenSymbols, relations);\n }\n symbols.push(...seenSymbols.values());\n\n const declarationIds = declarationIdMap(context, symbols);\n collectBehaviorRelations(context, declarationIds, relations);\n\n return {\n symbols: symbols.sort((a, b) => compareText(a.id, b.id)),\n relations,\n frameworks: [\"typescript\", \"node\"],\n };\n }\n}\n\nfunction extractTopLevelSymbol(\n context: AnalysisContext,\n statement: ts.Statement,\n output: Map<string, SymbolRecord>,\n relations: RelationRecord[],\n): void {\n if (ts.isFunctionDeclaration(statement)) {\n const name = statement.name?.text ?? \"default\";\n const record = makeSymbol(context, statement, \"function\", {\n name,\n exported: isNameExported(context, name, statement),\n facts: { async: hasModifier(statement, ts.SyntaxKind.AsyncKeyword) },\n });\n keepBestDeclaration(output, record, Boolean(statement.body));\n return;\n }\n if (ts.isClassDeclaration(statement)) {\n const className = statement.name?.text ?? \"default\";\n const classRecord = makeSymbol(context, statement, \"class\", {\n name: className,\n exported: isNameExported(context, className, statement),\n });\n keepBestDeclaration(output, classRecord, true);\n for (const member of statement.members) {\n if (!ts.isMethodDeclaration(member) && !ts.isConstructorDeclaration(member)) continue;\n if (hasModifier(member, ts.SyntaxKind.PrivateKeyword) && !isPrivateEnabled(context)) {\n continue;\n }\n const name = ts.isConstructorDeclaration(member)\n ? \"constructor\"\n : (propertyNameText(member.name) ?? \"anonymous\");\n const method = makeSymbol(context, member, \"method\", {\n name,\n parent: className,\n exported: classRecord.exported,\n facts: {\n async: ts.isMethodDeclaration(member)\n ? hasModifier(member, ts.SyntaxKind.AsyncKeyword)\n : false,\n },\n });\n keepBestDeclaration(output, method, Boolean(member.body));\n relations.push(\n relation(classRecord.id, \"contains\", method.id, context, member, 1, \"class member\"),\n );\n }\n return;\n }\n if (ts.isInterfaceDeclaration(statement)) {\n keepBestDeclaration(\n output,\n makeSymbol(context, statement, \"interface\", {\n exported: isNameExported(context, statement.name.text, statement),\n }),\n true,\n );\n return;\n }\n if (ts.isTypeAliasDeclaration(statement)) {\n keepBestDeclaration(\n output,\n makeSymbol(context, statement, \"type-alias\", {\n exported: isNameExported(context, statement.name.text, statement),\n }),\n true,\n );\n return;\n }\n if (ts.isVariableStatement(statement)) {\n const defaultExport = hasDefaultModifier(statement);\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue;\n const functionLike =\n declaration.initializer !== undefined &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer));\n const record = makeSymbol(context, declaration, functionLike ? \"function\" : \"variable\", {\n exported: isNameExported(context, declaration.name.text, statement),\n defaultExport,\n facts: functionLike\n ? { async: hasModifier(declaration.initializer, ts.SyntaxKind.AsyncKeyword) }\n : {},\n });\n keepBestDeclaration(output, record, true);\n }\n }\n}\n\nfunction isNameExported(context: AnalysisContext, name: string, node: ts.Node): boolean {\n if (hasExportModifier(node) || hasDefaultModifier(node)) return true;\n return context.file.exports.some(\n (entry) => !entry.source && (entry.local === name || (!entry.local && entry.name === name)),\n );\n}\n\nfunction isPrivateEnabled(context: AnalysisContext): boolean {\n return context.includePrivateSymbols;\n}\n\nfunction keepBestDeclaration(\n output: Map<string, SymbolRecord>,\n record: SymbolRecord,\n hasImplementation: boolean,\n): void {\n const existing = output.get(record.id);\n if (!existing || hasImplementation || !existing.signature) output.set(record.id, record);\n}\n\nfunction declarationIdMap(\n context: AnalysisContext,\n symbols: SymbolRecord[],\n): Map<ts.Declaration, string> {\n const byKey = new Map(symbols.map((symbol) => [`${symbol.kind}:${symbol.name}`, symbol.id]));\n const result = new Map<ts.Declaration, string>();\n for (const statement of context.sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement)) {\n const name = statement.name?.text ?? \"default\";\n const id = byKey.get(`function:${name}`);\n if (id) result.set(statement, id);\n } else if (ts.isClassDeclaration(statement)) {\n const name = statement.name?.text ?? \"default\";\n const id = byKey.get(`class:${name}`);\n if (id) result.set(statement, id);\n for (const member of statement.members) {\n if (!ts.isMethodDeclaration(member) && !ts.isConstructorDeclaration(member)) continue;\n const memberName = ts.isConstructorDeclaration(member)\n ? \"constructor\"\n : (propertyNameText(member.name) ?? \"anonymous\");\n const memberId = symbolId(\"method\", context.relativePath, memberName, name);\n result.set(member, memberId);\n }\n } else if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue;\n const kind =\n declaration.initializer &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer))\n ? \"function\"\n : \"variable\";\n const id = byKey.get(`${kind}:${declaration.name.text}`);\n if (id) result.set(declaration, id);\n }\n } else if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) {\n const kind = ts.isInterfaceDeclaration(statement) ? \"interface\" : \"type-alias\";\n const id = byKey.get(`${kind}:${statement.name.text}`);\n if (id) result.set(statement, id);\n }\n }\n return result;\n}\n\nfunction collectBehaviorRelations(\n context: AnalysisContext,\n declarationIds: Map<ts.Declaration, string>,\n output: RelationRecord[],\n): void {\n let currentOwner = fileId(context.relativePath);\n const walk = (node: ts.Node): void => {\n const previousOwner = currentOwner;\n if (\n ts.isFunctionDeclaration(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isConstructorDeclaration(node)\n ) {\n currentOwner = declarationIds.get(node) ?? currentOwner;\n } else if (\n (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) &&\n ts.isVariableDeclaration(node.parent)\n ) {\n currentOwner = declarationIds.get(node.parent) ?? currentOwner;\n } else if (ts.isClassDeclaration(node)) {\n currentOwner = declarationIds.get(node) ?? currentOwner;\n }\n\n if (ts.isCallExpression(node) && !isRequireCall(node)) {\n const target = resolveExpressionTarget(context, node.expression);\n if (target && target.id !== currentOwner) {\n output.push(\n relation(\n currentOwner,\n \"calls\",\n target.id,\n context,\n node,\n target.exact ? 1 : 0.35,\n target.exact ? \"TypeScript symbol resolution\" : \"unresolved call syntax\",\n ),\n );\n }\n } else if (ts.isNewExpression(node)) {\n const target = resolveExpressionTarget(context, node.expression);\n if (target && target.id !== currentOwner) {\n output.push(\n relation(\n currentOwner,\n \"instantiates\",\n target.id,\n context,\n node,\n target.exact ? 1 : 0.35,\n target.exact ? \"TypeScript constructor resolution\" : \"unresolved constructor syntax\",\n ),\n );\n }\n }\n\n if (ts.isIdentifier(node) && isReferenceIdentifier(node)) {\n const target = resolveExpressionTarget(context, node, false);\n if (target?.exact && target.id !== currentOwner && !target.id.startsWith(\"external:\")) {\n output.push(\n relation(\n currentOwner,\n \"references\",\n target.id,\n context,\n node,\n 1,\n \"TypeScript symbol reference\",\n ),\n );\n }\n }\n\n node.forEachChild(walk);\n currentOwner = previousOwner;\n };\n walk(context.sourceFile);\n\n for (const statement of context.sourceFile.statements) {\n if (!ts.isClassDeclaration(statement)) continue;\n const from = declarationIds.get(statement);\n if (!from) continue;\n for (const clause of statement.heritageClauses ?? []) {\n for (const type of clause.types) {\n const target = resolveExpressionTarget(context, type.expression);\n if (target) {\n output.push(\n relation(\n from,\n \"depends-on\",\n target.id,\n context,\n type,\n target.exact ? 1 : 0.35,\n target.exact ? \"TypeScript heritage resolution\" : \"unresolved heritage syntax\",\n ),\n );\n }\n }\n }\n }\n}\n\ninterface TargetResolution {\n id: string;\n exact: boolean;\n}\n\nfunction resolveExpressionTarget(\n context: AnalysisContext,\n expression: ts.Expression,\n allowFallback = true,\n): TargetResolution | undefined {\n let symbol = context.checker.getSymbolAtLocation(expression);\n if (!symbol && ts.isPropertyAccessExpression(expression)) {\n symbol = context.checker.getSymbolAtLocation(expression.name);\n }\n const externalBinding = importedExpressionBinding(context, expression);\n if (!symbol) {\n const imported = resolveImportedExpressionTarget(context, expression);\n if (imported) return { id: imported, exact: true };\n if (externalBinding) {\n return {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n };\n }\n const fallback = allowFallback ? expressionFallbackId(expression) : undefined;\n return fallback ? { id: fallback, exact: false } : undefined;\n }\n if (symbol.flags & ts.SymbolFlags.Alias) {\n try {\n symbol = context.checker.getAliasedSymbol(symbol);\n } catch {\n // An unresolved alias still gets an external fallback below.\n }\n }\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n if (!declaration) {\n const imported = resolveImportedExpressionTarget(context, expression);\n if (imported) return { id: imported, exact: true };\n if (externalBinding) {\n return {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n };\n }\n const fallback = allowFallback ? expressionFallbackId(expression) : undefined;\n return fallback ? { id: fallback, exact: false } : undefined;\n }\n const source = declaration.getSourceFile();\n if (!isPathInside(context.root, source.fileName)) {\n return externalBinding\n ? {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n }\n : allowFallback\n ? { id: externalId(\"unresolved\", symbol.getName()), exact: false }\n : undefined;\n }\n const relative = relativePosix(context.root, source.fileName);\n if (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative)) {\n return externalBinding\n ? {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n }\n : allowFallback\n ? { id: externalId(\"unresolved\", symbol.getName()), exact: false }\n : undefined;\n }\n const id = declarationToId(declaration, relative);\n if (id) return { id, exact: true };\n if (externalBinding) {\n return {\n id: externalId(externalBinding.module, externalBinding.exported),\n exact: true,\n };\n }\n const fallback = allowFallback ? expressionFallbackId(expression) : undefined;\n return fallback ? { id: fallback, exact: false } : undefined;\n}\n\nfunction resolveImportedExpressionTarget(\n context: AnalysisContext,\n expression: ts.Expression,\n): string | undefined {\n const binding = importedExpressionBinding(context, expression, true);\n if (!binding?.resolved) return undefined;\n if (ts.isIdentifier(expression)) {\n const sourceFile = context.program.getSourceFile(path.resolve(context.root, binding.resolved));\n if (!sourceFile) return undefined;\n const declaration = findExportedDeclaration(sourceFile, binding.imported);\n return declaration ? declarationToId(declaration, binding.resolved) : undefined;\n }\n if (!ts.isPropertyAccessExpression(expression)) return undefined;\n const sourceFile = context.program.getSourceFile(path.resolve(context.root, binding.resolved));\n if (!sourceFile) return undefined;\n const declaration = findExportedDeclaration(sourceFile, expression.name.text);\n return declaration ? declarationToId(declaration, binding.resolved) : undefined;\n}\n\nfunction findExportedDeclaration(\n sourceFile: ts.SourceFile,\n exportedName: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n (ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement)) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name?.text === exportedName)\n ) {\n return statement;\n }\n if (ts.isVariableStatement(statement)) {\n const declaration = statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === exportedName,\n );\n if (declaration) return declaration;\n }\n if (\n ts.isExportAssignment(statement) &&\n !statement.isExportEquals &&\n ts.isIdentifier(statement.expression)\n ) {\n if (exportedName === \"default\") {\n const declaration = findDeclarationByName(sourceFile, statement.expression.text);\n if (declaration) return declaration;\n }\n if (statement.expression.text === exportedName) {\n return findDeclarationByName(sourceFile, statement.expression.text);\n }\n }\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n ) {\n const specifier = statement.exportClause.elements.find(\n (item) => item.name.text === exportedName,\n );\n if (specifier && !statement.moduleSpecifier) {\n return findExportedDeclaration(\n sourceFile,\n specifier.propertyName?.text ?? specifier.name.text,\n );\n }\n }\n }\n return undefined;\n}\n\nfunction findDeclarationByName(\n sourceFile: ts.SourceFile,\n name: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n (ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement)) &&\n statement.name?.text === name\n ) {\n return statement;\n }\n if (ts.isVariableStatement(statement)) {\n const declaration = statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === name,\n );\n if (declaration) return declaration;\n }\n }\n return undefined;\n}\n\ninterface ImportedExpressionBinding {\n module: string;\n exported: string;\n imported: string;\n resolved?: string;\n}\n\nfunction importedExpressionBinding(\n context: AnalysisContext,\n expression: ts.Expression,\n includeLocal = false,\n): ImportedExpressionBinding | undefined {\n const root = leftMostIdentifierNode(expression);\n if (!root) return undefined;\n const rootSymbol = context.checker.getSymbolAtLocation(root);\n if (!rootSymbol) return undefined;\n const declaration = rootSymbol.declarations?.find(isImportBindingDeclaration);\n if (!declaration) return undefined;\n const importDeclaration = enclosingImportDeclaration(declaration);\n if (!importDeclaration || !ts.isStringLiteral(importDeclaration.moduleSpecifier))\n return undefined;\n const source = sanitizeModuleSpecifier(importDeclaration.moduleSpecifier.text);\n const line = nodeLine(context.sourceFile, importDeclaration);\n const imported = context.file.imports.find(\n (record) =>\n record.kind === \"esm\" &&\n record.source === source &&\n record.line === line &&\n record.specifiers.some((specifier) => specifier.local === root.text),\n );\n if (!imported || (!includeLocal && !imported.external)) return undefined;\n const specifier = imported.specifiers.find((item) => item.local === root.text);\n if (!specifier) return undefined;\n return {\n module: imported.source,\n exported: ts.isPropertyAccessExpression(expression) ? expression.name.text : specifier.imported,\n imported: specifier.imported,\n ...(imported.resolved ? { resolved: imported.resolved } : {}),\n };\n}\n\nfunction isImportBindingDeclaration(declaration: ts.Declaration): boolean {\n return (\n ts.isImportSpecifier(declaration) ||\n ts.isImportClause(declaration) ||\n ts.isNamespaceImport(declaration)\n );\n}\n\nfunction enclosingImportDeclaration(declaration: ts.Declaration): ts.ImportDeclaration | undefined {\n let current: ts.Node = declaration;\n while (!ts.isSourceFile(current)) {\n if (ts.isImportDeclaration(current)) return current;\n current = current.parent;\n }\n return undefined;\n}\n\nfunction declarationToId(declaration: ts.Declaration, filePath: string): string | undefined {\n if (ts.isFunctionDeclaration(declaration)) {\n return symbolId(\"function\", filePath, declaration.name?.text ?? \"default\");\n }\n if (ts.isClassDeclaration(declaration)) {\n return symbolId(\"class\", filePath, declaration.name?.text ?? \"default\");\n }\n if (ts.isMethodDeclaration(declaration)) {\n const parent = declaration.parent;\n const parentName =\n ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent)\n ? (parent.name?.text ?? \"default\")\n : \"anonymous\";\n return symbolId(\n \"method\",\n filePath,\n propertyNameText(declaration.name) ?? \"anonymous\",\n parentName,\n );\n }\n if (ts.isVariableDeclaration(declaration)) {\n const name = getDeclarationName(declaration);\n const kind: SymbolKind =\n declaration.initializer &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer))\n ? \"function\"\n : \"variable\";\n return symbolId(kind, filePath, name);\n }\n if (ts.isInterfaceDeclaration(declaration))\n return symbolId(\"interface\", filePath, declaration.name.text);\n if (ts.isTypeAliasDeclaration(declaration))\n return symbolId(\"type-alias\", filePath, declaration.name.text);\n return undefined;\n}\n\nfunction isReferenceIdentifier(node: ts.Identifier): boolean {\n const parent = node.parent;\n if (\n (parent as ts.NamedDeclaration).name === node ||\n ts.isImportSpecifier(parent) ||\n ts.isImportClause(parent) ||\n ts.isNamespaceImport(parent) ||\n ts.isExportSpecifier(parent) ||\n ts.isBindingElement(parent) ||\n (ts.isPropertyAccessExpression(parent) && parent.name === node) ||\n (ts.isPropertyAssignment(parent) && parent.name === node) ||\n (ts.isPropertySignature(parent) && parent.name === node) ||\n (ts.isPropertyDeclaration(parent) && parent.name === node) ||\n (ts.isMethodDeclaration(parent) && parent.name === node)\n ) {\n return false;\n }\n return true;\n}\n\nfunction expressionFallbackId(expression: ts.Expression): string | undefined {\n if (ts.isIdentifier(expression)) return externalId(\"unresolved\", expression.text);\n if (ts.isPropertyAccessExpression(expression)) {\n return externalId(\"unresolved\", expression.name.text);\n }\n return undefined;\n}\n\nfunction leftMostIdentifierNode(expression: ts.Expression): ts.Identifier | undefined {\n let current = expression;\n while (ts.isPropertyAccessExpression(current)) current = current.expression;\n return ts.isIdentifier(current) ? current : undefined;\n}\n\nexport function extractFileStructure(context: AnalysisContext): Pick<\n FileRecord,\n \"imports\" | \"exports\" | \"env\" | \"operations\"\n> & {\n diagnostics: DiagnosticRecord[];\n relations: RelationRecord[];\n} {\n const imports: ImportRecord[] = [];\n const exports: ExportRecord[] = [];\n const env = new Set<string>();\n const operations: ExternalOperation[] = [];\n const diagnostics: DiagnosticRecord[] = [];\n const relations: RelationRecord[] = [];\n const importedModules = new Map<string, string>();\n\n for (const statement of context.sourceFile.statements) {\n if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {\n const rawSource = statement.moduleSpecifier.text;\n const source = sanitizeModuleSpecifier(rawSource);\n const specifiers = importSpecifiers(statement);\n for (const specifier of specifiers) importedModules.set(specifier.local, source);\n const resolved = resolveImport(context, rawSource);\n imports.push({\n source,\n specifiers,\n ...(resolved.path ? { resolved: resolved.path } : {}),\n external: resolved.external,\n kind: \"esm\",\n line: nodeLine(context.sourceFile, statement),\n });\n addImportRelation(context, relations, statement, source, resolved);\n if (!resolved.found && !isBuiltin(rawSource))\n diagnostics.push(unresolvedImport(context, statement, source));\n } else if (ts.isExportDeclaration(statement)) {\n extractExportDeclaration(context, statement, exports, relations);\n } else if (ts.isExportAssignment(statement)) {\n exports.push({\n name: \"default\",\n local: ts.isIdentifier(statement.expression) ? statement.expression.text : \"default\",\n default: true,\n line: nodeLine(context.sourceFile, statement),\n });\n }\n }\n\n visit(context.sourceFile, (node) => {\n if (ts.isCallExpression(node) && isRequireCall(node)) {\n const argument = node.arguments[0];\n if (!argument || !ts.isStringLiteral(argument)) return;\n const rawSource = argument.text;\n const source = sanitizeModuleSpecifier(rawSource);\n const resolved = resolveImport(context, rawSource);\n imports.push({\n source,\n specifiers: [],\n ...(resolved.path ? { resolved: resolved.path } : {}),\n external: resolved.external,\n kind: \"commonjs\",\n line: nodeLine(context.sourceFile, node),\n });\n addImportRelation(context, relations, node, source, resolved);\n if (!resolved.found && !isBuiltin(rawSource))\n diagnostics.push(unresolvedImport(context, node, source));\n }\n const envName = processEnvName(node);\n if (envName) env.add(envName);\n const operation = externalOperation(node, context.sourceFile, importedModules);\n if (operation) operations.push(operation);\n });\n\n extractCommonJsExports(context, exports);\n return {\n imports: dedupeImports(imports),\n exports: dedupeExports(exports),\n env: [...env].sort(compareText),\n operations: dedupeOperations(operations),\n diagnostics,\n relations,\n };\n}\n\nfunction importSpecifiers(statement: ts.ImportDeclaration): ImportRecord[\"specifiers\"] {\n const clause = statement.importClause;\n if (!clause) return [];\n const output: ImportRecord[\"specifiers\"] = [];\n const clauseTypeOnly = clause.phaseModifier === ts.SyntaxKind.TypeKeyword;\n if (clause.name) {\n output.push({\n imported: \"default\",\n local: clause.name.text,\n ...(clauseTypeOnly ? { typeOnly: true } : {}),\n });\n }\n const bindings = clause.namedBindings;\n if (bindings && ts.isNamespaceImport(bindings)) {\n output.push({\n imported: \"*\",\n local: bindings.name.text,\n ...(clauseTypeOnly ? { typeOnly: true } : {}),\n });\n } else if (bindings && ts.isNamedImports(bindings)) {\n for (const element of bindings.elements) {\n output.push({\n imported: element.propertyName?.text ?? element.name.text,\n local: element.name.text,\n ...(clauseTypeOnly || element.isTypeOnly ? { typeOnly: true } : {}),\n });\n }\n }\n return output.sort((a, b) => compareText(`${a.imported}:${a.local}`, `${b.imported}:${b.local}`));\n}\n\nfunction extractExportDeclaration(\n context: AnalysisContext,\n statement: ts.ExportDeclaration,\n exports: ExportRecord[],\n relations: RelationRecord[],\n): void {\n const rawSource =\n statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : undefined;\n const source = rawSource ? sanitizeModuleSpecifier(rawSource) : undefined;\n const line = nodeLine(context.sourceFile, statement);\n if (!statement.exportClause) {\n exports.push({ name: \"*\", ...(source ? { source } : {}), default: false, line });\n } else if (ts.isNamespaceExport(statement.exportClause)) {\n exports.push({\n name: statement.exportClause.name.text,\n ...(source ? { source } : {}),\n default: false,\n line,\n });\n } else {\n for (const element of statement.exportClause.elements) {\n exports.push({\n name: element.name.text,\n local: element.propertyName?.text ?? element.name.text,\n ...(source ? { source } : {}),\n default: element.name.text === \"default\",\n ...(statement.isTypeOnly || element.isTypeOnly ? { typeOnly: true } : {}),\n line,\n });\n }\n }\n if (rawSource && source) {\n const resolved = resolveImport(context, rawSource);\n relations.push(\n relation(\n fileId(context.relativePath),\n \"reexports\",\n resolved.path ? fileId(resolved.path) : externalId(source),\n context,\n statement,\n resolved.found ? 1 : 0.5,\n resolved.found ? \"resolved re-export\" : \"unresolved re-export\",\n ),\n );\n }\n}\n\nfunction extractCommonJsExports(context: AnalysisContext, exports: ExportRecord[]): void {\n visit(context.sourceFile, (node) => {\n if (!ts.isBinaryExpression(node) || node.operatorToken.kind !== ts.SyntaxKind.EqualsToken)\n return;\n const left = node.left;\n const line = nodeLine(context.sourceFile, node);\n if (\n ts.isPropertyAccessExpression(left) &&\n ts.isIdentifier(left.expression) &&\n left.expression.text === \"module\" &&\n left.name.text === \"exports\"\n ) {\n exports.push({\n name: \"default\",\n ...(ts.isIdentifier(node.right) ? { local: node.right.text } : {}),\n default: true,\n line,\n });\n } else if (\n ts.isPropertyAccessExpression(left) &&\n ((ts.isIdentifier(left.expression) && left.expression.text === \"exports\") ||\n (ts.isPropertyAccessExpression(left.expression) &&\n ts.isIdentifier(left.expression.expression) &&\n left.expression.expression.text === \"module\" &&\n left.expression.name.text === \"exports\"))\n ) {\n exports.push({\n name: left.name.text,\n local: ts.isIdentifier(node.right) ? node.right.text : left.name.text,\n default: false,\n line,\n });\n }\n });\n}\n\ninterface ImportResolution {\n found: boolean;\n external: boolean;\n path?: string;\n}\n\nfunction resolveImport(context: AnalysisContext, moduleName: string): ImportResolution {\n if (isBuiltin(moduleName) || moduleName.startsWith(\"node:\"))\n return { found: true, external: true };\n const resolution = context.resolveModule?.(moduleName, context.sourceFile.fileName);\n if (!resolution) return { found: false, external: !moduleName.startsWith(\".\") };\n if (resolution.isExternalLibraryImport) return { found: true, external: true };\n if (!isPathInside(context.root, resolution.resolvedFileName)) {\n return { found: true, external: true };\n }\n const relative = relativePosix(context.root, resolution.resolvedFileName);\n if (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative)) {\n return { found: false, external: false };\n }\n return {\n found: true,\n external: false,\n path: relative,\n };\n}\n\nfunction addImportRelation(\n context: AnalysisContext,\n output: RelationRecord[],\n node: ts.Node,\n source: string,\n resolved: ImportResolution,\n): void {\n output.push(\n relation(\n fileId(context.relativePath),\n \"imports\",\n resolved.path ? fileId(resolved.path) : externalId(source),\n context,\n node,\n resolved.found ? 1 : 0.5,\n resolved.found ? \"module resolution\" : \"unresolved import text\",\n ),\n );\n}\n\nfunction unresolvedImport(\n context: AnalysisContext,\n node: ts.Node,\n source: string,\n): DiagnosticRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n code: \"unresolved-import\",\n severity: \"warning\",\n message: `Could not resolve import ${source}.`,\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n };\n}\n\nfunction processEnvName(node: ts.Node): string | undefined {\n if (\n ts.isPropertyAccessExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === \"process\" &&\n node.expression.name.text === \"env\"\n ) {\n return node.name.text;\n }\n if (\n ts.isElementAccessExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === \"process\" &&\n node.expression.name.text === \"env\" &&\n ts.isStringLiteral(node.argumentExpression)\n ) {\n return node.argumentExpression.text;\n }\n return undefined;\n}\n\nfunction externalOperation(\n node: ts.Node,\n sourceFile: ts.SourceFile,\n importedModules: Map<string, string>,\n): ExternalOperation | undefined {\n if (!ts.isCallExpression(node)) return undefined;\n let root: string | undefined;\n let api: string;\n if (ts.isIdentifier(node.expression)) {\n root = node.expression.text;\n api = root;\n } else if (ts.isPropertyAccessExpression(node.expression)) {\n root = leftMostIdentifierNode(node.expression)?.text;\n api = node.expression.getText(sourceFile);\n } else return undefined;\n const source = root ? importedModules.get(root) : undefined;\n let kind: ExternalOperation[\"kind\"] | undefined;\n if (\n root === \"fetch\" ||\n source === \"axios\" ||\n source === \"http\" ||\n source === \"https\" ||\n source?.startsWith(\"node:http\")\n )\n kind = \"http\";\n else if (source === \"fs\" || source === \"fs/promises\" || source?.startsWith(\"node:fs\"))\n kind = \"filesystem\";\n else if (source && /(?:prisma|typeorm|mongoose|sequelize|pg|mysql|database|redis)/i.test(source))\n kind = \"database\";\n else if (source && /(?:bull|queue|kafka|amqp|rabbit)/i.test(source)) kind = \"queue\";\n return kind ? { kind, api, line: nodeLine(sourceFile, node) } : undefined;\n}\n\nfunction isRequireCall(node: ts.CallExpression): boolean {\n return (\n ts.isIdentifier(node.expression) &&\n node.expression.text === \"require\" &&\n node.arguments.length > 0\n );\n}\n\nfunction dedupeImports(values: ImportRecord[]): ImportRecord[] {\n const map = new Map<string, ImportRecord>();\n for (const value of values) {\n map.set(`${value.kind}:${value.source}:${value.line}`, value);\n }\n return [...map.values()].sort((a, b) =>\n compareText(`${a.source}:${a.line}`, `${b.source}:${b.line}`),\n );\n}\n\nfunction dedupeExports(values: ExportRecord[]): ExportRecord[] {\n const map = new Map<string, ExportRecord>();\n for (const value of values) map.set(`${value.name}:${value.source ?? \"\"}:${value.line}`, value);\n return [...map.values()].sort((a, b) =>\n compareText(`${a.name}:${a.line}`, `${b.name}:${b.line}`),\n );\n}\n\nfunction dedupeOperations(values: ExternalOperation[]): ExternalOperation[] {\n const map = new Map<string, ExternalOperation>();\n for (const value of values) map.set(`${value.kind}:${value.api}:${value.line}`, value);\n return [...map.values()].sort((a, b) =>\n compareText(`${a.kind}:${a.line}:${a.api}`, `${b.kind}:${b.line}:${b.api}`),\n );\n}\n\nexport function relation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: confidence === 1 ? \"exact\" : \"heuristic\",\n analyzer: \"typescript-node\",\n },\n };\n}\n","import ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"../constants.js\";\nimport { symbolId } from \"../ids.js\";\nimport type {\n AnalysisContext,\n JsonValue,\n SourceRange,\n SymbolKind,\n SymbolRecord,\n} from \"../types.js\";\nimport { redactAbsolutePathsInText } from \"../utils/path.js\";\n\nexport function nodeRange(sourceFile: ts.SourceFile, node: ts.Node): SourceRange {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile, false));\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n return {\n startLine: start.line + 1,\n startColumn: start.character + 1,\n endLine: end.line + 1,\n endColumn: end.character + 1,\n };\n}\n\nexport function nodeLine(sourceFile: ts.SourceFile, node: ts.Node): number {\n return sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile, false)).line + 1;\n}\n\nexport function hasModifier(node: ts.Node, kind: ts.SyntaxKind): boolean {\n return Boolean(\n ts.canHaveModifiers(node) && ts.getModifiers(node)?.some((item) => item.kind === kind),\n );\n}\n\nexport function hasExportModifier(node: ts.Node): boolean {\n return hasModifier(node, ts.SyntaxKind.ExportKeyword);\n}\n\nexport function hasDefaultModifier(node: ts.Node): boolean {\n return hasModifier(node, ts.SyntaxKind.DefaultKeyword);\n}\n\nexport function getDeclarationName(node: ts.Declaration, fallback = \"default\"): string {\n const name = (node as ts.NamedDeclaration).name;\n if (name && ts.isIdentifier(name)) return name.text;\n if (name && (ts.isStringLiteral(name) || ts.isNumericLiteral(name))) return name.text;\n return fallback;\n}\n\nexport function getTopLevelDefaultExportDeclaration(\n sourceFile: ts.SourceFile,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (ts.isExportAssignment(statement) && ts.isIdentifier(statement.expression)) {\n const defaultName = statement.expression.text;\n const declaration = topLevelDeclarations(sourceFile).find(\n (item) => getDeclarationName(item, \"\") === defaultName,\n );\n if (declaration) return declaration;\n continue;\n }\n\n if (ts.isFunctionDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isClassDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isInterfaceDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isTypeAliasDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isEnumDeclaration(statement) && hasDefaultModifier(statement)) return statement;\n if (ts.isVariableStatement(statement) && hasDefaultModifier(statement)) {\n const declaration = statement.declarationList.declarations.find((item) =>\n ts.isIdentifier(item.name),\n );\n return declaration;\n }\n }\n return undefined;\n}\n\nexport function hasAnyTopLevelExport(sourceFile: ts.SourceFile): boolean {\n return sourceFile.statements.some(\n (statement) => ts.isExportAssignment(statement) || hasExportModifier(statement),\n );\n}\n\nfunction topLevelDeclarations(sourceFile: ts.SourceFile): ts.Declaration[] {\n return sourceFile.statements.flatMap((statement): ts.Declaration[] => {\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEnumDeclaration(statement)\n ) {\n return [statement];\n }\n if (ts.isVariableStatement(statement)) return [...statement.declarationList.declarations];\n return [];\n });\n}\n\nexport function getSignature(context: AnalysisContext, node: ts.Node): string | undefined {\n const type = context.checker.getTypeAtLocation(node);\n const signatures = type.getCallSignatures();\n if (signatures.length > 0) {\n return [\n ...new Set(\n signatures.map((signature) =>\n context.checker.signatureToString(\n signature,\n node,\n ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n ),\n ),\n ),\n ]\n .map(redactStringLiterals)\n .join(\" | \");\n }\n if (ts.isClassDeclaration(node)) {\n return compactText(node.getText(context.sourceFile).split(/[\\r\\n{]/, 1)[0] ?? \"\");\n }\n if (ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node)) {\n return compactText(redactStringLiterals(node.getText(context.sourceFile)));\n }\n if (ts.isVariableDeclaration(node) && node.type) {\n return `${getDeclarationName(node)}: ${compactText(node.type.getText(context.sourceFile))}`;\n }\n return undefined;\n}\n\nexport function redactStringLiterals(value: string): string {\n return value.replace(/([\"'])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/g, '\"<literal>\"');\n}\n\nexport function makeSymbol(\n context: AnalysisContext,\n node: ts.Declaration | ts.SourceFile,\n kind: SymbolKind,\n options: {\n name?: string;\n parent?: string;\n exported?: boolean;\n defaultExport?: boolean;\n signature?: string;\n facts?: Record<string, JsonValue>;\n documentation?: string;\n } = {},\n): SymbolRecord {\n const name = options.name ?? (ts.isSourceFile(node) ? \"default\" : getDeclarationName(node));\n // Documentation is accepted only from an explicitly configured enricher. The base\n // scanner does not persist arbitrary JSDoc/source prose.\n const documentation = options.documentation;\n const signature =\n options.signature ?? (ts.isSourceFile(node) ? undefined : getSignature(context, node));\n const safeSignature = signature ? redactAbsolutePathsInText(signature, context.root) : undefined;\n const safeDocumentation = documentation\n ? redactAbsolutePathsInText(documentation, context.root)\n : undefined;\n return {\n schemaVersion: SCHEMA_VERSION,\n id: symbolId(kind, context.relativePath, name, options.parent),\n name,\n kind,\n file: context.relativePath,\n range: nodeRange(context.sourceFile, node),\n exported: options.exported ?? (!ts.isSourceFile(node) && hasExportModifier(node)),\n ...((options.defaultExport ?? (!ts.isSourceFile(node) && hasDefaultModifier(node)))\n ? { defaultExport: true }\n : {}),\n ...(safeSignature ? { signature: compactText(safeSignature) } : {}),\n ...(safeDocumentation ? { documentation: compactText(safeDocumentation) } : {}),\n facts: options.facts ?? {},\n sourceHash: context.sourceHash,\n };\n}\n\nexport function compactText(value: string, maxLength = 500): string {\n const compact = value.replace(/\\s+/g, \" \").trim();\n return compact.length > maxLength ? `${compact.slice(0, maxLength - 1)}…` : compact;\n}\n\nexport function visit(node: ts.Node, callback: (node: ts.Node) => void): void {\n callback(node);\n node.forEachChild((child) => visit(child, callback));\n}\n\nexport function decoratorName(decorator: ts.Decorator): string | undefined {\n const expression = decorator.expression;\n const target = ts.isCallExpression(expression) ? expression.expression : expression;\n return ts.isIdentifier(target) ? target.text : undefined;\n}\n\nexport function decoratorsOf(node: ts.Node): readonly ts.Decorator[] {\n return ts.canHaveDecorators(node) ? (ts.getDecorators(node) ?? []) : [];\n}\n\nexport function literalText(expression: ts.Expression | undefined): string | undefined {\n return expression &&\n (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression))\n ? expression.text\n : undefined;\n}\n\nexport function identifierText(expression: ts.Expression | undefined): string | undefined {\n return expression && ts.isIdentifier(expression) ? expression.text : undefined;\n}\n\nexport function propertyNameText(name: ts.PropertyName | undefined): string | undefined {\n if (!name) return undefined;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))\n return name.text;\n return undefined;\n}\n","import ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"../constants.js\";\nimport { routeId, symbolId } from \"../ids.js\";\nimport type {\n AnalysisContribution,\n AnalysisContext,\n FrameworkAnalyzer,\n RelationRecord,\n} from \"../types.js\";\nimport {\n compactText,\n decoratorsOf,\n hasDefaultModifier,\n hasExportModifier,\n makeSymbol,\n nodeLine,\n nodeRange,\n} from \"./helpers.js\";\n\nconst METHOD_DECORATORS = new Set([\n \"Get\",\n \"Post\",\n \"Put\",\n \"Patch\",\n \"Delete\",\n \"Head\",\n \"Options\",\n \"All\",\n]);\nconst NEST_DECORATORS = new Set([\n \"Module\",\n \"Controller\",\n \"Injectable\",\n \"Guard\",\n \"UseGuards\",\n \"Body\",\n \"Param\",\n ...METHOD_DECORATORS,\n]);\n\ninterface ImportAliasMap {\n named: Record<string, string>;\n namespaces: Set<string>;\n}\n\ninterface ModuleMetadata {\n controllers: string[];\n providers: string[];\n imports: string[];\n exports: string[];\n}\n\nconst registeredNestJsAnalyzers = new WeakSet();\n\nexport class NestJsAnalyzer implements FrameworkAnalyzer {\n readonly name = \"nestjs\";\n readonly version = \"0.1.0-experimental\";\n\n constructor() {\n registeredNestJsAnalyzers.add(this);\n }\n\n supports(context: AnalysisContext): boolean {\n if (!context.relativePath.endsWith(\".ts\")) return false;\n return hasAnyNestImport(context.sourceFile) || containsReferencedBodyDto(context);\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const symbols: AnalysisContribution[\"symbols\"] = [];\n const relations: RelationRecord[] = [];\n const bodyDtoSymbolIds = collectBodyDtoSymbolIds(context);\n\n const aliases = collectImportAliases(context.sourceFile);\n const moduleMembership = collectModuleMembership(context);\n\n for (const statement of context.sourceFile.statements) {\n if (!ts.isClassDeclaration(statement) || !statement.name) continue;\n\n const className = statement.name.text;\n const decoratorNames = collectDecoratorNames(decoratorsOf(statement), aliases);\n const kind = classifyClass(\n className,\n decoratorNames,\n symbolId(\"dto\", context.relativePath, className),\n bodyDtoSymbolIds,\n );\n\n if (kind === \"dto\") {\n symbols.push(\n makeSymbol(context, statement, \"dto\", {\n name: className,\n exported: hasExportModifier(statement),\n defaultExport: hasDefaultModifier(statement),\n facts: {\n name: className.toLowerCase(),\n kind: \"dto\",\n },\n }),\n );\n continue;\n }\n\n if (!kind) continue;\n\n const symbol = makeSymbol(context, statement, kind, {\n name: className,\n exported: hasExportModifier(statement),\n defaultExport: hasDefaultModifier(statement),\n facts: {\n name: className.toLowerCase(),\n kind,\n },\n });\n symbols.push(symbol);\n\n if (kind === \"nest-module\") {\n const metadata = collectModuleMetadata(statement, aliases);\n if (metadata.controllers.length > 0) {\n symbol.facts.controllers = compactText(metadata.controllers.join(\",\"));\n for (const controller of metadata.controllers) {\n const controllerId = resolveLocalClassId(context, controller, \"nest-controller\");\n if (!controllerId) continue;\n relations.push(\n makeRelation(\n symbol.id,\n \"contains\",\n controllerId,\n context,\n statement,\n 1,\n \"module controller\",\n ),\n );\n }\n }\n if (metadata.providers.length > 0) {\n symbol.facts.providers = compactText(metadata.providers.join(\",\"));\n for (const provider of metadata.providers) {\n const providerId = resolveLocalClassId(context, provider, \"nest-provider\");\n if (!providerId) continue;\n relations.push(\n makeRelation(\n symbol.id,\n \"contains\",\n providerId,\n context,\n statement,\n 1,\n \"module provider\",\n ),\n );\n }\n }\n if (metadata.imports.length > 0) {\n symbol.facts.imports = compactText(metadata.imports.join(\",\"));\n }\n if (metadata.exports.length > 0) {\n symbol.facts.exports = compactText(metadata.exports.join(\",\"));\n }\n }\n\n if (kind === \"nest-controller\") {\n const baseRoute = collectControllerRoute(statement, aliases);\n symbol.facts.baseRoute = baseRoute;\n symbol.facts.kind = \"controller\";\n\n const controllerRoutes = collectControllerMethods(context, statement, className, aliases);\n relations.push(...controllerRoutes.relations);\n if (controllerRoutes.summary.length > 0) {\n symbol.facts.routes = compactText(controllerRoutes.summary.join(\",\"));\n }\n\n const guards = collectClassUseGuards(statement, aliases);\n if (guards.length > 0) {\n symbol.facts.guards = compactText(guards.join(\",\"));\n }\n }\n\n for (const injected of collectConstructorInjections(context, statement)) {\n relations.push(\n makeRelation(\n symbol.id,\n \"injects\",\n injected,\n context,\n statement,\n 1,\n \"constructor injection\",\n ),\n );\n }\n\n const moduleId = moduleMembership.get(className);\n if (moduleId) {\n relations.push(\n makeRelation(\n symbol.id,\n \"belongs-to-module\",\n moduleId,\n context,\n statement,\n 1,\n \"module membership\",\n ),\n );\n }\n }\n\n return { symbols, relations, frameworks: [\"nestjs\"] };\n }\n}\n\nconst nestJsSupports = NestJsAnalyzer.prototype.supports.bind(NestJsAnalyzer.prototype);\nconst nestJsAnalyze = NestJsAnalyzer.prototype.analyze.bind(NestJsAnalyzer.prototype);\n\n/** Return immutable canonical methods only for an unmodified, directly constructed instance. */\nexport function trustedNestJsAnalyzerMethods(analyzer: FrameworkAnalyzer):\n | {\n supports(context: AnalysisContext): boolean;\n analyze(context: AnalysisContext): AnalysisContribution | Promise<AnalysisContribution>;\n }\n | undefined {\n if (!registeredNestJsAnalyzers.has(analyzer)) return undefined;\n if (Object.getPrototypeOf(analyzer) !== NestJsAnalyzer.prototype) return undefined;\n if (Object.hasOwn(analyzer, \"supports\") || Object.hasOwn(analyzer, \"analyze\")) {\n return undefined;\n }\n const name = Object.getOwnPropertyDescriptor(analyzer, \"name\");\n const version = Object.getOwnPropertyDescriptor(analyzer, \"version\");\n if (name?.value !== \"nestjs\" || version?.value !== \"0.1.0-experimental\") return undefined;\n return {\n supports: (context) => nestJsSupports(context),\n analyze: (context) => nestJsAnalyze(context),\n };\n}\n\nexport default NestJsAnalyzer;\n\nfunction hasAnyNestImport(sourceFile: ts.SourceFile): boolean {\n return sourceFile.statements.some(\n (statement) =>\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n statement.moduleSpecifier.text.startsWith(\"@nestjs/\"),\n );\n}\n\nfunction collectImportAliases(sourceFile: ts.SourceFile): ImportAliasMap {\n const aliases: ImportAliasMap = {\n named: {},\n namespaces: new Set<string>(),\n };\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))\n continue;\n if (!statement.moduleSpecifier.text.startsWith(\"@nestjs/\")) continue;\n const clause = statement.importClause;\n if (!clause || !clause.namedBindings) continue;\n if (ts.isNamespaceImport(clause.namedBindings)) {\n aliases.namespaces.add(clause.namedBindings.name.text);\n continue;\n }\n if (!ts.isNamedImports(clause.namedBindings)) continue;\n for (const item of clause.namedBindings.elements) {\n aliases.named[item.name.text] = item.propertyName ? item.propertyName.text : item.name.text;\n }\n }\n return aliases;\n}\n\nfunction classifyClass(\n className: string,\n decorators: string[],\n symbolIdValue: string,\n dtoSymbolIds: Set<string>,\n):\n | \"nest-module\"\n | \"nest-controller\"\n | \"nest-provider\"\n | \"nest-guard\"\n | \"nest-interceptor\"\n | \"nest-pipe\"\n | \"nest-filter\"\n | \"nest-gateway\"\n | \"dto\"\n | undefined {\n if (dtoSymbolIds.has(symbolIdValue)) return \"dto\";\n if (decorators.includes(\"Module\")) return \"nest-module\";\n if (decorators.includes(\"Controller\")) return \"nest-controller\";\n if (!decorators.includes(\"Injectable\")) return undefined;\n if (className.endsWith(\"Guard\")) return \"nest-guard\";\n if (className.endsWith(\"Interceptor\")) return \"nest-interceptor\";\n if (className.endsWith(\"Pipe\")) return \"nest-pipe\";\n if (className.endsWith(\"Filter\")) return \"nest-filter\";\n if (className.endsWith(\"Gateway\")) return \"nest-gateway\";\n return \"nest-provider\";\n}\n\nfunction collectDecoratorNames(\n decorators: readonly ts.Decorator[],\n aliases: ImportAliasMap,\n): string[] {\n const names: string[] = [];\n for (const decorator of decorators) {\n const name = resolveDecoratorName(decorator.expression, aliases);\n if (name && NEST_DECORATORS.has(name)) {\n names.push(name);\n }\n }\n return names;\n}\n\nfunction resolveDecoratorName(\n expression: ts.Expression,\n aliases: ImportAliasMap,\n): string | undefined {\n const target = ts.isCallExpression(expression) ? expression.expression : expression;\n if (ts.isIdentifier(target)) {\n const resolved = aliases.named[target.text];\n if (resolved) return resolved;\n return undefined;\n }\n if (ts.isPropertyAccessExpression(target) && ts.isIdentifier(target.expression)) {\n if (aliases.namespaces.has(target.expression.text)) return target.name.text;\n }\n return undefined;\n}\n\nfunction collectControllerRoute(classNode: ts.ClassDeclaration, aliases: ImportAliasMap): string {\n for (const decorator of decoratorsOf(classNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n const name = resolveDecoratorName(expression, aliases);\n if (!name) continue;\n if (name !== \"Controller\") continue;\n const arg = call.arguments[0];\n if (!arg) return \"/\";\n if (ts.isStringLiteral(arg) || ts.isNoSubstitutionTemplateLiteral(arg)) {\n const value = arg.text.trim();\n return value.startsWith(\"/\") ? value : `/${value}`;\n }\n }\n return \"/\";\n}\n\nfunction collectControllerMethods(\n context: AnalysisContext,\n controller: ts.ClassDeclaration,\n className: string,\n aliases: ImportAliasMap,\n): { relations: RelationRecord[]; summary: string[] } {\n const relations: RelationRecord[] = [];\n const summary: string[] = [];\n const baseRoute = collectControllerRoute(controller, aliases);\n\n for (const member of controller.members) {\n if (!ts.isMethodDeclaration(member) || !ts.isIdentifier(member.name)) continue;\n\n const methodName = member.name.text;\n const methodDecorators = collectDecoratorNames(decoratorsOf(member), aliases);\n const methodVerbs = methodDecorators.filter((name) => METHOD_DECORATORS.has(name));\n if (methodVerbs.length === 0) continue;\n\n const methodRoute = collectMethodRoute(member, aliases);\n const fullRoute = combineRoutes(baseRoute, methodRoute);\n\n for (const verb of methodVerbs) {\n const lower = verb.toLowerCase();\n const methodId = symbolId(\"method\", context.relativePath, methodName, className);\n relations.push(\n makeRelation(\n methodId,\n \"handles-route\",\n routeId(lower, fullRoute),\n context,\n member,\n 1,\n \"http method route\",\n ),\n );\n summary.push(`${lower} ${fullRoute}`);\n\n const dto = collectBodyDto(member, aliases, context);\n if (dto) {\n relations.push(\n makeRelation(methodId, \"consumes-dto\", dto, context, member, 1, \"dto usage\"),\n );\n }\n }\n }\n\n return { relations, summary: dedupe(summary) };\n\n function collectMethodRoute(\n methodNode: ts.MethodDeclaration,\n aliasesMap: ImportAliasMap,\n ): string {\n for (const decorator of decoratorsOf(methodNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n const name = resolveDecoratorName(expression, aliasesMap);\n if (!name) continue;\n if (!METHOD_DECORATORS.has(name)) continue;\n const arg = call.arguments[0];\n if (!arg) return \"/\";\n if (ts.isStringLiteral(arg) || ts.isNoSubstitutionTemplateLiteral(arg)) {\n const route = arg.text.trim();\n return route.startsWith(\"/\") ? route : `/${route}`;\n }\n }\n return \"/\";\n }\n}\n\nfunction collectBodyDto(\n method: ts.MethodDeclaration,\n aliases: ImportAliasMap,\n context: AnalysisContext,\n): string | undefined {\n return collectBodyDtoFromMethod(method, aliases, context);\n}\n\nfunction collectBodyDtoSymbolIds(context: AnalysisContext): Set<string> {\n const ids = new Set<string>();\n for (const source of context.program\n .getSourceFiles()\n .filter((source) => !source.isDeclarationFile)) {\n if (!hasAnyNestImport(source)) continue;\n const sourceRelative = relativeFromAbsolute(context.root, source.fileName);\n if (!sourceRelative) continue;\n const aliases = collectImportAliases(source);\n for (const statement of source.statements) {\n if (!ts.isClassDeclaration(statement)) continue;\n for (const member of statement.members) {\n if (!ts.isMethodDeclaration(member)) continue;\n const dtoId = collectBodyDtoFromMethod(member, aliases, context);\n if (dtoId) ids.add(dtoId);\n }\n }\n }\n return ids;\n}\n\nfunction collectBodyDtoFromMethod(\n method: ts.MethodDeclaration,\n aliases: ImportAliasMap,\n context: AnalysisContext,\n): string | undefined {\n const param = method.parameters.find((item) => hasDecorator(item, \"Body\", aliases));\n if (!param?.type || !ts.isTypeReferenceNode(param.type) || !ts.isIdentifier(param.type.typeName))\n return undefined;\n\n const declaration = resolveIdentifierDeclaration(context, param.type.typeName);\n if (!declaration || !ts.isClassDeclaration(declaration) || !declaration.name) return undefined;\n const relative = relativeFromRoot(context, declaration.getSourceFile().fileName);\n if (!relative) return undefined;\n\n return symbolId(\"dto\", relative, declaration.name.text);\n}\n\nfunction containsReferencedBodyDto(context: AnalysisContext): boolean {\n const dtoIds = collectBodyDtoSymbolIds(context);\n return context.sourceFile.statements.some(\n (statement) =>\n ts.isClassDeclaration(statement) &&\n statement.name !== undefined &&\n dtoIds.has(symbolId(\"dto\", context.relativePath, statement.name.text)),\n );\n}\n\nfunction resolveIdentifierDeclaration(\n context: AnalysisContext,\n identifier: ts.Identifier,\n): ts.Declaration | undefined {\n let symbol = context.checker.getSymbolAtLocation(identifier);\n if (!symbol) return undefined;\n if ((symbol.flags & ts.SymbolFlags.Alias) !== 0) {\n symbol = context.checker.getAliasedSymbol(symbol);\n }\n return symbol.valueDeclaration ?? symbol.declarations?.[0];\n}\n\nfunction resolveLocalClassId(\n context: AnalysisContext,\n localName: string,\n kind: \"nest-controller\" | \"nest-provider\",\n): string | undefined {\n const identifier = findTopLevelIdentifier(context.sourceFile, localName);\n if (!identifier) return undefined;\n const declaration = resolveIdentifierDeclaration(context, identifier);\n if (!declaration || !ts.isClassDeclaration(declaration) || !declaration.name) return undefined;\n const relative = relativeFromRoot(context, declaration.getSourceFile().fileName);\n if (!relative) return undefined;\n return symbolId(kind, relative, declaration.name.text);\n}\n\nfunction findTopLevelIdentifier(\n sourceFile: ts.SourceFile,\n localName: string,\n): ts.Identifier | undefined {\n for (const statement of sourceFile.statements) {\n if (ts.isClassDeclaration(statement) && statement.name?.text === localName) {\n return statement.name;\n }\n if (!ts.isImportDeclaration(statement)) continue;\n const clause = statement.importClause;\n if (clause?.name?.text === localName) return clause.name;\n if (!clause?.namedBindings || !ts.isNamedImports(clause.namedBindings)) continue;\n const match = clause.namedBindings.elements.find((item) => item.name.text === localName);\n if (match) return match.name;\n }\n return undefined;\n}\n\nfunction relativeFromAbsolute(root: string, absolutePath: string): string | undefined {\n const normalized = absolutePath.replace(/\\\\/g, \"/\");\n const normalizedRoot = root.replace(/\\\\/g, \"/\");\n if (normalized !== normalizedRoot && !normalized.startsWith(`${normalizedRoot}/`))\n return undefined;\n const remainder = normalized.slice(normalizedRoot.length);\n return remainder.startsWith(\"/\") ? remainder.slice(1) : remainder;\n}\n\nfunction hasDecorator(\n parameter: ts.ParameterDeclaration,\n target: string,\n aliases: ImportAliasMap,\n): boolean {\n for (const decorator of decoratorsOf(parameter)) {\n const resolved = resolveDecoratorName(decorator.expression, aliases);\n if (resolved === target) return true;\n }\n return false;\n}\n\nfunction collectConstructorInjections(\n context: AnalysisContext,\n classNode: ts.ClassDeclaration,\n): string[] {\n const constructorNode = classNode.members.find(ts.isConstructorDeclaration);\n if (!constructorNode) return [];\n\n const dependencies: string[] = [];\n for (const parameter of constructorNode.parameters) {\n if (\n !parameter.type ||\n !ts.isTypeReferenceNode(parameter.type) ||\n !ts.isIdentifier(parameter.type.typeName)\n )\n continue;\n\n const declaration = resolveIdentifierDeclaration(context, parameter.type.typeName);\n if (!declaration) continue;\n const relative = relativeFromRoot(context, declaration.getSourceFile().fileName);\n if (!relative) continue;\n const targetName =\n ts.isClassDeclaration(declaration) && declaration.name\n ? declaration.name.text\n : parameter.type.typeName.text;\n dependencies.push(symbolId(\"nest-provider\", relative, targetName));\n }\n\n return dedupe(dependencies);\n}\n\nfunction collectModuleMetadata(\n classNode: ts.ClassDeclaration,\n aliases: ImportAliasMap,\n): ModuleMetadata {\n const defaults: ModuleMetadata = { controllers: [], providers: [], imports: [], exports: [] };\n for (const decorator of decoratorsOf(classNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n\n const name = resolveDecoratorName(expression, aliases);\n if (!name) continue;\n if (name !== \"Module\" || call.arguments.length === 0) continue;\n const arg = call.arguments[0];\n if (!arg || !ts.isObjectLiteralExpression(arg)) continue;\n\n for (const property of arg.properties) {\n if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property))\n continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : undefined;\n if (!propertyName) continue;\n\n if (!(propertyName in defaults)) continue;\n const assigned = ts.isPropertyAssignment(property) ? property.initializer : property.name;\n if (propertyName === \"controllers\") {\n defaults.controllers.push(...collectIdentifiers(assigned));\n }\n if (propertyName === \"providers\") {\n defaults.providers.push(...collectIdentifiers(assigned));\n }\n if (propertyName === \"imports\") {\n defaults.imports.push(...collectIdentifiers(assigned));\n }\n if (propertyName === \"exports\") {\n defaults.exports.push(...collectIdentifiers(assigned));\n }\n }\n }\n\n return {\n controllers: dedupe(defaults.controllers),\n providers: dedupe(defaults.providers),\n imports: dedupe(defaults.imports),\n exports: dedupe(defaults.exports),\n };\n}\n\nfunction collectIdentifiers(node: ts.Expression | ts.BindingName): string[] {\n if (ts.isIdentifier(node)) return [node.text];\n if (ts.isPropertyAccessExpression(node)) return [node.name.text];\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements\n .map((item) =>\n ts.isIdentifier(item)\n ? item.text\n : ts.isPropertyAccessExpression(item)\n ? item.name.text\n : undefined,\n )\n .filter((value): value is string => Boolean(value));\n }\n return [];\n}\n\nfunction collectModuleMembership(context: AnalysisContext): Map<string, string> {\n const mapping = new Map<string, string>();\n for (const source of context.program.getSourceFiles().filter((file) => !file.isDeclarationFile)) {\n const aliases = collectImportAliases(source);\n for (const statement of source.statements) {\n if (!ts.isClassDeclaration(statement) || !statement.name) continue;\n const decorators = collectDecoratorNames(decoratorsOf(statement), aliases);\n if (!decorators.includes(\"Module\")) continue;\n\n const metadata = collectModuleMetadata(statement, aliases);\n const moduleId = symbolId(\n \"nest-module\",\n relativeFromRoot(context, source.fileName) ?? context.relativePath,\n statement.name.text,\n );\n for (const child of [...metadata.controllers, ...metadata.providers]) {\n mapping.set(child, moduleId);\n }\n }\n }\n\n return mapping;\n}\n\nfunction collectClassUseGuards(classNode: ts.ClassDeclaration, aliases: ImportAliasMap): string[] {\n const names: string[] = [];\n for (const decorator of decoratorsOf(classNode)) {\n const expression = decorator.expression;\n const call = ts.isCallExpression(expression) ? expression : undefined;\n if (!call) continue;\n const name = resolveDecoratorName(expression, aliases);\n if (!name) continue;\n if (name !== \"UseGuards\") continue;\n for (const arg of call.arguments) {\n if (ts.isIdentifier(arg)) names.push(arg.text);\n }\n }\n return dedupe(names);\n}\n\nfunction dedupe(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction combineRoutes(base: string, child: string): string {\n const segments = [base, child].map((value) => value.replace(/^\\/+|\\/+$/g, \"\")).filter(Boolean);\n return segments.length > 0 ? `/${segments.join(\"/\")}` : \"/\";\n}\n\nfunction makeRelation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: confidence === 1 ? \"framework-derived\" : \"heuristic\",\n analyzer: \"nestjs\",\n },\n };\n}\n\nfunction relativeFromRoot(context: AnalysisContext, absolutePath: string): string | undefined {\n const normalized = absolutePath.replace(/\\\\/g, \"/\");\n const root = context.root.replace(/\\\\/g, \"/\");\n if (normalized !== root && !normalized.startsWith(`${root}/`)) return undefined;\n const remainder = normalized.slice(root.length);\n return remainder.startsWith(\"/\") ? remainder.slice(1) : remainder;\n}\n","import path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"../constants.js\";\nimport { symbolId } from \"../ids.js\";\nimport type {\n AnalysisContribution,\n AnalysisContext,\n FrameworkAnalyzer,\n RelationRecord,\n} from \"../types.js\";\nimport {\n compactText,\n getDeclarationName,\n getTopLevelDefaultExportDeclaration,\n hasAnyTopLevelExport,\n makeSymbol,\n nodeLine,\n nodeRange,\n} from \"./helpers.js\";\n\nconst ROUTE_GROUP_SEGMENT = /^\\(.*\\)$/;\nconst ROUTE_METHODS = new Set([\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\", \"OPTIONS\"]);\nconst APP_FILES_EXTENSIONS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\"]);\n\ntype NextRouter = \"app\" | \"pages\";\ntype NextKind = \"page\" | \"layout\" | \"route\" | \"special\";\n\ninterface ParsedNextRoute {\n router: NextRouter;\n kind: NextKind;\n route: string;\n name: string;\n params: string[];\n}\n\nconst registeredNextJsAnalyzers = new WeakSet();\n\nexport class NextJsAnalyzer implements FrameworkAnalyzer {\n readonly name = \"nextjs\";\n readonly version = \"0.1.0-experimental\";\n\n constructor() {\n registeredNextJsAnalyzers.add(this);\n }\n\n supports(context: AnalysisContext): boolean {\n if (!APP_FILES_EXTENSIONS.has(path.extname(context.relativePath).toLowerCase())) return false;\n return (\n context.relativePath.startsWith(\"app/\") ||\n context.relativePath.startsWith(\"pages/\") ||\n context.relativePath === \"middleware.ts\"\n );\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const sourceFile = context.sourceFile;\n const route = parseNextRoute(context.relativePath);\n const defaultExportNode = getTopLevelDefaultExportDeclaration(sourceFile);\n const hasTopLevelExport = hasAnyTopLevelExport(sourceFile);\n const symbols: AnalysisContribution[\"symbols\"] = [];\n const relations: RelationRecord[] = [];\n\n if (!route) {\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n if (route.kind === \"page\") {\n const pageFacts = pageFactsForRoute(context, route);\n const symbol = makeSymbol(context, defaultExportNode ?? sourceFile, \"next-page\", {\n name: defaultExportNode ? getDeclarationName(defaultExportNode, route.name) : route.name,\n defaultExport: Boolean(defaultExportNode),\n exported: hasTopLevelExport,\n facts: pageFacts,\n });\n symbols.push(symbol);\n\n if (route.router === \"app\") {\n for (const layout of collectContainingAppLayouts(context.relativePath, context)) {\n relations.push(\n makeRelation(\n symbol.id,\n \"uses-layout\",\n symbolId(\"next-layout\", layout, \"layout\"),\n context,\n sourceFile,\n 1,\n \"app route layout chain\",\n ),\n );\n }\n }\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n if (route.kind === \"layout\") {\n symbols.push(\n makeSymbol(context, defaultExportNode ?? sourceFile, \"next-layout\", {\n exported: hasTopLevelExport,\n defaultExport: Boolean(defaultExportNode),\n name: \"layout\",\n facts: {\n router: route.router,\n route: route.route,\n runtime: runtimeFromSource(sourceFile),\n params: route.params.join(\",\"),\n metadata: compactText(collectMetadataMarkers(sourceFile).join(\",\")),\n },\n }),\n );\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n if (route.kind === \"route\") {\n const methods = collectRouteMethods(sourceFile);\n symbols.push(\n makeSymbol(context, sourceFile, \"next-route-handler\", {\n exported: hasTopLevelExport,\n name: \"route-handler\",\n facts: {\n router: route.router,\n route: route.route,\n methods,\n runtime: runtimeFromSource(sourceFile),\n metadata: compactText(collectMetadataMarkers(sourceFile).join(\",\")),\n },\n }),\n );\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n\n symbols.push(\n makeSymbol(context, sourceFile, \"next-special-file\", {\n exported: hasTopLevelExport,\n name: route.name,\n facts: {\n router: route.router,\n route: route.route,\n runtime: runtimeFromSource(sourceFile),\n },\n }),\n );\n\n return { symbols, relations, frameworks: [\"nextjs\"] };\n }\n}\n\nconst nextJsSupports = NextJsAnalyzer.prototype.supports.bind(NextJsAnalyzer.prototype);\nconst nextJsAnalyze = NextJsAnalyzer.prototype.analyze.bind(NextJsAnalyzer.prototype);\n\n/** Return immutable canonical methods only for an unmodified, directly constructed instance. */\nexport function trustedNextJsAnalyzerMethods(analyzer: FrameworkAnalyzer):\n | {\n supports(context: AnalysisContext): boolean;\n analyze(context: AnalysisContext): AnalysisContribution | Promise<AnalysisContribution>;\n }\n | undefined {\n if (!registeredNextJsAnalyzers.has(analyzer)) return undefined;\n if (Object.getPrototypeOf(analyzer) !== NextJsAnalyzer.prototype) return undefined;\n if (Object.hasOwn(analyzer, \"supports\") || Object.hasOwn(analyzer, \"analyze\")) {\n return undefined;\n }\n const name = Object.getOwnPropertyDescriptor(analyzer, \"name\");\n const version = Object.getOwnPropertyDescriptor(analyzer, \"version\");\n if (name?.value !== \"nextjs\" || version?.value !== \"0.1.0-experimental\") return undefined;\n return {\n supports: (context) => nextJsSupports(context),\n analyze: (context) => nextJsAnalyze(context),\n };\n}\n\nexport default NextJsAnalyzer;\n\nfunction parseNextRoute(relativePath: string): ParsedNextRoute | undefined {\n const normalized = relativePath.replace(/\\\\/g, \"/\");\n if (!normalized.startsWith(\"app/\") && !normalized.startsWith(\"pages/\")) return undefined;\n\n const router: NextRouter = normalized.startsWith(\"app/\") ? \"app\" : \"pages\";\n const segments = normalized.split(\"/\").filter(Boolean);\n const fileName = segments.at(-1);\n if (!fileName) return undefined;\n const fileBase = fileName.replace(/\\.(ts|tsx|js|jsx)$/, \"\");\n\n if (router === \"app\") {\n const routeSegments = segments.slice(1, -1);\n const baseRoute = buildRouteFromSegments(routeSegments);\n\n if (fileBase === \"layout\") {\n return {\n router,\n kind: \"layout\",\n route: baseRoute,\n name: \"layout\",\n params: dynamicSegmentNames(routeSegments),\n };\n }\n\n if (fileBase === \"page\") {\n return {\n router,\n kind: \"page\",\n route: baseRoute,\n name: baseRoute.split(\"/\")[baseRoute.split(\"/\").length - 1] || \"page\",\n params: dynamicSegmentNames(routeSegments),\n };\n }\n\n if (fileBase === \"route\") {\n return {\n router,\n kind: \"route\",\n route: baseRoute,\n name: \"route\",\n params: dynamicSegmentNames(routeSegments),\n };\n }\n\n if (fileBase.startsWith(\"_\")) {\n return {\n router,\n kind: \"special\",\n route: \"/_\" + fileBase.replace(/^_/, \"\"),\n name: fileName,\n params: [],\n };\n }\n\n return undefined;\n }\n\n const pageSegments = segments.slice(1);\n if (pageSegments.length === 0) return undefined;\n const isApi = pageSegments[0] === \"api\";\n const routeSegments = pageSegments.slice(0, pageSegments.length - 1);\n const route = `/${buildRouteFromSegments([...routeSegments, fileBase === \"index\" ? \"\" : fileBase].filter(Boolean)).replace(/^\\//, \"\")}`;\n\n return {\n router,\n kind: isApi ? \"route\" : \"page\",\n route,\n name: route.split(\"/\")[route.split(\"/\").length - 1] || \"page\",\n params: [...routeSegments, fileBase].filter(isDynamicSegment).map(stripDynamicMarkers),\n };\n}\n\nfunction pageFactsForRoute(\n context: AnalysisContext,\n route: ParsedNextRoute,\n): Record<string, string> {\n const markers = compactText(collectMetadataMarkers(context.sourceFile).join(\",\"));\n return {\n router: route.router,\n route: route.route,\n params: route.params.join(\",\"),\n runtime: runtimeFromSource(context.sourceFile),\n metadata: markers,\n };\n}\n\nfunction collectMetadataMarkers(sourceFile: ts.SourceFile): string[] {\n const facts: string[] = [];\n const addMarker = (name: string): void => {\n if (name === \"generateMetadata\") facts.push(\"generatemetadata\");\n if (name === \"getServerSideProps\") facts.push(\"getserversideprops\");\n if (name === \"getStaticProps\") facts.push(\"getstaticprops\");\n if (name === \"getStaticPaths\") facts.push(\"getstaticpaths\");\n };\n\n for (const statement of sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n addMarker(statement.name.text);\n continue;\n }\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name)) addMarker(declaration.name.text);\n }\n }\n }\n return [...new Set(facts)];\n}\n\nfunction collectRouteMethods(sourceFile: ts.SourceFile): string {\n const methods = new Set<string>();\n\n const addFromDeclaration = (name: string | undefined): void => {\n if (!name) return;\n const normalized = name.toUpperCase();\n if (ROUTE_METHODS.has(normalized)) methods.add(normalized.toLowerCase());\n };\n\n for (const statement of sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n addFromDeclaration(statement.name.text);\n continue;\n }\n\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue;\n if (isFunctionLikeExpression(declaration.initializer)) {\n addFromDeclaration(declaration.name.text);\n }\n }\n }\n\n return [...methods].join(\",\");\n}\n\nfunction isFunctionLikeExpression(\n node: ts.Expression | undefined,\n): node is ts.ArrowFunction | ts.FunctionExpression {\n return node !== undefined && (ts.isArrowFunction(node) || ts.isFunctionExpression(node));\n}\n\nfunction runtimeFromSource(sourceFile: ts.SourceFile): string {\n if (hasDirective(sourceFile, \"use client\")) return \"client\";\n if (hasDirective(sourceFile, \"use server\")) return \"server\";\n return \"server\";\n}\n\nfunction hasDirective(sourceFile: ts.SourceFile, directive: string): boolean {\n return sourceFile.statements\n .slice(0, 8)\n .some(\n (statement) =>\n ts.isExpressionStatement(statement) &&\n ts.isStringLiteral(statement.expression) &&\n statement.expression.text === directive,\n );\n}\n\nfunction collectContainingAppLayouts(relativePath: string, context: AnalysisContext): string[] {\n const fileSegments = relativePath.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean);\n if (fileSegments[0] !== \"app\") return [];\n\n const layoutSegments = fileSegments.slice(1, -1);\n const candidates: string[] = [];\n for (let index = 0; index <= layoutSegments.length; index += 1) {\n const prefix = layoutSegments.slice(0, index);\n const candidateWithoutExt = [\"app\", ...prefix, \"layout\"].join(\"/\");\n const tsx = `${candidateWithoutExt}.tsx`;\n const ts = `${candidateWithoutExt}.ts`;\n if (programContainsSourceFile(context, tsx)) candidates.push(tsx);\n if (programContainsSourceFile(context, ts)) candidates.push(ts);\n }\n return candidates;\n}\n\nfunction programContainsSourceFile(context: AnalysisContext, candidateRelative: string): boolean {\n const absolute = path.resolve(context.root, candidateRelative);\n return context.program\n .getSourceFiles()\n .some((source) => normalizeSourcePath(source.fileName) === normalizeSourcePath(absolute));\n}\n\nfunction normalizeSourcePath(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction isDynamicSegment(segment: string): boolean {\n return /^\\[{1,2}\\.?.*\\]$/.test(segment);\n}\n\nfunction dynamicSegmentNames(segments: string[]): string[] {\n return segments.filter(isDynamicSegment).map(stripDynamicMarkers);\n}\n\nfunction stripDynamicMarkers(segment: string): string {\n return segment.replace(/^\\[\\[?\\.*/g, \"\").replace(/\\]$/g, \"\");\n}\n\nfunction buildRouteFromSegments(segments: string[]): string {\n const cleaned = segments\n .filter(Boolean)\n .filter((segment) => !ROUTE_GROUP_SEGMENT.test(segment))\n .map((segment) => segment);\n return `/${cleaned.length > 0 ? cleaned.join(\"/\") : \"\"}`;\n}\n\nfunction makeRelation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: confidence === 1 ? \"framework-derived\" : \"heuristic\",\n analyzer: \"nextjs\",\n },\n };\n}\n","import path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { ANALYZER_VERSION, SCHEMA_VERSION } from \"../constants.js\";\nimport { symbolId } from \"../ids.js\";\nimport type {\n AnalysisContribution,\n AnalysisContext,\n FrameworkAnalyzer,\n RelationRecord,\n} from \"../types.js\";\nimport { isPathInside, relativePosix } from \"../utils/path.js\";\nimport {\n compactText,\n hasDefaultModifier,\n hasExportModifier,\n makeSymbol,\n nodeLine,\n nodeRange,\n propertyNameText,\n redactStringLiterals,\n} from \"./helpers.js\";\n\nconst REACT_EXTENSIONS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\"]);\nconst REACT_BUILTIN_HOOKS = new Set([\n \"useState\",\n \"useReducer\",\n \"useMemo\",\n \"useCallback\",\n \"useEffect\",\n \"useLayoutEffect\",\n \"useContext\",\n]);\nconst REACT_FACTORYS = new Set([\"memo\", \"forwardRef\"]);\n\ninterface ImportProfile {\n hookAliases: Map<string, string>;\n namespaceAliases: Set<string>;\n localImports: Map<string, { source: string; imported: string }>;\n}\n\ninterface ComponentDescriptor {\n name: string;\n id: string;\n body: ts.ConciseBody;\n}\n\ninterface NamedSyntaxCandidate {\n name: string;\n node: ts.Node;\n}\n\nexport class ReactAnalyzer implements FrameworkAnalyzer {\n readonly name = \"react\";\n readonly version = ANALYZER_VERSION;\n\n supports(context: AnalysisContext): boolean {\n const extension = path.extname(context.relativePath).toLowerCase();\n if (!REACT_EXTENSIONS.has(extension)) return false;\n return (\n hasDirective(context.sourceFile, \"use client\") ||\n hasDirective(context.sourceFile, \"use server\") ||\n hasReactImport(context.sourceFile) ||\n hasAnyJsx(context.sourceFile)\n );\n }\n\n analyze(context: AnalysisContext): AnalysisContribution {\n const profile = collectImportProfile(context.sourceFile);\n const symbols: AnalysisContribution[\"symbols\"] = [];\n const relations: RelationRecord[] = [];\n const componentIds = new Map<string, string>();\n const hookIds = new Map<string, string>();\n const components: ComponentDescriptor[] = [];\n\n for (const statement of context.sourceFile.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n const name = statement.name.text;\n if (isCustomHookName(name) && statement.body) {\n const symbol = makeSymbol(context, statement, \"react-hook\", {\n name,\n exported: isNameExported(context.sourceFile, statement),\n defaultExport: hasDefaultModifier(statement),\n facts: { runtime: inferRuntime(context.sourceFile) },\n });\n symbols.push(symbol);\n hookIds.set(name.toLowerCase(), symbol.id);\n continue;\n }\n if (statement.body && isComponentName(name, statement.body)) {\n const facts = collectComponentFacts(\n context,\n name,\n statement.parameters,\n statement.body,\n profile,\n );\n const symbol = makeSymbol(context, statement, \"react-component\", {\n name,\n exported: isNameExported(context.sourceFile, statement),\n defaultExport: hasDefaultModifier(statement),\n facts,\n });\n symbols.push(symbol);\n componentIds.set(name.toLowerCase(), symbol.id);\n components.push({ name, id: symbol.id, body: statement.body });\n continue;\n }\n }\n\n if (ts.isVariableStatement(statement)) {\n const exported = isNameExported(context.sourceFile, statement);\n const defaultExport = hasDefaultModifier(statement);\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue;\n const name = declaration.name.text;\n\n if (isContextFactory(declaration.initializer, profile)) {\n symbols.push(\n makeSymbol(context, declaration, \"react-context\", {\n name,\n exported,\n defaultExport,\n facts: { runtime: inferRuntime(context.sourceFile), type: \"react-context\" },\n }),\n );\n continue;\n }\n\n if (isCustomHookName(name) && isFunctionLikeExpression(declaration.initializer)) {\n const body = functionBody(declaration.initializer);\n if (body) {\n const symbol = makeSymbol(context, declaration, \"react-hook\", {\n name,\n exported,\n defaultExport,\n facts: { runtime: inferRuntime(context.sourceFile) },\n });\n symbols.push(symbol);\n hookIds.set(name.toLowerCase(), symbol.id);\n }\n continue;\n }\n\n const extracted = extractComponentFromExpression(declaration.initializer, name, profile);\n if (!extracted) continue;\n\n const facts = collectComponentFacts(\n context,\n name,\n extracted.parameters,\n extracted.body,\n profile,\n );\n const symbol = makeSymbol(context, declaration, \"react-component\", {\n name,\n exported,\n defaultExport,\n facts,\n });\n symbols.push(symbol);\n componentIds.set(name.toLowerCase(), symbol.id);\n components.push({ name, id: symbol.id, body: extracted.body });\n }\n }\n\n if (ts.isClassDeclaration(statement) && statement.name && isReactClassComponent(statement)) {\n const name = statement.name.text;\n const renderMethod = statement.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) &&\n ts.isIdentifier(member.name) &&\n member.name.text === \"render\" &&\n Boolean(member.body),\n );\n if (!renderMethod?.body) continue;\n const symbol = makeSymbol(context, statement, \"react-component\", {\n name,\n exported: isNameExported(context.sourceFile, statement),\n defaultExport: hasDefaultModifier(statement),\n facts: { runtime: inferRuntime(context.sourceFile), class: true },\n });\n symbols.push(symbol);\n componentIds.set(name.toLowerCase(), symbol.id);\n components.push({ name, id: symbol.id, body: renderMethod.body });\n }\n }\n\n for (const component of components) {\n const rendered = collectRenderedComponents(component.body);\n for (const candidate of rendered) {\n const to =\n componentIds.get(candidate.name.toLowerCase()) ??\n resolveReactCandidateWithChecker(context, candidate, \"react-component\") ??\n resolveImportedReactComponent(context, profile, candidate.name) ??\n symbolId(\"react-component\", context.relativePath, candidate.name);\n relations.push(\n makeRelation(component.id, \"renders\", to, context, candidate.node, 0.95, \"JSX render\"),\n );\n }\n\n for (const candidate of collectCalledCustomHooks(component.body, profile)) {\n const to =\n hookIds.get(candidate.name.toLowerCase()) ??\n resolveReactCandidateWithChecker(context, candidate, \"react-hook\") ??\n resolveImportedReactSymbol(context, profile, candidate.name, \"react-hook\") ??\n symbolId(\"react-hook\", context.relativePath, candidate.name);\n relations.push(\n makeRelation(\n component.id,\n \"uses-hook\",\n to,\n context,\n candidate.node,\n 0.95,\n \"custom hook call\",\n ),\n );\n }\n }\n\n return { symbols, relations, frameworks: [\"react\"] };\n }\n}\n\nexport default ReactAnalyzer;\n\nfunction hasReactImport(sourceFile: ts.SourceFile): boolean {\n return sourceFile.statements.some(\n (statement) =>\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n statement.moduleSpecifier.text === \"react\",\n );\n}\n\nfunction hasDirective(sourceFile: ts.SourceFile, value: string): boolean {\n return sourceFile.statements\n .slice(0, 8)\n .some(\n (statement) =>\n ts.isExpressionStatement(statement) &&\n ts.isStringLiteral(statement.expression) &&\n statement.expression.text === value,\n );\n}\n\nfunction hasAnyJsx(sourceFile: ts.SourceFile): boolean {\n let found = false;\n visit(sourceFile, (node) => {\n if (found) return;\n if (\n ts.isJsxElement(node) ||\n ts.isJsxSelfClosingElement(node) ||\n ts.isJsxOpeningElement(node) ||\n ts.isJsxFragment(node)\n ) {\n found = true;\n }\n });\n return found;\n}\n\nfunction inferRuntime(sourceFile: ts.SourceFile): string {\n if (hasDirective(sourceFile, \"use client\")) return \"client\";\n if (hasDirective(sourceFile, \"use server\")) return \"server\";\n return \"unclassified\";\n}\n\nfunction isNameExported(sourceFile: ts.SourceFile, node: ts.Node): boolean {\n return hasExportModifier(node);\n}\n\nfunction collectImportProfile(sourceFile: ts.SourceFile): ImportProfile {\n const hookAliases = new Map<string, string>();\n const namespaceAliases = new Set<string>();\n const localImports = new Map<string, { source: string; imported: string }>();\n\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))\n continue;\n const source = statement.moduleSpecifier.text;\n const clause = statement.importClause;\n if (!clause) continue;\n\n if (source === \"react\") {\n if (clause.name) {\n hookAliases.set(clause.name.text, clause.name.text);\n localImports.set(clause.name.text, { source, imported: \"default\" });\n }\n if (!clause.namedBindings) continue;\n if (ts.isNamespaceImport(clause.namedBindings)) {\n namespaceAliases.add(clause.namedBindings.name.text);\n continue;\n }\n for (const item of clause.namedBindings.elements) {\n const local = item.name.text;\n const imported = item.propertyName?.text ?? item.name.text;\n hookAliases.set(local, imported);\n localImports.set(local, { source, imported });\n }\n continue;\n }\n\n if (clause.name) {\n localImports.set(clause.name.text, { source, imported: \"default\" });\n }\n if (!clause.namedBindings) continue;\n if (ts.isNamedImports(clause.namedBindings)) {\n for (const item of clause.namedBindings.elements) {\n localImports.set(item.name.text, {\n source,\n imported: item.propertyName?.text ?? item.name.text,\n });\n }\n } else if (ts.isNamespaceImport(clause.namedBindings)) {\n localImports.set(clause.namedBindings.name.text, {\n source,\n imported: \"*\",\n });\n }\n }\n\n return { hookAliases, namespaceAliases, localImports };\n}\n\nfunction isCustomHookName(name: string): boolean {\n return /^use[A-Z]/.test(name);\n}\n\nfunction isComponentName(name: string, body: ts.ConciseBody | undefined): boolean {\n return Boolean(body && isUpperCase(name) && !isCustomHookName(name) && containsJsx(body));\n}\n\nfunction isUpperCase(name: string): boolean {\n return /^[A-Z]/.test(name);\n}\n\nfunction isContextFactory(value: ts.Expression, profile: ImportProfile): boolean {\n return (\n ts.isCallExpression(value) && resolveCallName(value.expression, profile) === \"createContext\"\n );\n}\n\nfunction extractComponentFromExpression(\n value: ts.Expression,\n name: string,\n profile: ImportProfile,\n): { body: ts.ConciseBody; parameters: readonly ts.ParameterDeclaration[] } | undefined {\n if (!isUpperCase(name) || isCustomHookName(name)) return undefined;\n\n if (isFunctionLikeExpression(value)) {\n return { body: value.body, parameters: value.parameters };\n }\n\n if (ts.isClassExpression(value)) {\n const renderMethod = value.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) &&\n ts.isIdentifier(member.name) &&\n member.name.text === \"render\" &&\n Boolean(member.body),\n );\n if (!renderMethod?.body) return undefined;\n return { body: renderMethod.body, parameters: renderMethod.parameters };\n }\n\n if (ts.isCallExpression(value)) {\n const calledName = resolveCallName(value.expression, profile);\n if (!calledName || !REACT_FACTORYS.has(calledName) || value.arguments.length === 0)\n return undefined;\n const first = value.arguments[0];\n if (!ts.isFunctionLike(first) || !containsJsx(first.body)) return undefined;\n return { body: first.body, parameters: first.parameters };\n }\n\n return undefined;\n}\n\nfunction isFunctionLikeExpression(\n expression: ts.Expression,\n): expression is ts.ArrowFunction | ts.FunctionExpression {\n return ts.isArrowFunction(expression) || ts.isFunctionExpression(expression);\n}\n\nfunction isReactClassComponent(statement: ts.ClassDeclaration): boolean {\n if (!statement.heritageClauses) return false;\n return statement.heritageClauses.some((clause) =>\n clause.types.some((item) => {\n const expr = item.expression;\n const typeName = ts.isIdentifier(expr)\n ? expr.text\n : ts.isPropertyAccessExpression(expr)\n ? expr.name.text\n : undefined;\n return typeName === \"Component\" || typeName === \"PureComponent\";\n }),\n );\n}\n\nfunction functionBody(expression: ts.Expression): ts.ConciseBody | undefined {\n return isFunctionLikeExpression(expression) ? expression.body : undefined;\n}\n\nfunction collectComponentFacts(\n context: AnalysisContext,\n name: string,\n parameters: readonly ts.ParameterDeclaration[],\n body: ts.ConciseBody,\n profile: ImportProfile,\n) {\n const facts: Record<string, string> = {\n runtime: inferRuntime(context.sourceFile),\n };\n\n const props = collectProps(context, parameters[0]);\n if (props.length > 0) {\n facts.props = `${name.toLowerCase()}props:${props.join(\",\")}`;\n }\n\n const behavior = collectComponentBehavior(context, body, profile);\n if (behavior.state.length > 0) facts.state = behavior.state.join(\",\");\n if (behavior.memo.length > 0) facts.memo = behavior.memo.join(\",\");\n if (behavior.effects.length > 0) facts.effects = behavior.effects.join(\",\");\n if (behavior.customHooks.length > 0) facts.hooks = behavior.customHooks.join(\",\");\n return facts;\n}\n\nfunction collectProps(context: AnalysisContext, parameter?: ts.ParameterDeclaration): string[] {\n if (!parameter) return [];\n const values: string[] = [];\n collectBindingNames(parameter.name, values);\n if (parameter.type) {\n values.push(...collectInterfaceMembers(parameter.type, context));\n }\n return dedupe(values);\n}\n\nfunction collectComponentBehavior(\n context: AnalysisContext,\n body: ts.ConciseBody,\n profile: ImportProfile,\n): { state: string[]; memo: string[]; effects: string[]; customHooks: string[] } {\n const state: string[] = [];\n const memo: string[] = [];\n const effects: string[] = [];\n const customHooks: string[] = [];\n\n visit(body, (node) => {\n if (!ts.isCallExpression(node)) return;\n const called = resolveCallName(node.expression, profile);\n if (!called) return;\n\n const declaration = variableDeclarationOfCall(node);\n if (called === \"useState\" || called === \"useReducer\") {\n if (declaration?.name) {\n const declaredNames: string[] = [];\n collectBindingNames(declaration.name, declaredNames);\n state.push(...declaredNames);\n }\n if (called === \"useReducer\") state.push(\"reducer\");\n return;\n }\n\n if (called === \"useMemo\" || called === \"useCallback\") {\n const target =\n declaration?.name && ts.isIdentifier(declaration.name) ? declaration.name.text : called;\n const dependencies = dependencyText(node.arguments[1], context.sourceFile);\n memo.push(`${called.toLowerCase()}:${target.toLowerCase()}<-${dependencies}`);\n return;\n }\n\n if (called === \"useEffect\" || called === \"useLayoutEffect\") {\n const deps = node.arguments[1]\n ? compactText(redactStringLiterals(node.arguments[1].getText(context.sourceFile)))\n : \"[]\";\n effects.push(`useeffect:${deps}`);\n return;\n }\n\n if (called.startsWith(\"use\") && !REACT_BUILTIN_HOOKS.has(called)) {\n customHooks.push(called.toLowerCase());\n }\n });\n\n return {\n state: dedupe(state),\n memo: dedupe(memo),\n effects: dedupe(effects),\n customHooks: dedupe(customHooks),\n };\n}\n\nfunction collectCalledCustomHooks(node: ts.Node, profile: ImportProfile): NamedSyntaxCandidate[] {\n const hooks: NamedSyntaxCandidate[] = [];\n visit(node, (current) => {\n if (!ts.isCallExpression(current)) return;\n const called = resolveCallName(current.expression, profile);\n if (called && called.startsWith(\"use\") && !REACT_BUILTIN_HOOKS.has(called)) {\n hooks.push({ name: called, node: current });\n }\n });\n return hooks;\n}\n\nfunction collectRenderedComponents(node: ts.Node): NamedSyntaxCandidate[] {\n const components: NamedSyntaxCandidate[] = [];\n visit(node, (current) => {\n if (!ts.isJsxElement(current) && !ts.isJsxSelfClosingElement(current)) return;\n const evidenceNode = ts.isJsxElement(current) ? current.openingElement : current;\n const tag = jsxTagName(evidenceNode.tagName);\n if (tag && isUpperCase(tag)) {\n components.push({ name: tag, node: evidenceNode });\n }\n });\n return components;\n}\n\nfunction resolveImportedReactComponent(\n context: AnalysisContext,\n profile: ImportProfile,\n renderedName: string,\n): string | undefined {\n return resolveImportedReactSymbol(context, profile, renderedName, \"react-component\");\n}\n\nfunction resolveReactCandidateWithChecker(\n context: AnalysisContext,\n candidate: NamedSyntaxCandidate,\n kind: \"react-component\" | \"react-hook\",\n): string | undefined {\n let location: ts.Node = candidate.node;\n if (ts.isJsxOpeningElement(candidate.node) || ts.isJsxSelfClosingElement(candidate.node)) {\n location = candidate.node.tagName;\n } else if (ts.isCallExpression(candidate.node)) {\n location = candidate.node.expression;\n }\n let symbol = context.checker.getSymbolAtLocation(location);\n if (!symbol && ts.isPropertyAccessExpression(location)) {\n symbol = context.checker.getSymbolAtLocation(location.name);\n }\n if (!symbol) return undefined;\n if (symbol.flags & ts.SymbolFlags.Alias) {\n try {\n symbol = context.checker.getAliasedSymbol(symbol);\n } catch {\n return undefined;\n }\n }\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n if (!declaration) return undefined;\n const sourceFile = declaration.getSourceFile();\n let relative: string;\n try {\n relative = path.relative(context.root, sourceFile.fileName).split(path.sep).join(\"/\");\n } catch {\n return undefined;\n }\n if (\n relative === \"\" ||\n relative === \"..\" ||\n relative.startsWith(\"../\") ||\n path.isAbsolute(relative) ||\n (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative))\n ) {\n return undefined;\n }\n return symbolId(kind, relative, declarationToSymbolName(declaration) ?? symbol.getName());\n}\n\nfunction resolveImportedReactSymbol(\n context: AnalysisContext,\n profile: ImportProfile,\n importedName: string,\n kind: \"react-component\" | \"react-hook\",\n): string | undefined {\n const source = profile.localImports.get(importedName);\n if (!source) return undefined;\n if (!source.source.startsWith(\"./\") && !source.source.startsWith(\"../\")) {\n const resolved = context.resolveModule?.(source.source, context.sourceFile.fileName);\n if (!resolved) return undefined;\n if (!isPathInside(context.root, resolved.resolvedFileName)) return undefined;\n const relative = relativePosix(context.root, resolved.resolvedFileName);\n if (context.indexedSourcePaths && !context.indexedSourcePaths.has(relative)) return undefined;\n const sourceFile = context.program.getSourceFile(resolved.resolvedFileName);\n const declaration = sourceFile\n ? findExportedDeclaration(sourceFile, source.imported)\n : undefined;\n const actualName = declaration ? declarationToSymbolName(declaration) : undefined;\n if (actualName) return symbolId(kind, relative, actualName);\n return symbolId(kind, relative, source.imported);\n }\n const relative = path.posix.normalize(\n path.posix.join(path.posix.dirname(context.relativePath), source.source),\n );\n const candidates = [\n relative,\n `${relative}.ts`,\n `${relative}.tsx`,\n `${relative}.js`,\n `${relative}.jsx`,\n `${relative}.mjs`,\n `${relative}.cjs`,\n `${relative}/index.ts`,\n `${relative}/index.tsx`,\n `${relative}/index.jsx`,\n ];\n for (const candidate of candidates) {\n const absolute = path.resolve(context.root, candidate);\n const imported = context.program.getSourceFile(absolute);\n if (imported) {\n const declaration = findExportedDeclaration(imported, source.imported);\n if (declaration) {\n const symbolName = declarationToSymbolName(declaration);\n if (symbolName) return symbolId(kind, candidate, symbolName);\n }\n if (source.imported !== \"*\") return symbolId(kind, candidate, source.imported);\n }\n }\n const fallback = source.imported === \"*\" ? importedName : source.imported;\n return symbolId(kind, relative, fallback);\n}\n\nfunction declarationToSymbolName(declaration: ts.Declaration): string | undefined {\n if (ts.isFunctionDeclaration(declaration)) return declaration.name?.text ?? \"default\";\n if (ts.isClassDeclaration(declaration)) return declaration.name?.text ?? \"default\";\n if (ts.isInterfaceDeclaration(declaration) || ts.isTypeAliasDeclaration(declaration))\n return declaration.name.text;\n if (ts.isVariableDeclaration(declaration) && ts.isIdentifier(declaration.name))\n return declaration.name.text;\n return \"default\";\n}\n\nfunction findExportedDeclaration(\n sourceFile: ts.SourceFile,\n exportedName: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n ts.isFunctionDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name?.text === exportedName)\n )\n return statement;\n if (\n ts.isClassDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name?.text === exportedName)\n )\n return statement;\n if (\n ts.isInterfaceDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name.text === exportedName)\n )\n return statement;\n if (\n ts.isTypeAliasDeclaration(statement) &&\n ((exportedName === \"default\" && hasDefaultModifier(statement)) ||\n statement.name.text === exportedName)\n )\n return statement;\n if (ts.isVariableStatement(statement)) {\n const declaration =\n exportedName === \"default\"\n ? statement.declarationList.declarations.find(\n (item) => hasDefaultModifier(statement) && ts.isIdentifier(item.name),\n )\n : statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === exportedName,\n );\n if (declaration && ts.isIdentifier(declaration.name)) return declaration;\n }\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n ) {\n const specifier = statement.exportClause.elements.find(\n (item) =>\n item.name.text === exportedName ||\n (item.name.text === \"default\" && item.propertyName?.text === exportedName),\n );\n if (!specifier) continue;\n return findExportedDeclaration(\n sourceFile,\n specifier.propertyName?.text ?? specifier.name.text,\n );\n }\n if (\n ts.isExportAssignment(statement) &&\n !statement.isExportEquals &&\n ts.isIdentifier(statement.expression)\n ) {\n return findDeclarationByName(sourceFile, statement.expression.text);\n }\n }\n return undefined;\n}\n\nfunction findDeclarationByName(\n sourceFile: ts.SourceFile,\n name: string,\n): ts.Declaration | undefined {\n for (const statement of sourceFile.statements) {\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement)\n ) {\n if (statement.name?.text === name) return statement;\n }\n if (ts.isVariableStatement(statement)) {\n const declaration = statement.declarationList.declarations.find(\n (item) => ts.isIdentifier(item.name) && item.name.text === name,\n );\n if (declaration) return declaration;\n }\n }\n return undefined;\n}\n\nfunction dependencyText(expression: ts.Expression | undefined, sourceFile: ts.SourceFile): string {\n if (!expression || !ts.isArrayLiteralExpression(expression)) return \"[]\";\n return expression.elements\n .map((element) => compactText(redactStringLiterals(element.getText(sourceFile))))\n .join(\",\");\n}\n\nfunction resolveCallName(\n expression: ts.LeftHandSideExpression,\n profile: ImportProfile,\n): string | undefined {\n if (ts.isIdentifier(expression)) {\n return profile.hookAliases.get(expression.text) ?? expression.text;\n }\n if (\n ts.isPropertyAccessExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n profile.namespaceAliases.has(expression.expression.text)\n ) {\n return expression.name.text;\n }\n return undefined;\n}\n\nfunction variableDeclarationOfCall(node: ts.CallExpression): ts.VariableDeclaration | undefined {\n let current = node.parent as ts.Node | undefined;\n while (current) {\n if (ts.isVariableDeclaration(current)) return current;\n current = current.parent;\n }\n return undefined;\n}\n\nfunction collectBindingNames(name: ts.BindingName, values: string[]): void {\n if (ts.isIdentifier(name)) {\n values.push(name.text.toLowerCase());\n return;\n }\n if (ts.isObjectBindingPattern(name) || ts.isArrayBindingPattern(name)) {\n for (const element of name.elements) {\n if (ts.isBindingElement(element)) collectBindingNames(element.name, values);\n }\n }\n}\n\nfunction collectInterfaceMembers(typeNode: ts.TypeNode, context: AnalysisContext): string[] {\n if (ts.isTypeLiteralNode(typeNode)) {\n return typeNode.members.flatMap((member) => {\n const name = propertyNameText(member.name);\n return name ? [name.toLowerCase()] : [];\n });\n }\n\n if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {\n const symbol = context.checker.getSymbolAtLocation(typeNode.typeName);\n const resolved =\n symbol && symbol.flags & ts.SymbolFlags.Alias\n ? context.checker.getAliasedSymbol(symbol)\n : symbol;\n const declaration = resolved?.declarations?.[0];\n if (declaration && ts.isInterfaceDeclaration(declaration)) {\n return declaration.members.flatMap((member) => {\n const name = propertyNameText(member.name);\n return name ? [name.toLowerCase()] : [];\n });\n }\n }\n\n return [];\n}\n\nfunction containsJsx(node: ts.Node): boolean {\n let found = false;\n visit(node, (current) => {\n if (\n ts.isJsxElement(current) ||\n ts.isJsxSelfClosingElement(current) ||\n ts.isJsxOpeningElement(current) ||\n ts.isJsxFragment(current)\n ) {\n found = true;\n }\n });\n return found;\n}\n\nfunction jsxTagName(tag: ts.JsxTagNameExpression): string | undefined {\n if (ts.isIdentifier(tag) || ts.isStringLiteral(tag)) return tag.text;\n if (ts.isPropertyAccessExpression(tag)) return tag.name.text;\n return undefined;\n}\n\nfunction visit(node: ts.Node, callback: (node: ts.Node) => void): void {\n callback(node);\n ts.forEachChild(node, (child) => visit(child, callback));\n}\n\nfunction dedupe(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction makeRelation(\n from: string,\n type: RelationRecord[\"type\"],\n to: string,\n context: AnalysisContext,\n node: ts.Node,\n confidence: number,\n explanation: string,\n): RelationRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n from,\n type,\n to,\n confidence,\n origin: {\n file: context.relativePath,\n line: nodeLine(context.sourceFile, node),\n range: nodeRange(context.sourceFile, node),\n explanation,\n classification: \"framework-derived\",\n analyzer: \"react\",\n },\n };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport {\n ANALYZER_VERSION,\n CONFIG_VERSION,\n CUSTOM_PRODUCER_ID,\n DEFAULT_ANALYZER_NAMES,\n DEFAULT_PRODUCER_ID,\n DEFAULT_SEMANTIC_RESOLVER,\n DEFAULT_SYNTAX_PARSER,\n PRODUCER_CONTRACT_VERSION,\n SCHEMA_VERSION,\n} from \"./constants.js\";\nimport {\n buildCompilerUnitGraph,\n semanticDirectoryListingHash,\n type CompilerUnitGraph,\n} from \"./compiler-units.js\";\nimport { effectiveFrameworks, resolveConfiguration } from \"./config.js\";\nimport {\n discoverSourceFiles,\n readPackageMetadata,\n type DiscoveredSource,\n type PackageMetadata,\n} from \"./discovery.js\";\nimport { CodeMapError } from \"./errors.js\";\nimport { TYPESCRIPT_SEMANTIC_VERSION } from \"./semantic.js\";\nimport { loadCodeMapFrom } from \"./storage.js\";\nimport type {\n CodeMap,\n FreshnessResult,\n LoadCodeMapOptions,\n ProducerRecord,\n ScanChanges,\n SemanticInputRecord,\n WorkspacePackage,\n} from \"./types.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { isPathInside, normalizeStoredPath, relativePosix } from \"./utils/path.js\";\nimport { compareText, mapLimit, stableJson } from \"./utils/stable.js\";\n\nexport async function checkFreshness(options: LoadCodeMapOptions = {}): Promise<FreshnessResult> {\n return (await inspectFreshness(options)).result;\n}\n\nexport interface FreshnessInspection {\n result: FreshnessResult;\n map?: CodeMap;\n}\n\n/** Validate the committed artifact set once and retain it for the scan reuse fast path. */\nexport async function inspectFreshness(\n options: LoadCodeMapOptions = {},\n): Promise<FreshnessInspection> {\n const resolved = await resolveConfiguration(options);\n let map: CodeMap;\n try {\n map = await loadCodeMapFrom(resolved.outputDir);\n } catch (error) {\n if (error instanceof CodeMapError && error.code === \"MAP_NOT_FOUND\") {\n return {\n result: {\n status: \"missing\",\n current: false,\n root: resolved.root,\n outputDir: resolved.outputDir,\n reasons: [\"No complete map exists; run ai-code-map scan.\"],\n changes: emptyChanges(),\n },\n };\n }\n if (error instanceof CodeMapError) {\n return { result: invalidArtifactFreshness(resolved.root, resolved.outputDir, error) };\n }\n throw error;\n }\n const manifest = map.manifest;\n\n const prepared = await prepareSemanticInputs(resolved.root, resolved.config);\n const currentSources = await hashDiscoveredSources(\n prepared.discovered,\n resolved.config.concurrency ?? 16,\n );\n const changes = compareSources(manifest.sourceFiles, currentSources);\n const configHash = prepared.configHash;\n const reasons: string[] = [];\n if (manifest.analyzerVersion !== ANALYZER_VERSION) reasons.push(\"The analyzer version changed.\");\n const expectedSemanticResolver = {\n name: DEFAULT_SEMANTIC_RESOLVER,\n version: TYPESCRIPT_SEMANTIC_VERSION,\n };\n if (stableJson(manifest.semanticResolver) !== stableJson(expectedSemanticResolver)) {\n reasons.push(\"The semantic resolver or TypeScript version changed.\");\n }\n const expectedParser = { name: DEFAULT_SYNTAX_PARSER, version: ts.version };\n if (stableJson(manifest.syntaxParser) !== stableJson(expectedParser)) {\n reasons.push(\"The syntax parser or parser version changed.\");\n }\n const expectedAnalyzers = DEFAULT_ANALYZER_NAMES.map((name) => ({\n name,\n version: ANALYZER_VERSION,\n })).sort((a, b) => compareText(a.name, b.name));\n if (stableJson(manifest.analyzers) !== stableJson(expectedAnalyzers)) {\n reasons.push(\"The enabled analyzer or rule-pack version changed.\");\n }\n if (stableJson(manifest.producer) !== stableJson(defaultProducerRecord())) {\n reasons.push(\"The map was not produced by the compatible built-in analysis pipeline.\");\n }\n if (manifest.configHash !== configHash)\n reasons.push(\"Configuration or project metadata changed.\");\n const expectedCompilerUnits = prepared.compilerGraph.units.map((unit) => unit.record);\n const ownershipMismatch = map.files.some(\n (file) => prepared.compilerGraph.ownership.get(file.path) !== file.compilerUnit,\n );\n if (\n ownershipMismatch ||\n stableJson(map.project.compilerUnits) !== stableJson(expectedCompilerUnits)\n ) {\n reasons.push(\"The persisted compiler-unit graph or file ownership changed.\");\n }\n const persistedFiles = new Map(map.files.map((file) => [file.path, file]));\n if (currentSources.some((source) => persistedFiles.get(source.path)?.lines !== source.lines)) {\n reasons.push(\"Persisted source line counts no longer match the indexed source bytes.\");\n }\n const semanticInputChanges = await compareSemanticInputs(\n resolved.root,\n manifest.semanticInputs,\n resolved.config.concurrency ?? 16,\n );\n if (semanticInputChanges.length > 0) {\n reasons.push(`${semanticInputChanges.length} semantic compiler input(s) changed.`);\n }\n if (changes.added.length) reasons.push(`${changes.added.length} source file(s) were added.`);\n if (changes.modified.length)\n reasons.push(`${changes.modified.length} source file(s) were modified.`);\n if (changes.deleted.length)\n reasons.push(`${changes.deleted.length} source file(s) were deleted.`);\n if (changes.moved.length)\n reasons.push(`${changes.moved.length} source file(s) appear to have moved.`);\n const current = reasons.length === 0;\n const result: FreshnessResult = {\n status: current ? \"current\" : \"stale\",\n current,\n root: resolved.root,\n outputDir: resolved.outputDir,\n reasons: current ? [\"Map is current.\"] : reasons,\n changes,\n };\n return current ? { result, map } : { result };\n}\n\nexport function defaultProducerRecord(): ProducerRecord {\n return {\n id: DEFAULT_PRODUCER_ID,\n kind: \"built-in\",\n fingerprint: hashText(\n stableJson({\n id: DEFAULT_PRODUCER_ID,\n contract: PRODUCER_CONTRACT_VERSION,\n schema: SCHEMA_VERSION,\n analyzer: ANALYZER_VERSION,\n syntaxParser: { name: DEFAULT_SYNTAX_PARSER, version: ts.version },\n semanticResolver: {\n name: DEFAULT_SEMANTIC_RESOLVER,\n version: TYPESCRIPT_SEMANTIC_VERSION,\n },\n analyzers: [...DEFAULT_ANALYZER_NAMES],\n capabilities: [\n \"artifact-integrity-v2\",\n \"compiler-unit-ownership-v3\",\n \"module-provenance-v2\",\n \"portable-paths-v2\",\n \"semantic-input-closure-v2\",\n ],\n }),\n ),\n };\n}\n\nexport function customProducerRecord(components: unknown): ProducerRecord {\n return {\n id: CUSTOM_PRODUCER_ID,\n kind: \"custom\",\n fingerprint: hashText(\n stableJson({\n id: CUSTOM_PRODUCER_ID,\n contract: PRODUCER_CONTRACT_VERSION,\n components,\n }),\n ),\n };\n}\n\nexport interface PreparedSemanticInputs {\n packageMetadata: PackageMetadata;\n frameworks: ReturnType<typeof effectiveFrameworks>;\n discovered: DiscoveredSource[];\n compilerGraph: CompilerUnitGraph;\n configHash: string;\n}\n\n/** Shared scan/check construction for every semantic input that can affect canonical facts. */\nexport async function prepareSemanticInputs(\n root: string,\n config: Parameters<typeof discoverSourceFiles>[1],\n): Promise<PreparedSemanticInputs> {\n const packageMetadata = await readPackageMetadata(root);\n const frameworks = effectiveFrameworks(config.frameworks, packageMetadata.frameworks);\n const discovered = await discoverSourceFiles(root, config);\n const compilerGraph = await buildCompilerUnitGraph(\n root,\n config,\n discovered,\n packageMetadata.workspaces,\n );\n const configHash = await computeAnalysisConfigHash(\n root,\n config,\n frameworks,\n packageMetadata.raw,\n packageMetadata.workspaces,\n compilerGraph,\n );\n return { packageMetadata, frameworks, discovered, compilerGraph, configHash };\n}\n\nexport async function computeAnalysisConfigHash(\n root: string,\n config: Parameters<typeof discoverSourceFiles>[1],\n frameworks: string[],\n packageJson: Record<string, unknown>,\n workspaces: WorkspacePackage[],\n compilerGraph: CompilerUnitGraph,\n): Promise<string> {\n const inputFiles = [\n ...compilerGraph.configInputs,\n \"package.json\",\n \"pnpm-workspace.yaml\",\n \"pnpm-workspace.yml\",\n \"lerna.json\",\n \"rush.json\",\n ...semanticPackageInputs(workspaces),\n ];\n const analysisInputs = await hashExistingInputs(root, inputFiles);\n return hashText(\n stableJson({\n config: {\n version: config.version,\n include: [...config.include].sort(compareText),\n exclude: [...config.exclude].sort(compareText),\n ...(config.tsconfig ? { tsconfig: normalizeStoredPath(config.tsconfig) } : {}),\n frameworks: [...config.frameworks].sort(compareText),\n includePrivateSymbols: config.includePrivateSymbols,\n },\n frameworks,\n analysisInputs,\n package: packageJson,\n compilerUnits: compilerGraph.units.map((unit) => ({\n record: unit.record,\n programRoots: unit.sourceFiles.map((file) => relativePosix(root, file)),\n })),\n ownership: [...compilerGraph.ownership.entries()].sort(([a], [b]) => compareText(a, b)),\n toolchain: {\n schema: SCHEMA_VERSION,\n config: CONFIG_VERSION,\n analyzer: ANALYZER_VERSION,\n typescript: ts.version,\n semanticResolver: TYPESCRIPT_SEMANTIC_VERSION,\n syntaxParser: DEFAULT_SYNTAX_PARSER,\n analyzers: [...DEFAULT_ANALYZER_NAMES],\n },\n }),\n );\n}\n\nfunction semanticPackageInputs(workspaces: WorkspacePackage[]): string[] {\n const lockfiles = [\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n ];\n return [\n ...lockfiles,\n ...workspaces.flatMap((workspace) => [\n `${workspace.path}/package.json`,\n ...lockfiles.map((lockfile) => `${workspace.path}/${lockfile}`),\n ]),\n ];\n}\n\nasync function hashExistingInputs(\n root: string,\n relativePaths: string[],\n): Promise<Array<{ path: string; hash: string }>> {\n const output: Array<{ path: string; hash: string }> = [];\n for (const relative of [...new Set(relativePaths.map(normalizeStoredPath))].sort(compareText)) {\n const absolute = path.resolve(root, relative);\n const candidate = path.relative(root, absolute);\n if (candidate === \"..\" || candidate.startsWith(`..${path.sep}`) || path.isAbsolute(candidate)) {\n continue;\n }\n try {\n const stat = await fs.lstat(absolute);\n if (stat.isSymbolicLink() || !stat.isFile()) continue;\n const [realRoot, realInput] = await Promise.all([fs.realpath(root), fs.realpath(absolute)]);\n if (!isPathInside(realRoot, realInput)) continue;\n output.push({ path: relative, hash: hashText(await fs.readFile(absolute)) });\n } catch (error) {\n if (!(error instanceof Error && \"code\" in error && error.code === \"ENOENT\")) throw error;\n }\n }\n return output;\n}\n\nexport function compareSources(\n before: Array<{ path: string; hash: string }>,\n after: Array<{ path: string; hash: string }>,\n): ScanChanges {\n const beforeMap = new Map(before.map((file) => [file.path, file.hash]));\n const afterMap = new Map(after.map((file) => [file.path, file.hash]));\n const added = [...afterMap.keys()].filter((file) => !beforeMap.has(file));\n const deleted = [...beforeMap.keys()].filter((file) => !afterMap.has(file));\n const modified = [...afterMap.keys()].filter(\n (file) => beforeMap.has(file) && beforeMap.get(file) !== afterMap.get(file),\n );\n const moved: ScanChanges[\"moved\"] = [];\n const remainingAdded = new Set(added);\n const remainingDeleted = new Set(deleted);\n for (const oldPath of deleted.sort(compareText)) {\n const hash = beforeMap.get(oldPath);\n const newPath = [...remainingAdded]\n .sort(compareText)\n .find((candidate) => afterMap.get(candidate) === hash);\n if (newPath) {\n moved.push({ from: oldPath, to: newPath });\n remainingAdded.delete(newPath);\n remainingDeleted.delete(oldPath);\n }\n }\n return {\n added: [...remainingAdded].sort(compareText),\n modified: modified.sort(compareText),\n deleted: [...remainingDeleted].sort(compareText),\n moved,\n };\n}\n\nasync function hashDiscoveredSources(\n files: DiscoveredSource[],\n concurrency: number,\n): Promise<Array<{ path: string; hash: string; lines: number }>> {\n return mapLimit(files, concurrency, async (file) => {\n const bytes = await fs.readFile(file.absolutePath);\n const content = bytes.toString(\"utf8\");\n return {\n path: file.relativePath,\n hash: hashText(bytes),\n lines: content.length === 0 ? 0 : content.split(/\\r\\n|\\r|\\n/).length,\n };\n });\n}\n\nasync function compareSemanticInputs(\n root: string,\n before: SemanticInputRecord[],\n concurrency: number,\n): Promise<string[]> {\n const realRoot = await fs.realpath(root);\n const toolchainRoot = await fs.realpath(path.dirname(ts.getDefaultLibFilePath({})));\n const current = await mapLimit(before, concurrency, async (input) => {\n let changed: boolean;\n switch (input.kind) {\n case \"file\":\n changed = (await hashSemanticFileInput(root, realRoot, input.path)) !== input.hash;\n break;\n case \"resolution-probe\":\n changed =\n (await semanticProbeState(\n input.scope === \"toolchain\" ? toolchainRoot : root,\n input.scope === \"toolchain\" ? toolchainRoot : realRoot,\n input.path,\n input.targetKind,\n )) !== input.exists;\n break;\n case \"directory-listing\":\n changed =\n (await hashSemanticDirectoryInput(\n input.scope === \"toolchain\" ? toolchainRoot : root,\n input.scope === \"toolchain\" ? toolchainRoot : realRoot,\n input.path,\n )) !== input.hash;\n break;\n case \"symlink\":\n changed =\n (await semanticSymlinkTarget(\n input.scope === \"toolchain\" ? toolchainRoot : root,\n input.scope === \"toolchain\" ? toolchainRoot : realRoot,\n input.path,\n )) !== input.target;\n break;\n case \"toolchain-file\":\n changed = (await hashToolchainFileInput(input.path)) !== input.hash;\n break;\n }\n return { path: input.path, changed };\n });\n return current\n .filter((input) => input.changed)\n .map((input) => input.path)\n .sort(compareText);\n}\n\nasync function hashSemanticFileInput(\n root: string,\n realRoot: string,\n relative: string,\n): Promise<string | null> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return null;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput)) return null;\n const stat = await fs.stat(realInput);\n if (!stat.isFile()) return null;\n return hashText(await fs.readFile(realInput));\n } catch {\n return null;\n }\n}\n\nasync function semanticProbeState(\n root: string,\n realRoot: string,\n relative: string,\n targetKind: \"file\" | \"directory\" | \"readable-file\",\n): Promise<boolean> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return false;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput)) return false;\n const stat = await fs.stat(realInput);\n if (targetKind === \"file\") return stat.isFile();\n if (targetKind === \"directory\") return stat.isDirectory();\n if (!stat.isFile()) return false;\n const handle = await fs.open(realInput, \"r\");\n await handle.close();\n return true;\n } catch {\n return false;\n }\n}\n\nasync function hashSemanticDirectoryInput(\n root: string,\n realRoot: string,\n relative: string,\n): Promise<string | null> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return null;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput) || !(await fs.stat(realInput)).isDirectory())\n return null;\n const candidates = ts.sys.getDirectories(absolute).sort(compareText);\n const permitted: string[] = [];\n for (const candidate of candidates) {\n try {\n const resolved = path.resolve(absolute, candidate);\n const realCandidate = await fs.realpath(resolved);\n if (isPathInside(realRoot, realCandidate)) permitted.push(candidate);\n } catch {\n // The bounded compiler host also excludes inaccessible entries.\n }\n }\n return semanticDirectoryListingHash(absolute, permitted);\n } catch {\n return null;\n }\n}\n\nasync function semanticSymlinkTarget(\n root: string,\n realRoot: string,\n relative: string,\n): Promise<string | null> {\n const absolute = path.resolve(root, relative);\n if (!isPathInside(root, absolute)) return null;\n try {\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(realRoot, realInput)) return \"<outside-root>\";\n return relativePosix(realRoot, realInput);\n } catch {\n return null;\n }\n}\n\nasync function hashToolchainFileInput(relative: string): Promise<string | null> {\n try {\n const libraryRoot = await fs.realpath(path.dirname(ts.getDefaultLibFilePath({})));\n const absolute = path.resolve(libraryRoot, relative);\n if (!isPathInside(libraryRoot, absolute)) return null;\n const realInput = await fs.realpath(absolute);\n if (!isPathInside(libraryRoot, realInput) || !(await fs.stat(realInput)).isFile()) return null;\n return hashText(await fs.readFile(realInput));\n } catch {\n return null;\n }\n}\n\nfunction invalidArtifactFreshness(\n root: string,\n outputDir: string,\n error: CodeMapError,\n): FreshnessResult {\n const reason = error.message.includes(\"manifest integrity hash\")\n ? \"The persisted manifest's analyzer, producer, configuration, semantic-input, or artifact metadata failed its integrity check.\"\n : `The persisted artifact set is incomplete, invalid, or incompatible (${error.code}).`;\n return {\n status: \"stale\",\n current: false,\n root,\n outputDir,\n reasons: [reason],\n changes: emptyChanges(),\n };\n}\n\nfunction emptyChanges(): ScanChanges {\n return { added: [], modified: [], deleted: [], moved: [] };\n}\n","import { existsSync, lstatSync, readFileSync, realpathSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport fg from \"fast-glob\";\nimport ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"./constants.js\";\nimport type {\n CodeMapConfig,\n CompilerUnitRecord,\n DiagnosticRecord,\n SemanticInputObservation,\n WorkspacePackage,\n} from \"./types.js\";\nimport type { DiscoveredSource } from \"./discovery.js\";\nimport {\n isPathInside,\n isSafeRelativePathPattern,\n normalizeStoredPath,\n relativePosix,\n} from \"./utils/path.js\";\nimport { configuredCompilerUnitId, generatedCompilerUnitId } from \"./ids.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nconst CONFIG_PATTERNS = [\"**/tsconfig.json\", \"**/jsconfig.json\", \"**/tsconfig.*.json\"];\nconst CONFIG_IGNORES = [\n \"**/node_modules/**\",\n \"**/.git/**\",\n \"**/.ai/**\",\n \"**/.next/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/out/**\",\n \"**/coverage/**\",\n];\nconst FALLBACK_UNIT_ID = generatedCompilerUnitId(\"fallback\");\n\nexport interface CompilerUnitPlan {\n record: CompilerUnitRecord;\n sourceFiles: string[];\n ownedFiles: string[];\n}\n\nexport interface CompilerUnitGraph {\n units: CompilerUnitPlan[];\n ownership: Map<string, string>;\n configInputs: string[];\n diagnostics: DiagnosticRecord[];\n primaryConfig?: string;\n}\n\ninterface ParsedConfigNode {\n absolutePath: string;\n relativePath: string;\n parsed: ts.ParsedCommandLine;\n source: ts.TsConfigSourceFile;\n sourceFiles: string[];\n sourceFileKeys: Set<string>;\n references: string[];\n extends: string[];\n pathAliases: Record<string, string[]>;\n hasOwnFileSelection: boolean;\n allowJs: boolean;\n valid: boolean;\n}\n\n/**\n * Build the bounded compiler configuration graph and assign every indexed source exactly once.\n * The returned plan contains normalized records only; compiler objects are intentionally omitted.\n */\nexport async function buildCompilerUnitGraph(\n root: string,\n config: CodeMapConfig,\n sources: readonly DiscoveredSource[],\n workspaces: readonly WorkspacePackage[],\n): Promise<CompilerUnitGraph> {\n const realRoot = realpathSync(root);\n const diagnostics: DiagnosticRecord[] = [];\n const fileSystem = new BoundedTypeScriptFileSystem(realRoot);\n const candidatePaths = await discoverConfigCandidates(realRoot, config, diagnostics);\n const parsedByPath = new Map<string, ParsedConfigNode>();\n const queue = [...candidatePaths];\n\n while (queue.length > 0) {\n const candidate = queue.shift();\n if (!candidate) continue;\n const logical = normalizeStoredPath(candidate);\n if (parsedByPath.has(logical)) continue;\n const absolute = path.resolve(realRoot, logical);\n const node = parseConfigNode(realRoot, absolute, fileSystem, diagnostics);\n if (!node) continue;\n parsedByPath.set(node.relativePath, node);\n for (const reference of node.references) {\n if (!parsedByPath.has(reference) && !queue.includes(reference)) queue.push(reference);\n }\n queue.sort(compareText);\n }\n\n const indexedKeys = new Set(sources.map((source) => canonicalPath(source.absolutePath)));\n const boundaryPaths = [\".\", ...workspaces.map((workspace) => workspace.path)].sort((a, b) =>\n compareText(a, b),\n );\n const seedPaths = new Set<string>();\n const configured = configuredTsconfigPath(realRoot, config.tsconfig, diagnostics);\n if (configured) seedPaths.add(configured);\n for (const conventional of [\"tsconfig.json\", \"jsconfig.json\"]) {\n if (parsedByPath.has(conventional)) seedPaths.add(conventional);\n }\n const extendedDependencies = new Set([...parsedByPath.values()].flatMap((node) => node.extends));\n const referenceTargets = new Set([...parsedByPath.values()].flatMap((node) => node.references));\n for (const node of parsedByPath.values()) {\n const directory = normalizeStoredPath(path.posix.dirname(node.relativePath));\n const atBoundary = boundaryPaths.includes(directory);\n const intersects = [...node.sourceFileKeys].some((file) => indexedKeys.has(file));\n const conventional = [\"tsconfig.json\", \"jsconfig.json\"].includes(\n path.posix.basename(node.relativePath),\n );\n const extendsOnlyBase =\n extendedDependencies.has(node.relativePath) &&\n !node.hasOwnFileSelection &&\n !conventional &&\n !referenceTargets.has(node.relativePath) &&\n configured !== node.relativePath;\n if (!extendsOnlyBase && (atBoundary || intersects)) seedPaths.add(node.relativePath);\n }\n\n // References from a retained solution/config node remain graph nodes even when they own no files.\n const retained = new Set<string>();\n const retainQueue = [...seedPaths].sort(compareText);\n while (retainQueue.length > 0) {\n const current = retainQueue.shift();\n if (!current || retained.has(current)) continue;\n const node = parsedByPath.get(current);\n if (!node) continue;\n retained.add(current);\n for (const reference of node.references) {\n if (!retained.has(reference)) retainQueue.push(reference);\n }\n retainQueue.sort(compareText);\n }\n\n const nodes = [...retained]\n .map((relative) => parsedByPath.get(relative))\n .filter((node): node is ParsedConfigNode => node !== undefined && node.valid)\n .sort((a, b) => compareText(a.relativePath, b.relativePath));\n const validNodePaths = new Set(nodes.map((node) => node.relativePath));\n const ownership = new Map<string, string>();\n const ownedByUnit = new Map<string, string[]>();\n const jsFallbackWarnings = new Set<string>();\n\n for (const source of [...sources].sort((a, b) => compareText(a.relativePath, b.relativePath))) {\n const sourceKey = canonicalPath(source.absolutePath);\n const selected = nodes.filter((node) => node.sourceFileKeys.has(sourceKey));\n const jsSource = isJavaScriptSourceFile(source.absolutePath);\n const eligible = jsSource ? selected.filter((node) => node.allowJs) : selected;\n const owner = chooseOwner(eligible, source.absolutePath, realRoot, boundaryPaths);\n if (jsSource && !owner && !jsFallbackWarnings.has(source.relativePath)) {\n jsFallbackWarnings.add(source.relativePath);\n const underDisallowingConfig = nodes.some(\n (node) =>\n !node.allowJs && isPathInside(path.dirname(node.absolutePath), source.absolutePath),\n );\n const underAllowingConfig = nodes.some(\n (node) =>\n node.allowJs && isPathInside(path.dirname(node.absolutePath), source.absolutePath),\n );\n const reason =\n selected.length > 0 || underDisallowingConfig\n ? \"the applicable configuration does not allow JavaScript\"\n : underAllowingConfig\n ? \"the nearby JavaScript-enabled configuration does not include the file\"\n : \"no eligible configuration includes the file\";\n diagnostics.push({\n ...graphDiagnostic(\n `A selected JavaScript source uses fallback compiler ownership because ${reason}.`,\n source.relativePath,\n ),\n severity: \"warning\",\n });\n }\n const ownerId = owner ? configuredCompilerUnitId(owner.relativePath) : FALLBACK_UNIT_ID;\n ownership.set(source.relativePath, ownerId);\n const owned = ownedByUnit.get(ownerId) ?? [];\n owned.push(source.absolutePath);\n ownedByUnit.set(ownerId, owned);\n }\n\n const units: CompilerUnitPlan[] = nodes.map((node) => {\n const rootPath = normalizeStoredPath(path.posix.dirname(node.relativePath));\n const id = configuredCompilerUnitId(node.relativePath);\n return {\n record: {\n id,\n kind: \"configured\",\n root: rootPath,\n config: node.relativePath,\n references: node.references.filter((reference) => validNodePaths.has(reference)),\n extends: node.extends,\n pathAliases: node.pathAliases,\n },\n sourceFiles: node.sourceFiles,\n ownedFiles: (ownedByUnit.get(id) ?? []).sort(compareText),\n };\n });\n\n units.push({\n record: {\n id: FALLBACK_UNIT_ID,\n kind: \"fallback\",\n root: \".\",\n references: [],\n extends: [],\n pathAliases: {},\n },\n sourceFiles: (ownedByUnit.get(FALLBACK_UNIT_ID) ?? []).sort(compareText),\n ownedFiles: (ownedByUnit.get(FALLBACK_UNIT_ID) ?? []).sort(compareText),\n });\n\n const configInputs = new Set<string>();\n for (const node of parsedByPath.values()) {\n configInputs.add(node.relativePath);\n for (const extended of node.extends) configInputs.add(extended);\n }\n\n const primaryConfig =\n configured && validNodePaths.has(configured)\n ? configured\n : [\"tsconfig.json\", \"jsconfig.json\"].find((candidate) => validNodePaths.has(candidate));\n return {\n units: units.sort((a, b) => compareText(a.record.id, b.record.id)),\n ownership,\n configInputs: [...configInputs].sort(compareText),\n diagnostics: normalizeGraphDiagnostics(diagnostics),\n ...(primaryConfig ? { primaryConfig } : {}),\n };\n}\n\nasync function discoverConfigCandidates(\n root: string,\n config: CodeMapConfig,\n diagnostics: DiagnosticRecord[],\n): Promise<string[]> {\n const matches = await fg(CONFIG_PATTERNS, {\n cwd: root,\n onlyFiles: true,\n unique: true,\n dot: false,\n followSymbolicLinks: false,\n ignore: [...CONFIG_IGNORES, ...config.exclude],\n });\n const candidates = new Set(matches.map(normalizeStoredPath));\n if (config.tsconfig) {\n const configured = configuredTsconfigPath(root, config.tsconfig, diagnostics);\n if (configured) candidates.add(configured);\n }\n return [...candidates]\n .filter((candidate) => safeRegularFile(root, path.resolve(root, candidate)))\n .sort(compareText);\n}\n\nfunction configuredTsconfigPath(\n root: string,\n configured: string | undefined,\n diagnostics: DiagnosticRecord[],\n): string | undefined {\n if (!configured) return undefined;\n const absolute = path.resolve(root, configured);\n if (!isPathInside(root, absolute) || !safeRegularFile(root, absolute)) {\n diagnostics.push(\n graphDiagnostic(\"The configured TypeScript project is unavailable or unsafe.\"),\n );\n return undefined;\n }\n return relativePosix(root, absolute);\n}\n\nfunction parseConfigNode(\n root: string,\n absolutePath: string,\n fileSystem: BoundedTypeScriptFileSystem,\n diagnostics: DiagnosticRecord[],\n): ParsedConfigNode | undefined {\n if (!safeRegularFile(root, absolutePath)) {\n diagnostics.push(graphDiagnostic(\"A TypeScript project reference was unavailable or unsafe.\"));\n return undefined;\n }\n const relativePath = relativePosix(root, absolutePath);\n let source: ts.TsConfigSourceFile;\n try {\n source = ts.readJsonConfigFile(absolutePath, fileSystem.readFile);\n } catch {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript configuration could not be read.\", relativePath),\n );\n return undefined;\n }\n const host = fileSystem.parseHost(path.dirname(absolutePath));\n let parsed: ts.ParsedCommandLine;\n try {\n parsed = ts.parseJsonSourceFileConfigFileContent(\n source,\n host,\n path.dirname(absolutePath),\n undefined,\n absolutePath,\n undefined,\n undefined,\n fileSystem.extendedConfigCache,\n );\n } catch {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript configuration could not be parsed.\", relativePath),\n );\n return undefined;\n }\n\n const optionSafety = sanitizeCompilerOptions(parsed.options, root, path.dirname(absolutePath));\n if (!optionSafety.valid) {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript configuration option escaped the selected root.\", relativePath),\n );\n }\n const parsedSourceFiles = parsed.fileNames\n .filter((fileName) => safeRegularFile(root, fileName))\n .map((fileName) => realpathSync(fileName))\n .filter((fileName, index, values) => values.indexOf(fileName) === index)\n .sort(compareText);\n const sourceFiles = parsedSourceFiles\n .filter((fileName) => {\n if (parsed.options.allowJs === true) return true;\n return !isJavaScriptSourceFile(fileName);\n })\n .sort(compareText);\n const references: string[] = [];\n const safeReferences: ts.ProjectReference[] = [];\n for (const reference of parsed.projectReferences ?? []) {\n const target = ts.resolveProjectReferencePath(reference);\n if (!safeRegularFile(root, target)) {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript project reference escaped the selected root.\", relativePath),\n );\n continue;\n }\n references.push(relativePosix(root, target));\n safeReferences.push(reference);\n }\n parsed.projectReferences = safeReferences.sort((a, b) =>\n compareText(ts.resolveProjectReferencePath(a), ts.resolveProjectReferencePath(b)),\n );\n\n const extended = (source.extendedSourceFiles ?? [])\n .filter((fileName) => safeRegularFile(root, fileName))\n .map((fileName) => relativePosix(root, realpathSync(fileName)))\n .filter((fileName, index, values) => values.indexOf(fileName) === index)\n .sort(compareText);\n if ((source.extendedSourceFiles ?? []).length !== extended.length) {\n diagnostics.push(\n graphDiagnostic(\"A TypeScript extends dependency escaped the selected root.\", relativePath),\n );\n }\n for (const error of parsed.errors) {\n if (error.category === ts.DiagnosticCategory.Error) {\n diagnostics.push(\n graphDiagnostic(\"TypeScript reported an invalid project configuration.\", relativePath),\n );\n break;\n }\n }\n const configText = fileSystem.readFile(absolutePath) ?? \"\";\n const rawConfig = ts.parseConfigFileTextToJson(absolutePath, configText).config as\n Record<string, unknown> | undefined;\n\n return {\n absolutePath,\n relativePath,\n parsed,\n source,\n sourceFiles,\n sourceFileKeys: new Set(parsedSourceFiles.map(canonicalPath)),\n references: [...new Set(references)].sort(compareText),\n extends: extended,\n pathAliases: normalizePathAliases(root, path.dirname(absolutePath), parsed.options),\n hasOwnFileSelection: Boolean(\n rawConfig &&\n (Object.prototype.hasOwnProperty.call(rawConfig, \"files\") ||\n Object.prototype.hasOwnProperty.call(rawConfig, \"include\")),\n ),\n allowJs: parsed.options.allowJs === true,\n valid: optionSafety.valid,\n };\n}\n\nfunction sanitizeCompilerOptions(\n options: ts.CompilerOptions,\n root: string,\n unitDirectory: string,\n): { valid: boolean } {\n let valid = true;\n const validatePath = (value: string | undefined): string | undefined => {\n if (!value) return value;\n const absolute = path.resolve(value);\n if (!isPathInside(root, absolute)) {\n valid = false;\n return undefined;\n }\n return absolute;\n };\n options.baseUrl = validatePath(options.baseUrl);\n options.rootDir = validatePath(options.rootDir);\n options.outDir = validatePath(options.outDir);\n options.declarationDir = validatePath(options.declarationDir);\n if (options.rootDirs) {\n const values = options.rootDirs\n .map((entry) => validatePath(entry))\n .filter((entry): entry is string => entry !== undefined);\n options.rootDirs = values;\n }\n if (options.typeRoots) {\n const values = options.typeRoots\n .map((entry) => validatePath(entry))\n .filter((entry): entry is string => entry !== undefined);\n options.typeRoots = values;\n } else {\n options.typeRoots = boundedTypeRoots(root, unitDirectory);\n }\n sanitizeCompilerPathAliases(options);\n options.configFilePath = options.configFilePath ?? path.join(unitDirectory, \"tsconfig.json\");\n return { valid };\n}\n\nexport function sanitizeCompilerPathAliases(options: ts.CompilerOptions): void {\n if (!options.paths) return;\n const sanitized: Record<string, string[]> = {};\n for (const [alias, targets] of Object.entries(options.paths).sort(([a], [b]) =>\n compareText(a, b),\n )) {\n if (!isSafeRelativePathPattern(alias)) continue;\n const safeTargets = targets.filter(isSafeRelativePathPattern);\n if (safeTargets.length > 0) sanitized[alias] = safeTargets;\n }\n options.paths = sanitized;\n}\n\nfunction boundedTypeRoots(root: string, start: string): string[] {\n const values: string[] = [];\n let current = path.resolve(start);\n while (isPathInside(root, current)) {\n values.push(path.join(current, \"node_modules\", \"@types\"));\n if (current === path.resolve(root)) break;\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return [...new Set(values)];\n}\n\nfunction normalizePathAliases(\n root: string,\n configDirectory: string,\n options: ts.CompilerOptions,\n): Record<string, string[]> {\n const base =\n options.baseUrl ??\n (options as ts.CompilerOptions & { pathsBasePath?: string }).pathsBasePath ??\n configDirectory;\n const output: Record<string, string[]> = {};\n const paths = (options.paths ?? {}) as Record<string, string[]>;\n for (const [alias, targets] of Object.entries(paths).sort(([a], [b]) => compareText(a, b))) {\n if (!isSafeRelativePathPattern(alias)) continue;\n const normalized: string[] = [];\n for (const target of targets) {\n if (!isSafeRelativePathPattern(target)) continue;\n const absolute = path.resolve(base, target);\n if (!isPathInside(root, absolute)) continue;\n normalized.push(relativePosix(root, absolute));\n }\n output[alias] = [...new Set(normalized)].sort(compareText);\n }\n return output;\n}\n\nfunction chooseOwner(\n eligible: ParsedConfigNode[],\n sourceFile: string,\n root: string,\n boundaries: string[],\n): ParsedConfigNode | undefined {\n return [...eligible].sort((a, b) => {\n const packageDepthA = deepestSharedBoundaryDepth(a.absolutePath, sourceFile, root, boundaries);\n const packageDepthB = deepestSharedBoundaryDepth(b.absolutePath, sourceFile, root, boundaries);\n if (packageDepthA !== packageDepthB) return packageDepthB - packageDepthA;\n const directoryDepthA = ancestorDepth(path.dirname(a.absolutePath), sourceFile, root);\n const directoryDepthB = ancestorDepth(path.dirname(b.absolutePath), sourceFile, root);\n if (directoryDepthA !== directoryDepthB) return directoryDepthB - directoryDepthA;\n return compareText(a.relativePath, b.relativePath);\n })[0];\n}\n\nfunction deepestSharedBoundaryDepth(\n configPath: string,\n sourcePath: string,\n root: string,\n boundaries: string[],\n): number {\n let depth = -1;\n for (const boundary of boundaries) {\n const absolute = path.resolve(root, boundary);\n if (isPathInside(absolute, configPath) && isPathInside(absolute, sourcePath)) {\n depth = Math.max(depth, pathDepth(relativePosix(root, absolute)));\n }\n }\n return depth;\n}\n\nfunction ancestorDepth(directory: string, sourcePath: string, root: string): number {\n return isPathInside(directory, sourcePath) ? pathDepth(relativePosix(root, directory)) : -1;\n}\n\nfunction pathDepth(value: string): number {\n return value === \".\" ? 0 : value.split(\"/\").length;\n}\n\nfunction isJavaScriptSourceFile(filePath: string): boolean {\n const extension = path.extname(filePath).toLowerCase();\n return (\n extension === \".js\" || extension === \".jsx\" || extension === \".mjs\" || extension === \".cjs\"\n );\n}\n\nfunction safeRegularFile(root: string, candidate: string): boolean {\n try {\n const absolute = path.resolve(candidate);\n if (!isPathInside(root, absolute)) return false;\n if (lstatSync(absolute).isSymbolicLink() || !statSync(absolute).isFile()) return false;\n return isPathInside(realpathSync(root), realpathSync(absolute));\n } catch {\n return false;\n }\n}\n\nfunction canonicalPath(fileName: string): string {\n try {\n const real = realpathSync(fileName);\n return ts.sys.useCaseSensitiveFileNames ? real : real.toLowerCase();\n } catch {\n const absolute = path.resolve(fileName);\n return ts.sys.useCaseSensitiveFileNames ? absolute : absolute.toLowerCase();\n }\n}\n\nfunction graphDiagnostic(message: string, file?: string): DiagnosticRecord {\n return {\n schemaVersion: SCHEMA_VERSION,\n code: \"compiler-config\",\n severity: \"warning\",\n message,\n ...(file ? { file } : {}),\n };\n}\n\nfunction normalizeGraphDiagnostics(values: DiagnosticRecord[]): DiagnosticRecord[] {\n const byKey = new Map<string, DiagnosticRecord>();\n for (const value of values) byKey.set(`${value.file ?? \"\"}\\u0000${value.message}`, value);\n return [...byKey.values()].sort((a, b) =>\n compareText(`${a.file ?? \"\"}\\u0000${a.message}`, `${b.file ?? \"\"}\\u0000${b.message}`),\n );\n}\n\n/** A synchronous, root-anchored host for TypeScript config parsing and Program construction. */\nexport class BoundedTypeScriptFileSystem {\n readonly extendedConfigCache = new Map<string, ts.ExtendedConfigCacheEntry>();\n private readonly root: string;\n private readonly typeScriptLib: string;\n private readonly observedInputs = new Map<string, SemanticInputObservation>();\n\n constructor(root: string) {\n this.root = realpathSync(root);\n this.typeScriptLib = realpathSync(path.dirname(ts.getDefaultLibFilePath({})));\n }\n\n readonly fileExists = (fileName: string): boolean => {\n const absolute = this.absolute(fileName);\n if (!this.isPermitted(absolute)) return false;\n try {\n const exists = statSync(absolute).isFile();\n this.recordProbe(absolute, \"file\", exists);\n return exists;\n } catch {\n this.recordProbe(absolute, \"file\", false);\n return false;\n }\n };\n\n readonly readFile = (fileName: string): string | undefined => {\n const absolute = this.absolute(fileName);\n if (!this.isPermitted(absolute)) return undefined;\n try {\n const contents = readFileSync(absolute);\n this.recordRead(absolute, contents);\n return contents.toString(\"utf8\");\n } catch {\n let exists = false;\n try {\n exists = statSync(absolute).isFile();\n } catch {\n // The file is absent or cannot be inspected.\n }\n this.recordProbe(absolute, \"file\", exists);\n this.recordProbe(absolute, \"readable-file\", false);\n return undefined;\n }\n };\n\n readonly directoryExists = (directory: string): boolean => {\n const absolute = this.absolute(directory);\n if (!this.isPermitted(absolute)) return false;\n try {\n const exists = statSync(absolute).isDirectory();\n this.recordProbe(absolute, \"directory\", exists);\n return exists;\n } catch {\n this.recordProbe(absolute, \"directory\", false);\n return false;\n }\n };\n\n readonly getDirectories = (directory: string): string[] => {\n const absolute = this.absolute(directory);\n if (!this.isPermitted(absolute)) return [];\n if (!this.directoryExists(absolute)) return [];\n const directories = ts.sys\n .getDirectories(absolute)\n .filter((entry) => this.isPermitted(path.resolve(absolute, entry)))\n .sort(compareText);\n this.recordDirectoryListing(absolute, directories);\n return directories;\n };\n\n readonly readDirectory: ts.ParseConfigHost[\"readDirectory\"] = (\n rootDir,\n extensions,\n excludes,\n includes,\n depth,\n ) => {\n const absolute = this.absolute(rootDir);\n if (!this.isPermitted(absolute)) return [];\n return ts.sys\n .readDirectory(absolute, extensions, excludes, includes, depth)\n .filter((entry) => this.isPermitted(path.resolve(absolute, entry)))\n .sort(compareText);\n };\n\n readonly realpath = (candidate: string): string => {\n const absolute = this.absolute(candidate);\n if (!this.isPermitted(absolute)) return absolute;\n try {\n const real = realpathSync(absolute);\n this.recordSymlink(absolute, real);\n return real;\n } catch {\n return absolute;\n }\n };\n\n parseHost(currentDirectory: string): ts.ParseConfigFileHost {\n return {\n useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,\n getCurrentDirectory: () => currentDirectory,\n fileExists: this.fileExists,\n readFile: this.readFile,\n readDirectory: this.readDirectory,\n directoryExists: this.directoryExists,\n getDirectories: this.getDirectories,\n realpath: this.realpath,\n onUnRecoverableConfigFileDiagnostic: () => undefined,\n };\n }\n\n semanticInputs(): SemanticInputObservation[] {\n return [...this.observedInputs.values()].sort((a, b) =>\n compareText(semanticObservationKey(a), semanticObservationKey(b)),\n );\n }\n\n private recordProbe(\n absolute: string,\n targetKind: \"file\" | \"directory\" | \"readable-file\",\n exists: boolean,\n ): void {\n const scoped = this.semanticScope(absolute);\n if (!scoped) return;\n const relative = relativePosix(scoped.root, absolute);\n const contentKey =\n targetKind === \"directory\"\n ? `directory-listing\\u0000${scoped.scope}\\u0000${relative}`\n : scoped.scope === \"toolchain\"\n ? `toolchain-file\\u0000${relative}`\n : `file\\u0000${relative}`;\n if (this.observedInputs.has(contentKey)) return;\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"resolution-probe\",\n scope: scoped.scope,\n targetKind,\n exists,\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n\n private recordRead(absolute: string, contents: Buffer): void {\n if (isPathInside(this.root, absolute)) {\n const relative = relativePosix(this.root, absolute);\n this.observedInputs.delete(`resolution-probe\\u0000project\\u0000file\\u0000${relative}`);\n this.observedInputs.delete(\n `resolution-probe\\u0000project\\u0000readable-file\\u0000${relative}`,\n );\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"file\",\n hash: hashText(contents),\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n return;\n }\n if (isPathInside(this.typeScriptLib, absolute)) {\n const relative = relativePosix(this.typeScriptLib, absolute);\n this.observedInputs.delete(`resolution-probe\\u0000toolchain\\u0000file\\u0000${relative}`);\n this.observedInputs.delete(\n `resolution-probe\\u0000toolchain\\u0000readable-file\\u0000${relative}`,\n );\n const observation: SemanticInputObservation = {\n // Preserve the lexical file TypeScript opened. Hashing only a resolved target would miss\n // a same-version standard-library symlink being repointed to different bytes.\n path: relative,\n kind: \"toolchain-file\",\n hash: hashText(contents),\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n }\n\n private recordDirectoryListing(absolute: string, entries: string[]): void {\n const scoped = this.semanticScope(absolute);\n if (!scoped) return;\n const relative = relativePosix(scoped.root, absolute);\n this.observedInputs.delete(\n `resolution-probe\\u0000${scoped.scope}\\u0000directory\\u0000${relative}`,\n );\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"directory-listing\",\n scope: scoped.scope,\n hash: semanticDirectoryListingHash(absolute, entries),\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n\n private recordSymlink(absolute: string, real: string): void {\n const scoped = this.semanticScope(absolute);\n if (!scoped) return;\n const relative = relativePosix(scoped.root, absolute);\n const target = isPathInside(scoped.root, real)\n ? relativePosix(scoped.root, real)\n : \"<outside-root>\";\n if (relative === target) return;\n const observation: SemanticInputObservation = {\n path: relative,\n kind: \"symlink\",\n scope: scoped.scope,\n target,\n };\n this.observedInputs.set(semanticObservationKey(observation), observation);\n }\n\n private semanticScope(\n absolute: string,\n ): { scope: \"project\" | \"toolchain\"; root: string } | undefined {\n if (isPathInside(this.root, absolute)) return { scope: \"project\", root: this.root };\n if (isPathInside(this.typeScriptLib, absolute)) {\n return { scope: \"toolchain\", root: this.typeScriptLib };\n }\n return undefined;\n }\n\n private isPermitted(candidate: string): boolean {\n const absolute = this.absolute(candidate);\n const lexicalInRoot = isPathInside(this.root, absolute);\n const lexicalInToolchain = isPathInside(this.typeScriptLib, absolute);\n const lexicalAllowed = lexicalInRoot || lexicalInToolchain;\n if (!lexicalAllowed) return false;\n if (!existsSync(absolute)) return true;\n try {\n const real = realpathSync(absolute);\n this.recordSymlink(absolute, real);\n return (\n (lexicalInRoot && isPathInside(this.root, real)) ||\n (lexicalInToolchain && isPathInside(this.typeScriptLib, real))\n );\n } catch {\n return false;\n }\n }\n\n private absolute(candidate: string): string {\n return path.isAbsolute(candidate)\n ? path.resolve(candidate)\n : path.resolve(this.root, candidate);\n }\n}\n\nexport function semanticDirectoryListingHash(directory: string, entries: string[]): string {\n const normalized = entries\n .map((entry) => normalizeStoredPath(path.relative(directory, path.resolve(directory, entry))))\n .sort(compareText);\n return hashText(Buffer.from(normalized.join(\"\\u0000\"), \"utf8\"));\n}\n\nfunction semanticObservationKey(observation: SemanticInputObservation): string {\n return observation.kind === \"resolution-probe\"\n ? `${observation.kind}\\u0000${observation.scope ?? \"project\"}\\u0000${observation.targetKind}\\u0000${observation.path}`\n : observation.kind === \"directory-listing\" || observation.kind === \"symlink\"\n ? `${observation.kind}\\u0000${observation.scope ?? \"project\"}\\u0000${observation.path}`\n : `${observation.kind}\\u0000${observation.path}`;\n}\n\nexport function fallbackCompilerOptions(root: string): ts.CompilerOptions {\n return {\n target: ts.ScriptTarget.ES2022,\n module: ts.ModuleKind.NodeNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n allowJs: true,\n checkJs: false,\n noEmit: true,\n skipLibCheck: true,\n jsx: ts.JsxEmit.Preserve,\n experimentalDecorators: true,\n configFilePath: path.join(root, \"tsconfig.fallback.json\"),\n typeRoots: boundedTypeRoots(root, root),\n };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport fg from \"fast-glob\";\n\nimport type { CodeMapConfig, Framework, Language, WorkspacePackage } from \"./types.js\";\nimport { packageEntryPoints } from \"./package-metadata.js\";\nimport {\n isPathInside,\n normalizeStoredPath,\n readFileInsideRoot,\n relativePosix,\n} from \"./utils/path.js\";\nimport { compareText, mapLimit } from \"./utils/stable.js\";\nimport { createWorkspaceDiscovery } from \"./workspaces.js\";\nimport { createGitIgnoreAdapter } from \"./ignore.js\";\n\nconst SOURCE_EXTENSION = /\\.(?:[cm]?[jt]sx?)$/i;\n\nexport interface PackageMetadata {\n name: string;\n packageManager?: string;\n dependencies: Set<string>;\n frameworks: Framework[];\n entryPoints: string[];\n workspaces: WorkspacePackage[];\n raw: Record<string, unknown>;\n}\n\nexport interface DiscoveredSource {\n absolutePath: string;\n relativePath: string;\n language: Language;\n}\n\nexport async function readPackageMetadata(root: string): Promise<PackageMetadata> {\n const raw = JSON.parse(\n (await readFileInsideRoot(root, path.join(root, \"package.json\"))).toString(\"utf8\"),\n ) as Record<string, unknown>;\n const workspaceDiscovery = await createWorkspaceDiscovery().discover(root);\n const dependencies = new Set<string>();\n const manifests = [raw];\n for (const workspace of workspaceDiscovery.packages) {\n try {\n manifests.push(\n JSON.parse(\n (\n await readFileInsideRoot(root, path.join(root, workspace.path, \"package.json\"))\n ).toString(\"utf8\"),\n ) as Record<string, unknown>,\n );\n } catch {\n // Workspace discovery already degrades safely; malformed child metadata is non-fatal here.\n }\n }\n for (const manifest of manifests) {\n for (const field of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]) {\n const values = manifest[field];\n if (values && typeof values === \"object\") {\n for (const name of Object.keys(values)) dependencies.add(name);\n }\n }\n }\n\n const frameworks: Framework[] = [\"typescript\", \"node\"];\n if (dependencies.has(\"react\")) frameworks.push(\"react\");\n if (dependencies.has(\"next\")) frameworks.push(\"nextjs\", \"react\");\n if (dependencies.has(\"@nestjs/core\") || dependencies.has(\"@nestjs/common\"))\n frameworks.push(\"nestjs\");\n\n return {\n name: typeof raw.name === \"string\" ? raw.name : \"unnamed-project\",\n ...(typeof raw.packageManager === \"string\" ? { packageManager: raw.packageManager } : {}),\n dependencies,\n frameworks: [...new Set(frameworks)].sort(),\n entryPoints: packageEntryPoints(raw),\n workspaces: workspaceDiscovery.packages,\n raw,\n };\n}\n\nexport async function discoverSourceFiles(\n root: string,\n config: CodeMapConfig,\n): Promise<DiscoveredSource[]> {\n const workspaceDiscovery = await createWorkspaceDiscovery().discover(root);\n const include = [\n ...config.include,\n ...workspaceDiscovery.packages.flatMap((workspace) =>\n config.include.map((pattern) => prefixGlob(workspace.path, pattern)),\n ),\n ];\n const matches = await fg(include, {\n cwd: root,\n onlyFiles: true,\n unique: true,\n dot: false,\n followSymbolicLinks: false,\n ignore: config.exclude,\n });\n\n const permitted = new Set(await createGitIgnoreAdapter().filter(root, matches));\n const candidates = matches\n .filter((relative) => permitted.has(normalizeStoredPath(relative)))\n .filter((relative) => SOURCE_EXTENSION.test(relative))\n .map((relative) => ({\n absolutePath: path.resolve(root, relative),\n relativePath: normalizeStoredPath(relative),\n language: languageFromPath(relative),\n }))\n .sort((a, b) => compareText(a.relativePath, b.relativePath));\n\n const safe = await mapLimit(candidates, config.concurrency ?? 16, async (candidate) => {\n const stat = await fs.lstat(candidate.absolutePath);\n if (stat.isSymbolicLink() || !stat.isFile()) return undefined;\n const [realRoot, real] = await Promise.all([\n fs.realpath(root),\n fs.realpath(candidate.absolutePath),\n ]);\n return isPathInside(realRoot, real) ? candidate : undefined;\n });\n return safe.filter((candidate): candidate is DiscoveredSource => candidate !== undefined);\n}\n\nfunction prefixGlob(directory: string, pattern: string): string {\n const normalized = normalizeStoredPath(pattern).replace(/^\\/+/, \"\");\n return `${normalizeStoredPath(directory)}/${normalized}`;\n}\n\nexport async function locateTsconfig(\n root: string,\n configured?: string,\n): Promise<string | undefined> {\n const candidates = configured ? [configured] : [\"tsconfig.json\", \"jsconfig.json\"];\n for (const candidate of candidates) {\n const absolute = path.resolve(root, candidate);\n if (!isPathInside(root, absolute)) continue;\n try {\n if ((await fs.stat(absolute)).isFile()) return relativePosix(root, absolute);\n } catch {\n // Missing candidates are expected during discovery.\n }\n }\n return undefined;\n}\n\nfunction languageFromPath(filePath: string): Language {\n const extension = path.extname(filePath).slice(1).toLowerCase();\n return extension as Language;\n}\n","import { normalizeStoredPath } from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport function packageEntryPoints(raw: Record<string, unknown>): string[] {\n const entries = new Set<string>();\n for (const field of [\"main\", \"module\", \"types\", \"typings\", \"bin\"]) {\n const value = raw[field];\n if (typeof value === \"string\") addEntry(value, entries);\n else if (value && typeof value === \"object\") {\n for (const item of Object.values(value)) {\n if (typeof item === \"string\") addEntry(item, entries);\n }\n }\n }\n collectExportPaths(raw.exports, entries);\n return [...entries].sort(compareText);\n}\n\nfunction collectExportPaths(value: unknown, output: Set<string>): void {\n if (typeof value === \"string\" && !value.includes(\"*\")) {\n addEntry(value, output);\n } else if (value && typeof value === \"object\") {\n for (const nested of Object.values(value)) collectExportPaths(nested, output);\n }\n}\n\nfunction addEntry(value: string, output: Set<string>): void {\n const normalized = normalizeStoredPath(value);\n if (isSafeStoredPath(normalized) && normalized !== \".\") output.add(normalized);\n}\n\nfunction isSafeStoredPath(value: string): boolean {\n return (\n value.length > 0 &&\n !value.includes(\"\\\\\") &&\n !value.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(value) &&\n !value.split(\"/\").includes(\"..\")\n );\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { getPackages } from \"@manypkg/get-packages\";\n\nimport { packageEntryPoints } from \"./package-metadata.js\";\nimport type { WorkspaceDiscovery, WorkspaceDiscoveryResult, WorkspacePackage } from \"./types.js\";\nimport {\n isPathInside,\n isSafeRegularFile,\n normalizeStoredPath,\n readFileInsideRoot,\n} from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport class ManypkgWorkspaceDiscovery implements WorkspaceDiscovery {\n readonly name = \"manypkg\";\n\n async discover(root: string): Promise<WorkspaceDiscoveryResult> {\n try {\n if (!(await isWorkspaceRoot(root))) {\n return { tool: \"single-package\", packages: [] };\n }\n const discovered = await getPackages(root);\n const [selectedRoot, discoveredRoot] = await Promise.all([\n fs.realpath(root),\n fs.realpath(discovered.rootDir),\n ]);\n // getPackages searches ancestors. A scan rooted at a child package must not silently\n // expand to its parent workspace and expose sibling metadata.\n if (selectedRoot !== discoveredRoot) return { tool: \"single-package\", packages: [] };\n\n const packages: WorkspacePackage[] = [];\n for (const workspace of discovered.packages) {\n const realDirectory = await fs.realpath(workspace.dir);\n if (realDirectory === selectedRoot || !isPathInside(selectedRoot, realDirectory)) continue;\n const manifestPath = path.join(realDirectory, \"package.json\");\n if (!(await isSafeRegularFile(selectedRoot, manifestPath))) continue;\n const manifest = JSON.parse(\n (await readFileInsideRoot(selectedRoot, manifestPath)).toString(\"utf8\"),\n ) as Record<string, unknown>;\n packages.push({\n name: typeof manifest.name === \"string\" ? manifest.name : path.basename(realDirectory),\n path: normalizeStoredPath(path.relative(selectedRoot, realDirectory)),\n entryPoints: packageEntryPoints(manifest),\n });\n }\n packages.sort((a, b) => compareText(a.path, b.path));\n return { tool: discovered.tool.type, packages };\n } catch {\n // A malformed or unsupported workspace manifest must not prevent single-package scanning.\n return { tool: \"single-package\", packages: [] };\n }\n }\n}\n\nexport function createWorkspaceDiscovery(): WorkspaceDiscovery {\n return new ManypkgWorkspaceDiscovery();\n}\n\nasync function isWorkspaceRoot(root: string): Promise<boolean> {\n for (const marker of [\"pnpm-workspace.yaml\", \"pnpm-workspace.yml\", \"lerna.json\", \"rush.json\"]) {\n if (await isSafeRegularFile(root, path.join(root, marker))) return true;\n }\n try {\n const packageJson = JSON.parse(\n (await readFileInsideRoot(root, path.join(root, \"package.json\"))).toString(\"utf8\"),\n ) as { workspaces?: unknown };\n return (\n Array.isArray(packageJson.workspaces) ||\n Boolean(\n packageJson.workspaces &&\n typeof packageJson.workspaces === \"object\" &&\n \"packages\" in packageJson.workspaces,\n )\n );\n } catch {\n return false;\n }\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport fg from \"fast-glob\";\nimport createIgnore, { type Ignore } from \"ignore\";\n\nimport type { IgnoreAdapter } from \"./types.js\";\nimport { isPathInside, normalizeStoredPath } from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\ninterface IgnoreRuleSet {\n directory: string;\n matcher: Ignore;\n}\n\nexport class GitIgnoreAdapter implements IgnoreAdapter {\n readonly name = \"ignore\";\n\n async filter(root: string, paths: readonly string[]): Promise<string[]> {\n const rules = await loadIgnoreRules(root);\n return paths\n .map(normalizeStoredPath)\n .filter(isSafeRelativePath)\n .filter((candidate) => !isIgnored(candidate, rules))\n .sort(compareText);\n }\n}\n\nexport function createGitIgnoreAdapter(): IgnoreAdapter {\n return new GitIgnoreAdapter();\n}\n\nasync function loadIgnoreRules(root: string): Promise<IgnoreRuleSet[]> {\n const ignoreFiles = await fg([\".gitignore\", \"**/.gitignore\"], {\n cwd: root,\n onlyFiles: true,\n unique: true,\n dot: true,\n followSymbolicLinks: false,\n ignore: [\"**/.git/**\", \"**/node_modules/**\"],\n });\n const rules: IgnoreRuleSet[] = [];\n for (const relative of ignoreFiles.sort(compareIgnoreFiles)) {\n const normalizedRelative = normalizeStoredPath(relative);\n const directory = normalizeStoredPath(path.posix.dirname(normalizedRelative));\n if (directory !== \".\" && isIgnoredDirectory(directory, rules)) continue;\n const absolute = path.resolve(root, relative);\n const stat = await fs.lstat(absolute);\n if (stat.isSymbolicLink() || !stat.isFile()) continue;\n const real = await fs.realpath(absolute);\n if (!isPathInside(root, real)) continue;\n rules.push({\n directory,\n matcher: createIgnore().add(await fs.readFile(real, \"utf8\")),\n });\n }\n return rules;\n}\n\nfunction isIgnoredDirectory(directory: string, rules: IgnoreRuleSet[]): boolean {\n let ignored = false;\n for (const rule of rules) {\n const relative = relativeToRule(`${directory}/`, rule.directory);\n if (!relative) continue;\n const result = rule.matcher.test(relative);\n if (result.ignored) ignored = true;\n else if (result.unignored) ignored = false;\n }\n return ignored;\n}\n\nfunction isIgnored(candidate: string, rules: IgnoreRuleSet[]): boolean {\n let ignored = false;\n for (const rule of rules) {\n const relative = relativeToRule(candidate, rule.directory);\n if (!relative) continue;\n const result = rule.matcher.test(relative);\n if (result.ignored) ignored = true;\n else if (result.unignored) ignored = false;\n }\n return ignored;\n}\n\nfunction relativeToRule(candidate: string, directory: string): string | undefined {\n if (directory === \".\") return candidate;\n const prefix = `${directory}/`;\n return candidate.startsWith(prefix) ? candidate.slice(prefix.length) : undefined;\n}\n\nfunction compareIgnoreFiles(a: string, b: string): number {\n const depth = (value: string) => normalizeStoredPath(value).split(\"/\").length;\n return depth(a) - depth(b) || compareText(a, b);\n}\n\nfunction isSafeRelativePath(value: string): boolean {\n return (\n value.length > 0 &&\n value !== \".\" &&\n !value.includes(\"\\\\\") &&\n !value.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(value) &&\n !value.split(\"/\").includes(\"..\")\n );\n}\n","import path from \"node:path\";\n\nimport ts from \"typescript\";\n\nimport { SCHEMA_VERSION } from \"./constants.js\";\nimport {\n BoundedTypeScriptFileSystem,\n fallbackCompilerOptions,\n sanitizeCompilerPathAliases,\n} from \"./compiler-units.js\";\nimport type {\n DiagnosticRecord,\n SemanticResolution,\n SemanticResolveInput,\n SemanticResolver,\n} from \"./types.js\";\nimport {\n isPathInside,\n isSafeRelativePathPattern,\n normalizeStoredPath,\n relativePosix,\n redactAbsolutePathsInText,\n} from \"./utils/path.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nexport const TYPESCRIPT_SEMANTIC_VERSION = `compiler-units-v4+typescript-${ts.version}`;\n\n/** TypeScript remains authoritative for all TypeScript/JavaScript semantic facts. */\nexport class TypeScriptSemanticResolver implements SemanticResolver {\n readonly name = \"typescript-program\";\n readonly version = TYPESCRIPT_SEMANTIC_VERSION;\n\n constructor(private readonly jsDocParsingMode = ts.JSDocParsingMode.ParseAll) {}\n\n resolve(input: SemanticResolveInput): SemanticResolution {\n const compiler = loadCompilerConfiguration(input.root, input.tsconfig);\n const currentDirectory = input.tsconfig\n ? path.dirname(path.resolve(input.root, input.tsconfig))\n : input.root;\n const fileSystem = compiler.fileSystem;\n const host = createBoundedCompilerHost(\n input.root,\n currentDirectory,\n compiler.options,\n fileSystem,\n compiler.parsedCommands,\n );\n // Built-in scans need type evidence; public/custom resolvers retain full JSDoc by default.\n host.jsDocParsingMode = this.jsDocParsingMode;\n const cache = ts.createModuleResolutionCache(\n currentDirectory,\n (fileName) => host.getCanonicalFileName(fileName),\n compiler.options,\n );\n const resolveProjectReferenceModule = createProjectReferenceModuleResolver(\n input.root,\n compiler.projectReferences ?? [],\n fileSystem,\n compiler.parsedCommands,\n );\n const resolveModule = (\n moduleName: string,\n containingFile: string,\n ): ts.ResolvedModuleFull | undefined => {\n const normal = ts.resolveModuleName(\n moduleName,\n containingFile,\n compiler.options,\n host,\n cache,\n ).resolvedModule;\n return resolveProjectReferenceModule(moduleName) ?? normal;\n };\n host.resolveModuleNameLiterals = (moduleLiterals, containingFile) =>\n moduleLiterals.map((literal) => {\n const resolvedModule = resolveModule(literal.text, containingFile);\n return { resolvedModule };\n });\n const rootNames = [...new Set(input.sourceFiles.map((file) => path.resolve(file)))].sort(\n compareText,\n );\n const program = ts.createProgram({\n rootNames,\n options: compiler.options,\n ...(compiler.projectReferences?.length\n ? { projectReferences: compiler.projectReferences }\n : {}),\n host,\n // Reference edges are parsed and fingerprinted by the compiler-unit graph. A read-only\n // scanner resolves their source imports directly so correctness never depends on prebuilt\n // declaration outputs being present beside a referenced project.\n configFileParsingDiagnostics: compiler.rawDiagnostics,\n });\n return {\n program,\n checker: program.getTypeChecker(),\n pathAliases: compiler.pathAliases,\n diagnostics: compiler.diagnostics,\n semanticInputs: () => fileSystem.semanticInputs(),\n resolveModule(moduleName, containingFile) {\n const resolved = resolveModule(moduleName, containingFile);\n return resolved\n ? {\n resolvedFileName: resolved.resolvedFileName,\n isExternalLibraryImport: Boolean(resolved.isExternalLibraryImport),\n }\n : undefined;\n },\n };\n }\n}\n\ninterface ReferencedPackage {\n name: string;\n root: string;\n manifest: Record<string, unknown>;\n parsed: ts.ParsedCommandLine;\n}\n\n/**\n * TypeScript normally resolves a referenced package through its emitted declaration entrypoint.\n * A scanner cannot require users to build first, so map a missing referenced-package output back\n * to a source owned by that referenced project. This is deliberately limited to direct, in-root\n * references and static package metadata.\n */\nfunction createProjectReferenceModuleResolver(\n root: string,\n references: readonly ts.ProjectReference[],\n fileSystem: BoundedTypeScriptFileSystem,\n parsedCommands: Map<string, ts.ParsedCommandLine>,\n): (moduleName: string) => ts.ResolvedModuleFull | undefined {\n const packages: ReferencedPackage[] = [];\n for (const reference of references) {\n const configPath = ts.resolveProjectReferencePath(reference);\n if (!isPathInside(root, configPath)) continue;\n const parsed = parseCommand(root, configPath, fileSystem, parsedCommands);\n if (!parsed) continue;\n const packageRoot = path.dirname(configPath);\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n const raw = fileSystem.readFile(packageJsonPath);\n if (!raw) continue;\n try {\n const manifest = JSON.parse(raw) as Record<string, unknown>;\n if (typeof manifest.name !== \"string\" || manifest.name.length === 0) continue;\n packages.push({ name: manifest.name, root: packageRoot, manifest, parsed });\n } catch {\n // Invalid package metadata remains a normal unresolved import.\n }\n }\n packages.sort((a, b) => b.name.length - a.name.length || compareText(a.name, b.name));\n\n return (moduleName) => {\n const referenced = packages.find(\n (candidate) => moduleName === candidate.name || moduleName.startsWith(`${candidate.name}/`),\n );\n if (!referenced) return undefined;\n const subpath =\n moduleName === referenced.name ? \"\" : moduleName.slice(referenced.name.length + 1);\n const source = referencedPackageSource(referenced, subpath, fileSystem);\n if (!source) return undefined;\n return {\n resolvedFileName: source,\n extension: moduleExtension(source),\n isExternalLibraryImport: false,\n };\n };\n}\n\nfunction referencedPackageSource(\n referenced: ReferencedPackage,\n subpath: string,\n fileSystem: BoundedTypeScriptFileSystem,\n): string | undefined {\n const { parsed, root: packageRoot, manifest } = referenced;\n // Composite project references default rootDir to the configuration directory. Assuming a\n // conventional src/ directory breaks valid root-level packages and declaration redirects.\n const rootDir = parsed.options.rootDir ?? packageRoot;\n if (!isPathInside(packageRoot, rootDir)) return undefined;\n const owned = new Set(parsed.fileNames.map((fileName) => path.resolve(fileName)));\n const requestedTargets = packageEntryTargets(manifest, subpath);\n const bases: string[] = [];\n\n for (const target of requestedTargets) {\n const absoluteTarget = path.resolve(packageRoot, target);\n if (!isPathInside(packageRoot, absoluteTarget)) continue;\n const outDir = parsed.options.outDir;\n if (outDir && isPathInside(outDir, absoluteTarget)) {\n bases.push(path.resolve(rootDir, path.relative(outDir, absoluteTarget)));\n }\n bases.push(absoluteTarget);\n }\n bases.push(path.resolve(rootDir, subpath || \"index\"));\n\n for (const base of bases) {\n for (const candidate of sourceModuleCandidates(base)) {\n const absolute = path.resolve(candidate);\n if (\n isPathInside(packageRoot, absolute) &&\n owned.has(absolute) &&\n fileSystem.fileExists(absolute)\n ) {\n return fileSystem.realpath(absolute);\n }\n }\n }\n\n const expectedStem = normalizeModuleStem(subpath || \"index\");\n const matching = [...owned]\n .filter((fileName) => isPathInside(rootDir, fileName))\n .filter((fileName) => {\n const relative = normalizeModuleStem(relativePosix(rootDir, fileName));\n return relative === expectedStem || relative === `${expectedStem}/index`;\n })\n .sort(compareText);\n return matching[0];\n}\n\nfunction packageEntryTargets(manifest: Record<string, unknown>, subpath: string): string[] {\n const output: string[] = [];\n const exportKey = subpath ? `./${subpath}` : \".\";\n const exportsValue = manifest.exports;\n if (exportsValue && typeof exportsValue === \"object\" && !Array.isArray(exportsValue)) {\n const exportsRecord = exportsValue as Record<string, unknown>;\n const keyed = exportsRecord[exportKey];\n collectStaticPackageTargets(\n keyed ?? (!subpath && !(\".\" in exportsRecord) ? exportsValue : undefined),\n output,\n );\n } else if (!subpath) {\n collectStaticPackageTargets(exportsValue, output);\n }\n if (!subpath) {\n for (const field of [\"types\", \"typings\", \"source\", \"module\", \"main\"] as const) {\n const value = manifest[field];\n if (typeof value === \"string\") output.push(value);\n }\n }\n return [...new Set(output)];\n}\n\nfunction collectStaticPackageTargets(value: unknown, output: string[]): void {\n if (typeof value === \"string\") {\n output.push(value);\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) collectStaticPackageTargets(item, output);\n return;\n }\n if (!value || typeof value !== \"object\") return;\n const record = value as Record<string, unknown>;\n for (const key of [\"types\", \"import\", \"default\", \"require\", \"node\"]) {\n if (key in record) collectStaticPackageTargets(record[key], output);\n }\n}\n\nfunction sourceModuleCandidates(value: string): string[] {\n const stem = value\n .replace(/\\.d\\.(?:ts|mts|cts)$/i, \"\")\n .replace(/\\.(?:tsx?|mts|cts|jsx?|mjs|cjs)$/i, \"\");\n const extensions = [\".ts\", \".tsx\", \".mts\", \".cts\", \".js\", \".jsx\", \".mjs\", \".cjs\"];\n return [\n value,\n ...extensions.map((extension) => `${stem}${extension}`),\n ...extensions.map((extension) => path.join(stem, `index${extension}`)),\n ];\n}\n\nfunction normalizeModuleStem(value: string): string {\n return normalizeStoredPath(value)\n .replace(/\\.d\\.(?:ts|mts|cts)$/i, \"\")\n .replace(/\\.(?:tsx?|mts|cts|jsx?|mjs|cjs)$/i, \"\");\n}\n\nfunction moduleExtension(fileName: string): ts.Extension {\n const lower = fileName.toLowerCase();\n if (lower.endsWith(\".tsx\")) return ts.Extension.Tsx;\n if (lower.endsWith(\".mts\")) return ts.Extension.Mts;\n if (lower.endsWith(\".cts\")) return ts.Extension.Cts;\n if (lower.endsWith(\".jsx\")) return ts.Extension.Jsx;\n if (lower.endsWith(\".mjs\")) return ts.Extension.Mjs;\n if (lower.endsWith(\".cjs\")) return ts.Extension.Cjs;\n if (lower.endsWith(\".js\")) return ts.Extension.Js;\n return ts.Extension.Ts;\n}\n\nexport function createTypeScriptSemanticResolver(): SemanticResolver {\n return new TypeScriptSemanticResolver();\n}\n\nexport function createBoundedModuleResolver(\n root: string,\n currentDirectory: string,\n options: ts.CompilerOptions,\n): NonNullable<SemanticResolution[\"resolveModule\"]> {\n const fileSystem = new BoundedTypeScriptFileSystem(root);\n const cache = ts.createModuleResolutionCache(\n currentDirectory,\n (fileName) => (ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase()),\n options,\n );\n const host: ts.ModuleResolutionHost = {\n fileExists: fileSystem.fileExists,\n readFile: fileSystem.readFile,\n directoryExists: fileSystem.directoryExists,\n getDirectories: fileSystem.getDirectories,\n realpath: fileSystem.realpath,\n getCurrentDirectory: () => currentDirectory,\n useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,\n };\n return (moduleName, containingFile) => {\n const resolved = ts.resolveModuleName(\n moduleName,\n containingFile,\n options,\n host,\n cache,\n ).resolvedModule;\n return resolved\n ? {\n resolvedFileName: resolved.resolvedFileName,\n isExternalLibraryImport: Boolean(resolved.isExternalLibraryImport),\n }\n : undefined;\n };\n}\n\ninterface CompilerConfiguration {\n options: ts.CompilerOptions;\n projectReferences?: readonly ts.ProjectReference[];\n pathAliases: Record<string, string[]>;\n diagnostics: DiagnosticRecord[];\n rawDiagnostics: readonly ts.Diagnostic[];\n fileSystem: BoundedTypeScriptFileSystem;\n parsedCommands: Map<string, ts.ParsedCommandLine>;\n}\n\nfunction loadCompilerConfiguration(root: string, tsconfig?: string): CompilerConfiguration {\n const fileSystem = new BoundedTypeScriptFileSystem(root);\n if (!tsconfig) {\n return {\n options: fallbackCompilerOptions(root),\n pathAliases: {},\n diagnostics: [],\n rawDiagnostics: [],\n fileSystem,\n parsedCommands: new Map(),\n };\n }\n\n const absolute = path.resolve(root, tsconfig);\n if (!isPathInside(root, absolute) || !fileSystem.fileExists(absolute)) {\n const diagnostic: DiagnosticRecord = {\n schemaVersion: SCHEMA_VERSION,\n code: \"compiler-config\",\n severity: \"warning\",\n message:\n \"The owning TypeScript configuration was unavailable or unsafe; fallback options were used.\",\n ...(isPathInside(root, absolute) ? { file: relativePosix(root, absolute) } : {}),\n };\n return {\n options: fallbackCompilerOptions(root),\n pathAliases: {},\n diagnostics: [diagnostic],\n rawDiagnostics: [],\n fileSystem,\n parsedCommands: new Map(),\n };\n }\n\n const parsedCommands = new Map<string, ts.ParsedCommandLine>();\n const parsed = parseCommand(root, absolute, fileSystem, parsedCommands);\n if (!parsed) {\n return {\n options: fallbackCompilerOptions(root),\n pathAliases: {},\n diagnostics: [\n {\n schemaVersion: SCHEMA_VERSION,\n code: \"compiler-config\",\n severity: \"warning\",\n message:\n \"The owning TypeScript configuration could not be parsed; fallback options were used.\",\n file: relativePosix(root, absolute),\n },\n ],\n rawDiagnostics: [],\n fileSystem,\n parsedCommands,\n };\n }\n const projectReferences = (parsed.projectReferences ?? []).filter((reference) => {\n const target = ts.resolveProjectReferencePath(reference);\n return isPathInside(root, target) && fileSystem.fileExists(target);\n });\n const options = parsed.options;\n anchorCompilerOptions(root, path.dirname(absolute), options);\n return {\n options,\n ...(projectReferences.length > 0 ? { projectReferences } : {}),\n pathAliases: pathAliases(root, path.dirname(absolute), options),\n diagnostics: parsed.errors.map((diagnostic) => compilerDiagnostic(diagnostic, root)),\n rawDiagnostics: parsed.errors,\n fileSystem,\n parsedCommands,\n };\n}\n\nfunction parseCommand(\n root: string,\n configPath: string,\n fileSystem: BoundedTypeScriptFileSystem,\n cache: Map<string, ts.ParsedCommandLine>,\n): ts.ParsedCommandLine | undefined {\n const absolute = path.resolve(configPath);\n const cached = cache.get(absolute);\n if (cached) return cached;\n if (!isPathInside(root, absolute) || !fileSystem.fileExists(absolute)) return undefined;\n try {\n const source = ts.readJsonConfigFile(absolute, fileSystem.readFile);\n const parsed = ts.parseJsonSourceFileConfigFileContent(\n source,\n fileSystem.parseHost(path.dirname(absolute)),\n path.dirname(absolute),\n undefined,\n absolute,\n undefined,\n undefined,\n fileSystem.extendedConfigCache,\n );\n parsed.projectReferences = (parsed.projectReferences ?? []).filter((reference) => {\n const target = ts.resolveProjectReferencePath(reference);\n return isPathInside(root, target) && fileSystem.fileExists(target);\n });\n anchorCompilerOptions(root, path.dirname(absolute), parsed.options);\n cache.set(absolute, parsed);\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nfunction createBoundedCompilerHost(\n root: string,\n currentDirectory: string,\n options: ts.CompilerOptions,\n fileSystem: BoundedTypeScriptFileSystem,\n parsedCommands: Map<string, ts.ParsedCommandLine>,\n): ts.CompilerHost {\n const host = ts.createCompilerHost(options, true) as ts.CompilerHost & {\n useSourceOfProjectReferenceRedirect?: () => boolean;\n };\n host.getCurrentDirectory = () => currentDirectory;\n host.fileExists = fileSystem.fileExists;\n host.readFile = fileSystem.readFile;\n host.directoryExists = fileSystem.directoryExists;\n host.getDirectories = fileSystem.getDirectories;\n host.readDirectory = (rootDir, extensions, excludes, includes, depth) => [\n ...fileSystem.readDirectory(rootDir, extensions, excludes, includes, depth),\n ];\n host.realpath = fileSystem.realpath;\n host.getEnvironmentVariable = () => \"\";\n host.writeFile = () => undefined;\n host.getParsedCommandLine = (configFileName) =>\n parseCommand(root, configFileName, fileSystem, parsedCommands);\n host.useSourceOfProjectReferenceRedirect = () => true;\n return host;\n}\n\nfunction anchorCompilerOptions(\n root: string,\n unitDirectory: string,\n options: ts.CompilerOptions,\n): void {\n options.configFilePath = options.configFilePath ?? path.join(unitDirectory, \"tsconfig.json\");\n if (!options.typeRoots) options.typeRoots = boundedTypeRoots(root, unitDirectory);\n else options.typeRoots = options.typeRoots.filter((entry) => isPathInside(root, entry));\n if (options.baseUrl && !isPathInside(root, options.baseUrl)) options.baseUrl = undefined;\n if (options.rootDirs)\n options.rootDirs = options.rootDirs.filter((entry) => isPathInside(root, entry));\n sanitizeCompilerPathAliases(options);\n}\n\nfunction boundedTypeRoots(root: string, start: string): string[] {\n const values: string[] = [];\n let current = path.resolve(start);\n while (isPathInside(root, current)) {\n values.push(path.join(current, \"node_modules\", \"@types\"));\n if (current === path.resolve(root)) break;\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return [...new Set(values)];\n}\n\nfunction pathAliases(\n root: string,\n configDirectory: string,\n options: ts.CompilerOptions,\n): Record<string, string[]> {\n const base =\n options.baseUrl ??\n (options as ts.CompilerOptions & { pathsBasePath?: string }).pathsBasePath ??\n configDirectory;\n const paths = (options.paths ?? {}) as Record<string, string[]>;\n return Object.fromEntries(\n Object.entries(paths)\n .filter(([alias]) => isSafeRelativePathPattern(alias))\n .sort(([a], [b]) => compareText(a, b))\n .map(([alias, values]) => [\n alias,\n values\n .filter(isSafeRelativePathPattern)\n .map((value) => path.resolve(base, value))\n .filter((value) => isPathInside(root, value))\n .map((value) => normalizeStoredPath(relativePosix(root, value)))\n .filter((value, index, entries) => entries.indexOf(value) === index)\n .sort(compareText),\n ]),\n );\n}\n\nexport function compilerDiagnostic(diagnostic: ts.Diagnostic, root: string): DiagnosticRecord {\n const message = sanitizeCompilerMessage(\n ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n root,\n );\n const file = diagnostic.file;\n const start =\n file && diagnostic.start !== undefined\n ? file.getLineAndCharacterOfPosition(diagnostic.start)\n : undefined;\n let relativeFile: string | undefined;\n if (file) {\n try {\n relativeFile = relativePosix(root, file.fileName);\n } catch {\n // Never persist absolute or out-of-root compiler paths.\n }\n }\n return {\n schemaVersion: SCHEMA_VERSION,\n code: diagnostic.file ? \"parse-error\" : \"compiler-config\",\n severity:\n diagnostic.category === ts.DiagnosticCategory.Error\n ? \"error\"\n : diagnostic.category === ts.DiagnosticCategory.Warning\n ? \"warning\"\n : \"info\",\n message,\n ...(relativeFile ? { file: relativeFile } : {}),\n ...(start ? { line: start.line + 1, column: start.character + 1 } : {}),\n };\n}\n\nfunction sanitizeCompilerMessage(message: string, root: string): string {\n return redactAbsolutePathsInText(message, root) || \"TypeScript reported a compiler diagnostic.\";\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { z, type ZodType } from \"zod\";\n\nimport { MANAGED_ARTIFACTS, MAP_COMPANION_ARTIFACTS, SCHEMA_VERSION } from \"./constants.js\";\nimport type { ResolvedConfiguration } from \"./config.js\";\nimport { CodeMapError, errorMessage } from \"./errors.js\";\nimport {\n CodeMapSchema,\n DiagnosticRecordSchema,\n FileRecordSchema,\n ManifestRecordSchema,\n ProjectRecordSchema,\n RelationRecordSchema,\n SymbolRecordSchema,\n} from \"./schemas.js\";\nimport type { CodeMap, LoadCodeMapOptions, ManifestRecord } from \"./types.js\";\nimport { resolveConfiguration } from \"./config.js\";\nimport { hashText } from \"./utils/hash.js\";\nimport { atomicWriteIfChanged, isNotFound, stableJson, stableJsonLine } from \"./utils/stable.js\";\n\ntype CompanionArtifact = (typeof MAP_COMPANION_ARTIFACTS)[number];\ntype CompanionContents = Record<CompanionArtifact, string>;\n\nexport async function writeCodeMap(\n resolved: ResolvedConfiguration,\n map: CodeMap,\n): Promise<{ wrote: boolean; map: CodeMap }> {\n const validated = finalizeCodeMap(map);\n const contents = buildCompanionContents(validated);\n await fs.mkdir(resolved.outputDir, { recursive: true });\n let wrote = false;\n const write = async (\n name: (typeof MANAGED_ARTIFACTS)[number],\n content: string,\n ): Promise<void> => {\n wrote = (await atomicWriteIfChanged(path.join(resolved.outputDir, name), content)) || wrote;\n };\n\n // The manifest is committed last so readers never see a new manifest before its records exist.\n for (const name of MAP_COMPANION_ARTIFACTS) await write(name, contents[name]);\n await write(\"manifest.json\", stableJson(validated.manifest, true));\n return { wrote, map: validated };\n}\n\nexport function finalizeCodeMap(map: CodeMap): CodeMap {\n const withoutIntegrity: CodeMap = {\n ...map,\n manifest: { ...map.manifest, artifacts: [], integrityHash: \"0\".repeat(64) },\n };\n const contents = buildCompanionContents(withoutIntegrity);\n const manifestWithArtifacts: ManifestRecord = {\n ...withoutIntegrity.manifest,\n artifacts: MAP_COMPANION_ARTIFACTS.map((artifactPath) => ({\n path: artifactPath,\n hash: hashText(Buffer.from(contents[artifactPath], \"utf8\")),\n })),\n };\n const finalized: CodeMap = {\n ...withoutIntegrity,\n manifest: {\n ...manifestWithArtifacts,\n integrityHash: computeManifestIntegrityHash(manifestWithArtifacts),\n },\n };\n return parseWithSchema(CodeMapSchema, finalized, \"generated code map\");\n}\n\nexport function buildOverview(map: CodeMap): string {\n const lines = [\n \"# AI Code Map\",\n \"\",\n `Project: ${map.project.name}`,\n `Frameworks: ${map.project.frameworks.join(\", \") || \"none detected\"}`,\n \"\",\n \"## Counts\",\n \"\",\n `- Files: ${map.project.counts.files}`,\n `- Symbols: ${map.project.counts.symbols}`,\n `- Relations: ${map.project.counts.relations}`,\n `- Diagnostics: ${map.project.counts.diagnostics}`,\n \"\",\n \"## Entry points\",\n \"\",\n ...(map.project.entryPoints.length > 0\n ? map.project.entryPoints.map((entry) => `- ${entry}`)\n : [\"- None declared in package.json\"]),\n \"\",\n \"## Indexed files\",\n \"\",\n ...map.files.map(\n (file) =>\n `- ${file.path} (${file.symbolIds.length} symbols; ${file.frameworks.join(\", \") || \"generic\"})`,\n ),\n \"\",\n \"> This map is a navigation aid. Inspect the actual source before changing code; source is authoritative.\",\n \"\",\n ];\n return lines.join(\"\\n\");\n}\n\nexport async function loadCodeMap(options: LoadCodeMapOptions = {}): Promise<CodeMap> {\n const resolved = await resolveConfiguration(options);\n return loadCodeMapFrom(resolved.outputDir);\n}\n\nexport async function loadCodeMapFrom(outputDir: string): Promise<CodeMap> {\n try {\n const manifest = await readJson(\n path.join(outputDir, \"manifest.json\"),\n \"manifest\",\n ManifestRecordSchema,\n );\n verifyManifestIntegrity(manifest, outputDir);\n const rawEntries = await Promise.all(\n MAP_COMPANION_ARTIFACTS.map(\n async (name) => [name, await fs.readFile(path.join(outputDir, name))] as const,\n ),\n );\n const raw = Object.fromEntries(rawEntries) as Record<CompanionArtifact, Buffer>;\n verifyArtifactIntegrity(manifest, raw, outputDir);\n\n const overview = raw[\"overview.md\"].toString(\"utf8\");\n const project = parseJsonBuffer(raw[\"project.json\"], \"project\", ProjectRecordSchema);\n const files = parseJsonLinesBuffer(raw[\"files.jsonl\"], \"file\", FileRecordSchema);\n const symbols = parseJsonLinesBuffer(raw[\"symbols.jsonl\"], \"symbol\", SymbolRecordSchema);\n const relations = parseJsonLinesBuffer(\n raw[\"relations.jsonl\"],\n \"relation\",\n RelationRecordSchema,\n );\n const diagnostics = parseJsonBuffer(\n raw[\"diagnostics.json\"],\n \"diagnostics\",\n z.array(DiagnosticRecordSchema),\n );\n const map = parseWithSchema(\n CodeMapSchema,\n {\n manifest,\n project,\n files,\n symbols,\n relations,\n diagnostics,\n },\n \"persisted code map\",\n );\n if (overview !== buildOverview(map)) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `The overview artifact at ${outputDir} does not match the persisted code map. Rescan the project.`,\n );\n }\n return map;\n } catch (error) {\n if (isNotFound(error)) {\n throw new CodeMapError(\n \"MAP_NOT_FOUND\",\n `No complete code map exists at ${outputDir}. Run ai-code-map scan.`,\n );\n }\n if (error instanceof CodeMapError) throw error;\n throw new CodeMapError(\n \"MAP_READ_FAILED\",\n `Could not load code map at ${outputDir}: ${errorMessage(error)}`,\n { cause: error },\n );\n }\n}\n\nfunction buildCompanionContents(map: CodeMap): CompanionContents {\n return {\n \"overview.md\": buildOverview(map),\n \"project.json\": stableJson(map.project, true),\n \"files.jsonl\": jsonLines(map.files),\n \"symbols.jsonl\": jsonLines(map.symbols),\n \"relations.jsonl\": jsonLines(map.relations),\n \"diagnostics.json\": stableJson(map.diagnostics, true),\n };\n}\n\nfunction verifyArtifactIntegrity(\n manifest: ManifestRecord,\n raw: Record<CompanionArtifact, Buffer>,\n outputDir: string,\n): void {\n const declared = new Map(manifest.artifacts.map((artifact) => [artifact.path, artifact.hash]));\n if (\n declared.size !== MAP_COMPANION_ARTIFACTS.length ||\n MAP_COMPANION_ARTIFACTS.some((name) => !declared.has(name))\n ) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid persisted code map: the manifest at ${outputDir} does not cover the complete companion artifact set. Rescan the project.`,\n );\n }\n for (const name of MAP_COMPANION_ARTIFACTS) {\n if (declared.get(name) !== hashText(raw[name])) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid persisted code map: the ${name} artifact at ${outputDir} does not match its manifest hash. Rescan the project.`,\n );\n }\n }\n}\n\nexport function computeManifestIntegrityHash(manifest: ManifestRecord): string {\n const content: Record<string, unknown> = { ...manifest };\n delete content.integrityHash;\n return hashText(Buffer.from(stableJson(content), \"utf8\"));\n}\n\nfunction verifyManifestIntegrity(manifest: ManifestRecord, outputDir: string): void {\n if (manifest.integrityHash !== computeManifestIntegrityHash(manifest)) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid persisted code map: the manifest integrity hash at ${outputDir} is inconsistent. Rescan the project.`,\n );\n }\n}\n\n/** Read only the commit-marker artifact for freshness/change checks without retaining the map. */\nexport async function loadManifestFrom(outputDir: string): Promise<ManifestRecord> {\n try {\n const manifest = await readJson(\n path.join(outputDir, \"manifest.json\"),\n \"manifest\",\n ManifestRecordSchema,\n );\n verifyManifestIntegrity(manifest, outputDir);\n return manifest;\n } catch (error) {\n if (isNotFound(error)) {\n throw new CodeMapError(\n \"MAP_NOT_FOUND\",\n `No complete code map exists at ${outputDir}. Run ai-code-map scan.`,\n );\n }\n if (error instanceof CodeMapError) throw error;\n throw new CodeMapError(\n \"MAP_READ_FAILED\",\n `Could not load code map manifest at ${outputDir}: ${errorMessage(error)}`,\n { cause: error },\n );\n }\n}\n\nfunction jsonLines(records: readonly unknown[]): string {\n if (records.length === 0) return \"\";\n return `${records.map(stableJsonLine).join(\"\\n\")}\\n`;\n}\n\nasync function readJson<T>(filePath: string, label: string, schema: ZodType<T>): Promise<T> {\n try {\n return parseJsonBuffer(await fs.readFile(filePath), label, schema);\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid JSON in ${label} artifact ${filePath}. Rescan the project.`,\n );\n }\n throw error;\n }\n}\n\nfunction parseJsonBuffer<T>(contents: Buffer, label: string, schema: ZodType<T>): T {\n try {\n const raw: unknown = JSON.parse(contents.toString(\"utf8\"));\n return parseWithSchema(schema, raw, label);\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid JSON in ${label} artifact. Rescan the project.`,\n );\n }\n throw error;\n }\n}\n\nfunction parseJsonLinesBuffer<T>(\n contents: Buffer,\n label: string,\n schema: ZodType<T>,\n filePath = label,\n): T[] {\n const text = contents.toString(\"utf8\");\n const records: T[] = [];\n for (const [index, line] of text.split(/\\r?\\n/).entries()) {\n if (!line.trim()) continue;\n try {\n const raw: unknown = JSON.parse(line);\n records.push(parseWithSchema(schema, raw, `${label} at line ${index + 1}`));\n } catch (error) {\n if (error instanceof CodeMapError) throw error;\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid JSON in ${label} artifact ${filePath} at line ${index + 1}. Rescan the project.`,\n );\n }\n }\n return records;\n}\n\nfunction parseWithSchema<T>(schema: ZodType<T>, value: unknown, label: string): T {\n if (\n value &&\n typeof value === \"object\" &&\n \"schemaVersion\" in value &&\n (value as { schemaVersion?: unknown }).schemaVersion !== SCHEMA_VERSION\n ) {\n throw new CodeMapError(\n \"INCOMPATIBLE_SCHEMA\",\n `Unsupported ${label} schema version ${String((value as { schemaVersion?: unknown }).schemaVersion)}; this build supports version ${SCHEMA_VERSION}. Run ai-code-map scan to regenerate the map.`,\n );\n }\n const parsed = schema.safeParse(value);\n if (parsed.success) return parsed.data;\n const details = parsed.error.issues\n .slice(0, 5)\n .map((issue) => `${issue.path.join(\".\") || label}: ${issue.message}`)\n .join(\"; \");\n throw new CodeMapError(\n \"INVALID_MAP\",\n `Invalid ${label}: ${details}. Run ai-code-map scan to regenerate the map.`,\n );\n}\n","import ts from \"typescript\";\n\nimport { DEFAULT_SYNTAX_PARSER } from \"./constants.js\";\nimport type {\n Language,\n SourceRange,\n SyntaxFact,\n SyntaxIssue,\n SyntaxParseInput,\n SyntaxParseResult,\n SyntaxParserAdapter,\n} from \"./types.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nconst registeredTypeScriptParsers = new WeakSet();\n\nexport class TypeScriptParserAdapter implements SyntaxParserAdapter {\n readonly name = \"typescript-compiler-syntax\";\n readonly version = ts.version;\n\n constructor() {\n registeredTypeScriptParsers.add(this);\n }\n\n supports(language: Language): boolean {\n return [\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"cts\", \"mjs\", \"cjs\"].includes(language);\n }\n\n parse(input: SyntaxParseInput): SyntaxParseResult {\n const sourceFile = ts.createSourceFile(\n input.path,\n input.source,\n ts.ScriptTarget.Latest,\n true,\n scriptKind(input.language),\n );\n const facts: SyntaxFact[] = [];\n visitSyntax(sourceFile, sourceFile, this.name, facts);\n const parseDiagnostics =\n (sourceFile as unknown as { parseDiagnostics?: readonly ts.DiagnosticWithLocation[] })\n .parseDiagnostics ?? [];\n const issues: SyntaxIssue[] = parseDiagnostics.map((diagnostic) => ({\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n range: offsetRange(sourceFile, diagnostic.start, diagnostic.length),\n }));\n for (const issue of issues) {\n facts.push({\n kind: \"parse-error\",\n nodeType: \"typescript-diagnostic\",\n ...(issue.range ? { range: issue.range } : { range: pointRange(1, 1) }),\n evidence: { parser: this.name, exact: true },\n });\n }\n return {\n parser: this.name,\n facts: facts.sort(compareFacts),\n issues,\n hadErrors: issues.length > 0,\n };\n }\n}\n\nexport class FallbackParserAdapter implements SyntaxParserAdapter {\n readonly name: string;\n\n constructor(\n readonly primary: SyntaxParserAdapter,\n readonly fallback: SyntaxParserAdapter = new TypeScriptParserAdapter(),\n ) {\n this.name = `${primary.name}-with-${fallback.name}-fallback`;\n }\n\n async supports(language: Language): Promise<boolean> {\n return (await this.primary.supports(language)) || (await this.fallback.supports(language));\n }\n\n async parse(input: SyntaxParseInput): Promise<SyntaxParseResult> {\n try {\n if (await this.primary.supports(input.language)) {\n const result = await this.primary.parse(input);\n if (!result.issues.some((issue) => issue.fatal)) return result;\n return await this.parseFallback(\n input,\n `Parser ${this.primary.name} reported a fatal syntax failure.`,\n );\n }\n return await this.parseFallback(\n input,\n `Parser ${this.primary.name} does not support ${input.language}.`,\n );\n } catch {\n // Adapter errors are deliberately not persisted: third-party messages can contain\n // absolute paths, source text, or environment-derived values.\n return this.parseFallback(\n input,\n `Parser ${this.primary.name} failed; used ${this.fallback.name}.`,\n );\n }\n }\n\n private async parseFallback(input: SyntaxParseInput, reason: string): Promise<SyntaxParseResult> {\n const fallback = await this.fallback.parse(input);\n return {\n ...fallback,\n fallbackFrom: this.primary.name,\n issues: [{ message: reason }, ...fallback.issues],\n };\n }\n}\n\nexport function createTypeScriptParserAdapter(): SyntaxParserAdapter {\n return new TypeScriptParserAdapter();\n}\n\nexport function isBuiltInTypeScriptParserAdapter(\n parser: SyntaxParserAdapter,\n): parser is TypeScriptParserAdapter {\n // The registration check is intentionally first: a Proxy around a genuine instance is a\n // different object and cannot spoof provenance through alternating property reads.\n if (!registeredTypeScriptParsers.has(parser)) return false;\n if (Object.getPrototypeOf(parser) !== TypeScriptParserAdapter.prototype) return false;\n if (Object.hasOwn(parser, \"supports\") || Object.hasOwn(parser, \"parse\")) return false;\n const name = Object.getOwnPropertyDescriptor(parser, \"name\");\n const version = Object.getOwnPropertyDescriptor(parser, \"version\");\n return name?.value === DEFAULT_SYNTAX_PARSER && version?.value === ts.version;\n}\n\nfunction visitSyntax(\n sourceFile: ts.SourceFile,\n node: ts.Node,\n parser: string,\n output: SyntaxFact[],\n): void {\n const add = (kind: SyntaxFact[\"kind\"], nodeType: string, name?: string): void => {\n output.push({\n kind,\n nodeType,\n ...(name ? { name } : {}),\n range: nodeRange(sourceFile, node),\n evidence: { parser, exact: true },\n });\n };\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n add(\"import\", \"import-declaration\", node.moduleSpecifier.text);\n } else if (ts.isExportDeclaration(node)) {\n const moduleName =\n node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)\n ? node.moduleSpecifier.text\n : undefined;\n add(\"export\", \"export-declaration\", moduleName ?? exportNames(node));\n } else if (ts.isExportAssignment(node)) {\n add(\"export\", \"export-assignment\", \"default\");\n } else if (isNamedDeclarationFact(node)) {\n add(\"declaration\", ts.SyntaxKind[node.kind], declarationName(node));\n if (hasExport(node)) add(\"export\", \"export-modifier\", declarationName(node));\n } else if (ts.isCallExpression(node)) {\n add(\"call\", \"call-expression\", expressionName(node.expression));\n } else if (ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node)) {\n add(\"jsx-element\", \"jsx-element\", node.tagName.getText(sourceFile));\n }\n node.forEachChild((child) => visitSyntax(sourceFile, child, parser, output));\n}\n\nfunction isNamedDeclarationFact(\n node: ts.Node,\n): node is\n | ts.FunctionDeclaration\n | ts.ClassDeclaration\n | ts.InterfaceDeclaration\n | ts.TypeAliasDeclaration\n | ts.VariableDeclaration\n | ts.MethodDeclaration {\n return (\n ts.isFunctionDeclaration(node) ||\n ts.isClassDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isVariableDeclaration(node) ||\n ts.isMethodDeclaration(node)\n );\n}\n\nfunction declarationName(node: ts.NamedDeclaration): string | undefined {\n const name = node.name;\n if (!name) return \"default\";\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))\n return name.text;\n return undefined;\n}\n\nfunction hasExport(node: ts.Node): boolean {\n const owner = ts.isVariableDeclaration(node) ? node.parent.parent : node;\n return Boolean(\n ts.canHaveModifiers(owner) &&\n ts.getModifiers(owner)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword),\n );\n}\n\nfunction exportNames(node: ts.ExportDeclaration): string | undefined {\n if (!node.exportClause) return \"*\";\n if (ts.isNamespaceExport(node.exportClause)) return node.exportClause.name.text;\n return node.exportClause.elements\n .map((element) => element.name.text)\n .sort(compareText)\n .join(\",\");\n}\n\nfunction expressionName(expression: ts.Expression): string | undefined {\n if (ts.isIdentifier(expression)) return expression.text;\n if (ts.isPropertyAccessExpression(expression)) return expression.name.text;\n return undefined;\n}\n\nfunction scriptKind(language: Language): ts.ScriptKind {\n if (language === \"tsx\") return ts.ScriptKind.TSX;\n if (language === \"jsx\") return ts.ScriptKind.JSX;\n if ([\"js\", \"mjs\", \"cjs\"].includes(language)) return ts.ScriptKind.JS;\n return ts.ScriptKind.TS;\n}\n\nfunction nodeRange(sourceFile: ts.SourceFile, node: ts.Node): SourceRange {\n return offsetRange(\n sourceFile,\n node.getStart(sourceFile, false),\n node.getEnd() - node.getStart(sourceFile, false),\n );\n}\n\nfunction offsetRange(sourceFile: ts.SourceFile, startOffset: number, length: number): SourceRange {\n const start = sourceFile.getLineAndCharacterOfPosition(startOffset);\n const end = sourceFile.getLineAndCharacterOfPosition(startOffset + length);\n return {\n startLine: start.line + 1,\n startColumn: start.character + 1,\n endLine: end.line + 1,\n endColumn: end.character + 1,\n };\n}\n\nfunction pointRange(line: number, column: number): SourceRange {\n return { startLine: line, startColumn: column, endLine: line, endColumn: column };\n}\n\nfunction compareFacts(a: SyntaxFact, b: SyntaxFact): number {\n const key = (fact: SyntaxFact) =>\n `${String(fact.range.startLine).padStart(10, \"0\")}:${String(fact.range.startColumn).padStart(10, \"0\")}:${fact.kind}:${fact.name ?? \"\"}`;\n return compareText(key(a), key(b));\n}\n","import { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport { Worker } from \"node:worker_threads\";\n\nimport type { CompilerWorkerInput, CompilerWorkerResult } from \"./analyze.js\";\n\nexport function runCompilerUnitWorker(input: CompilerWorkerInput): Promise<CompilerWorkerResult> {\n let entry = new URL(\"./compiler-worker.js\", import.meta.url);\n if (import.meta.url.endsWith(\".ts\")) {\n // Source execution (tsx/Vitest) uses the development loader; packed code needs only Node.\n const loader = pathToFileURL(createRequire(import.meta.url).resolve(\"tsx/esm/api\")).href;\n const source = new URL(\"./compiler-worker.ts\", import.meta.url).href;\n const bootstrap = `import { tsImport } from ${JSON.stringify(loader)}; await tsImport(${JSON.stringify(source)}, ${JSON.stringify(import.meta.url)});`;\n entry = new URL(`data:text/javascript,${encodeURIComponent(bootstrap)}`);\n }\n return new Promise((resolve, reject) => {\n const worker = new Worker(entry, { workerData: input });\n let result: CompilerWorkerResult | undefined;\n worker.once(\"message\", (message: CompilerWorkerResult) => {\n result = message;\n });\n worker.once(\"error\", reject);\n worker.once(\"exit\", (code) => {\n if (code !== 0 || !result) {\n reject(new Error(`Compiler worker exited without a complete result (code ${code}).`));\n } else {\n resolve(result);\n }\n });\n });\n}\n","import type { CodeMap, ShowResult, SymbolKind, SymbolRecord } from \"./types.js\";\nimport { compareText } from \"./utils/stable.js\";\n\nconst KIND_ALIASES: Record<string, SymbolKind> = {\n component: \"react-component\",\n hook: \"react-hook\",\n function: \"function\",\n class: \"class\",\n method: \"method\",\n interface: \"interface\",\n type: \"type-alias\",\n variable: \"variable\",\n page: \"next-page\",\n controller: \"nest-controller\",\n module: \"nest-module\",\n};\n\nexport function showSymbol(map: CodeMap, selector: string): ShowResult {\n const normalized = selector.trim();\n const exactId = map.symbols.filter((symbol) => symbol.id === normalized);\n let symbols = exactId;\n if (symbols.length === 0) {\n const shorthand = /^([a-z-]+):([^/#]+)$/i.exec(normalized);\n if (!shorthand) {\n // no-op\n } else {\n const kindToken = shorthand[1];\n const name = shorthand[2];\n if (kindToken && name) {\n const kind = KIND_ALIASES[kindToken.toLowerCase()];\n if (kind) {\n symbols = map.symbols.filter((symbol) => symbol.kind === kind && symbol.name === name);\n }\n }\n }\n }\n if (symbols.length === 0) {\n const [fileSelector, nameSelector] = splitFileSelector(normalized);\n if (nameSelector) {\n symbols = map.symbols.filter(\n (symbol) => symbol.file === fileSelector && symbol.name === nameSelector,\n );\n } else {\n symbols = map.symbols.filter(\n (symbol) => symbol.name === normalized || symbol.file === normalized,\n );\n }\n }\n if (symbols.length === 0) {\n const lower = normalized.toLowerCase();\n symbols = map.symbols.filter((symbol) => symbol.name.toLowerCase() === lower);\n }\n\n return {\n selector: normalized,\n matches: symbols\n .sort((a, b) => compareText(a.id, b.id))\n .map((symbol) => {\n const file = map.files.find((item) => item.path === symbol.file);\n if (!file) return undefined;\n return {\n symbol,\n file,\n inbound: map.relations\n .filter((relation) => relation.to === symbol.id)\n .sort(compareRelations),\n outbound: map.relations\n .filter((relation) => relation.from === symbol.id)\n .sort(compareRelations),\n };\n })\n .filter((match): match is NonNullable<typeof match> => match !== undefined),\n };\n}\n\nexport interface ShowFormatOptions {\n /** Preserve the verbose text view. JSON and showSymbol always retain full records. */\n full?: boolean;\n /** Total relation groups across the compact view; integer 1..50, default 12. */\n limit?: number;\n}\n\nexport function formatShowResult(result: ShowResult, options: ShowFormatOptions = {}): string {\n const limit = options.limit ?? 12;\n if (!Number.isInteger(limit) || limit < 1 || limit > 50) {\n throw new RangeError(\"show limit must be an integer between 1 and 50\");\n }\n if (options.full) return formatFullShowResult(result);\n let remaining = limit;\n const matches = result.matches.slice(0, 5);\n const blocks = matches.map(({ symbol, inbound, outbound }) => {\n const { startLine, startColumn, endLine, endColumn } = symbol.range;\n const lines = [\n `${symbol.name} [${symbol.kind}]`,\n `id: ${symbol.id}`,\n `path: ${symbol.file}:${startLine}:${startColumn}-${endLine}:${endColumn}`,\n ];\n if (symbol.signature) {\n const signature = symbol.signature.replace(/\\s+/g, \" \");\n lines.push(\n `signature: ${signature.length > 240 ? `${signature.slice(0, 240)}… [truncated]` : signature}`,\n );\n }\n const entries = [\n ...outbound.map((relation) => ({ relation, direction: \"->\", target: relation.to })),\n ...inbound.map((relation) => ({ relation, direction: \"<-\", target: relation.from })),\n ];\n const eligible = entries.filter(\n ({ relation, target }) =>\n ![\"heuristic\", \"derived\"].includes(relation.origin.classification) &&\n ![\"contains\", \"exports\", \"used-by\"].includes(relation.type) &&\n !target.startsWith(\"unresolved:\"),\n );\n const actionable = new Set(\n eligible\n .filter(({ relation }) => relation.type !== \"references\")\n .map(({ direction, target }) => `${direction}:${target}`),\n );\n const groups = new Map<\n string,\n { direction: string; target: string; type: string; count: number }\n >();\n let filtered = entries.length - eligible.length;\n for (const { relation, direction, target } of eligible) {\n if (relation.type === \"references\" && actionable.has(`${direction}:${target}`)) {\n filtered++;\n continue;\n }\n const key = `${direction}:${relation.type}:${target}`;\n const group = groups.get(key);\n if (group) group.count++;\n else groups.set(key, { direction, target, type: relation.type, count: 1 });\n }\n const ranked = [...groups.values()].sort(\n (a, b) =>\n Number(a.target.startsWith(\"external:\")) - Number(b.target.startsWith(\"external:\")) ||\n Number(a.type === \"references\") - Number(b.type === \"references\") ||\n compareText(`${a.direction}:${a.type}:${a.target}`, `${b.direction}:${b.type}:${b.target}`),\n );\n const shown = ranked.slice(0, remaining);\n remaining -= shown.length;\n lines.push(\n `relations: ${shown.length}/${ranked.length} groups shown; ${ranked.length - shown.length} omitted; ${filtered} records filtered`,\n );\n lines.push(\n ...shown.map(\n ({ direction, type, target, count }) =>\n ` ${direction} ${type} ${direction} ${target}${count > 1 ? ` (${count} occurrences)` : \"\"}`,\n ),\n );\n return lines.join(\"\\n\");\n });\n if (matches.length < result.matches.length) {\n blocks.push(\n `Symbols: ${matches.length}/${result.matches.length} shown; ${result.matches.length - matches.length} omitted. Use an exact ID to narrow the selector.`,\n );\n }\n if (matches.length)\n blocks.push(\"Compact view; use --full or --json for all details and evidence.\");\n return blocks.join(\"\\n\\n\");\n}\n\nfunction formatFullShowResult(result: ShowResult): string {\n return result.matches\n .map(({ symbol, inbound, outbound }) => {\n const lines = [\n `${symbol.name} [${symbol.kind}]`,\n `id: ${symbol.id}`,\n `path: ${symbol.file}:${symbol.range.startLine}:${symbol.range.startColumn}`,\n `exported: ${String(symbol.exported)}`,\n ];\n if (symbol.signature) lines.push(`signature: ${symbol.signature}`);\n if (symbol.documentation) lines.push(`documentation: ${symbol.documentation}`);\n if (Object.keys(symbol.facts).length > 0) {\n lines.push(\"facts:\", ...formatFacts(symbol.facts));\n }\n const relations = [\n ...outbound.map(\n (relation) => ` -> ${relation.type} -> ${relation.to} (${relation.confidence})`,\n ),\n ...inbound\n .filter((relation) => relation.type !== \"used-by\")\n .map((relation) => ` <- ${relation.type} <- ${relation.from} (${relation.confidence})`),\n ];\n if (relations.length > 0) lines.push(\"relations:\", ...relations);\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n\");\n}\n\nfunction splitFileSelector(selector: string): [string, string | undefined] {\n const hash = selector.lastIndexOf(\"#\");\n return hash > 0 ? [selector.slice(0, hash), selector.slice(hash + 1)] : [selector, undefined];\n}\n\nfunction compareRelations(\n a: ShowResult[\"matches\"][number][\"inbound\"][number],\n b: ShowResult[\"matches\"][number][\"inbound\"][number],\n): number {\n return compareText(`${a.type}:${a.from}:${a.to}`, `${b.type}:${b.from}:${b.to}`);\n}\n\nfunction formatFacts(facts: SymbolRecord[\"facts\"]): string[] {\n return Object.entries(facts)\n .sort(([a], [b]) => compareText(a, b))\n .map(([key, value]) => ` ${key}: ${formatFactValue(value)}`);\n}\n\nfunction formatFactValue(value: SymbolRecord[\"facts\"][string]): string {\n if (Array.isArray(value)) return value.map((entry) => formatFactValue(entry)).join(\", \");\n if (value !== null && typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n"],"mappings":"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","names":["path","relation","fs","path","path","fs","path","relation","small","missing","path","path","relation","ref","fs","path","path","path","relation","path","fs","fs","path","ts","path","ts","compact","ts","fallback","sourceFile","path","declaration","specifier","ts","ts","ts","source","path","ts","path","makeRelation","routeSegments","ts","path","makeRelation","path","ts","path","hasDirective","ts","isNameExported","isFunctionLikeExpression","symbol","makeRelation","ts","hasDirective","visit","isNameExported","isFunctionLikeExpression","behavior","dedupe","path","relative","findExportedDeclaration","findDeclarationByName","makeRelation","fs","path","ts","path","ts","path","ts","fs","path","fg","fs","path","fs","path","fs","path","fg","fg","path","fs","path","fg","fs","path","path","ts","ts","path","boundedTypeRoots","fs","path","z","fs","path","z","ts","path","fs","ts","ts","parseDiagnostics","nodeRange","fs","path","pathAliases","ts","path","relation","rangesEqual","rangeContains","ts","name","record","semanticInputIdentity","map","relation"]}