/* ============================================================================= * B07_DesignDetail_Note_Options_Node.ts * B07 횡단도 표 위 CAD 칸 미리 넣음의 **좌측 패널 옵션 줄**을 서버가 내는 Node 진입점(166-1 · * CLAUDE.md 5장 「계산 자리」 ②). * * 화면(B06 [상세] 모달 `loadNoteThings`)과 같은 함수(`structureOptionLines` · 정의 덧칸 `withDefinition`)를 * 그대로 돌린다 — 파이썬 짝(`B07_DesignDetail_Engine_Cad_CulvertNote`)은 받은 줄을 구조물마다 조합 줄 뒤에 붙인다. * * 실행: node <번들> <입력.json> <출력.json> * 입력 { things: [{ type_id, options }], types: GET /projects/structure-types 의 types, * definition: 구조물 정의(GET /m02/structure-definition 과 같은 꼴) } * 출력 { lines: string[][] } — things 차례대로 * 끝 코드: 0 성공 / 2 인자 오류 * ========================================================================== */ import { readFileSync, writeFileSync } from "node:fs"; import type { StructureType } from "../B05_Profile/B05_Profile_Api_Structures"; import { structureOptionLines } from "../B05_Profile/B05_Profile_UI_Structures_Balloon"; import { withDefinition, type StructureDefinition, } from "../B05_Profile/B05_Profile_UI_Structures_Define"; interface Input { things?: Array<{ type_id: string; options?: Record }>; types?: StructureType[]; definition?: StructureDefinition | null; } const [inputPath, outputPath] = process.argv.slice(2); if (!inputPath || !outputPath) { console.error("사용: node <번들> <입력.json> <출력.json>"); process.exit(2); } const input = JSON.parse(readFileSync(inputPath, "utf8")) as Input; const types = new Map( withDefinition(input.types ?? [], input.definition ?? null).map((type) => [type.type_id, type]), ); const lines = (input.things ?? []).map((thing) => structureOptionLines( { type_id: thing.type_id, options: thing.options ?? {} }, types.get(thing.type_id), ), ); writeFileSync(outputPath, JSON.stringify({ lines }));