/* 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 })); })();