/* 347-2 · 347-3 배수유역 자동/수동 · 제안 헬퍼 — logic 두 파일을 그 자리에서 트랜스파일해 * Node 로 돌리고 값을 JSON 으로 낸다(틀 = helper_281_1). */ const fs = require("fs"); const path = require("path"); const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const ROOT = path.join(__dirname, "..", ".."); function loadTs(file) { const js = ts.transpileModule(fs.readFileSync(file, "utf8"), { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, }).outputText; const box = { exports: {} }; new Function("exports", "module", "require", js)(box.exports, box, require); return box.exports; } const live = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Drainage_Live.ts")); const sug = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Drainage_Suggest.ts")); const pipes = [ { chainage_m: 100, source: "stream", options: { pipe_diameter_mm: 1000 } }, { chainage_m: 300, source: "user", facility: "pipe" }, { chainage_m: 500, source: "stream", facility: "box_culvert" }, ]; const basins = [ { chainage_m: 100, recommended_facility: "pipe", recommended_diameter_mm: 1200 }, { chainage_m: 300, recommended_facility: "ford_bridge", recommended_diameter_mm: null }, { chainage_m: 500, recommended_facility: "box_culvert", recommended_diameter_mm: null }, ]; const candidates = [{ chainage_m: 200 }, { chainage_m: 500.2 }]; const before = JSON.stringify(pipes); const at = (generation) => ({ generation, key: "k" }); // 349 — 차례 + 입력 지문 const suggestions = sug.collectSuggestions(pipes, basins, candidates); const applied = sug.applySuggestions(pipes, suggestions); process.stdout.write( JSON.stringify({ quietMs: live.QUIET_MS, modes: [ live.parseDrainageMode(null), live.parseDrainageMode("auto"), live.parseDrainageMode("x"), ], stale: [live.draftMakesStale(null), live.draftMakesStale({ rev: 1 })], accept: [ live.acceptLive({ status: "success", generation: 3 }, at(3), at(3)), live.acceptLive({ status: "success", generation: 3 }, at(3), at(4)), live.acceptLive({ status: "superseded" }, at(3), at(3)), live.acceptLive({ status: "success", generation: 2 }, at(3), at(3)), ], body: live.liveRequestBody(5, undefined, [{ chainage_m: 1 }]), suggestions, applied, untouched: JSON.stringify(pipes) === before, }), );