/* PLAN 314 단위검증 헬퍼 — 저장분 횡단 값(포장 · 기울기 · 노면 하강) 낡음 판정 · 월류 높이 기다림. * 화면 TS 를 그 자리에서 트랜스파일해 Node 로 돌림 · 결과 = 표준출력 JSON 한 벌. * 짝 = `test_314_stale_structure.py`. */ const fs = require("fs"); const path = require("path"); const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const CATALOG = require("./helper_322_catalog_module.cjs"); // 구조물 표(322-1) const ROOT = path.join(__dirname, "..", ".."); const cache = new Map(); const load = (file) => { if (cache.has(file)) return cache.get(file); const js = ts.transpileModule(fs.readFileSync(file, "utf8"), { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, }).outputText; const box = { exports: {} }; cache.set(file, box.exports); const near = (m) => { if (CATALOG.isCatalogRequest(m)) return CATALOG; if (m.startsWith("@util/")) return load(path.join(ROOT, "common_util", `${m.slice(6)}.ts`)); if (m.startsWith(".")) return load(path.join(path.dirname(file), `${m}.ts`)); return new Proxy({}, { get: () => () => {} }); }; new Function("exports", "module", "require", js)(box.exports, box, near); return box.exports; }; const { hasStaleDesigns } = load( path.join(ROOT, "B06_Section", "B06_Section_UI_Section_Common.ts"), ); const { waitsFordHeight } = load( path.join(ROOT, "B05_Profile", "B05_Profile_UI_Drainage_Ford_Fill.ts"), ); const stale = (section) => hasStaleDesigns({ longitudinal: { design_profiles: [] }, cross_sections: [section] }); const design = (extra) => ({ design_elevation_m: 100, ...extra }); const out = { ford_untilted: stale({ chainage_m: 10, ford_pavement: {}, design: design({ paved: true }) }), ford_tilted: stale({ chainage_m: 10, ford_pavement: {}, design: design({ paved: true, tilted: true }), }), left_tilted: stale({ chainage_m: 10, design: design({ tilted: true }) }), underdrain_tilted: stale({ chainage_m: 10, underdrain: {}, design: design({ tilted: true }) }), pavement_unpaved: stale({ chainage_m: 10, pavement: [{}], design: design({ paved: false }) }), ford_drop_missing: stale({ chainage_m: 10, ford: { overflow_depth_m: 0.3 }, design: design({}) }), ford_drop_kept: stale({ chainage_m: 10, ford: { overflow_depth_m: 0.3 }, design: design({ surface_drop_m: 0.3 }), }), plain: stale({ chainage_m: 10, design: design({}) }), waits: { pave_empty: waitsFordHeight("ford_pavement", {}), pave_blank: waitsFordHeight("ford_pavement", { ford_height_m: "" }), pave_set: waitsFordHeight("ford_pavement", { ford_height_m: 0.5 }), bridge_none: waitsFordHeight("ford_bridge", undefined), pipe: waitsFordHeight("pipe", {}), }, }; process.stdout.write(JSON.stringify(out));