test(508-1b 옛 헬퍼 공용 불러오기 4/7): 헬퍼 28 곳 loadTs 베낌 걷고 makeLoader 로

- 헬퍼 동작 그대로(풀이 함수 본문은 옮겨 담음) · 제품 코드 안 고침
- 확인: 이 묶음 헬퍼를 쓰는 시험 236 개 전 230 통과 → 후 230 통과 (시험별 junit 대조 · 어긋남 0)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-21 17:11:59 +09:00
co-authored by Claude Sonnet 5.5
parent 156ce1cf52
commit 8bbdbb9f69
29 changed files with 186 additions and 446 deletions
@@ -4,26 +4,13 @@
* 짝 = `test_344_3_pipeline_stations_mirror.py`. */ * 짝 = `test_344_3_pipeline_stations_mirror.py`. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); // 구조물 표(322-1) const CATALOG = require("./helper_322_catalog_module.cjs"); // 구조물 표(322-1)
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(full) { root: ROOT,
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 (CATALOG.isCatalogRequest(request)) return CATALOG;
if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request);
};
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
return box.exports;
}
const logic = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Sections_Stations.ts")); const logic = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Sections_Stations.ts"));
const stage = loadTs( const stage = loadTs(
@@ -4,7 +4,7 @@
* 짝 = `test_344_4_design_pipeline.py`. */ * 짝 = `test_344_4_design_pipeline.py`. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -24,23 +24,13 @@ const session = memoryStorage();
globalThis.window = { sessionStorage: session, localStorage: memoryStorage() }; globalThis.window = { sessionStorage: session, localStorage: memoryStorage() };
globalThis.fetch = async () => ({ ok: false }); globalThis.fetch = async () => ({ ok: false });
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(file) { root: ROOT,
const full = path.resolve(file); requireFor: (full) => (request) =>
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) =>
request.startsWith(".") request.startsWith(".")
? loadTs(path.join(path.dirname(full), `${request}.ts`)) ? loadTs(path.join(path.dirname(full), `${request}.ts`))
: require(request); : require(request),
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const DESIGN = path.join(ROOT, "A00_Common", "design"); const DESIGN = path.join(ROOT, "A00_Common", "design");
const pipeMod = loadTs(path.join(DESIGN, "logic/design_pipeline.ts")); const pipeMod = loadTs(path.join(DESIGN, "logic/design_pipeline.ts"));
+6 -10
View File
@@ -4,7 +4,7 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -78,15 +78,11 @@ const STUBS = {
}, },
}; };
function loadTs(file) { const { loadTs } = makeLoader({
const js = ts.transpileModule(fs.readFileSync(file, "utf8"), { root: ROOT,
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, cache: false,
}).outputText; requireFor: (full) => (request) => STUBS[request] ?? require(request),
const box = { exports: {} }; });
const localRequire = (request) => STUBS[request] ?? require(request);
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
return box.exports;
}
const { createViewer3dModal } = loadTs( const { createViewer3dModal } = loadTs(
path.join(ROOT, "A00_Common", "design", "design_view_profile_3d_modal.ts"), path.join(ROOT, "A00_Common", "design", "design_view_profile_3d_modal.ts"),
+6 -15
View File
@@ -4,7 +4,7 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const listeners = {}; const listeners = {};
@@ -14,22 +14,13 @@ global.window = {
}; };
const fire = (type, event) => [...(listeners[type] ?? [])].forEach((fn) => fn(event)); const fire = (type, event) => [...(listeners[type] ?? [])].forEach((fn) => fn(event));
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(file) { root: ROOT,
const full = path.resolve(file); requireFor: (full) => (request) =>
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) =>
request.startsWith(".") request.startsWith(".")
? loadTs(`${path.resolve(path.dirname(full), request)}.ts`) ? loadTs(`${path.resolve(path.dirname(full), request)}.ts`)
: require(request); : require(request),
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const page = path.join(ROOT, "B05_Profile"); const page = path.join(ROOT, "B05_Profile");
const { bindHistoryControls } = loadTs(path.join(page, "B05_Profile_UI_RouteEdit_History.ts")); const { bindHistoryControls } = loadTs(path.join(page, "B05_Profile_UI_RouteEdit_History.ts"));
@@ -5,7 +5,7 @@
* 결과 = 표준출력 JSON 한 벌. 짝 = `test_346_1_pipeline_page.py`. */ * 결과 = 표준출력 JSON 한 벌. 짝 = `test_346_1_pipeline_page.py`. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); const CATALOG = require("./helper_322_catalog_module.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -28,15 +28,9 @@ globalThis.window = { sessionStorage: session, localStorage: memoryStorage() };
globalThis.fetch = async () => ({ ok: false }); globalThis.fetch = async () => ({ ok: false });
const STUBS = {}; const STUBS = {};
const cache = new Map(); const { load, loadTs } = makeLoader({
function loadTs(full) { root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (request) => {
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 (CATALOG.isCatalogRequest(request)) return CATALOG; if (CATALOG.isCatalogRequest(request)) return CATALOG;
const key = Object.keys(STUBS).find((name) => request.endsWith(name)); const key = Object.keys(STUBS).find((name) => request.endsWith(name));
if (key) return STUBS[key]; if (key) return STUBS[key];
@@ -44,11 +38,8 @@ function loadTs(full) {
return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`)); return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`));
if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request); return require(request);
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const load = (...parts) => loadTs(path.join(ROOT, ...parts));
const sampler = load("common_util", "common_util_surface_sampler.ts"); const sampler = load("common_util", "common_util_surface_sampler.ts");
const bytes = fs.readFileSync(process.argv[3]); const bytes = fs.readFileSync(process.argv[3]);
@@ -5,7 +5,7 @@
* 결과 = 표준출력 JSON. 짝 = `test_346_2_draft_cross_pills.py`. */ * 결과 = 표준출력 JSON. 짝 = `test_346_2_draft_cross_pills.py`. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const P = "p3463"; const P = "p3463";
@@ -63,15 +63,9 @@ const STUBS = {
}, },
}; };
const cache = new Map(); const { load, loadTs } = makeLoader({
function loadTs(full) { root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (request) => {
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) => {
const key = Object.keys(STUBS).find((name) => request.endsWith(name)); const key = Object.keys(STUBS).find((name) => request.endsWith(name));
if (key) return STUBS[key]; if (key) return STUBS[key];
if (request.endsWith("config_frontend") || request.startsWith("@config/")) if (request.endsWith("config_frontend") || request.startsWith("@config/"))
@@ -80,11 +74,8 @@ function loadTs(full) {
return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`)); return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`));
if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request); return require(request);
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const load = (...parts) => loadTs(path.join(ROOT, ...parts));
const pipeMod = load("A00_Common", "design", "logic", "design_pipeline.ts"); const pipeMod = load("A00_Common", "design", "logic", "design_pipeline.ts");
const storeMod = load("A00_Common", "design", "design_store.ts"); const storeMod = load("A00_Common", "design", "design_store.ts");
+6 -15
View File
@@ -3,7 +3,7 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -70,23 +70,14 @@ const STUBS = {
}, },
}; };
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(file) { root: ROOT,
const full = path.resolve(file); requireFor: (full) => (request) => {
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 (STUBS[request]) return STUBS[request];
if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request); return require(request);
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const { useDesignStore } = loadTs(path.join(ROOT, "A00_Common", "design", "design_store.ts")); const { useDesignStore } = loadTs(path.join(ROOT, "A00_Common", "design", "design_store.ts"));
const { readState, writeState } = loadTs(path.join(ROOT, "A00_Common", "b_page_state.ts")); const { readState, writeState } = loadTs(path.join(ROOT, "A00_Common", "b_page_state.ts"));
+7 -11
View File
@@ -3,7 +3,7 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -59,21 +59,17 @@ const STUBS = {
}, },
}; };
function loadTs(file) { const { loadTs } = makeLoader({
const js = ts.transpileModule(fs.readFileSync(file, "utf8"), { root: ROOT,
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, cache: false,
}).outputText; requireFor: (full, file) => (request) => {
const box = { exports: {} };
const localRequire = (request) => {
if (request in STUBS) return STUBS[request]; if (request in STUBS) return STUBS[request];
if (request === "@ui/ui_template_window_watch") if (request === "@ui/ui_template_window_watch")
return loadTs(path.join(ROOT, "ui_template", "ui_template_window_watch.ts")); return loadTs(path.join(ROOT, "ui_template", "ui_template_window_watch.ts"));
if (request.startsWith(".")) return loadTs(path.join(path.dirname(file), `${request}.ts`)); if (request.startsWith(".")) return loadTs(path.join(path.dirname(file), `${request}.ts`));
return require(request); return require(request);
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const leave = loadTs(path.join(ROOT, "A00_Common", "design", "design_leave.ts")); const leave = loadTs(path.join(ROOT, "A00_Common", "design", "design_leave.ts"));
const P = "p1"; const P = "p1";
+6 -15
View File
@@ -4,7 +4,7 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const data = new Map(); const data = new Map();
@@ -24,22 +24,13 @@ win.sessionStorage = globalThis.sessionStorage;
win.localStorage = { getItem: (k) => (k === "frd_current_project_id" ? "p1" : null) }; // 연 프로젝트(387-1) win.localStorage = { getItem: (k) => (k === "frd_current_project_id" ? "p1" : null) }; // 연 프로젝트(387-1)
globalThis.window = win; globalThis.window = win;
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(file) { root: ROOT,
const full = path.resolve(file); requireFor: (full) => (request) =>
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) =>
request.startsWith(".") request.startsWith(".")
? loadTs(`${path.resolve(path.dirname(full), request)}.ts`) ? loadTs(`${path.resolve(path.dirname(full), request)}.ts`)
: require(request); : require(request),
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const page = path.join(ROOT, "B05_Profile"); const page = path.join(ROOT, "B05_Profile");
const album = loadTs(path.join(page, "B05_Profile_UI_Profile_History.ts")); const album = loadTs(path.join(page, "B05_Profile_UI_Profile_History.ts"));
const edit = loadTs(path.join(page, "B05_Profile_UI_RouteEdit_History.ts")); const edit = loadTs(path.join(page, "B05_Profile_UI_RouteEdit_History.ts"));
@@ -3,18 +3,15 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
function loadTs(file) { const { loadTs } = makeLoader({
const js = ts.transpileModule(fs.readFileSync(file, "utf8"), { root: ROOT,
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, cache: false,
}).outputText; requireFor: () => require,
const box = { exports: {} }; });
new Function("exports", "module", "require", js)(box.exports, box, require);
return box.exports;
}
const live = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Drainage_Live.ts")); const live = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Drainage_Live.ts"));
const sug = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Drainage_Suggest.ts")); const sug = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Drainage_Suggest.ts"));
+6 -14
View File
@@ -3,7 +3,7 @@
* 결과 = 표준출력 JSON 한 벌. 짝 = `test_352_3_analysis_terrain_default.py`. */ * 결과 = 표준출력 JSON 한 벌. 짝 = `test_352_3_analysis_terrain_default.py`. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const store = new Map(); const store = new Map();
@@ -17,22 +17,14 @@ const STUBS = {
common_util_surface_sampler: { heightAt: () => 0 }, common_util_surface_sampler: { heightAt: () => 0 },
B05_Profile_Api_TerrainGrid: { loadDesignTerrainGrid: async () => null }, B05_Profile_Api_TerrainGrid: { loadDesignTerrainGrid: async () => null },
}; };
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(full) { root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (request) => {
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) => {
const key = Object.keys(STUBS).find((name) => request.endsWith(name)); const key = Object.keys(STUBS).find((name) => request.endsWith(name));
if (key) return STUBS[key]; if (key) return STUBS[key];
return require(request); return require(request);
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const api = loadTs(path.join(ROOT, "B05_Profile", "B05_Profile_Api_Replan.ts")); const api = loadTs(path.join(ROOT, "B05_Profile", "B05_Profile_Api_Replan.ts"));
const out = {}; const out = {};
+4 -18
View File
@@ -6,26 +6,12 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(file) { root: ROOT,
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 (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request);
};
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
cache.set(full, box.exports);
return box.exports;
}
const LOGIC = path.join(ROOT, "B05_Profile", "logic"); const LOGIC = path.join(ROOT, "B05_Profile", "logic");
const align = loadTs(path.join(LOGIC, "B05_Profile_UI_Profile_Alignment.ts")); const align = loadTs(path.join(LOGIC, "B05_Profile_UI_Profile_Alignment.ts"));
+6 -14
View File
@@ -6,7 +6,7 @@
* argv[4] = "off" 면 되살림 표시를 끔(옛 동작 대조). 결과 = 표준출력 JSON. 짝 = `test_356_4_undo_grade.py`. */ * argv[4] = "off" 면 되살림 표시를 끔(옛 동작 대조). 결과 = 표준출력 JSON. 짝 = `test_356_4_undo_grade.py`. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); const CATALOG = require("./helper_322_catalog_module.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -53,14 +53,9 @@ globalThis.fetch = (url, init) =>
const STUBS = {}; const STUBS = {};
const cache = new Map(); const cache = new Map();
function loadTs(full) { const { load, loadTs } = makeLoader({
if (cache.has(full)) return cache.get(full); root: ROOT,
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { requireFor: (full) => (request) => {
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
}).outputText;
const box = { exports: {} };
cache.set(full, box.exports);
const localRequire = (request) => {
if (CATALOG.isCatalogRequest(request)) return CATALOG; if (CATALOG.isCatalogRequest(request)) return CATALOG;
const key = Object.keys(STUBS).find((name) => request.endsWith(name)); const key = Object.keys(STUBS).find((name) => request.endsWith(name));
if (key) return STUBS[key]; if (key) return STUBS[key];
@@ -72,11 +67,8 @@ function loadTs(full) {
return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`)); return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`));
if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request); return require(request);
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const load = (...parts) => loadTs(path.join(ROOT, ...parts));
const sampler = load("common_util", "common_util_surface_sampler.ts"); const sampler = load("common_util", "common_util_surface_sampler.ts");
const bytes = fs.readFileSync(process.argv[3]); const bytes = fs.readFileSync(process.argv[3]);
+7 -25
View File
@@ -4,10 +4,9 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
const STUBS = { const STUBS = {
"@ui/ui_template_toast": { showToast: () => undefined }, "@ui/ui_template_toast": { showToast: () => undefined },
"@ui/ui_template_elements": { showToast: () => undefined }, "@ui/ui_template_elements": { showToast: () => undefined },
@@ -124,24 +123,10 @@ globalThis.document = {
}; };
globalThis.window = { setTimeout, clearTimeout, addEventListener: () => {} }; globalThis.window = { setTimeout, clearTimeout, addEventListener: () => {} };
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); interop: true,
if (full.endsWith(".json")) { requireFor: (full) => (request) => {
const data = JSON.parse(fs.readFileSync(full, "utf8"));
cache.set(full, data);
return data;
}
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), {
compilerOptions: {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2020,
esModuleInterop: true,
},
}).outputText;
const box = { exports: {} };
cache.set(full, box.exports);
const localRequire = (request) => {
if (STUBS[request]) return STUBS[request]; if (STUBS[request]) return STUBS[request];
if (request.endsWith(".css")) return {}; if (request.endsWith(".css")) return {};
const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" }; const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" };
@@ -149,11 +134,8 @@ function loadTs(file) {
if (request.startsWith(prefix)) if (request.startsWith(prefix))
return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length)))); return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length))));
return loadTs(resolve(path.join(path.dirname(full), request))); return loadTs(resolve(path.join(path.dirname(full), request)));
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const resolve = (base) => const resolve = (base) =>
[base, `${base}.ts`, path.join(base, "index.ts")].find( [base, `${base}.ts`, path.join(base, "index.ts")].find(
(p) => fs.existsSync(p) && fs.statSync(p).isFile(), (p) => fs.existsSync(p) && fs.statSync(p).isFile(),
+6 -15
View File
@@ -4,7 +4,7 @@
* 짝 = `test_365_page_pipeline.py`. */ * 짝 = `test_365_page_pipeline.py`. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); const CATALOG = require("./helper_322_catalog_module.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -46,15 +46,9 @@ globalThis.fetch = (url, init) =>
}); });
const STUBS = {}; const STUBS = {};
const cache = new Map(); const { load, loadTs } = makeLoader({
function loadTs(full) { root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (request) => {
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 (CATALOG.isCatalogRequest(request)) return CATALOG; if (CATALOG.isCatalogRequest(request)) return CATALOG;
const key = Object.keys(STUBS).find((name) => request.endsWith(name)); const key = Object.keys(STUBS).find((name) => request.endsWith(name));
if (key) return STUBS[key]; if (key) return STUBS[key];
@@ -63,11 +57,8 @@ function loadTs(full) {
return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`)); return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`));
if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request); return require(request);
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
return box.exports;
}
const load = (...parts) => loadTs(path.join(ROOT, ...parts));
// 상세 가게 칸(472-5) — 실제는 상세 가게가 받을 때 채움 · 여기선 종단도가 내주는 저장 상세 그대로 // 상세 가게 칸(472-5) — 실제는 상세 가게가 받을 때 채움 · 여기선 종단도가 내주는 저장 상세 그대로
const slots = () => load("B06_Section", "B06_Section_Section_Canon.ts"); const slots = () => load("B06_Section", "B06_Section_Section_Canon.ts");
/** 이 시험은 묶음 여럿(P · Q · B)이 같은 종단도 흉내를 씀 — 칸 = 지금 연 프로젝트. */ /** 이 시험은 묶음 여럿(P · Q · B)이 같은 종단도 흉내를 씀 — 칸 = 지금 연 프로젝트. */
+6 -16
View File
@@ -4,27 +4,17 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (request) =>
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) =>
request.startsWith(".") request.startsWith(".")
? loadTs(path.join(path.dirname(full), `${request}.ts`)) ? loadTs(path.join(path.dirname(full), `${request}.ts`))
: require(request); : require(request),
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const LOGIC = path.join(ROOT, "B05_Profile", "logic"); const LOGIC = path.join(ROOT, "B05_Profile", "logic");
const fit = loadTs(path.join(LOGIC, "B05_Profile_RouteEdit_StationFit.ts")); const fit = loadTs(path.join(LOGIC, "B05_Profile_RouteEdit_StationFit.ts"));
@@ -3,26 +3,13 @@
* 입력 argv[2] JSON {line, curves, pipes, structures, types, at: [m...]} · 짝 = test_368_4_probe_station.py. */ * 입력 argv[2] JSON {line, curves, pipes, structures, types, at: [m...]} · 짝 = test_368_4_probe_station.py. */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); const CATALOG = require("./helper_322_catalog_module.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map(); const { loadTs } = makeLoader({
function loadTs(full) { root: ROOT,
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 (CATALOG.isCatalogRequest(request)) return CATALOG;
if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`));
return require(request);
};
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
return box.exports;
}
const logic = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Sections_Stations.ts")); const logic = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_Sections_Stations.ts"));
const station = loadTs(path.join(ROOT, "common_util", "common_util_structure_station.ts")); const station = loadTs(path.join(ROOT, "common_util", "common_util_structure_station.ts"));
+7 -25
View File
@@ -4,10 +4,9 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
const STUBS = { const STUBS = {
"@ui/ui_template_toast": { showToast: () => undefined }, "@ui/ui_template_toast": { showToast: () => undefined },
"@ui/ui_template_elements": { showToast: () => undefined }, "@ui/ui_template_elements": { showToast: () => undefined },
@@ -116,24 +115,10 @@ globalThis.document = {
}; };
globalThis.window = { setTimeout, clearTimeout, addEventListener: () => {} }; globalThis.window = { setTimeout, clearTimeout, addEventListener: () => {} };
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); interop: true,
if (full.endsWith(".json")) { requireFor: (full) => (request) => {
const data = JSON.parse(fs.readFileSync(full, "utf8"));
cache.set(full, data);
return data;
}
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), {
compilerOptions: {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2020,
esModuleInterop: true,
},
}).outputText;
const box = { exports: {} };
cache.set(full, box.exports);
const localRequire = (request) => {
if (STUBS[request]) return STUBS[request]; if (STUBS[request]) return STUBS[request];
if (request.endsWith(".css")) return {}; if (request.endsWith(".css")) return {};
const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" }; const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" };
@@ -141,11 +126,8 @@ function loadTs(file) {
if (request.startsWith(prefix)) if (request.startsWith(prefix))
return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length)))); return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length))));
return loadTs(resolve(path.join(path.dirname(full), request))); return loadTs(resolve(path.join(path.dirname(full), request)));
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const resolve = (base) => const resolve = (base) =>
[base, `${base}.ts`, path.join(base, "index.ts")].find( [base, `${base}.ts`, path.join(base, "index.ts")].find(
(p) => fs.existsSync(p) && fs.statSync(p).isFile(), (p) => fs.existsSync(p) && fs.statSync(p).isFile(),
+6 -16
View File
@@ -3,10 +3,9 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
class Node { class Node {
constructor(tag) { constructor(tag) {
@@ -84,22 +83,13 @@ const key = (name) =>
fn({ key: name, target: null, preventDefault: () => undefined }), fn({ key: name, target: null, preventDefault: () => undefined }),
); );
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (r) =>
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 req = (r) =>
r.startsWith("@util/") r.startsWith("@util/")
? loadTs(path.join(ROOT, "common_util", `${r.slice(6)}.ts`)) ? loadTs(path.join(ROOT, "common_util", `${r.slice(6)}.ts`))
: loadTs(path.join(path.dirname(full), `${r}.ts`)); : loadTs(path.join(path.dirname(full), `${r}.ts`)),
new Function("exports", "module", "require", js)(box.exports, box, req); });
cache.set(full, box.exports);
return box.exports;
}
globalThis.Element = Node; globalThis.Element = Node;
const pick = loadTs(path.join(ROOT, "B06_Section", "B06_Section_UI_Cross_Design_Pick.ts")); const pick = loadTs(path.join(ROOT, "B06_Section", "B06_Section_UI_Cross_Design_Pick.ts"));
+15 -22
View File
@@ -3,10 +3,9 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
const noop = new Proxy({}, { get: () => () => "" }); const noop = new Proxy({}, { get: () => () => "" });
/** 아주 작은 SVG 가짜 — 글 자리 판정에 쓰는 것만(class 고르기 · 속성 · 부모). */ /** 아주 작은 SVG 가짜 — 글 자리 판정에 쓰는 것만(class 고르기 · 속성 · 부모). */
@@ -47,26 +46,20 @@ class El {
} }
globalThis.document = { addEventListener: () => undefined, createElementNS: (_ns, t) => new El(t) }; globalThis.document = { addEventListener: () => undefined, createElementNS: (_ns, t) => new El(t) };
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => {
if (full.endsWith(".json")) return JSON.parse(fs.readFileSync(full, "utf8")); const resolve = (base) =>
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { fs.existsSync(base) && fs.statSync(base).isFile() ? base : `${base}.ts`;
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, const req = (r) => {
}).outputText; if (r.startsWith("@ui/") || r.startsWith("@config/")) return noop;
const box = { exports: {} }; if (r.startsWith("@util/"))
cache.set(full, box.exports); return loadTs(resolve(path.join(ROOT, "common_util", r.slice(6))));
const resolve = (base) => return loadTs(resolve(path.join(path.dirname(full), r)));
fs.existsSync(base) && fs.statSync(base).isFile() ? base : `${base}.ts`; };
const req = (r) => { return req;
if (r.startsWith("@ui/") || r.startsWith("@config/")) return noop; },
if (r.startsWith("@util/")) return loadTs(resolve(path.join(ROOT, "common_util", r.slice(6)))); });
return loadTs(resolve(path.join(path.dirname(full), r)));
};
new Function("exports", "module", "require", js)(box.exports, box, req);
cache.set(full, box.exports);
return box.exports;
}
const { computeCulvertLayout } = loadTs( const { computeCulvertLayout } = loadTs(
path.join(ROOT, "B06_Section", "B06_Section_UI_Cross_Culvert_Geom.ts"), path.join(ROOT, "B06_Section", "B06_Section_UI_Cross_Culvert_Geom.ts"),
+9 -11
View File
@@ -3,21 +3,19 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
function loadTs(file, stubs = {}) { function loadTs(file, stubs = {}) {
const js = ts.transpileModule(fs.readFileSync(path.join(ROOT, file), "utf8"), { return makeLoader({
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, root: ROOT,
}).outputText; cache: false,
const box = { exports: {} }; requireFor: (full) => (request) => {
const localRequire = (request) => { if (stubs[request]) return stubs[request];
if (stubs[request]) return stubs[request]; throw new Error(`stub 없음: ${request} (${file})`);
throw new Error(`stub 없음: ${request} (${file})`); },
}; }).loadTs(path.join(ROOT, file));
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
return box.exports;
} }
const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8")); const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
+9 -11
View File
@@ -3,21 +3,19 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
function loadTs(file, stubs = {}) { function loadTs(file, stubs = {}) {
const js = ts.transpileModule(fs.readFileSync(path.join(ROOT, file), "utf8"), { return makeLoader({
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, root: ROOT,
}).outputText; cache: false,
const box = { exports: {} }; requireFor: (full) => (request) => {
const localRequire = (request) => { if (stubs[request]) return stubs[request];
if (stubs[request]) return stubs[request]; throw new Error(`stub 없음: ${request} (${file})`);
throw new Error(`stub 없음: ${request} (${file})`); },
}; }).loadTs(path.join(ROOT, file));
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
return box.exports;
} }
const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8")); const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
+6 -16
View File
@@ -3,27 +3,17 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (request) =>
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) =>
request.startsWith(".") request.startsWith(".")
? loadTs(path.join(path.dirname(full), `${request}.ts`)) ? loadTs(path.join(path.dirname(full), `${request}.ts`))
: require(request); : require(request),
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const nudge = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_RouteEdit_KeyNudge.ts")); const nudge = loadTs(path.join(ROOT, "B05_Profile", "logic", "B05_Profile_RouteEdit_KeyNudge.ts"));
+7 -20
View File
@@ -3,26 +3,16 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); // 구조물 표(322-1) const CATALOG = require("./helper_322_catalog_module.cjs"); // 구조물 표(322-1)
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
const STUBS = { "@ui/ui_template_toast": { showToast: () => undefined } }; const STUBS = { "@ui/ui_template_toast": { showToast: () => undefined } };
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); interop: true,
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { requireFor: (full) => (request) => {
compilerOptions: {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2020,
esModuleInterop: true,
},
}).outputText;
const box = { exports: {} };
cache.set(full, box.exports);
const localRequire = (request) => {
if (CATALOG.isCatalogRequest(request)) return CATALOG; if (CATALOG.isCatalogRequest(request)) return CATALOG;
if (STUBS[request]) return STUBS[request]; if (STUBS[request]) return STUBS[request];
const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" }; const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" };
@@ -30,11 +20,8 @@ function loadTs(file) {
if (request.startsWith(prefix)) if (request.startsWith(prefix))
return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length)))); return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length))));
return loadTs(resolve(path.join(path.dirname(full), request))); return loadTs(resolve(path.join(path.dirname(full), request)));
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const resolve = (base) => const resolve = (base) =>
[base, `${base}.ts`, path.join(base, "index.ts")].find( [base, `${base}.ts`, path.join(base, "index.ts")].find(
(p) => fs.existsSync(p) && fs.statSync(p).isFile(), (p) => fs.existsSync(p) && fs.statSync(p).isFile(),
@@ -4,26 +4,16 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); // 구조물 표(322-1) const CATALOG = require("./helper_322_catalog_module.cjs"); // 구조물 표(322-1)
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
const STUBS = { "@ui/ui_template_toast": { showToast: () => undefined } }; const STUBS = { "@ui/ui_template_toast": { showToast: () => undefined } };
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); interop: true,
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { requireFor: (full) => (request) => {
compilerOptions: {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2020,
esModuleInterop: true,
},
}).outputText;
const box = { exports: {} };
cache.set(full, box.exports);
const localRequire = (request) => {
if (CATALOG.isCatalogRequest(request)) return CATALOG; if (CATALOG.isCatalogRequest(request)) return CATALOG;
if (STUBS[request]) return STUBS[request]; if (STUBS[request]) return STUBS[request];
const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" }; const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" };
@@ -31,11 +21,8 @@ function loadTs(file) {
if (request.startsWith(prefix)) if (request.startsWith(prefix))
return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length)))); return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length))));
return loadTs(resolve(path.join(path.dirname(full), request))); return loadTs(resolve(path.join(path.dirname(full), request)));
}; },
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const resolve = (base) => const resolve = (base) =>
[base, `${base}.ts`, path.join(base, "index.ts")].find( [base, `${base}.ts`, path.join(base, "index.ts")].find(
(p) => fs.existsSync(p) && fs.statSync(p).isFile(), (p) => fs.existsSync(p) && fs.statSync(p).isFile(),
@@ -5,7 +5,7 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const CATALOG = require("./helper_322_catalog_module.cjs"); const CATALOG = require("./helper_322_catalog_module.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
@@ -95,35 +95,23 @@ const STUBS = {
"config_frontend.ts": anyModule({ PIPE_TYPES: [] }), "config_frontend.ts": anyModule({ PIPE_TYPES: [] }),
}; };
const cache = new Map();
const resolve = (base) => const resolve = (base) =>
[base, `${base}.ts`, path.join(base, "index.ts")].find( [base, `${base}.ts`, path.join(base, "index.ts")].find(
(p) => fs.existsSync(p) && fs.statSync(p).isFile(), (p) => fs.existsSync(p) && fs.statSync(p).isFile(),
) ?? `${base}.ts`; ) ?? `${base}.ts`;
function loadTs(full) { const { loadTs } = makeLoader({
const stub = STUBS[path.basename(full)]; root: ROOT,
if (stub) return stub; interop: true,
if (cache.has(full)) return cache.get(full); fileStub: (full) => STUBS[path.basename(full)],
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { requireFor: (full) => (request) => {
compilerOptions: {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2020,
esModuleInterop: true,
},
}).outputText;
const box = { exports: {} };
cache.set(full, box.exports);
const near = (request) => {
if (CATALOG.isCatalogRequest(request)) return CATALOG; if (CATALOG.isCatalogRequest(request)) return CATALOG;
const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" }; const alias = { "@util/": "common_util", "@ui/": "ui_template", "@config/": "config" };
for (const [prefix, dir] of Object.entries(alias)) for (const [prefix, dir] of Object.entries(alias))
if (request.startsWith(prefix)) if (request.startsWith(prefix))
return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length)))); return loadTs(resolve(path.join(ROOT, dir, request.slice(prefix.length))));
return loadTs(resolve(path.join(path.dirname(full), request))); return loadTs(resolve(path.join(path.dirname(full), request)));
}; },
new Function("exports", "module", "require", js)(box.exports, box, near); });
return box.exports;
}
const B06 = (f) => path.join(ROOT, "B06_Section", `${f}.ts`); const B06 = (f) => path.join(ROOT, "B06_Section", `${f}.ts`);
const store = loadTs(B06("B06_Section_Section_Store")); const store = loadTs(B06("B06_Section_Section_Store"));
@@ -5,27 +5,17 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const cache = new Map();
function loadTs(file) { const { loadTs } = makeLoader({
const full = path.resolve(file); root: ROOT,
if (cache.has(full)) return cache.get(full); requireFor: (full) => (request) =>
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) =>
request.startsWith(".") request.startsWith(".")
? loadTs(path.join(path.dirname(full), `${request}.ts`)) ? loadTs(path.join(path.dirname(full), `${request}.ts`))
: require(request); : require(request),
new Function("exports", "module", "require", js)(box.exports, box, localRequire); });
cache.set(full, box.exports);
return box.exports;
}
const LOGIC = path.join(ROOT, "B05_Profile", "logic"); const LOGIC = path.join(ROOT, "B05_Profile", "logic");
const fit = loadTs(path.join(LOGIC, "B05_Profile_RouteEdit_StationFit.ts")); const fit = loadTs(path.join(LOGIC, "B05_Profile_RouteEdit_StationFit.ts"));
@@ -4,7 +4,7 @@
*/ */
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", ".."); const ROOT = path.join(__dirname, "..", "..");
const common = fs.readFileSync( const common = fs.readFileSync(
@@ -13,15 +13,11 @@ const common = fs.readFileSync(
); );
const CROSS_PAD = Function(`return ${/export const CROSS_PAD = (\{[^}]*\})/.exec(common)[1]}`)(); const CROSS_PAD = Function(`return ${/export const CROSS_PAD = (\{[^}]*\})/.exec(common)[1]}`)();
const STUBS = { "./B06_Section_UI_Section_Common": { CROSS_PAD, L: (k) => k } }; const STUBS = { "./B06_Section_UI_Section_Common": { CROSS_PAD, L: (k) => k } };
function loadTs(full) { const { loadTs } = makeLoader({
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { root: ROOT,
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, cache: false,
}).outputText; requireFor: (full) => (request) => STUBS[request] ?? {},
const box = { exports: {} }; });
const localRequire = (request) => STUBS[request] ?? {};
new Function("exports", "module", "require", js)(box.exports, box, localRequire);
return box.exports;
}
globalThis.localStorage = { getItem: () => null }; // 휠 방향 기본(밂 = 확대) globalThis.localStorage = { getItem: () => null }; // 휠 방향 기본(밂 = 확대)
STUBS["./input_prefs"] = loadTs(path.join(ROOT, "A00_Common", "input_prefs.ts")); STUBS["./input_prefs"] = loadTs(path.join(ROOT, "A00_Common", "input_prefs.ts"));
STUBS["../A00_Common/b_svg_zoom_pan"] = loadTs(path.join(ROOT, "A00_Common", "b_svg_zoom_pan.ts")); STUBS["../A00_Common/b_svg_zoom_pan"] = loadTs(path.join(ROOT, "A00_Common", "b_svg_zoom_pan.ts"));
+2 -2
View File
@@ -29,7 +29,7 @@ function memoryStorage() {
} }
/* 옵션 — 옮겨 온 옛 헬퍼가 저마다 달리 쓰던 것(헬퍼 동작 그대로). /* 옵션 — 옮겨 온 옛 헬퍼가 저마다 달리 쓰던 것(헬퍼 동작 그대로).
* requireFor(full) 풀이 함수를 헬퍼가 직접 지음(기본 풀이 대신) · 인자 없으면 진짜 require * requireFor(full, file) 풀이 함수를 헬퍼가 직접 지음(기본 풀이 대신) · 인자 없으면 진짜 require
* interop esModuleInterop 로 트랜스파일 * interop esModuleInterop 로 트랜스파일
* cache:false 같은 파일을 부를 때마다 새로 읽음(기본은 한 번만) * cache:false 같은 파일을 부를 때마다 새로 읽음(기본은 한 번만)
* fileStub(full) 파일 경로로 통째 대신할 값(없으면 undefined) */ * fileStub(full) 파일 경로로 통째 대신할 값(없으면 undefined) */
@@ -73,7 +73,7 @@ function makeLoader({
const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { compilerOptions }).outputText; const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { compilerOptions }).outputText;
const box = { exports: {} }; const box = { exports: {} };
if (useCache) cache.set(full, box.exports); if (useCache) cache.set(full, box.exports);
const localRequire = requireFor ? requireFor(full) : defaultRequire(full); const localRequire = requireFor ? requireFor(full, file) : defaultRequire(full);
new Function("exports", "module", "require", js)(box.exports, box, localRequire); new Function("exports", "module", "require", js)(box.exports, box, localRequire);
if (useCache) cache.set(full, box.exports); if (useCache) cache.set(full, box.exports);
return box.exports; return box.exports;