import { describe, it, expect } from "vitest"; import { mergeFileData } from "../src/merge.js"; describe("mergeFileData", () => { it("collapses multi-line parameters into single-line func signatures", () => { const result = mergeFileData( "api.ts", { purpose: "API helpers", exports: [], deps: [] }, { exports: ["shouldReinjectForEvent"], deps: [], classes: [], functions: [ { name: "shouldReinjectForEvent", params: [ "event: {\n\t\tmessages?: Array<{ content?: unknown; text?: string }>;\n\t\ttype?: string;\n\t\tpayload?: unknown;\n\t}", "mode: PromptInjectionMode", ], returns: "ReinjectDecision", calls: ["outgoingMessagesHaveMarker"], raises: [], }, ], }, ); const funcExport = result.exports.find((e) => e.startsWith("func:shouldReinjectForEvent"), ); expect(funcExport).toBeDefined(); expect(funcExport).not.toContain("\n"); expect(funcExport).not.toContain("\t"); expect(funcExport).toBe( "func:shouldReinjectForEvent(event: { messages?: Array<{ content?: unknown; text?: string }>; type?: string; payload?: unknown; }, mode: PromptInjectionMode) → ReinjectDecision", ); }); it("collapses multi-line return types into single-line func signatures", () => { const result = mergeFileData( "types.ts", { purpose: "Types", exports: [], deps: [] }, { exports: ["complexReturn"], deps: [], classes: [], functions: [ { name: "complexReturn", params: ["x: number"], returns: "{\n a: string;\n b: number;\n}", calls: [], raises: [], }, ], }, ); const funcExport = result.exports.find((e) => e.startsWith("func:complexReturn"), ); expect(funcExport).toBeDefined(); expect(funcExport).not.toContain("\n"); expect(funcExport).toBe( "func:complexReturn(x: number) → { a: string; b: number; }", ); }); it("collapses multi-line method parameters into single-line method signatures", () => { const result = mergeFileData( "class.ts", { purpose: "Class file", exports: [], deps: [] }, { exports: ["MyClass"], deps: [], classes: [ { name: "MyClass", methods: [ { name: "doThing", params: ["opts: {\n a: string;\n b: number;\n}"], returns: "void", calls: [], raises: [], }, ], }, ], functions: [], }, ); const methodExport = result.exports.find((e) => e.startsWith("method:doThing"), ); expect(methodExport).toBeDefined(); expect(methodExport).not.toContain("\n"); expect(methodExport).toBe( "method:doThing(opts: { a: string; b: number; }) → void", ); }); });