/* 횡단 보기 반폭 [적용](PLAN 173-6) 단위검증 헬퍼 — `createSampleWidener` 를 그 자리에서 트랜스파일해 돌린다. * 보유 샘플(20 m) 안 요청은 재생성 없이 true · 넘는 요청만 재생성 한 번. 결과는 표준출력에 JSON 한 벌. * 짝 = `test_173_6_half_width_apply.py`. */ const fs = require("fs"); const path = require("path"); const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const ROOT = path.join(__dirname, "..", ".."); const calls = { regenerate: [], overlay: 0 }; const STUBS = { "@ui/ui_template_locale": { currentLanguageIndex: 0, ui_locales: new Proxy({}, { get: () => [""] }), }, "@ui/ui_template_elements": { showLoadingOverlay: () => calls.overlay++, hideLoadingOverlay: () => {}, showToast: () => {}, }, "./B06_Section_Api_Fetch": { regenerateSections: async (_p, _r, width) => calls.regenerate.push(width), fetchSectionDetail: async () => ({ cross_sections: [] }), }, "./B06_Section_Section_Store": { replaceSectionDetail: () => {} }, }; const file = path.join(ROOT, "B06_Section", "B06_Section_UI_Page_Common.ts"); 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, (r) => STUBS[r]); (async () => { let sampled = 20; const widen = box.exports.createSampleWidener({ target: () => ({ projectId: "p", routeId: 1 }), sampledHalfWidth: () => sampled, applyDetail: () => (sampled = calls.regenerate.at(-1)), }); const out = {}; out.within = [await widen(10), await widen(15), await widen(20)]; out.withinCalls = calls.regenerate.length; out.over = await widen(25); out.overCalls = [...calls.regenerate]; out.again = await widen(25); // 넓힌 뒤 같은 값은 재생성 없음 out.againCalls = calls.regenerate.length; process.stdout.write(JSON.stringify(out)); })();