- 나무 = 구조물군 › 공통 + 종류 뼈대 먼저(빈 폴더도) · 목록 밖 값 뒤 · 미분류 맨 뒤 - 폴더 수 = 문서 수 · 문서 든 폴더만 처음 펼침 · 손으로 펴고 접은 것 기억 - 폴더 오른쪽 클릭 [여기에 새 사전조합] = 그 분류로 생성 → 상세 엶(못 쓰는 층은 흐림) - 이름 창(nameDialog) 목록표 밖으로 꺼내 함께 씀 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SE9MxeXTu2uaDZ55BJowAY
55 lines
2.7 KiB
JavaScript
55 lines
2.7 KiB
JavaScript
/* M02 일위대가 사전조합 층(134-3) 헬퍼 — `M02_MasterTemplete_Api_Fetch.ts` 명시 owner 길 ·
|
||
* `M02_MasterTemplete_UI_Side_Precombo.ts` `groupRows`(구분 › 상세구분 2단) 를 트랜스파일해 Node 로 돌림 ·
|
||
* `precomboClasses`(134-5 · 구조물군 › 종류 + 공통) · fetch 대역이 부른 주소를 모음 ·
|
||
* `classes`(149-1 분류 뼈대) · stdin = {rows, def?, classes?} · stdout = {urls, groups, classes} JSON. */
|
||
const fs = require("fs");
|
||
const path = require("path");
|
||
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript"));
|
||
|
||
const ROOT = path.join(__dirname, "..", "..");
|
||
const STUBS = { "@config/config_frontend": { API_BASE_URL: "/api" } };
|
||
const stub = new Proxy({}, { get: (_t, k) => (k === "currentLanguageIndex" ? () => 0 : () => {}) });
|
||
const cache = new Map();
|
||
function loadTs(file) {
|
||
const full = path.resolve(file);
|
||
if (cache.has(full)) return cache.get(full);
|
||
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), {
|
||
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
|
||
}).outputText;
|
||
const box = { exports: {} };
|
||
cache.set(full, box.exports);
|
||
const localRequire = (request) => {
|
||
if (STUBS[request]) return STUBS[request];
|
||
if (request.startsWith(".") && !request.endsWith(".css"))
|
||
return loadTs(`${path.resolve(path.dirname(full), request)}.ts`);
|
||
return stub;
|
||
};
|
||
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
|
||
return box.exports;
|
||
}
|
||
|
||
const urls = [];
|
||
global.fetch = async (url) => {
|
||
urls.push(url);
|
||
return { status: 200, ok: true, json: async () => ({ 양식: [] }) };
|
||
};
|
||
|
||
(async () => {
|
||
const input = JSON.parse(fs.readFileSync(0, "utf8"));
|
||
const api = loadTs(path.join(ROOT, "M02_MasterTemplete", "M02_MasterTemplete_Api_Fetch.ts"));
|
||
const side = loadTs(
|
||
path.join(ROOT, "M02_MasterTemplete", "M02_MasterTemplete_UI_Side_Precombo.ts"),
|
||
);
|
||
api.setActiveLayer("personal", "7/99"); // 페이지 = 남의 개인을 보는 중
|
||
await api.readTemplate("personal", "labor", "x1", null); // 페이지 층 = 그 사람
|
||
await api.readTemplate("personal", "precombo", "SC-000001", null, null); // 사전조합 = 내 개인
|
||
await api.listTemplates("company", null, "8"); // 사전조합 = 볼 회사
|
||
await api.saveTemplate("system", "precombo", "SC-000002", null, "v", {}, null);
|
||
const groups = side.groupRows(input.rows, "미분류", input.classes ?? []).map((g) => ({
|
||
구분: g.구분,
|
||
상세: [...g.상세].map(([k, v]) => [k, v.map((r) => r.이름)]),
|
||
}));
|
||
const classes = input.def ? side.precomboClasses(input.def) : null; // 134-5
|
||
process.stdout.write(JSON.stringify({ urls, groups, classes }));
|
||
})();
|