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.
This commit is contained in:
@@ -41,13 +41,11 @@ export function hasNestedReferences(schema: Schema): boolean {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function loadReferenceTable(
|
function loadReferenceTableData(
|
||||||
schema: ReferenceSchema | ReverseReferenceSchema,
|
schema: ReferenceSchema | ReverseReferenceSchema,
|
||||||
refBaseDir: string | undefined,
|
refBaseDir: string | undefined,
|
||||||
defaultPrimaryKey: string,
|
|
||||||
currentFilePath: string | undefined,
|
currentFilePath: string | undefined,
|
||||||
): {
|
): {
|
||||||
lookup: Map<string, Record<string, unknown>>;
|
|
||||||
refTable: Record<string, unknown>[];
|
refTable: Record<string, unknown>[];
|
||||||
refFilePath: string;
|
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<string, Record<string, unknown>>;
|
||||||
|
refTable: Record<string, unknown>[];
|
||||||
|
refFilePath: string;
|
||||||
|
} {
|
||||||
|
const { refTable, refFilePath } = loadReferenceTableData(
|
||||||
|
schema,
|
||||||
|
refBaseDir,
|
||||||
|
currentFilePath,
|
||||||
|
);
|
||||||
|
|
||||||
const lookup = new Map<string, Record<string, unknown>>();
|
const lookup = new Map<string, Record<string, unknown>>();
|
||||||
refTable.forEach((row) => {
|
refTable.forEach((row) => {
|
||||||
const pkValue = row[defaultPrimaryKey];
|
const pkValue = row[defaultPrimaryKey];
|
||||||
@@ -107,10 +129,9 @@ function getReverseLookup(
|
|||||||
defaultPrimaryKey: string,
|
defaultPrimaryKey: string,
|
||||||
currentFilePath: string | undefined,
|
currentFilePath: string | undefined,
|
||||||
): Map<string, Record<string, unknown>[]> {
|
): Map<string, Record<string, unknown>[]> {
|
||||||
const { refTable, refFilePath } = loadReferenceTable(
|
const { refTable, refFilePath } = loadReferenceTableData(
|
||||||
schema,
|
schema,
|
||||||
refBaseDir,
|
refBaseDir,
|
||||||
defaultPrimaryKey,
|
|
||||||
currentFilePath,
|
currentFilePath,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user