Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3mdb91125mPoC6tpsQx4P
51 lines
2.0 KiB
JavaScript
51 lines
2.0 KiB
JavaScript
/* 횡단 보기 반폭 [적용](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));
|
|
})();
|