Files
Aislo/resources/tester/helper_54_9_etc_pill.cjs
T
eomsangdonandClaude Opus 5.5 0dc6769d6b test(508-1d 빨강 가림 1/2): 낡은 가짜 모듈 넷 지금 코드에 맞춤 · 공용 불러오기로 · 낡은 기대 둘 맞춤
- 54_9 알약: 구조물 표 불러오기(322-1) 못 찾음 → makeLoader 기본 풀이
- 398_2 · 408: 곡선 판 가둠(505-3) ResizeObserver · 판 찾기 가짜 더함 → makeLoader
- 323_9: 라우터 draft 길 import.meta.glob(302-1) 가짜 · 옛 풀이 그대로 requireFor · 기대 = 노선 그대로 [저장] 가림막 없음(498-3 D1)
- test_app_settings: CAD 명령 153 → 154(488-3 IMPORT)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:43:27 +09:00

72 lines
2.5 KiB
JavaScript

/* 54-9 종단 알약 글 단위검증 헬퍼 — TS 를 그 자리에서 트랜스파일해 Node 로 돌린다.
* 결과는 표준출력에 JSON 한 벌. 화면 그릇은 쓰지 않는다(세션 저장소만 흉내).
*
* ⚠ 확장자가 `.cjs` 인 까닭은 `helper_b05_structures_form_summary.cjs` 머리와 같다.
*/
const path = require("path");
const { makeLoader, memoryStorage } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", "..");
const fakeStorage = memoryStorage();
globalThis.window = { sessionStorage: fakeStorage, localStorage: fakeStorage };
globalThis.sessionStorage = fakeStorage;
globalThis.localStorage = fakeStorage;
const STUBS = {
"@config/config_frontend": { API_BASE_URL: "/api", API_TIMEOUT_MS: 1000 },
};
const { loadTs } = makeLoader({ root: ROOT, stubs: STUBS });
const marks = loadTs(path.join(ROOT, "B05_Profile", "B05_Profile_UI_Structures_Marks.ts"));
const typeMap = new Map([
["etc", { type_id: "etc", name: "기타", style: { abbr: "기타" }, options: [] }],
[
"retaining_wall",
{ type_id: "retaining_wall", name: "옹벽", style: { abbr: "옹" }, options: [] },
],
]);
const etc = (id, chainage, name) => ({
structure_id: id,
type_id: "etc",
placement: "point",
chainage_m: chainage,
options: name === undefined ? {} : { name },
});
const wall = (id, chainage) => ({
structure_id: id,
type_id: "retaining_wall",
placement: "point",
chainage_m: chainage,
options: {},
});
const run = (structures) =>
Object.fromEntries(
[...marks.structurePillTexts(structures, typeMap)].map(([id, text]) => [id, text]),
);
const out = {
// 53-2 시나리오 — 같은 이름 둘 · 다른 이름 · 빈 이름 둘(빈칸 이름 = 빈 이름)
scenario: run([
etc("e1", 40, "배수로정비"),
etc("e2", 60, "울타리"),
etc("e3", 80, ""),
etc("e4", 100, "배수로정비"),
etc("e5", 120, " "),
]),
// 머리가 같은 다른 이름 — 갈릴 때까지 늘림 · 이름이 남의 머리면 그 이름 그대로
prefix: run([
etc("p1", 10, "콘크리트 블록"),
etc("p2", 20, "콘크리트 옹벽"),
etc("p3", 30, "배수로"),
etc("p4", 40, "배수로공"),
etc("p5", 50, "기타 시설"),
etc("p6", 60),
]),
// 다른 종류 규칙은 그대로 — 약호 + 중복 번호 · 기타 하나 빈 이름 = 「기타」
others: run([wall("w1", 10), wall("w2", 30), etc("x1", 20, "가로등"), etc("x2", 40)]),
};
process.stdout.write(JSON.stringify(out));