/* PLAN 322-1 구조물 표 거울 시험 헬퍼 — 진짜 `common_util_structure_catalog.ts` 를 그 자리에서 트랜스파일해 * 견본 정의마다 `resolveCatalog` 한 벌 · 실제 정의로 `cardTitle` · `listPick` 을 표준출력 JSON 으로. * 입력 = argv[2] JSON `{cases: {이름: 정의|null}, definition, titles: [[typeId, options, defaults]]}`. * 짝 = `test_322_1_catalog_mirror.py`. */ const fs = require("fs"); const path = require("path"); const ROOT = path.join(__dirname, "..", ".."); const ts = require(path.join(ROOT, "config", "node_modules", "typescript")); function loadTs(full) { if (full.endsWith(".json")) return JSON.parse(fs.readFileSync(full, "utf8")); const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020, esModuleInterop: true, }, }).outputText; const box = { exports: {} }; const need = (spec) => loadTs(path.join(path.dirname(full), spec)); new Function("exports", "module", "require", js)(box.exports, box, need); return box.exports; } const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8")); const catalog = loadTs(path.join(ROOT, "common_util", "common_util_structure_catalog.ts")); const rows = (map) => Object.fromEntries([...map].map(([id, row]) => [id, row])); const out = { cases: {} }; for (const [name, definition] of Object.entries(input.cases)) out.cases[name] = rows(catalog.resolveCatalog(definition)); catalog.useCatalogDefinition(input.definition); out.titles = input.titles.map(([id, options, defaults]) => catalog.cardTitle(id, options, defaults), ); out.pick = Object.fromEntries( input.definition.types.map((t) => [ t.type_id, [catalog.listPick("b05")(t), catalog.listPick("b06")(t)], ]), ); out.kinds = [...catalog.pipeTitleKinds()].sort(); process.stdout.write(JSON.stringify(out));