UNPKG

@bitbybit-dev/core

Version:

Bit By Bit Developers Core CAD API to Program Geometry

110 lines (109 loc) 4.18 kB
/** * Worker utilities for bitbybit engine packages. * * Provides multiple strategies for creating workers: * 1. From CDN URLs (zero configuration, no local files needed) * 2. From local project files (for offline/production use) */ /** * Worker architecture type for CDN workers. * - "32" - 32-bit WebAssembly (default, widest browser support) * - "64-bit" - 64-bit WebAssembly (better performance, requires browser support for Memory64) * - "64-bit-mt" - 64-bit multithreaded WebAssembly (best performance, requires SharedArrayBuffer and Memory64) */ export type WorkerArchitecture = "32" | "64" | "64-mt"; /** * Worker configuration containing the Worker instance or undefined */ export interface WorkerInstances { occtWorker?: Worker; jscadWorker?: Worker; manifoldWorker?: Worker; } /** * Options for worker creation */ export interface WorkerOptions { /** Enable OCCT (OpenCASCADE) kernel */ enableOCCT?: boolean; /** Enable JSCAD kernel */ enableJSCAD?: boolean; /** Enable Manifold kernel */ enableManifold?: boolean; /** Custom CDN URL (defaults to GlobalCDNProvider.BITBYBIT_CDN_URL) */ cdnUrl?: string; /** * Array of font keys to load for OCCT, or undefined to load all fonts. * Pass an empty array to skip loading fonts. */ loadFonts?: string[]; /** * OCCT worker architecture to use. Defaults to "32" (32-bit). * Note: This only applies to OCCT workers. JSCAD and Manifold always use 32-bit. * - "32" - 32-bit WebAssembly (default, widest browser support) * - "64" - 64-bit WebAssembly (better performance, requires browser support for Memory64) * - "64-mt" - 64-bit multithreaded WebAssembly (best performance, requires SharedArrayBuffer and Memory64) */ occtArchitecture?: WorkerArchitecture; } /** * Creates an OCCT worker from CDN. * No local files needed - worker is loaded directly from CDN. * * @param cdnUrl - Optional custom CDN URL * @param loadFonts - Array of font keys to load, or undefined to load all fonts. Empty array skips font loading. * @param architecture - Worker architecture: "32" (default), "64", or "64-mt" */ export declare function createOcctWorkerFromCDN(cdnUrl?: string, loadFonts?: string[], architecture?: WorkerArchitecture): Worker; /** * Creates a JSCAD worker from CDN. * No local files needed - worker is loaded from CDN. * Note: JSCAD only supports 32-bit architecture. * * @param cdnUrl - Optional custom CDN URL */ export declare function createJscadWorkerFromCDN(cdnUrl?: string): Worker; /** * Creates a Manifold worker from CDN. * No local files needed - worker is loaded from CDN. * Note: Manifold only supports 32-bit architecture. * * @param cdnUrl - Optional custom CDN URL */ export declare function createManifoldWorkerFromCDN(cdnUrl?: string): Worker; /** * Creates all enabled worker instances from CDN. * This is the simplest way to get started - no local files needed! * * @example * ```typescript * // Default 32-bit workers * const workers = createWorkersFromCDN({ enableOCCT: true, enableJSCAD: true }); * * // 64-bit OCCT worker for better performance (JSCAD/Manifold remain 32-bit) * const workers64 = createWorkersFromCDN({ enableOCCT: true, occtArchitecture: "64" }); * * // 64-bit multithreaded OCCT worker for best performance * const workersMT = createWorkersFromCDN({ enableOCCT: true, occtArchitecture: "64-mt" }); * ``` */ export declare function createWorkersFromCDN(options: WorkerOptions): WorkerInstances; /** * Creates workers from local project files (ES module workers). * Use this when you have worker files in your project for offline/production use. * * @param workerUrls - URLs to your local worker files * * @example * ```typescript * const workers = createWorkersFromUrls({ * occtWorkerUrl: new URL("./workers/occt.worker.ts", import.meta.url), * jscadWorkerUrl: new URL("./workers/jscad.worker.ts", import.meta.url), * }); * ``` */ export declare function createWorkersFromUrls(workerUrls: { occtWorkerUrl?: URL | string; jscadWorkerUrl?: URL | string; manifoldWorkerUrl?: URL | string; }): WorkerInstances;