- 계산 묶음 drainage 단계(pipelineStage · 붙이기 = 묶음 쪽) — 노선 초안 · 관이 바뀌면 낡음 · 자동 = 3 s 조용한 뒤 「지금 노선으로 셈」 · 수동 = 칸만 흐림 + 가운데 [업데이트] · 구석 「계산 중」 · 다시 조작하면 요청 끊고 처음으로 · 덮개 없음 - ⚙ 설정 창(배수유역 칸 머리 · openModal) 수동(기본) / 자동 · 계정 화면 설정 drainage-mode(b_page_state 등록표 한 줄 · build:corridor 다시 지음) - 늦은 답 버림 = 차례 번호 · 서버 superseded · 세부유역 요청 감싸기와 같은 차례(B05_Profile_UI_Drainage_Run 으로 나눔) - 제안 = 관경(Ø→Ø) · 시설(BOX암거 · 세월교) · 관 자리 후보(지도 점선 원) · [적용] 한 번에 관 초안 · 자동 바꿈 없음 - [확정] savePipes(confirm) = PUT ?recompute=true · [저장] = 낡음 달고 저장 · 패널 691줄 - 순수 규칙 logic/B05_Profile_Drainage_Live · _Suggest · 시험 test_347_2_drainage_live_ui · typecheck 통과 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XWh5wNNycMkbwMpACz1rte
58 lines
2.3 KiB
JavaScript
58 lines
2.3 KiB
JavaScript
/* 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 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 }, 3, 3),
|
|
live.acceptLive({ status: "success", generation: 3 }, 3, 4),
|
|
live.acceptLive({ status: "superseded" }, 3, 3),
|
|
live.acceptLive({ status: "success", generation: 2 }, 3, 3),
|
|
],
|
|
body: live.liveRequestBody(5, undefined, [{ chainage_m: 1 }]),
|
|
suggestions,
|
|
applied,
|
|
untouched: JSON.stringify(pipes) === before,
|
|
}),
|
|
);
|