/* 493-3 화면 ↔ 저장 자리 거울 — 진짜 TS(`common_util_route_follow`)로 교점 끌기 여러 걸음을 브라우저처럼 돌림. * 입력 argv[2] JSON = { lines: [L0(저장 노선), L1, …, Ln(마지막 끌기)], pipes, structures, plus, interval }. * 걸음마다(브라우저 follow 단계 · design_pipeline_page.ts · B05_Profile_Pipeline_Grade.ts) 앞 선에서 자리 * 붙임(placeOnLine) → 새 선 따라감 · 추가 측점 = 누가거리 목록(세션) + 땅 위 자리(첫 걸음 = 저장분 `plus` 좌표 · * 다음 = 앞 걸음 줄 · `followPlusGround`) · `input.oldPlus` 면 고치기 전 셈(좌표 없이 걸음마다 다시 놓음). * 표준출력 = 마지막 화면 값. */ const fs = require("fs"); const path = require("path"); const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const ROOT = path.join(__dirname, "..", ".."); function loadTs(file, stubs = {}) { return makeLoader({ root: ROOT, cache: false, requireFor: (full) => (request) => { if (stubs[request]) return stubs[request]; throw new Error(`stub 없음: ${request} (${file})`); }, }).loadTs(path.join(ROOT, file)); } const catalog = require("./helper_322_catalog_module.cjs"); const station = loadTs("common_util/common_util_structure_station.ts", { "./common_util_structure_catalog": catalog, }); const follow = loadTs("common_util/common_util_route_follow.ts", { "./common_util_structure_station": station, }); const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8")); const lines = input.lines.map((line) => line.map(([x, y]) => ({ x, y }))); const saved = input.pipes; let pipes = input.pipes; let structures = input.structures; let plus = input.plus.map((row) => row.chainage_m); let ground = input.plus; let followed = []; for (let i = 0; i + 1 < lines.length; i += 1) { const placedPipes = follow.placeOnLine(pipes, lines[i], [...saved, ...followed]); pipes = follow.projectPipePoints(placedPipes, lines[i + 1]); followed = pipes; const placed = follow.placeOnLine(structures, lines[i], [], input.interval); structures = follow .followStructures(placed, lines[i + 1], undefined, input.interval) .map((moved) => moved.item); if (input.oldPlus) { plus = follow.followPlusStations(plus, lines[i], lines[i + 1]); continue; } ground = follow.followPlusGround(plus, lines[i], lines[i + 1], ground); plus = ground.map((row) => row.chainage_m); } process.stdout.write(JSON.stringify({ pipes, structures, plus }));