// Gemeinsamer Lade-Einstieg für das render3d-WASM-Modul (pkg3d, gebaut über // `npm run build:engine3d`). EINMAL geladen + initialisiert und memoisiert: // `mod.default()` (der wasm-bindgen-Init) darf nur EINMAL laufen — ein zweiter // Init würde die Closures des ersten verwerfen („closure invoked recursively or // after being dropped"). Sowohl der 3D-Viewport (useWasm3dRenderer) als auch die // Schnitt-/Ansichts-Pipeline (plan/toSection) teilen sich daher DIESE Instanz. // // Bewusst schwach typisiert (`any`): das echte `.d.ts` entsteht erst beim // wasm-Build; die Aufrufer legen ihre eigene Minimal-Schnittstelle darüber. let enginePromise: Promise | null = null; /** Lädt das WASM-Modul einmalig und gibt das initialisierte Modul zurück. */ export function loadEngine3d(): Promise { if (!enginePromise) { enginePromise = (async () => { const mod: any = await import("./pkg3d/render3d.js"); await mod.default(); // lädt render3d_bg.wasm return mod; })(); } return enginePromise; }