From 6da2815301d8a9a0939aa608ee4254d5c1752d85 Mon Sep 17 00:00:00 2001 From: hypercross Date: Thu, 6 Aug 2026 10:42:10 +0800 Subject: [PATCH] refactor: decouple table loading from lookup generation Extract `loadReferenceTableData` to separate the raw file loading logic from the primary key lookup construction. This prevents unnecessary Map creation during reverse reference resolution. --- src/csv-loader/reference-resolver.ts | 31 +++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/csv-loader/reference-resolver.ts b/src/csv-loader/reference-resolver.ts index e09a077..d81bc16 100644 --- a/src/csv-loader/reference-resolver.ts +++ b/src/csv-loader/reference-resolver.ts @@ -41,13 +41,11 @@ export function hasNestedReferences(schema: Schema): boolean { } } -export function loadReferenceTable( +function loadReferenceTableData( schema: ReferenceSchema | ReverseReferenceSchema, refBaseDir: string | undefined, - defaultPrimaryKey: string, currentFilePath: string | undefined, ): { - lookup: Map>; refTable: Record[]; refFilePath: string; } { @@ -86,6 +84,30 @@ export function loadReferenceTable( } } + return { refTable, refFilePath }; +} + +/** + * Load a referenced table and build a forward lookup keyed by primary key. + * Only call this when forward resolution is actually needed; the reverse + * path uses `loadReferenceTableData` directly to avoid building a throwaway map. + */ +export function loadReferenceTable( + schema: ReferenceSchema | ReverseReferenceSchema, + refBaseDir: string | undefined, + defaultPrimaryKey: string, + currentFilePath: string | undefined, +): { + lookup: Map>; + refTable: Record[]; + refFilePath: string; +} { + const { refTable, refFilePath } = loadReferenceTableData( + schema, + refBaseDir, + currentFilePath, + ); + const lookup = new Map>(); refTable.forEach((row) => { const pkValue = row[defaultPrimaryKey]; @@ -107,10 +129,9 @@ function getReverseLookup( defaultPrimaryKey: string, currentFilePath: string | undefined, ): Map[]> { - const { refTable, refFilePath } = loadReferenceTable( + const { refTable, refFilePath } = loadReferenceTableData( schema, refBaseDir, - defaultPrimaryKey, currentFilePath, );