@ifc-lite/geometry 1.16.6 → 1.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"geometry-parallel.js","sourceRoot":"","sources":["../src/geometry-parallel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geometry-parallel.js","sourceRoot":"","sources":["../src/geometry-parallel.ts"],"names":[],"mappings":"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"}
@@ -17,11 +17,84 @@ export interface GeometryWorkerProcessMessage {
17
17
  styleIds: Uint32Array;
18
18
  styleColors: Uint8Array;
19
19
  }
20
+ /**
21
+ * Streaming-mode counterpart to `process`. The host sends `stream-start`
22
+ * once with the same metadata (minus jobs), then any number of
23
+ * `stream-chunk` messages with new job slices, and finally `stream-end`
24
+ * to trigger the worker's `complete` + `memory` emit.
25
+ *
26
+ * Used by the streaming pre-pass path so workers can begin processing
27
+ * jobs the moment the first chunk arrives from Rust, rather than waiting
28
+ * for the entire pre-pass to finish.
29
+ */
30
+ export interface GeometryWorkerStreamStartMessage {
31
+ type: 'stream-start';
32
+ sharedBuffer: SharedArrayBuffer;
33
+ unitScale: number;
34
+ rtcX: number;
35
+ rtcY: number;
36
+ rtcZ: number;
37
+ needsShift: boolean;
38
+ voidKeys: Uint32Array;
39
+ voidCounts: Uint32Array;
40
+ voidValues: Uint32Array;
41
+ styleIds: Uint32Array;
42
+ styleColors: Uint8Array;
43
+ }
44
+ export interface GeometryWorkerStreamChunkMessage {
45
+ type: 'stream-chunk';
46
+ jobsFlat: Uint32Array;
47
+ }
48
+ export interface GeometryWorkerStreamEndMessage {
49
+ type: 'stream-end';
50
+ }
51
+ /**
52
+ * Update the active session's style/void arrays mid-stream. Used when the
53
+ * streaming pre-pass emits its `styles` event AFTER processing has already
54
+ * begun: workers initially process with empty styles (default per-type
55
+ * colours) and switch to resolved styles for any subsequent batches.
56
+ */
57
+ export interface GeometryWorkerSetStylesMessage {
58
+ type: 'set-styles';
59
+ voidKeys: Uint32Array;
60
+ voidCounts: Uint32Array;
61
+ voidValues: Uint32Array;
62
+ styleIds: Uint32Array;
63
+ styleColors: Uint8Array;
64
+ }
65
+ /**
66
+ * Install a pre-built entity index into the worker's IfcAPI. The streaming
67
+ * pre-pass exports its already-built entity_index after the scan; without
68
+ * this, every process worker would re-scan the entire file (~5 s on a 1 GB
69
+ * IFC) on its first `processGeometryBatch` call. With this, the worker
70
+ * pays ~1 s to build the FxHashMap from the input slices and skips the
71
+ * file scan entirely.
72
+ */
73
+ export interface GeometryWorkerSetEntityIndexMessage {
74
+ type: 'set-entity-index';
75
+ ids: Uint32Array;
76
+ starts: Uint32Array;
77
+ lengths: Uint32Array;
78
+ }
20
79
  export interface GeometryWorkerPrePassMessage {
21
- type: 'prepass' | 'prepass-fast';
80
+ type: 'prepass' | 'prepass-fast' | 'prepass-streaming';
22
81
  sharedBuffer: SharedArrayBuffer;
82
+ /** Jobs per chunk for `prepass-streaming` (defaults to 50_000). */
83
+ chunkSize?: number;
84
+ }
85
+ /**
86
+ * Forward the user-facing "Merge Multilayer Walls" toggle (issue #540)
87
+ * down to this worker's IfcAPI. Hosts should send this AFTER `init`
88
+ * and BEFORE the first `process` / `stream-start` so the flag is
89
+ * already in effect when geometry processing begins. Default in
90
+ * Rust is `false` — sending `enabled: false` (or never sending the
91
+ * message) keeps existing behaviour.
92
+ */
93
+ export interface GeometryWorkerSetMergeLayersMessage {
94
+ type: 'set-merge-layers';
95
+ enabled: boolean;
23
96
  }
24
- export type GeometryWorkerRequest = GeometryWorkerInitMessage | GeometryWorkerProcessMessage | GeometryWorkerPrePassMessage;
97
+ export type GeometryWorkerRequest = GeometryWorkerInitMessage | GeometryWorkerProcessMessage | GeometryWorkerStreamStartMessage | GeometryWorkerStreamChunkMessage | GeometryWorkerStreamEndMessage | GeometryWorkerSetStylesMessage | GeometryWorkerSetEntityIndexMessage | GeometryWorkerSetMergeLayersMessage | GeometryWorkerPrePassMessage;
25
98
  export interface GeometryWorkerBatchMessage {
26
99
  type: 'batch';
27
100
  meshes: {
@@ -41,5 +114,18 @@ export interface GeometryWorkerErrorMessage {
41
114
  type: 'error';
42
115
  message: string;
43
116
  }
44
- export type GeometryWorkerResponse = GeometryWorkerBatchMessage | GeometryWorkerCompleteMessage | GeometryWorkerErrorMessage;
117
+ /**
118
+ * Optional memory snapshot emitted right after `complete`. Lets the main
119
+ * thread aggregate per-worker WASM heap usage (which it cannot read
120
+ * directly across the worker realm boundary) and total mesh bytes
121
+ * pushed back via the transfer list.
122
+ */
123
+ export interface GeometryWorkerMemoryMessage {
124
+ type: 'memory';
125
+ /** Total bytes of all positions+normals+indices typed arrays this worker emitted. */
126
+ meshBytes: number;
127
+ /** WebAssembly.Memory.buffer.byteLength inside this worker's WASM instance. */
128
+ wasmHeapBytes: number;
129
+ }
130
+ export type GeometryWorkerResponse = GeometryWorkerBatchMessage | GeometryWorkerCompleteMessage | GeometryWorkerErrorMessage | GeometryWorkerMemoryMessage;
45
131
  //# sourceMappingURL=geometry.worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.worker.d.ts","sourceRoot":"","sources":["../src/geometry.worker.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,iBAAiB,CAAC;IAChC,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,WAAW,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,SAAS,GAAG,cAAc,CAAC;IACjC,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,GAAG,4BAA4B,GAAG,4BAA4B,CAAC;AAE5H,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,YAAY,CAAC;QACxB,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,EAAE,WAAW,CAAC;QACrB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACzC,EAAE,CAAC;CACL;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,sBAAsB,GAC9B,0BAA0B,GAC1B,6BAA6B,GAC7B,0BAA0B,CAAC"}
1
+ {"version":3,"file":"geometry.worker.d.ts","sourceRoot":"","sources":["../src/geometry.worker.ts"],"names":[],"mappings":"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"}
@@ -3,20 +3,261 @@
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import init, { initSync, IfcAPI } from '@ifc-lite/wasm';
5
5
  let api = null;
6
- self.onmessage = async (e) => {
6
+ /**
7
+ * Cached merge-layers flag for this worker. The host may post
8
+ * `set-merge-layers` BEFORE `init` (the controller pattern) so we
9
+ * remember the latest value and re-apply once the IfcAPI is built.
10
+ * The Rust agent's contract is: state lives on the IfcAPI instance,
11
+ * so we only need to push it once per API construction.
12
+ */
13
+ let mergeLayersFlag = false;
14
+ let mergeLayersApplied = false;
15
+ /**
16
+ * Push the cached `mergeLayersFlag` onto the IfcAPI. Idempotent — only
17
+ * fires once per API instance unless `markMergeLayersDirty` is called
18
+ * (used when the host updates the flag mid-session).
19
+ */
20
+ function applyMergeLayersToApi() {
21
+ if (!api || mergeLayersApplied)
22
+ return;
23
+ const merging = api;
24
+ if (typeof merging.setMergeLayers === 'function') {
25
+ merging.setMergeLayers(mergeLayersFlag);
26
+ }
27
+ mergeLayersApplied = true;
28
+ }
29
+ /**
30
+ * Build a Uint8Array view over the shared buffer. Modern wasm-bindgen accepts
31
+ * SAB-backed views directly and copies them into linear memory itself, so an
32
+ * extra JS-side `.set()` copy is wasted memory (was N × file_size in the old
33
+ * code path). If the WASM call rejects the SAB view on a given runtime, the
34
+ * caller catches the error and retries with `materialiseSharedBytes`.
35
+ */
36
+ function viewSharedBytes(sharedBuffer) {
37
+ return new Uint8Array(sharedBuffer);
38
+ }
39
+ /** Fallback path: copy SAB into a fresh ArrayBuffer-backed Uint8Array. */
40
+ function materialiseSharedBytes(sharedBuffer) {
41
+ const local = new Uint8Array(sharedBuffer.byteLength);
42
+ local.set(new Uint8Array(sharedBuffer));
43
+ return local;
44
+ }
45
+ let activeSession = null;
46
+ /**
47
+ * Jobs per inner WASM call inside `processSliceStreaming`.
48
+ *
49
+ * IMPORTANT: this is NOT just about batch size for the host post — every
50
+ * `processGeometryBatch` call allocates a fresh `EntityDecoder.cache`
51
+ * (FxHashMap) in Rust. Splitting one streaming chunk into many small
52
+ * WASM calls forces the decoder to re-decode the same shared sub-entities
53
+ * (`IfcCartesianPoint`, placements, etc.) per call. Main does one big
54
+ * call per worker and reaps the cache locality.
55
+ *
56
+ * Setting this to a very large value means each fanned-out streaming
57
+ * chunk maps to exactly one WASM call per worker — main-equivalent
58
+ * cache behaviour while preserving streaming's early-job dispatch.
59
+ * Per-flush mesh count is then bounded by the chunk size (≤ 25K-ish on
60
+ * the 986 MB test file with 50K Rust chunk + 2-way fan-out).
61
+ */
62
+ const STREAM_BATCH_SIZE = 1_000_000;
63
+ function startSession(input) {
64
+ return {
65
+ sharedBuffer: input.sharedBuffer,
66
+ localBytes: viewSharedBytes(input.sharedBuffer),
67
+ sabFallbackTaken: false,
68
+ unitScale: input.unitScale,
69
+ rtcX: input.rtcX, rtcY: input.rtcY, rtcZ: input.rtcZ,
70
+ needsShift: input.needsShift,
71
+ voidKeys: input.voidKeys,
72
+ voidCounts: input.voidCounts,
73
+ voidValues: input.voidValues,
74
+ styleIds: input.styleIds,
75
+ styleColors: input.styleColors,
76
+ pendingMeshes: [],
77
+ pendingTransfers: [],
78
+ totalMeshesEmitted: 0,
79
+ cumulativeMeshBytes: 0,
80
+ };
81
+ }
82
+ function flushPending(session) {
83
+ if (session.pendingMeshes.length === 0)
84
+ return;
85
+ const meshes = session.pendingMeshes;
86
+ const transfers = session.pendingTransfers;
87
+ session.pendingMeshes = [];
88
+ session.pendingTransfers = [];
89
+ session.totalMeshesEmitted += meshes.length;
90
+ self.postMessage({ type: 'batch', meshes }, transfers);
91
+ }
92
+ function collectMeshes(session, collection) {
93
+ for (let i = 0; i < collection.length; i++) {
94
+ const mesh = collection.get(i);
95
+ if (!mesh)
96
+ continue;
97
+ const positions = new Float32Array(mesh.positions);
98
+ const normals = new Float32Array(mesh.normals);
99
+ const indices = new Uint32Array(mesh.indices);
100
+ session.pendingMeshes.push({
101
+ expressId: mesh.expressId,
102
+ ifcType: mesh.ifcType,
103
+ positions, normals, indices,
104
+ color: [mesh.color[0], mesh.color[1], mesh.color[2], mesh.color[3]],
105
+ });
106
+ session.pendingTransfers.push(positions.buffer, normals.buffer, indices.buffer);
107
+ session.cumulativeMeshBytes += positions.byteLength + normals.byteLength + indices.byteLength;
108
+ mesh.free();
109
+ }
110
+ collection.free();
111
+ }
112
+ /**
113
+ * Process a slice of jobsFlat with binary-split recovery. Mirrors the
114
+ * pre-streaming behaviour: if WASM throws on the whole slice, split in
115
+ * half and retry. Single-entity failures are skipped after one re-init
116
+ * attempt because a stack overflow can corrupt the WASM heap.
117
+ */
118
+ async function processBatch(session, jobs) {
119
+ const numJobs = Math.floor(jobs.length / 3);
120
+ if (numJobs === 0)
121
+ return;
122
+ try {
123
+ if (!api) {
124
+ await init();
125
+ api = new IfcAPI();
126
+ mergeLayersApplied = false;
127
+ applyMergeLayersToApi();
128
+ }
129
+ const collection = api.processGeometryBatch(session.localBytes, jobs, session.unitScale, session.rtcX, session.rtcY, session.rtcZ, session.needsShift, session.voidKeys, session.voidCounts, session.voidValues, session.styleIds, session.styleColors);
130
+ collectMeshes(session, collection);
131
+ }
132
+ catch (err) {
133
+ const msg = err.message;
134
+ if (!session.sabFallbackTaken && session.localBytes.buffer instanceof SharedArrayBuffer) {
135
+ session.sabFallbackTaken = true;
136
+ console.warn(`[Worker] processGeometryBatch rejected SAB view (${msg}), falling back to copy`);
137
+ session.localBytes = materialiseSharedBytes(session.sharedBuffer);
138
+ await processBatch(session, jobs);
139
+ return;
140
+ }
141
+ if (numJobs === 1) {
142
+ console.warn(`[Worker] Skipping entity #${jobs[0]}: ${msg}`);
143
+ api = null;
144
+ return;
145
+ }
146
+ console.warn(`[Worker] Batch of ${numJobs} entities failed (${msg}), splitting…`);
147
+ api = null;
148
+ const mid = Math.floor(numJobs / 2) * 3;
149
+ await processBatch(session, jobs.slice(0, mid));
150
+ await processBatch(session, jobs.slice(mid));
151
+ }
152
+ }
153
+ /** Run a slice in STREAM_BATCH_SIZE chunks, flushing after each chunk. */
154
+ async function processSliceStreaming(session, jobsFlat) {
155
+ const totalJobs = Math.floor(jobsFlat.length / 3);
156
+ for (let jobOffset = 0; jobOffset < totalJobs; jobOffset += STREAM_BATCH_SIZE) {
157
+ const start = jobOffset * 3;
158
+ const end = Math.min(start + STREAM_BATCH_SIZE * 3, jobsFlat.length);
159
+ await processBatch(session, jobsFlat.subarray(start, end));
160
+ flushPending(session);
161
+ }
162
+ }
163
+ function emitSessionEnd(session) {
164
+ flushPending(session); // safety net for tail meshes
165
+ let wasmHeapBytes = 0;
166
+ try {
167
+ const wasmMemory = api?.getMemory();
168
+ wasmHeapBytes = wasmMemory?.buffer?.byteLength ?? 0;
169
+ }
170
+ catch {
171
+ /* memory accounting only — safe to ignore */
172
+ }
173
+ self.postMessage({ type: 'memory', meshBytes: session.cumulativeMeshBytes, wasmHeapBytes });
174
+ self.postMessage({ type: 'complete', totalMeshes: session.totalMeshesEmitted });
175
+ }
176
+ /**
177
+ * Serialise message handlers via a tail promise. Web Worker `onmessage` is
178
+ * async and the runtime dispatches the next message as soon as the
179
+ * handler hits its first `await`. Without this serialisation a
180
+ * `stream-start` that awaits `init()` can be overtaken by a
181
+ * `stream-chunk` arriving on the next tick — and the chunk handler runs
182
+ * before `activeSession` is set, throwing `stream-chunk received before
183
+ * stream-start`. The tail-promise pattern queues every handler behind
184
+ * its predecessor, restoring the FIFO contract callers expect.
185
+ */
186
+ let messageTail = Promise.resolve();
187
+ self.onmessage = (rawEvent) => {
188
+ messageTail = messageTail.then(() => handleMessage(rawEvent)).catch((err) => {
189
+ self.postMessage({ type: 'error', message: err instanceof Error ? err.message : String(err) });
190
+ });
191
+ };
192
+ async function handleMessage(e) {
7
193
  try {
194
+ if (e.data.type === 'prepass-streaming') {
195
+ if (!api) {
196
+ await init();
197
+ api = new IfcAPI();
198
+ mergeLayersApplied = false;
199
+ applyMergeLayersToApi();
200
+ }
201
+ // Heartbeat: lets the host watchdog know the worker is alive even
202
+ // before the first chunk lands.
203
+ self.postMessage({ type: 'prepass-progress', phase: 'parsing' });
204
+ const sharedBuffer = e.data.sharedBuffer;
205
+ const chunkSize = e.data.chunkSize ?? 50_000;
206
+ // Forward Rust events 1:1 — the host (`geometry-parallel.ts`) treats
207
+ // them as the streaming-prepass protocol. SAB-decode fallback mirrors
208
+ // the existing `buildPrePassFast` path: try zero-copy view first, fall
209
+ // back to a materialised copy only if wasm-bindgen rejects the view.
210
+ let view = viewSharedBytes(sharedBuffer);
211
+ let triedFallback = false;
212
+ const onEvent = (event) => {
213
+ self.postMessage({ type: 'prepass-stream', event });
214
+ };
215
+ try {
216
+ api.buildPrePassStreaming(view, onEvent, chunkSize);
217
+ }
218
+ catch (err) {
219
+ const msg = err instanceof Error ? err.message : String(err);
220
+ if (!triedFallback) {
221
+ triedFallback = true;
222
+ console.warn(`[Worker] Streaming prepass with SAB view failed (${msg}), retrying with copy`);
223
+ view = materialiseSharedBytes(sharedBuffer);
224
+ api.buildPrePassStreaming(view, onEvent, chunkSize);
225
+ }
226
+ else {
227
+ throw err;
228
+ }
229
+ }
230
+ return;
231
+ }
8
232
  if (e.data.type === 'prepass' || e.data.type === 'prepass-fast') {
9
233
  if (!api) {
10
234
  await init();
11
235
  api = new IfcAPI();
236
+ mergeLayersApplied = false;
237
+ applyMergeLayersToApi();
12
238
  }
13
- const localBuffer = new Uint8Array(e.data.sharedBuffer.byteLength);
14
- localBuffer.set(new Uint8Array(e.data.sharedBuffer));
239
+ // Heartbeat: signals "worker alive, parser running" so the host watchdog
240
+ // can distinguish a stuck pre-pass from one that's still working on a
241
+ // multi-GB file.
242
+ self.postMessage({ type: 'prepass-progress', phase: 'parsing' });
243
+ const sharedBuffer = e.data.sharedBuffer;
244
+ const isFast = e.data.type === 'prepass-fast';
15
245
  // Fast pre-pass: only scan for entity locations (~1-2s)
16
246
  // Full pre-pass: also resolves styles + voids (~6s)
17
- const result = e.data.type === 'prepass-fast'
18
- ? api.buildPrePassFast(localBuffer)
19
- : api.buildPrePassOnce(localBuffer);
247
+ let result;
248
+ try {
249
+ const view = viewSharedBytes(sharedBuffer);
250
+ result = isFast ? api.buildPrePassFast(view) : api.buildPrePassOnce(view);
251
+ }
252
+ catch (err) {
253
+ // wasm-bindgen on some runtimes rejects SAB-backed views with a
254
+ // TypeError. Retry once with a materialised copy so we never regress
255
+ // versus the previous behaviour.
256
+ const msg = err instanceof Error ? err.message : String(err);
257
+ console.warn(`[Worker] Prepass with SAB view failed (${msg}), retrying with copy`);
258
+ const copy = materialiseSharedBytes(sharedBuffer);
259
+ result = isFast ? api.buildPrePassFast(copy) : api.buildPrePassOnce(copy);
260
+ }
20
261
  self.postMessage({ type: 'prepass-result', result });
21
262
  return;
22
263
  }
@@ -28,6 +269,8 @@ self.onmessage = async (e) => {
28
269
  await init();
29
270
  }
30
271
  api = new IfcAPI();
272
+ mergeLayersApplied = false;
273
+ applyMergeLayersToApi();
31
274
  self.postMessage({ type: 'ready' });
32
275
  return;
33
276
  }
@@ -35,77 +278,99 @@ self.onmessage = async (e) => {
35
278
  if (!api) {
36
279
  await init();
37
280
  api = new IfcAPI();
281
+ mergeLayersApplied = false;
282
+ applyMergeLayersToApi();
38
283
  }
39
284
  const { sharedBuffer, jobsFlat, unitScale, rtcX, rtcY, rtcZ, needsShift, voidKeys, voidCounts, voidValues, styleIds, styleColors } = e.data;
40
- // Copy shared bytes to local buffer (Firefox requires this for typed array ops)
41
- const localBytes = new Uint8Array(sharedBuffer.byteLength);
42
- localBytes.set(new Uint8Array(sharedBuffer));
43
- const allMeshes = [];
44
- const allTransferBuffers = [];
45
- /** Extract meshes from a MeshCollection into our arrays */
46
- const collectMeshes = (collection) => {
47
- for (let i = 0; i < collection.length; i++) {
48
- const mesh = collection.get(i);
49
- if (!mesh)
50
- continue;
51
- const positions = new Float32Array(mesh.positions);
52
- const normals = new Float32Array(mesh.normals);
53
- const indices = new Uint32Array(mesh.indices);
54
- allMeshes.push({
55
- expressId: mesh.expressId,
56
- ifcType: mesh.ifcType,
57
- positions, normals, indices,
58
- color: [mesh.color[0], mesh.color[1], mesh.color[2], mesh.color[3]],
59
- });
60
- allTransferBuffers.push(positions.buffer, normals.buffer, indices.buffer);
61
- mesh.free();
62
- }
63
- collection.free();
64
- };
65
- /**
66
- * Process a slice of jobsFlat with automatic sub-batch splitting on failure.
67
- * Uses binary-split strategy: try the whole slice, if it fails split in half
68
- * and recurse. Only falls back to single-entity processing for the smallest
69
- * failing chunk. This avoids rebuilding the entity index per-entity (expensive
70
- * for large files — each rebuild scans the entire file).
71
- */
72
- const processBatch = async (jobs) => {
73
- const numJobs = Math.floor(jobs.length / 3);
74
- if (numJobs === 0)
75
- return;
76
- try {
77
- if (!api) {
78
- await init();
79
- api = new IfcAPI();
80
- }
81
- const collection = api.processGeometryBatch(localBytes, jobs, unitScale, rtcX, rtcY, rtcZ, needsShift, voidKeys, voidCounts, voidValues, styleIds, styleColors);
82
- collectMeshes(collection);
83
- }
84
- catch (err) {
85
- const msg = err.message;
86
- if (numJobs === 1) {
87
- // Single entity failed — skip it
88
- console.warn(`[Worker] Skipping entity #${jobs[0]}: ${msg}`);
89
- // WASM instance may be corrupted after stack overflow — force re-init
90
- api = null;
91
- return;
92
- }
93
- // Split in half and retry each half
94
- console.warn(`[Worker] Batch of ${numJobs} entities failed (${msg}), splitting…`);
95
- // WASM may be corrupted force re-init before retrying
96
- api = null;
97
- const mid = Math.floor(numJobs / 2) * 3;
98
- await processBatch(jobs.slice(0, mid));
99
- await processBatch(jobs.slice(mid));
100
- }
101
- };
102
- await processBatch(jobsFlat);
103
- self.postMessage({ type: 'batch', meshes: allMeshes }, allTransferBuffers);
104
- self.postMessage({ type: 'complete', totalMeshes: allMeshes.length });
285
+ const session = startSession({
286
+ sharedBuffer, unitScale, rtcX, rtcY, rtcZ, needsShift,
287
+ voidKeys, voidCounts, voidValues, styleIds, styleColors,
288
+ });
289
+ activeSession = session;
290
+ await processSliceStreaming(session, jobsFlat);
291
+ emitSessionEnd(session);
292
+ activeSession = null;
293
+ return;
294
+ }
295
+ if (e.data.type === 'stream-start') {
296
+ if (!api) {
297
+ await init();
298
+ api = new IfcAPI();
299
+ mergeLayersApplied = false;
300
+ applyMergeLayersToApi();
301
+ }
302
+ activeSession = startSession({
303
+ sharedBuffer: e.data.sharedBuffer,
304
+ unitScale: e.data.unitScale,
305
+ rtcX: e.data.rtcX, rtcY: e.data.rtcY, rtcZ: e.data.rtcZ,
306
+ needsShift: e.data.needsShift,
307
+ voidKeys: e.data.voidKeys,
308
+ voidCounts: e.data.voidCounts,
309
+ voidValues: e.data.voidValues,
310
+ styleIds: e.data.styleIds,
311
+ styleColors: e.data.styleColors,
312
+ });
313
+ return;
314
+ }
315
+ if (e.data.type === 'stream-chunk') {
316
+ if (!activeSession) {
317
+ throw new Error('stream-chunk received before stream-start');
318
+ }
319
+ await processSliceStreaming(activeSession, e.data.jobsFlat);
320
+ return;
321
+ }
322
+ if (e.data.type === 'set-styles') {
323
+ // Update the active session in place. The streaming pre-pass posts
324
+ // this AFTER its main scan completes, so workers may have already
325
+ // processed several chunks with empty styles (default per-type
326
+ // colors). The host emits a `colorUpdate` event on the receive side
327
+ // to retroactively fix already-emitted meshes.
328
+ if (!activeSession)
329
+ return;
330
+ activeSession.styleIds = e.data.styleIds;
331
+ activeSession.styleColors = e.data.styleColors;
332
+ activeSession.voidKeys = e.data.voidKeys;
333
+ activeSession.voidCounts = e.data.voidCounts;
334
+ activeSession.voidValues = e.data.voidValues;
335
+ return;
336
+ }
337
+ if (e.data.type === 'set-entity-index') {
338
+ // Hand the pre-built entity index from the pre-pass worker into
339
+ // this worker's IfcAPI. Without this, processGeometryBatch's lazy
340
+ // build path fires on the first call and re-scans the entire file
341
+ // (~5 s on a 1 GB IFC) — the dominant TTFG bottleneck before this
342
+ // change. Now the only cost is FxHashMap construction from the
343
+ // input slices (~1 s for 14 M entries).
344
+ if (!api) {
345
+ await init();
346
+ api = new IfcAPI();
347
+ mergeLayersApplied = false;
348
+ applyMergeLayersToApi();
349
+ }
350
+ api.setEntityIndex(e.data.ids, e.data.starts, e.data.lengths);
351
+ return;
352
+ }
353
+ if (e.data.type === 'set-merge-layers') {
354
+ // Cache the requested flag — if the API already exists, push it
355
+ // through immediately; otherwise the next `new IfcAPI()` path
356
+ // will pick it up via `applyMergeLayersToApi`. Default is false
357
+ // so omitting this message keeps existing behaviour intact.
358
+ mergeLayersFlag = e.data.enabled === true;
359
+ mergeLayersApplied = false;
360
+ applyMergeLayersToApi();
361
+ return;
362
+ }
363
+ if (e.data.type === 'stream-end') {
364
+ if (!activeSession) {
365
+ throw new Error('stream-end received before stream-start');
366
+ }
367
+ emitSessionEnd(activeSession);
368
+ activeSession = null;
369
+ return;
105
370
  }
106
371
  }
107
372
  catch (err) {
108
373
  self.postMessage({ type: 'error', message: err instanceof Error ? err.message : String(err) });
109
374
  }
110
- };
375
+ }
111
376
  //# sourceMappingURL=geometry.worker.js.map