From 6ee87fbf2defcb10a17352b36ebeed67c6ce6dc5 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Tue, 29 Sep 2026 19:12:15 +0800 Subject: [PATCH] refactor(reference): share graph index projections --- src/application/ReferenceSourceImport.ts | 30 ++++-------------------- src/domain/referenceSourceGraph.ts | 10 ++++---- 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/src/application/ReferenceSourceImport.ts b/src/application/ReferenceSourceImport.ts index 84153eda6..53a821404 100644 --- a/src/application/ReferenceSourceImport.ts +++ b/src/application/ReferenceSourceImport.ts @@ -2,6 +2,8 @@ import { compareUnicodeCodePoints } from "../domain/unicodeCodePointOrder.js"; import { isSecretLikePath } from "../domain/referenceSourceClassification.js"; import { createHistoricalSourceGraph, + historicalSourceLanguages, + historicalSourceManifests, historicalSourceParseFailureKey, type HistoricalSourceGraph, type HistoricalSourceGraphInput, @@ -83,30 +85,6 @@ const buildProvenance = ( caller: options.caller, }); -const deriveLanguages = ( - entries: HistoricalSourceGraphInput["entries"], -): string[] => - [ - ...new Set( - entries.flatMap((entry) => - entry.kind === "file" && entry.language !== null - ? [entry.language] - : [], - ), - ), - ].sort(compareUnicodeCodePoints); - -const deriveManifests = ( - entries: HistoricalSourceGraphInput["entries"], -): string[] => - entries - .flatMap((entry) => - entry.kind === "file" && entry.classifications.includes("manifest") - ? [entry.path] - : [], - ) - .sort(compareUnicodeCodePoints); - const deriveInventoryState = ( input: Pick< HistoricalSourceGraphInput, @@ -229,8 +207,8 @@ export const importReferenceSource = async ( ), parse_failures: uniqueFailures, exclusions: sortedExclusions, - languages: deriveLanguages(sortedEntries), - manifests: deriveManifests(sortedEntries), + languages: historicalSourceLanguages(sortedEntries), + manifests: historicalSourceManifests(sortedEntries), vcs, provenance: buildProvenance(options), limitations: sortedLimitations, diff --git a/src/domain/referenceSourceGraph.ts b/src/domain/referenceSourceGraph.ts index 8d2796b65..ea8d60efe 100644 --- a/src/domain/referenceSourceGraph.ts +++ b/src/domain/referenceSourceGraph.ts @@ -255,7 +255,8 @@ const checkSortedUnique = ( } }; -const expectedLanguages = ( +/** Derive the canonical language index from inventoried source files. */ +export const historicalSourceLanguages = ( entries: readonly z.infer[], ): string[] => [ @@ -268,7 +269,8 @@ const expectedLanguages = ( ), ].sort(compareUnicodeCodePoints); -const expectedManifests = ( +/** Derive the canonical manifest path index from inventoried source files. */ +export const historicalSourceManifests = ( entries: readonly z.infer[], ): string[] => entries @@ -408,7 +410,7 @@ function checkGraphInvariants( if ( canonicalJson(graph.languages) !== - canonicalJson(expectedLanguages(graph.entries)) + canonicalJson(historicalSourceLanguages(graph.entries)) ) context.addIssue({ code: "custom", @@ -417,7 +419,7 @@ function checkGraphInvariants( }); if ( canonicalJson(graph.manifests) !== - canonicalJson(expectedManifests(graph.entries)) + canonicalJson(historicalSourceManifests(graph.entries)) ) context.addIssue({ code: "custom",