22 lines
1.1 KiB
JavaScript
22 lines
1.1 KiB
JavaScript
/* PLAN 511-A 거울 헬퍼 — 브라우저 자리가 부르는 TS 함수를 그 자리에서 트랜스파일해 Node 로 바로 부름.
|
|
* 입력 = argv[2] JSON `[{ mod: 뿌리 기준 경로, fn: export 이름, args: [...] }]` · 출력 = 표준출력 JSON 목록
|
|
* (Map · Set → 목록 = 서버 `plain` 과 같은 꼴). 짝 = `test_511_a_calc_server.py`(서버 창구 답과 견줌). */
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const { makeLoader, memoryStorage } = require("./helper_ts_stub_loader.cjs");
|
|
|
|
const ROOT = path.join(__dirname, "..", "..");
|
|
globalThis.window = { sessionStorage: memoryStorage(), localStorage: memoryStorage() };
|
|
const { loadTs } = makeLoader({ root: ROOT });
|
|
|
|
const plain = (value) =>
|
|
JSON.parse(
|
|
JSON.stringify(value, (_key, item) =>
|
|
item instanceof Map ? [...item.entries()] : item instanceof Set ? [...item] : item,
|
|
) ?? "null",
|
|
);
|
|
|
|
const job = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
const out = job.map(({ mod, fn, args }) => plain(loadTs(path.join(ROOT, mod))[fn](...args)));
|
|
process.stdout.write(JSON.stringify(out));
|