- 옮김: B04 2 · B05 23 · B06 11 · A00_Common/design 13 (9,299 줄) · 이미 logic/ 에 있던 16 파일 그대로 - 안 옮김: 묶음 입구(package.json build:*) · 파이썬 · 순수지만 계산 아닌 8 (보기 결선 · 콜백 · API 타입 · 갈아끼움 알림판) - import 266 줄(142 파일) · 시험 · 주석 · 짝 표시 문자열 경로 고침 · B05 · B06 CLAUDE.md 짝 줄 logic/ - 시험 도우미 새 경로: 가짜 require 열쇠 · B05()/B06() 부름 · 형제 import 자리 · tsc 묶어 돌리는 시험 · 정규식 · rglob - design_view_cross 줄 한도 시험 685 → 688 (긴 import 경로 줄바꿈 3줄) - 확인: typecheck 0 · 서버 묶음 넷(corridor · server-calc · b07-extent · b07-note) 다시 지어 코드 같음(//#region 경로 주석만 다름) · 관련 시험 270 파일 — 남은 실패 19 는 옮기기 전과 같음 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014utrjfoW831Vc5wJUd13kL
100 lines
3.6 KiB
JavaScript
100 lines
3.6 KiB
JavaScript
/* 구조물 정의 → 칸 모양 단위검증 헬퍼(PLAN 48-3 · 48-4) — `B05_Profile_UI_Structures_Define.ts` 를
|
|
* 그 자리에서 트랜스파일해 Node 로 돌림(import 없는 파일). 결과는 표준출력에 JSON 한 벌.
|
|
* 판 1 정의(`resources/master_template/구조물정의.json`)도 읽어 지금 화면과 같은지(차례 · 2열) 봄.
|
|
*/
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript"));
|
|
|
|
const ROOT = path.join(__dirname, "..", "..");
|
|
const src = fs.readFileSync(
|
|
path.join(ROOT, "B05_Profile", "logic", "B05_Profile_UI_Structures_Define.ts"),
|
|
"utf8",
|
|
);
|
|
const js = ts.transpileModule(src, {
|
|
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
|
|
}).outputText;
|
|
const box = { exports: {} };
|
|
new Function("exports", "module", "require", js)(box.exports, box, require);
|
|
const d = box.exports;
|
|
|
|
const opt = (key, extra = {}) => ({
|
|
key,
|
|
label: key,
|
|
input: "select",
|
|
choices: ["a", "b", "c"],
|
|
default: null,
|
|
...extra,
|
|
});
|
|
const type = {
|
|
options: [
|
|
opt("p"),
|
|
opt("q"),
|
|
opt("r", { enabled: false }),
|
|
opt("s", { visible: false }),
|
|
opt("t"),
|
|
],
|
|
spots: { t: { 줄: 1, 칸: 1, 너비: 2 }, p: { 줄: 2, 칸: 2 } },
|
|
rules: [
|
|
{
|
|
종류: "x",
|
|
만약: { 옵션: "p", 값들: ["a"] },
|
|
그러면: { 옵션: "q", 선택지: ["b", "c"], 기본값: "c" },
|
|
},
|
|
{ 종류: "x", 만약: { 옵션: "p", 값들: ["b"] }, 그러면: { 옵션: "q", 보이기: false } },
|
|
{ 종류: "x", 만약: { 옵션: "q", 값들: ["c"] }, 그러면: { 옵션: "t", 보이기: false } },
|
|
],
|
|
};
|
|
const plain = (states) => Object.fromEntries([...states].map(([k, v]) => [k, v]));
|
|
|
|
const def = JSON.parse(
|
|
fs.readFileSync(path.join(ROOT, "resources", "master_template", "구조물정의.json"), "utf8"),
|
|
);
|
|
const merged = d.withDefinition(
|
|
def.types.map((t) => ({ ...t, groups: (def.그룹[t.type_id] ?? []).map((g) => ({ id: g.id })) })),
|
|
def,
|
|
);
|
|
const v1 = merged.map((t) => ({
|
|
id: t.type_id,
|
|
same:
|
|
JSON.stringify(d.orderedOptions(t).map((o) => o.key)) ===
|
|
JSON.stringify(t.options.filter((o) => o.enabled !== false).map((o) => o.key)),
|
|
columns: d.columnsOf(t),
|
|
anchor: d.showsAnchor(t),
|
|
}));
|
|
|
|
const out = {
|
|
order: d.orderedOptions(type).map((o) => o.key),
|
|
columns: d.columnsOf(type),
|
|
columnsNone: d.columnsOf({}),
|
|
placeT: d.gridPlace(type.spots.t, 2),
|
|
placeNone: d.gridPlace(undefined, 2),
|
|
stateA: plain(d.ruleStates(type, { p: "a", q: "c" })),
|
|
stateB: plain(d.ruleStates(type, { p: "b", q: "c" })),
|
|
defaultsA: d.ruleDefaults(type, "p", { p: "a" }),
|
|
defaultsB: d.ruleDefaults(type, "p", { p: "b" }),
|
|
stale: d.staleValues({ p: "a", old_key: 3, g1__length_m: 2 }, ["p", "g1__length_m"]),
|
|
shapes: d.shapeFields({
|
|
길이: { 받기: true, 뜻: "연장" },
|
|
높이: { 받기: false },
|
|
후: { 받기: true },
|
|
}),
|
|
shapeKey: d.shapeKey("g1", "length_m"),
|
|
withNull: d.withDefinition([{ type_id: "a", group: "A" }], null),
|
|
withDef: d.withDefinition([{ type_id: "a", group: "A", groups: [{ id: "g1" }] }], {
|
|
구조물군: { A: "가 군" },
|
|
종류: { a: { 기준측점: false, 동작: ["계곡통과시설"] } },
|
|
그룹: { a: [{ id: "g1", 형상: { 길이: { 받기: true } } }] },
|
|
배치: { a: { k: { 줄: 1, 칸: 1 } } },
|
|
규칙: [
|
|
{ ...type.rules[0], 종류: "a" },
|
|
{ ...type.rules[1], 종류: "b" },
|
|
],
|
|
}),
|
|
v1Types: v1.length,
|
|
v1Same: v1.every((t) => t.same),
|
|
v1Columns: [...new Set(v1.map((t) => t.columns))],
|
|
v1Anchor: v1.every((t) => t.anchor),
|
|
};
|
|
process.stdout.write(JSON.stringify(out));
|