@ifc-lite/parser 3.15.0 → 4.0.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.
Files changed (65) hide show
  1. package/dist/block-store.d.ts +95 -0
  2. package/dist/block-store.d.ts.map +1 -0
  3. package/dist/block-store.js +285 -0
  4. package/dist/block-store.js.map +1 -0
  5. package/dist/classification-resolver.d.ts +16 -0
  6. package/dist/classification-resolver.d.ts.map +1 -1
  7. package/dist/classification-resolver.js +35 -0
  8. package/dist/classification-resolver.js.map +1 -1
  9. package/dist/columnar-parser.d.ts +13 -2
  10. package/dist/columnar-parser.d.ts.map +1 -1
  11. package/dist/columnar-parser.js +16 -3
  12. package/dist/columnar-parser.js.map +1 -1
  13. package/dist/data-store-transport.d.ts +2 -1
  14. package/dist/data-store-transport.d.ts.map +1 -1
  15. package/dist/data-store-transport.js +2 -1
  16. package/dist/data-store-transport.js.map +1 -1
  17. package/dist/entity-extractor.d.ts +9 -2
  18. package/dist/entity-extractor.d.ts.map +1 -1
  19. package/dist/entity-extractor.js +10 -4
  20. package/dist/entity-extractor.js.map +1 -1
  21. package/dist/entity-refs-from-index.d.ts +2 -1
  22. package/dist/entity-refs-from-index.d.ts.map +1 -1
  23. package/dist/entity-refs-from-index.js +17 -11
  24. package/dist/entity-refs-from-index.js.map +1 -1
  25. package/dist/entity-source.d.ts +2 -1
  26. package/dist/entity-source.d.ts.map +1 -1
  27. package/dist/entity-source.js.map +1 -1
  28. package/dist/index.d.ts +5 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +11 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/on-demand-extractors.d.ts +1 -1
  33. package/dist/on-demand-extractors.d.ts.map +1 -1
  34. package/dist/on-demand-extractors.js +1 -1
  35. package/dist/on-demand-extractors.js.map +1 -1
  36. package/dist/project-units.d.ts +2 -1
  37. package/dist/project-units.d.ts.map +1 -1
  38. package/dist/project-units.js.map +1 -1
  39. package/dist/source-bytes.d.ts +130 -0
  40. package/dist/source-bytes.d.ts.map +1 -0
  41. package/dist/source-bytes.js +390 -0
  42. package/dist/source-bytes.js.map +1 -0
  43. package/dist/source-compress.d.ts +37 -0
  44. package/dist/source-compress.d.ts.map +1 -0
  45. package/dist/source-compress.js +104 -0
  46. package/dist/source-compress.js.map +1 -0
  47. package/dist/source-header.d.ts +12 -1
  48. package/dist/source-header.d.ts.map +1 -1
  49. package/dist/source-header.js +21 -77
  50. package/dist/source-header.js.map +1 -1
  51. package/dist/spatial-hierarchy-builder.d.ts +2 -1
  52. package/dist/spatial-hierarchy-builder.d.ts.map +1 -1
  53. package/dist/spatial-hierarchy-builder.js.map +1 -1
  54. package/dist/synthetic-data-store.d.ts +2 -1
  55. package/dist/synthetic-data-store.d.ts.map +1 -1
  56. package/dist/synthetic-data-store.js +2 -1
  57. package/dist/synthetic-data-store.js.map +1 -1
  58. package/dist/unit-extractor.d.ts +10 -2
  59. package/dist/unit-extractor.d.ts.map +1 -1
  60. package/dist/unit-extractor.js +40 -3
  61. package/dist/unit-extractor.js.map +1 -1
  62. package/dist/worker-parser.d.ts.map +1 -1
  63. package/dist/worker-parser.js +13 -5
  64. package/dist/worker-parser.js.map +1 -1
  65. package/package.json +7 -5
@@ -0,0 +1,95 @@
1
+ /** Fixed-size blocks. See the header for why 64 KiB and not 256 KiB. */
2
+ export declare const DEFAULT_BLOCK_SIZE: number;
3
+ /**
4
+ * Inflated-block cache capacity, in bytes.
5
+ *
6
+ * 32 MB = 512 blocks. Sized from the measured interactive working set: the
7
+ * worst interactive case observed (a 1000-product selection) touches 500
8
+ * blocks. Sweeps are unaffected by capacity, so there is nothing to buy by
9
+ * going larger, and every byte here comes straight off the win.
10
+ */
11
+ export declare const DEFAULT_CACHE_BYTES: number;
12
+ export interface BlockStoreCounters {
13
+ /** Block inflations performed. The number a regression pins. */
14
+ inflates: number;
15
+ /** Reads served entirely from cached blocks. */
16
+ hits: number;
17
+ /** Reads that had to inflate at least one block. */
18
+ misses: number;
19
+ /** Reads spanning a block boundary, which must stitch. */
20
+ boundaryStitches: number;
21
+ /** Inflated bytes produced, cumulative. */
22
+ bytesInflated: number;
23
+ /** Inflations that reused a pooled buffer. */
24
+ poolReuses: number;
25
+ /** Blocks dropped from the cache. */
26
+ evictions: number;
27
+ }
28
+ /** The wire/consructor shape: compressed blocks plus their offset index. */
29
+ export interface BlockedPayload {
30
+ /** All compressed blocks, concatenated. */
31
+ blocks: Uint8Array;
32
+ /**
33
+ * `blocks` offsets, length `blockCount + 1`. Block `i` occupies
34
+ * `[index[i], index[i + 1])`, so the last entry is `blocks.byteLength`.
35
+ */
36
+ index: Uint32Array;
37
+ /**
38
+ * One byte per block: 1 = stored verbatim, 0 = deflated. Incompressible
39
+ * blocks (already-compressed payloads embedded in a STEP file) would
40
+ * otherwise grow, and a store that can grow is not one you can gate on size.
41
+ */
42
+ storedMask: Uint8Array;
43
+ blockSize: number;
44
+ /** Logical length of the original source. */
45
+ totalLength: number;
46
+ }
47
+ /**
48
+ * Random-access reader over compressed blocks.
49
+ *
50
+ * Deliberately NOT an `IfcSourceBytes`: that interface is the store's public
51
+ * contract and must keep exactly one implementation from the outside. This is
52
+ * the machinery the accessor switches onto in place.
53
+ */
54
+ export declare class BlockStore {
55
+ #private;
56
+ readonly blockSize: number;
57
+ readonly totalLength: number;
58
+ readonly blockCount: number;
59
+ readonly counters: BlockStoreCounters;
60
+ constructor(payload: BlockedPayload, cacheBytes?: number);
61
+ /**
62
+ * Bytes in `[start, end)`, as a fresh array.
63
+ *
64
+ * Always a copy, never a view: the bytes live in cache blocks that later
65
+ * reads may evict and hand to the pool for overwriting. A view would go
66
+ * stale silently, which is the worst possible failure for a byte range.
67
+ * Callers were already told `slice` only returns a view when `isResident`.
68
+ */
69
+ read(start: number, end: number): Uint8Array;
70
+ /**
71
+ * UTF-8 decode of `[start, end)`.
72
+ *
73
+ * Goes through the same {@link read}, so a multi-byte sequence straddling a
74
+ * block boundary is decoded from stitched bytes and cannot be split.
75
+ */
76
+ decodeUtf8(start: number, end: number): string;
77
+ /**
78
+ * The whole source, contiguous.
79
+ *
80
+ * Allocates `totalLength` and inflates every block, so it costs roughly a
81
+ * full sweep (~1.8 s and 343 MB on the reference model). It exists because
82
+ * some consumers genuinely need all the bytes; it is not a fallback to reach
83
+ * for casually, and `withMaterialized` on the accessor is the scoped form.
84
+ */
85
+ materialize(): Uint8Array;
86
+ /** Compressed size, for accounting and the dev counter. */
87
+ get storedBytes(): number;
88
+ /** Inflated bytes currently held by the cache and the pool. */
89
+ get residentBytes(): number;
90
+ /** Drop cached blocks and pooled buffers. */
91
+ clearCache(): void;
92
+ /** The payload, for handing this store to a worker without inflating. */
93
+ toPayload(): BlockedPayload;
94
+ }
95
+ //# sourceMappingURL=block-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-store.d.ts","sourceRoot":"","sources":["../src/block-store.ts"],"names":[],"mappings":"AAsEA,wEAAwE;AACxE,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAKpD,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,MAAM,EAAE,UAAU,CAAC;IACnB;;;OAGG;IACH,KAAK,EAAE,WAAW,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAW5B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAGnC;gBAEU,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,MAA4B;IA4F7E;;;;;;;OAOG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU;IAuC5C;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAK9C;;;;;;;OAOG;IACH,WAAW,IAAI,UAAU;IAQzB,2DAA2D;IAC3D,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,+DAA+D;IAC/D,IAAI,aAAa,IAAI,MAAM,CAK1B;IAED,6CAA6C;IAC7C,UAAU,IAAI,IAAI;IAKlB,yEAAyE;IACzE,SAAS,IAAI,cAAc;CAS5B"}
@@ -0,0 +1,285 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Block-compressed backing store for {@link IfcSourceBytes} (#2183).
6
+ *
7
+ * The source is the whole IFC file, resident for the model's lifetime because
8
+ * property and attribute reads slice it synchronously during React render. On
9
+ * a 342 MB model that is 327 MB of the viewer's main-thread heap. Deflating it
10
+ * into fixed-size blocks and inflating on demand trades that for ~67 MB plus a
11
+ * small cache.
12
+ *
13
+ * The numbers this design is built on, measured with fflate 0.8.3 on the real
14
+ * 342.7 MB model rather than assumed:
15
+ *
16
+ * - 64 KiB blocks at level 6: 342.7 MB -> 67 MB (19.7%), and an inflate costs
17
+ * 0.18 ms p50 / 0.40 ms max. 256 KiB stores 3 MB less but triples the p50
18
+ * to 0.69 ms, which is the wrong trade for a synchronous read on the render
19
+ * path. 16 KiB gives back 10 MB for latency nothing needs.
20
+ * - A full per-entity sweep touches 5161 of 5229 blocks -- essentially each
21
+ * block exactly once -- because expressId order tracks byte offset in STEP.
22
+ * It is a sequential scan, not a thrash, so cache CAPACITY barely matters:
23
+ * 32 MB and 256 MB are within 7% of each other. The cache is sized for the
24
+ * interactive working set, not to chase a hit rate.
25
+ * - Reusing evicted buffers is worth ~13% on a sweep (1.73 -> 1.53 s). Real
26
+ * but not load-bearing: inflate itself dominates, so the pool stays small
27
+ * and simple and is never allowed to justify complexity.
28
+ */
29
+ import { safeUtf8Decode } from '@ifc-lite/data';
30
+ import { inflateSync } from 'fflate';
31
+ /**
32
+ * Reject a payload that cannot describe a real source.
33
+ *
34
+ * Not defensive noise: `adoptBlocks` builds a store straight from a
35
+ * `postMessage` payload, and the read path's contract is that it never throws.
36
+ */
37
+ function assertValidPayload(p) {
38
+ if (!Number.isInteger(p.blockSize) || p.blockSize <= 0) {
39
+ throw new Error(`BlockStore: blockSize must be a positive integer, got ${p.blockSize}`);
40
+ }
41
+ if (!Number.isInteger(p.totalLength) || p.totalLength < 0) {
42
+ throw new Error(`BlockStore: totalLength must be a non-negative integer, got ${p.totalLength}`);
43
+ }
44
+ const blockCount = Math.ceil(p.totalLength / p.blockSize);
45
+ if (p.index.length !== blockCount + 1) {
46
+ throw new Error(`BlockStore: index has ${p.index.length} entries, expected ${blockCount + 1} `
47
+ + `for ${p.totalLength} bytes in ${p.blockSize}-byte blocks`);
48
+ }
49
+ if (p.storedMask.length !== blockCount) {
50
+ throw new Error(`BlockStore: storedMask has ${p.storedMask.length} entries, expected ${blockCount}`);
51
+ }
52
+ for (let i = 1; i < p.index.length; i++) {
53
+ if (p.index[i] < p.index[i - 1]) {
54
+ throw new Error(`BlockStore: index is not monotonic at ${i}`);
55
+ }
56
+ }
57
+ if (blockCount > 0 && p.index[blockCount] > p.blocks.byteLength) {
58
+ throw new Error(`BlockStore: index ends at ${p.index[blockCount]} but blocks hold ${p.blocks.byteLength} bytes`);
59
+ }
60
+ }
61
+ /** Fixed-size blocks. See the header for why 64 KiB and not 256 KiB. */
62
+ export const DEFAULT_BLOCK_SIZE = 64 * 1024;
63
+ /**
64
+ * Inflated-block cache capacity, in bytes.
65
+ *
66
+ * 32 MB = 512 blocks. Sized from the measured interactive working set: the
67
+ * worst interactive case observed (a 1000-product selection) touches 500
68
+ * blocks. Sweeps are unaffected by capacity, so there is nothing to buy by
69
+ * going larger, and every byte here comes straight off the win.
70
+ */
71
+ export const DEFAULT_CACHE_BYTES = 32 * 1024 * 1024;
72
+ /** Evicted buffers kept for reuse. Small on purpose: worth ~13%, not more. */
73
+ const MAX_POOLED_BUFFERS = 64;
74
+ /**
75
+ * Random-access reader over compressed blocks.
76
+ *
77
+ * Deliberately NOT an `IfcSourceBytes`: that interface is the store's public
78
+ * contract and must keep exactly one implementation from the outside. This is
79
+ * the machinery the accessor switches onto in place.
80
+ */
81
+ export class BlockStore {
82
+ blockSize;
83
+ totalLength;
84
+ blockCount;
85
+ #blocks;
86
+ #index;
87
+ #storedMask;
88
+ /** Inflated blocks. A `Map` is insertion-ordered, which is the LRU order. */
89
+ #cache = new Map();
90
+ #pool = [];
91
+ #maxCachedBlocks;
92
+ counters = {
93
+ inflates: 0, hits: 0, misses: 0, boundaryStitches: 0,
94
+ bytesInflated: 0, poolReuses: 0, evictions: 0,
95
+ };
96
+ constructor(payload, cacheBytes = DEFAULT_CACHE_BYTES) {
97
+ // Validated because this is reached from `sourceBytesFromTransferable`,
98
+ // i.e. across a worker boundary, where the payload is whatever the other
99
+ // side sent. `IfcSourceBytes.slice` promises never to throw; a malformed
100
+ // payload would break that promise deep inside a read, far from the cause.
101
+ // Failing loudly at construction keeps the blast radius at the boundary.
102
+ assertValidPayload(payload);
103
+ this.blockSize = payload.blockSize;
104
+ this.totalLength = payload.totalLength;
105
+ this.#blocks = payload.blocks;
106
+ this.#index = payload.index;
107
+ this.#storedMask = payload.storedMask;
108
+ this.blockCount = Math.max(0, payload.index.length - 1);
109
+ // At least one block, or a read on a tiny source could never be served.
110
+ this.#maxCachedBlocks = Math.max(1, Math.floor(cacheBytes / payload.blockSize));
111
+ }
112
+ /** Uncompressed length of block `i`; the last block is short. */
113
+ #blockLength(i) {
114
+ const start = i * this.blockSize;
115
+ return Math.min(this.blockSize, this.totalLength - start);
116
+ }
117
+ /**
118
+ * The inflated block `i`, from cache or by inflating it.
119
+ *
120
+ * The returned view is owned by the cache and is only valid until the block
121
+ * is evicted, which is why every public read copies out of it rather than
122
+ * handing it to a caller.
123
+ */
124
+ #block(i) {
125
+ const cached = this.#cache.get(i);
126
+ if (cached !== undefined) {
127
+ // Refresh recency: delete + re-set moves it to the end of the Map order.
128
+ this.#cache.delete(i);
129
+ this.#cache.set(i, cached);
130
+ return cached;
131
+ }
132
+ const from = this.#index[i];
133
+ const to = this.#index[i + 1];
134
+ const compressed = this.#blocks.subarray(from, to);
135
+ const length = this.#blockLength(i);
136
+ let out;
137
+ if (this.#storedMask[i] === 1) {
138
+ // Stored verbatim: still copied, because the caller-visible bytes must
139
+ // not alias the compressed backing store. NOT counted as an inflate --
140
+ // conflating the two would make the dev counter overstate decompression
141
+ // work on exactly the models with incompressible content.
142
+ out = this.#take(length);
143
+ out.set(compressed.subarray(0, length));
144
+ }
145
+ else {
146
+ const reused = this.#takeExact(length);
147
+ out = reused !== null
148
+ ? inflateSync(compressed, { out: reused })
149
+ : inflateSync(compressed);
150
+ this.counters.inflates++;
151
+ this.counters.bytesInflated += out.byteLength;
152
+ }
153
+ this.#cache.set(i, out);
154
+ this.#evictIfNeeded();
155
+ return out;
156
+ }
157
+ /** A pooled buffer of exactly `length`, or null when none fits. */
158
+ #takeExact(length) {
159
+ for (let i = this.#pool.length - 1; i >= 0; i--) {
160
+ if (this.#pool[i].byteLength === length) {
161
+ const buf = this.#pool[i];
162
+ this.#pool.splice(i, 1);
163
+ this.counters.poolReuses++;
164
+ return buf;
165
+ }
166
+ }
167
+ return null;
168
+ }
169
+ #take(length) {
170
+ return this.#takeExact(length) ?? new Uint8Array(length);
171
+ }
172
+ #evictIfNeeded() {
173
+ while (this.#cache.size > this.#maxCachedBlocks) {
174
+ const oldest = this.#cache.keys().next().value;
175
+ const buf = this.#cache.get(oldest);
176
+ this.#cache.delete(oldest);
177
+ this.counters.evictions++;
178
+ if (buf !== undefined && this.#pool.length < MAX_POOLED_BUFFERS)
179
+ this.#pool.push(buf);
180
+ }
181
+ }
182
+ /**
183
+ * Bytes in `[start, end)`, as a fresh array.
184
+ *
185
+ * Always a copy, never a view: the bytes live in cache blocks that later
186
+ * reads may evict and hand to the pool for overwriting. A view would go
187
+ * stale silently, which is the worst possible failure for a byte range.
188
+ * Callers were already told `slice` only returns a view when `isResident`.
189
+ */
190
+ read(start, end) {
191
+ if (end <= start)
192
+ return new Uint8Array(0);
193
+ const first = Math.floor(start / this.blockSize);
194
+ const last = Math.floor((end - 1) / this.blockSize);
195
+ // Counted BEFORE reading, while it is still knowable: once #block() has
196
+ // run, every block it touched is cached and the distinction is gone.
197
+ let served = true;
198
+ for (let i = first; i <= last; i++) {
199
+ if (!this.#cache.has(i)) {
200
+ served = false;
201
+ break;
202
+ }
203
+ }
204
+ if (served)
205
+ this.counters.hits++;
206
+ else
207
+ this.counters.misses++;
208
+ if (first === last) {
209
+ const block = this.#block(first);
210
+ const offset = start - first * this.blockSize;
211
+ // slice() on the cached block copies, which is what we want here.
212
+ return block.slice(offset, offset + (end - start));
213
+ }
214
+ this.counters.boundaryStitches++;
215
+ const out = new Uint8Array(end - start);
216
+ let written = 0;
217
+ for (let i = first; i <= last; i++) {
218
+ const block = this.#block(i);
219
+ const blockStart = i * this.blockSize;
220
+ const from = Math.max(start, blockStart) - blockStart;
221
+ // #blockLength, not block.byteLength: for a well-formed store they are
222
+ // equal, and for a malformed one trusting the payload would overflow
223
+ // the output with a RangeError instead of reading short.
224
+ const to = Math.min(end, blockStart + this.#blockLength(i)) - blockStart;
225
+ out.set(block.subarray(from, to), written);
226
+ written += to - from;
227
+ }
228
+ return out;
229
+ }
230
+ /**
231
+ * UTF-8 decode of `[start, end)`.
232
+ *
233
+ * Goes through the same {@link read}, so a multi-byte sequence straddling a
234
+ * block boundary is decoded from stitched bytes and cannot be split.
235
+ */
236
+ decodeUtf8(start, end) {
237
+ if (end <= start)
238
+ return '';
239
+ return safeUtf8Decode(this.read(start, end), 0, end - start);
240
+ }
241
+ /**
242
+ * The whole source, contiguous.
243
+ *
244
+ * Allocates `totalLength` and inflates every block, so it costs roughly a
245
+ * full sweep (~1.8 s and 343 MB on the reference model). It exists because
246
+ * some consumers genuinely need all the bytes; it is not a fallback to reach
247
+ * for casually, and `withMaterialized` on the accessor is the scoped form.
248
+ */
249
+ materialize() {
250
+ const out = new Uint8Array(this.totalLength);
251
+ for (let i = 0; i < this.blockCount; i++) {
252
+ out.set(this.#block(i), i * this.blockSize);
253
+ }
254
+ return out;
255
+ }
256
+ /** Compressed size, for accounting and the dev counter. */
257
+ get storedBytes() {
258
+ return this.#blocks.byteLength;
259
+ }
260
+ /** Inflated bytes currently held by the cache and the pool. */
261
+ get residentBytes() {
262
+ let n = 0;
263
+ for (const b of this.#cache.values())
264
+ n += b.byteLength;
265
+ for (const b of this.#pool)
266
+ n += b.byteLength;
267
+ return n;
268
+ }
269
+ /** Drop cached blocks and pooled buffers. */
270
+ clearCache() {
271
+ this.#cache.clear();
272
+ this.#pool.length = 0;
273
+ }
274
+ /** The payload, for handing this store to a worker without inflating. */
275
+ toPayload() {
276
+ return {
277
+ blocks: this.#blocks,
278
+ index: this.#index,
279
+ storedMask: this.#storedMask,
280
+ blockSize: this.blockSize,
281
+ totalLength: this.totalLength,
282
+ };
283
+ }
284
+ }
285
+ //# sourceMappingURL=block-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-store.js","sourceRoot":"","sources":["../src/block-store.ts"],"names":[],"mappings":"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"}
@@ -15,4 +15,20 @@ export interface ClassificationInfo {
15
15
  * Returns an array of classification references with system info.
16
16
  */
17
17
  export declare function extractClassificationsOnDemand(store: IfcDataStore, entityId: number): ClassificationInfo[];
18
+ /**
19
+ * List the distinct classification system names present in a model —
20
+ * CHEAP and EXACT.
21
+ *
22
+ * Unlike extractClassificationsOnDemand (which resolves classifications for
23
+ * ONE entity by walking its reference chain, and is only reachable through
24
+ * elements that already have a classification association), this walks the
25
+ * IfcClassification entities directly via the byType index. A model
26
+ * typically has only a handful of IfcClassification entities (one per
27
+ * system), regardless of how many elements are classified, so this is an
28
+ * O(few) map lookup + loop — not a per-entity or per-element scan.
29
+ *
30
+ * A model can carry SEVERAL systems at once (e.g. Uniclass, OmniClass, and
31
+ * a national system) — this returns all of them, sorted alphabetically.
32
+ */
33
+ export declare function extractClassificationSystemsOnDemand(store: IfcDataStore): string[];
18
34
  //# sourceMappingURL=classification-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"classification-resolver.d.ts","sourceRoot":"","sources":["../src/classification-resolver.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,kBAAkB,EAAE,CA0EtB"}
1
+ {"version":3,"file":"classification-resolver.d.ts","sourceRoot":"","sources":["../src/classification-resolver.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,kBAAkB,EAAE,CA0EtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAoBlF"}
@@ -87,6 +87,41 @@ export function extractClassificationsOnDemand(store, entityId) {
87
87
  }
88
88
  return results;
89
89
  }
90
+ /**
91
+ * List the distinct classification system names present in a model —
92
+ * CHEAP and EXACT.
93
+ *
94
+ * Unlike extractClassificationsOnDemand (which resolves classifications for
95
+ * ONE entity by walking its reference chain, and is only reachable through
96
+ * elements that already have a classification association), this walks the
97
+ * IfcClassification entities directly via the byType index. A model
98
+ * typically has only a handful of IfcClassification entities (one per
99
+ * system), regardless of how many elements are classified, so this is an
100
+ * O(few) map lookup + loop — not a per-entity or per-element scan.
101
+ *
102
+ * A model can carry SEVERAL systems at once (e.g. Uniclass, OmniClass, and
103
+ * a national system) — this returns all of them, sorted alphabetically.
104
+ */
105
+ export function extractClassificationSystemsOnDemand(store) {
106
+ const ids = store.entityIndex.byType.get('IFCCLASSIFICATION');
107
+ if (!ids || ids.length === 0 || !store.source?.length)
108
+ return [];
109
+ const extractor = new EntityExtractor(store.source);
110
+ const names = new Set();
111
+ for (const id of ids) {
112
+ const ref = store.entityIndex.byId.get(id);
113
+ if (!ref)
114
+ continue;
115
+ const entity = extractor.extractEntity(ref);
116
+ if (!entity)
117
+ continue;
118
+ // IfcClassification: [Source, Edition, EditionDate, Name, ...]
119
+ const name = entity.attributes?.[3];
120
+ if (typeof name === 'string' && name.length > 0)
121
+ names.add(name);
122
+ }
123
+ return Array.from(names).sort();
124
+ }
90
125
  /**
91
126
  * Walk up the IfcClassificationReference chain to find the root IfcClassification system.
92
127
  */
@@ -1 +1 @@
1
- {"version":3,"file":"classification-resolver.js","sourceRoot":"","sources":["../src/classification-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classification-resolver.js","sourceRoot":"","sources":["../src/classification-resolver.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,21 @@ import type { EntityRef } from './types.js';
8
8
  import { StringTable, EntityTableBuilder, PropertyTableBuilder, RelationshipGraphBuilder } from '@ifc-lite/data';
9
9
  import type { QuantityTable, PropertyValue, IfcStoreBase, IfcEntity, IfcAttributeValue } from '@ifc-lite/data';
10
10
  import type { EntityByIdIndex } from './columnar-parser-indexes.js';
11
+ import { type IfcSourceBytes } from './source-bytes.js';
11
12
  export type { SpatialIndex, EntityByIdIndex } from './columnar-parser-indexes.js';
12
13
  export interface IfcDataStore extends IfcStoreBase {
13
14
  parseTime: number;
14
- source: Uint8Array;
15
+ /**
16
+ * The IFC source bytes, behind an accessor rather than a resident
17
+ * `Uint8Array` (#2183). Read ranges with `slice`/`decodeUtf8`; use
18
+ * `withMaterialized` for the genuine whole-file consumers, and
19
+ * `toTransferable()` to hand it to a worker without materialising here.
20
+ *
21
+ * `byteLength === 0` is a supported state (server-parsed, synthetic, GLB,
22
+ * point-cloud), and `length` is aliased so existing presence guards keep
23
+ * their meaning.
24
+ */
25
+ source: IfcSourceBytes;
15
26
  entityIndex: {
16
27
  byId: EntityByIdIndex;
17
28
  byType: Map<string, number[]>;
@@ -197,7 +208,7 @@ export declare function extractRootAttributesFromEntity(entity: IfcEntity): {
197
208
  * (#1075)
198
209
  */
199
210
  export declare function pickLongName(entity: IfcEntity): string;
200
- export { extractClassificationsOnDemand, extractMaterialsOnDemand, extractAllMaterialsOnDemand, extractMaterialPropertiesOnDemand, extractMaterialPropertiesForMaterialId, resolveMaterialDefId, resolveAllMaterialDefIds, collectMaterialLeaves, buildMaterialUsageIndex, getMaterialDisplay, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractTypeQuantitiesOnDemand, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractGroupMembersOnDemand, extractGeoreferencingOnDemand, parsePropertyValue, extractPsetsFromIds, extractQsetsFromIds, } from './on-demand-extractors.js';
211
+ export { extractClassificationsOnDemand, extractClassificationSystemsOnDemand, extractMaterialsOnDemand, extractAllMaterialsOnDemand, extractMaterialPropertiesOnDemand, extractMaterialPropertiesForMaterialId, resolveMaterialDefId, resolveAllMaterialDefIds, collectMaterialLeaves, buildMaterialUsageIndex, getMaterialDisplay, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractTypeQuantitiesOnDemand, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractGroupMembersOnDemand, extractGeoreferencingOnDemand, parsePropertyValue, extractPsetsFromIds, extractQsetsFromIds, } from './on-demand-extractors.js';
201
212
  export { mergeInheritedPropertySets } from './property-set-merge.js';
202
213
  export type { ClassificationInfo, MaterialInfo, MaterialLayerInfo, MaterialProfileInfo, MaterialConstituentInfo, MaterialPsetGroup, MaterialLeaf, MaterialUsage, TypePropertyInfo, TypeQuantityInfo, DocumentInfo, EntityRelationships, GroupMember, GeorefInfo, } from './on-demand-extractors.js';
203
214
  //# sourceMappingURL=columnar-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"columnar-parser.d.ts","sourceRoot":"","sources":["../src/columnar-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"columnar-parser.d.ts","sourceRoot":"","sources":["../src/columnar-parser.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ5C,OAAO,EACH,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EAEpB,wBAAwB,EAG3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAoB,aAAa,EAAE,aAAa,EAA4B,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAoB3J,OAAO,KAAK,EAAgB,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAElF,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG/E,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAElF,MAAM,WAAW,YAAa,SAAQ,YAAY;IAC9C,SAAS,EAAE,MAAM,CAAC;IAElB;;;;;;;;;OASG;IACH,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC;IACtE,mBAAmB,CAAC,EAAE,eAAe,CAAC;IAEtC,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,UAAU,EAAE,UAAU,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,UAAU,EAAE,aAAa,CAAC;IAC1B,aAAa,EAAE,UAAU,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;IAE7D;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5C;;;OAGG;IACH,yBAAyB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAElD;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5C;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAeD,qBAAa,cAAc;IACvB;;;;;;OAMG;IACG,SAAS,CACX,MAAM,EAAE,WAAW,GAAG,iBAAiB,EACvC,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,GAAE;QACL,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;QACpE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACzC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;KACpD,GACP,OAAO,CAAC,YAAY,CAAC;IAomBxB;;;OAGG;IACH,yBAAyB,CACrB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,aAAa,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IA+D5J;;;OAGG;IACH,yBAAyB,CACrB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CA4D/F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAG3J;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAG3F;AAMD;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC3C,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAa1F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACtC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAoF3D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,SAAS,GAClB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAYjD;AAoCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,+BAA+B,CAC3C,MAAM,EAAE,SAAS,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CA0B1F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAKtD;AAGD,OAAO,EACH,8BAA8B,EAC9B,oCAAoC,EACpC,wBAAwB,EACxB,2BAA2B,EAC3B,iCAAiC,EACjC,sCAAsC,EACtC,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,YAAY,EACR,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,UAAU,GACb,MAAM,2BAA2B,CAAC"}
@@ -15,6 +15,7 @@ import { GEOMETRY_TYPES, REL_TYPE_MAP, QUANTITY_TYPE_MAP, SPATIAL_TYPES, HIERARC
15
15
  import { extractRelFast, extractPropertyRelFast } from './columnar-parser-relationships.js';
16
16
  import { safeUtf8Decode } from '@ifc-lite/data';
17
17
  import { parseSourceHeader } from './source-header.js';
18
+ import { contiguousSourceBytes } from './source-bytes.js';
18
19
  function detectSchemaVersion(buffer) {
19
20
  const headerEnd = Math.min(buffer.length, 2000);
20
21
  const headerText = safeUtf8Decode(buffer, 0, headerEnd).toUpperCase();
@@ -414,14 +415,26 @@ export class ColumnarParser {
414
415
  // The hierarchy panel can render immediately while property/association
415
416
  // parsing continues. This lets the panel appear at the same time as
416
417
  // geometry streaming completes.
417
- const entitySource = new BufferEntitySource(uint8Buffer, entityIndex);
418
+ // ONE accessor, shared by the store field and the entity source.
419
+ //
420
+ // These used to be built separately -- `BufferEntitySource` got the raw
421
+ // `uint8Buffer` and wrapped it in its own accessor, while `source` got
422
+ // another. That is invisible while both are resident views over the
423
+ // same bytes, and fatal once the source can switch to compressed
424
+ // storage in place (#2183): `getEntity` would keep reading its private
425
+ // resident accessor, so the original buffer would never be released and
426
+ // the store would serve entities from one representation and properties
427
+ // from the other. Measured: with two accessors the buffer survives GC
428
+ // after the swap; with one it is collected.
429
+ const source = contiguousSourceBytes(uint8Buffer);
430
+ const entitySource = new BufferEntitySource(source, entityIndex);
418
431
  const earlyStore = {
419
432
  fileSize: buffer.byteLength,
420
433
  schemaVersion,
421
434
  sourceHeader,
422
435
  entityCount: totalEntities,
423
436
  parseTime: performance.now() - startTime,
424
- source: uint8Buffer,
437
+ source,
425
438
  entityIndex,
426
439
  strings,
427
440
  entities: entityTable,
@@ -932,6 +945,6 @@ export function pickLongName(entity) {
932
945
  return typeof raw === 'string' ? raw : '';
933
946
  }
934
947
  // Re-export on-demand extraction functions from focused module
935
- export { extractClassificationsOnDemand, extractMaterialsOnDemand, extractAllMaterialsOnDemand, extractMaterialPropertiesOnDemand, extractMaterialPropertiesForMaterialId, resolveMaterialDefId, resolveAllMaterialDefIds, collectMaterialLeaves, buildMaterialUsageIndex, getMaterialDisplay, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractTypeQuantitiesOnDemand, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractGroupMembersOnDemand, extractGeoreferencingOnDemand, parsePropertyValue, extractPsetsFromIds, extractQsetsFromIds, } from './on-demand-extractors.js';
948
+ export { extractClassificationsOnDemand, extractClassificationSystemsOnDemand, extractMaterialsOnDemand, extractAllMaterialsOnDemand, extractMaterialPropertiesOnDemand, extractMaterialPropertiesForMaterialId, resolveMaterialDefId, resolveAllMaterialDefIds, collectMaterialLeaves, buildMaterialUsageIndex, getMaterialDisplay, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractTypeQuantitiesOnDemand, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractGroupMembersOnDemand, extractGeoreferencingOnDemand, parsePropertyValue, extractPsetsFromIds, extractQsetsFromIds, } from './on-demand-extractors.js';
936
949
  export { mergeInheritedPropertySets } from './property-set-merge.js';
937
950
  //# sourceMappingURL=columnar-parser.js.map