From e5332f506d1bc935919879ef1363625dab9d9058 Mon Sep 17 00:00:00 2001 From: hypercross Date: Tue, 21 Apr 2026 14:24:24 +0800 Subject: [PATCH] test: update csvToModule to mutate rows instead of returning new objects --- src/csv-loader/module-gen.test.ts | 14 +++++++------- src/csv-loader/module-gen.ts | 25 ++++++++++++++----------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/csv-loader/module-gen.test.ts b/src/csv-loader/module-gen.test.ts index 19728bf..6a0085b 100644 --- a/src/csv-loader/module-gen.test.ts +++ b/src/csv-loader/module-gen.test.ts @@ -104,7 +104,7 @@ describe("csvToModule - circular reference support", () => { expect(result.js).toContain("_self_refLookup"); expect(result.js).toContain("_self_refLookup = new Map(_raw.map"); expect(result.js).toContain( - "parent: _self_refLookup.get(String(row.parent))", + "row.parent = _self_refLookup.get(String(row.parent));", ); }); @@ -119,7 +119,7 @@ describe("csvToModule - circular reference support", () => { expect(result.js).toContain("import _circular_b from './circular_b.csv'"); expect(result.js).toContain("export default function getData()"); expect(result.js).toContain("_circular_bLookup"); - expect(result.js).toContain("related:"); + expect(result.js).toContain("row.related ="); }); it("should emit accessor for self-referencing table with nested reference in tuple", () => { @@ -137,7 +137,7 @@ describe("csvToModule - circular reference support", () => { expect(result.js).not.toContain("import _self_ref from './self_ref.csv'"); expect(result.js).toContain("_self_refLookup"); expect(result.js).toContain("export default function getData()"); - expect(result.js).toContain("parent_info:"); + expect(result.js).toContain("row.parent_info ="); expect(result.js).toContain( "_self_refLookup.get(String(row.parent_info[0]))", ); @@ -159,7 +159,7 @@ describe("csvToModule - circular reference support", () => { expect(result.js).not.toContain("import _self_ref from './self_ref.csv'"); expect(result.js).toContain("_self_refLookup"); expect(result.js).toContain("export default function getData()"); - expect(result.js).toContain("ref_or_val:"); + expect(result.js).toContain("row.ref_or_val ="); expect(result.js).toContain( "_self_refLookup.get(String(row.ref_or_val)) ?? row.ref_or_val", ); @@ -180,7 +180,7 @@ describe("csvToModule - circular reference support", () => { expect(result.js).not.toContain("import _self_ref from './self_ref.csv'"); expect(result.js).toContain("_self_refLookup"); expect(result.js).toContain("export default function getData()"); - expect(result.js).toContain("children:"); + expect(result.js).toContain("row.children ="); }); it("should generate correct type definition for self-referencing table using local singular type", () => { @@ -255,7 +255,7 @@ describe("csvToModule - reverse reference output", () => { expect(result.js).toContain("import _orders from './orders.csv'"); expect(result.js).toContain("_ordersBy_customer"); - expect(result.js).toContain("orders:"); + expect(result.js).toContain("row.orders ="); expect(result.js).toContain("_ordersBy_customer.get(String(row.id))"); }); @@ -304,7 +304,7 @@ describe("csvToModule - reverse reference output", () => { expect(result.js).not.toContain("import _self_ref from './self_ref.csv'"); expect(result.js).toContain("_self_refBy_parent"); expect(result.js).toContain("for (const r of _raw)"); - expect(result.js).toContain("children:"); + expect(result.js).toContain("row.children ="); }); it("should generate correct type definition for reverse references", () => { diff --git a/src/csv-loader/module-gen.ts b/src/csv-loader/module-gen.ts index f6d15b2..0353b11 100644 --- a/src/csv-loader/module-gen.ts +++ b/src/csv-loader/module-gen.ts @@ -186,7 +186,7 @@ export function csvToModule( const reverseLookupVar = (tableName: string, foreignKey: string) => reverseLookupVarMap.get(`${tableName}:${foreignKey}`)!; - const rowResolvers: string[] = []; + const rowResolvers: { name: string; code: string }[] = []; for (const config of result.propertyConfigs) { if (config.isReverseReference) { // Reverse reference resolution @@ -196,13 +196,15 @@ export function csvToModule( if (decl) { const revLookup = reverseLookupVar(decl.tableName, decl.foreignKey); if (decl.isOptional) { - rowResolvers.push( - ` ${config.name}: (${revLookup}.get(String(row.${defaultPrimaryKey})) || null),`, - ); + rowResolvers.push({ + name: config.name, + code: `(${revLookup}.get(String(row.${defaultPrimaryKey})) || null)`, + }); } else { - rowResolvers.push( - ` ${config.name}: (${revLookup}.get(String(row.${defaultPrimaryKey})) || []),`, - ); + rowResolvers.push({ + name: config.name, + code: `(${revLookup}.get(String(row.${defaultPrimaryKey})) || [])`, + }); } } } else if (hasNestedReferences(config.schema)) { @@ -213,7 +215,7 @@ export function csvToModule( defaultPrimaryKey, reverseLookupVar, ); - rowResolvers.push(` ${config.name}: ${resolveCode},`); + rowResolvers.push({ name: config.name, code: resolveCode }); } } @@ -233,9 +235,10 @@ export function csvToModule( ...reverseLookupInits.map((l) => ` ${l}`), ...(rowResolvers.length > 0 ? [ - " _resolved = _raw.map(row => (", - ...rowResolvers.map((r) => ` row${r.slice(1)}`), - " row));", + " _resolved = _raw.map(row => {", + ...rowResolvers.map((r) => ` row.${r.name} = ${r.code};`), + " return row;", + " });", ] : []), " return _resolved;",