import "./style.css"; async function loadProvincesLocal() { const res = await fetch("./provinces.json", { cache: "no-store" }); if (!res.ok) throw new Error("Không tải được provinces.json"); return res.json(); } function makeWorker(url) { return new Worker(new URL(url, import.meta.url), { type: "module" }); } async function boot() { const el = document.querySelector("#app"); el.innerHTML = `

CAD2MAP (Local-only)

Đang tải provinces...
`; const log = (s) => (document.querySelector("#log").textContent += s + "\n"); // 1) Provinces local-only try { const p = await loadProvincesLocal(); document.querySelector("#prov").textContent = `Provinces: ${p.length} (từ provinces.json, không cloud)`; } catch (e) { document.querySelector("#prov").textContent = "Lỗi tải provinces (local)"; log(String(e)); } // 2) Worker (parse client-side) const dxfWorker = makeWorker("./workers/dxf-parser-worker.js"); document.querySelector("#file").addEventListener("change", async (ev) => { const f = ev.target.files?.[0]; if (!f) return; const buf = await f.arrayBuffer(); const id = crypto.randomUUID(); dxfWorker.postMessage({ id, input: { fileName: f.name, buffer: buf } }, [buf]); dxfWorker.onmessage = (msgEv) => { const { success, error } = msgEv.data || {}; if (!success) log("DXF worker: " + (error || "fail")); else log("DXF worker: OK"); }; }); } boot();