@ifc-lite/cache 1.2.1 → 1.6.0

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.
package/dist/glb.d.ts ADDED
@@ -0,0 +1,107 @@
1
+ /**
2
+ * GLB (binary glTF) parser for loading pre-cached geometry
3
+ *
4
+ * Complements the GLTFExporter by enabling round-trip workflows:
5
+ * IFC -> GLB (export) -> GLB -> MeshData (import)
6
+ */
7
+ import type { MeshData } from '@ifc-lite/geometry';
8
+ /** Parsed GLB structure */
9
+ export interface ParsedGLB {
10
+ json: GLTFDocument;
11
+ bin: Uint8Array | null;
12
+ }
13
+ /** Mapping from IFC express ID to GLB node/mesh indices */
14
+ export interface GLBMapping {
15
+ expressIdToNode: Map<number, number>;
16
+ expressIdToMesh: Map<number, number>;
17
+ nodeToExpressId: Map<number, number>;
18
+ }
19
+ interface GLTFDocument {
20
+ asset: {
21
+ version: string;
22
+ generator?: string;
23
+ };
24
+ scene?: number;
25
+ scenes?: Array<{
26
+ nodes?: number[];
27
+ }>;
28
+ nodes?: GLTFNode[];
29
+ meshes?: GLTFMesh[];
30
+ accessors?: GLTFAccessor[];
31
+ bufferViews?: GLTFBufferView[];
32
+ buffers?: GLTFBuffer[];
33
+ }
34
+ interface GLTFNode {
35
+ mesh?: number;
36
+ name?: string;
37
+ extras?: {
38
+ expressId?: number;
39
+ };
40
+ children?: number[];
41
+ }
42
+ interface GLTFMesh {
43
+ primitives: GLTFPrimitive[];
44
+ name?: string;
45
+ }
46
+ interface GLTFPrimitive {
47
+ attributes: {
48
+ POSITION: number;
49
+ NORMAL?: number;
50
+ };
51
+ indices?: number;
52
+ mode?: number;
53
+ }
54
+ interface GLTFAccessor {
55
+ bufferView: number;
56
+ byteOffset?: number;
57
+ componentType: number;
58
+ count: number;
59
+ type: 'SCALAR' | 'VEC2' | 'VEC3' | 'VEC4' | 'MAT2' | 'MAT3' | 'MAT4';
60
+ min?: number[];
61
+ max?: number[];
62
+ }
63
+ interface GLTFBufferView {
64
+ buffer: number;
65
+ byteOffset?: number;
66
+ byteLength: number;
67
+ byteStride?: number;
68
+ target?: number;
69
+ }
70
+ interface GLTFBuffer {
71
+ byteLength: number;
72
+ uri?: string;
73
+ }
74
+ /**
75
+ * Parse a GLB (binary glTF) file
76
+ *
77
+ * @param data - The GLB file as a Uint8Array
78
+ * @returns Parsed GLB with JSON document and binary buffer
79
+ * @throws Error if the GLB format is invalid
80
+ */
81
+ export declare function parseGLB(data: Uint8Array): ParsedGLB;
82
+ /**
83
+ * Extract mapping between IFC express IDs and GLB node/mesh indices
84
+ *
85
+ * This relies on the extras.expressId property set during export.
86
+ *
87
+ * @param gltf - Parsed glTF document
88
+ * @returns Mapping between express IDs and node/mesh indices
89
+ */
90
+ export declare function extractGLBMapping(gltf: GLTFDocument): GLBMapping;
91
+ /**
92
+ * Parse GLB geometry into MeshData format
93
+ *
94
+ * @param gltf - Parsed glTF document
95
+ * @param bin - Binary buffer from GLB
96
+ * @returns Array of MeshData objects
97
+ */
98
+ export declare function parseGLBToMeshData(gltf: GLTFDocument, bin: Uint8Array): MeshData[];
99
+ /**
100
+ * Convenience function to parse GLB directly to MeshData
101
+ *
102
+ * @param data - GLB file as Uint8Array
103
+ * @returns Array of MeshData objects
104
+ */
105
+ export declare function loadGLBToMeshData(data: Uint8Array): MeshData[];
106
+ export {};
107
+ //# sourceMappingURL=glb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glb.d.ts","sourceRoot":"","sources":["../src/glb.ts"],"names":[],"mappings":"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"}
package/dist/glb.js ADDED
@@ -0,0 +1,300 @@
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
+ // glTF 2.0 constants
5
+ const GLB_MAGIC = 0x46546c67; // 'glTF'
6
+ const GLB_VERSION = 2;
7
+ const CHUNK_TYPE_JSON = 0x4e4f534a; // 'JSON'
8
+ const CHUNK_TYPE_BIN = 0x004e4942; // 'BIN\0'
9
+ // Component types
10
+ const COMPONENT_BYTE = 5120;
11
+ const COMPONENT_UNSIGNED_BYTE = 5121;
12
+ const COMPONENT_SHORT = 5122;
13
+ const COMPONENT_UNSIGNED_SHORT = 5123;
14
+ const COMPONENT_UNSIGNED_INT = 5125;
15
+ const COMPONENT_FLOAT = 5126;
16
+ /**
17
+ * Parse a GLB (binary glTF) file
18
+ *
19
+ * @param data - The GLB file as a Uint8Array
20
+ * @returns Parsed GLB with JSON document and binary buffer
21
+ * @throws Error if the GLB format is invalid
22
+ */
23
+ export function parseGLB(data) {
24
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
25
+ // Validate header (12 bytes)
26
+ if (data.byteLength < 12) {
27
+ throw new Error('GLB file too small for header');
28
+ }
29
+ const magic = view.getUint32(0, true);
30
+ if (magic !== GLB_MAGIC) {
31
+ throw new Error(`Invalid GLB magic: expected 0x${GLB_MAGIC.toString(16)}, got 0x${magic.toString(16)}`);
32
+ }
33
+ const version = view.getUint32(4, true);
34
+ if (version !== GLB_VERSION) {
35
+ throw new Error(`Unsupported GLB version: ${version}`);
36
+ }
37
+ const totalLength = view.getUint32(8, true);
38
+ if (totalLength > data.byteLength) {
39
+ throw new Error(`GLB declared length ${totalLength} exceeds data length ${data.byteLength}`);
40
+ }
41
+ // Parse chunks
42
+ let offset = 12;
43
+ let json = null;
44
+ let bin = null;
45
+ while (offset < totalLength) {
46
+ if (offset + 8 > totalLength) {
47
+ throw new Error('Incomplete chunk header');
48
+ }
49
+ const chunkLength = view.getUint32(offset, true);
50
+ const chunkType = view.getUint32(offset + 4, true);
51
+ offset += 8;
52
+ if (offset + chunkLength > totalLength) {
53
+ throw new Error('Chunk extends beyond file');
54
+ }
55
+ if (chunkType === CHUNK_TYPE_JSON) {
56
+ const jsonBytes = data.subarray(offset, offset + chunkLength);
57
+ const jsonString = new TextDecoder().decode(jsonBytes);
58
+ json = JSON.parse(jsonString);
59
+ }
60
+ else if (chunkType === CHUNK_TYPE_BIN) {
61
+ bin = data.slice(offset, offset + chunkLength);
62
+ }
63
+ offset += chunkLength;
64
+ }
65
+ if (!json) {
66
+ throw new Error('GLB missing JSON chunk');
67
+ }
68
+ return { json, bin };
69
+ }
70
+ /**
71
+ * Extract mapping between IFC express IDs and GLB node/mesh indices
72
+ *
73
+ * This relies on the extras.expressId property set during export.
74
+ *
75
+ * @param gltf - Parsed glTF document
76
+ * @returns Mapping between express IDs and node/mesh indices
77
+ */
78
+ export function extractGLBMapping(gltf) {
79
+ const expressIdToNode = new Map();
80
+ const expressIdToMesh = new Map();
81
+ const nodeToExpressId = new Map();
82
+ if (!gltf.nodes) {
83
+ return { expressIdToNode, expressIdToMesh, nodeToExpressId };
84
+ }
85
+ for (let nodeIdx = 0; nodeIdx < gltf.nodes.length; nodeIdx++) {
86
+ const node = gltf.nodes[nodeIdx];
87
+ const expressId = node.extras?.expressId;
88
+ if (expressId !== undefined) {
89
+ expressIdToNode.set(expressId, nodeIdx);
90
+ nodeToExpressId.set(nodeIdx, expressId);
91
+ if (node.mesh !== undefined) {
92
+ expressIdToMesh.set(expressId, node.mesh);
93
+ }
94
+ }
95
+ }
96
+ return { expressIdToNode, expressIdToMesh, nodeToExpressId };
97
+ }
98
+ /**
99
+ * Get the byte size for a glTF component type
100
+ */
101
+ function getComponentSize(componentType) {
102
+ switch (componentType) {
103
+ case COMPONENT_BYTE:
104
+ case COMPONENT_UNSIGNED_BYTE:
105
+ return 1;
106
+ case COMPONENT_SHORT:
107
+ case COMPONENT_UNSIGNED_SHORT:
108
+ return 2;
109
+ case COMPONENT_UNSIGNED_INT:
110
+ case COMPONENT_FLOAT:
111
+ return 4;
112
+ default:
113
+ throw new Error(`Unknown component type: ${componentType}`);
114
+ }
115
+ }
116
+ /**
117
+ * Get the number of components for an accessor type
118
+ */
119
+ function getComponentCount(type) {
120
+ switch (type) {
121
+ case 'SCALAR':
122
+ return 1;
123
+ case 'VEC2':
124
+ return 2;
125
+ case 'VEC3':
126
+ return 3;
127
+ case 'VEC4':
128
+ return 4;
129
+ case 'MAT2':
130
+ return 4;
131
+ case 'MAT3':
132
+ return 9;
133
+ case 'MAT4':
134
+ return 16;
135
+ default:
136
+ throw new Error(`Unknown accessor type: ${type}`);
137
+ }
138
+ }
139
+ /**
140
+ * Read accessor data as a typed array
141
+ */
142
+ function readAccessorData(gltf, bin, accessorIdx) {
143
+ const accessor = gltf.accessors?.[accessorIdx];
144
+ if (!accessor) {
145
+ throw new Error(`Accessor ${accessorIdx} not found`);
146
+ }
147
+ const bufferView = gltf.bufferViews?.[accessor.bufferView];
148
+ if (!bufferView) {
149
+ throw new Error(`BufferView ${accessor.bufferView} not found`);
150
+ }
151
+ const componentSize = getComponentSize(accessor.componentType);
152
+ const componentCount = getComponentCount(accessor.type);
153
+ const elementSize = componentSize * componentCount;
154
+ const byteStride = bufferView.byteStride ?? elementSize;
155
+ const bufferOffset = (bufferView.byteOffset ?? 0) + (accessor.byteOffset ?? 0);
156
+ // If data is tightly packed, we can use a view directly
157
+ if (byteStride === elementSize) {
158
+ const byteLength = accessor.count * elementSize;
159
+ const slice = bin.slice(bufferOffset, bufferOffset + byteLength);
160
+ switch (accessor.componentType) {
161
+ case COMPONENT_FLOAT:
162
+ return new Float32Array(slice.buffer, slice.byteOffset, accessor.count * componentCount);
163
+ case COMPONENT_UNSIGNED_INT:
164
+ return new Uint32Array(slice.buffer, slice.byteOffset, accessor.count * componentCount);
165
+ case COMPONENT_UNSIGNED_SHORT:
166
+ return new Uint16Array(slice.buffer, slice.byteOffset, accessor.count * componentCount);
167
+ case COMPONENT_UNSIGNED_BYTE:
168
+ return slice;
169
+ default:
170
+ throw new Error(`Unsupported component type for reading: ${accessor.componentType}`);
171
+ }
172
+ }
173
+ // Handle strided data
174
+ const result = accessor.componentType === COMPONENT_FLOAT
175
+ ? new Float32Array(accessor.count * componentCount)
176
+ : accessor.componentType === COMPONENT_UNSIGNED_INT
177
+ ? new Uint32Array(accessor.count * componentCount)
178
+ : accessor.componentType === COMPONENT_UNSIGNED_SHORT
179
+ ? new Uint16Array(accessor.count * componentCount)
180
+ : new Uint8Array(accessor.count * componentCount);
181
+ const dataView = new DataView(bin.buffer, bin.byteOffset, bin.byteLength);
182
+ for (let i = 0; i < accessor.count; i++) {
183
+ const elementOffset = bufferOffset + i * byteStride;
184
+ for (let c = 0; c < componentCount; c++) {
185
+ const byteOffset = elementOffset + c * componentSize;
186
+ let value;
187
+ switch (accessor.componentType) {
188
+ case COMPONENT_FLOAT:
189
+ value = dataView.getFloat32(byteOffset, true);
190
+ break;
191
+ case COMPONENT_UNSIGNED_INT:
192
+ value = dataView.getUint32(byteOffset, true);
193
+ break;
194
+ case COMPONENT_UNSIGNED_SHORT:
195
+ value = dataView.getUint16(byteOffset, true);
196
+ break;
197
+ case COMPONENT_UNSIGNED_BYTE:
198
+ value = dataView.getUint8(byteOffset);
199
+ break;
200
+ default:
201
+ throw new Error(`Unsupported component type: ${accessor.componentType}`);
202
+ }
203
+ result[i * componentCount + c] = value;
204
+ }
205
+ }
206
+ return result;
207
+ }
208
+ /**
209
+ * Parse GLB geometry into MeshData format
210
+ *
211
+ * @param gltf - Parsed glTF document
212
+ * @param bin - Binary buffer from GLB
213
+ * @returns Array of MeshData objects
214
+ */
215
+ export function parseGLBToMeshData(gltf, bin) {
216
+ const meshes = [];
217
+ const mapping = extractGLBMapping(gltf);
218
+ if (!gltf.nodes || !gltf.meshes) {
219
+ return meshes;
220
+ }
221
+ for (let nodeIdx = 0; nodeIdx < gltf.nodes.length; nodeIdx++) {
222
+ const node = gltf.nodes[nodeIdx];
223
+ if (node.mesh === undefined)
224
+ continue;
225
+ const mesh = gltf.meshes[node.mesh];
226
+ if (!mesh || !mesh.primitives.length)
227
+ continue;
228
+ const expressId = mapping.nodeToExpressId.get(nodeIdx) ?? nodeIdx;
229
+ // Process each primitive (typically one per mesh from our exporter)
230
+ for (const primitive of mesh.primitives) {
231
+ // Skip non-triangle primitives (mode 4 = TRIANGLES, undefined defaults to TRIANGULAR)
232
+ if (primitive.mode !== undefined && primitive.mode !== 4) {
233
+ continue;
234
+ }
235
+ const posAccessorIdx = primitive.attributes.POSITION;
236
+ const normAccessorIdx = primitive.attributes.NORMAL;
237
+ const idxAccessorIdx = primitive.indices;
238
+ if (posAccessorIdx === undefined)
239
+ continue;
240
+ // Read position data
241
+ const positions = readAccessorData(gltf, bin, posAccessorIdx);
242
+ if (!(positions instanceof Float32Array)) {
243
+ throw new Error('Position data must be Float32');
244
+ }
245
+ // Read normal data (optional, generate if missing)
246
+ let normals;
247
+ if (normAccessorIdx !== undefined) {
248
+ const normData = readAccessorData(gltf, bin, normAccessorIdx);
249
+ if (!(normData instanceof Float32Array)) {
250
+ throw new Error('Normal data must be Float32');
251
+ }
252
+ normals = normData;
253
+ }
254
+ else {
255
+ // Generate flat normals if none provided
256
+ normals = new Float32Array(positions.length);
257
+ }
258
+ // Read index data (optional for non-indexed geometry)
259
+ let indices;
260
+ if (idxAccessorIdx !== undefined) {
261
+ const idxData = readAccessorData(gltf, bin, idxAccessorIdx);
262
+ if (idxData instanceof Float32Array) {
263
+ throw new Error('Index data cannot be Float32');
264
+ }
265
+ // Convert to Uint32Array if needed
266
+ indices =
267
+ idxData instanceof Uint32Array ? idxData : new Uint32Array(idxData);
268
+ }
269
+ else {
270
+ // Non-indexed: generate sequential indices
271
+ indices = new Uint32Array(positions.length / 3);
272
+ for (let i = 0; i < indices.length; i++) {
273
+ indices[i] = i;
274
+ }
275
+ }
276
+ meshes.push({
277
+ expressId,
278
+ positions,
279
+ normals,
280
+ indices,
281
+ color: [0.8, 0.8, 0.8, 1.0], // Default grey, can be overridden
282
+ });
283
+ }
284
+ }
285
+ return meshes;
286
+ }
287
+ /**
288
+ * Convenience function to parse GLB directly to MeshData
289
+ *
290
+ * @param data - GLB file as Uint8Array
291
+ * @returns Array of MeshData objects
292
+ */
293
+ export function loadGLBToMeshData(data) {
294
+ const { json, bin } = parseGLB(data);
295
+ if (!bin) {
296
+ throw new Error('GLB has no binary buffer');
297
+ }
298
+ return parseGLBToMeshData(json, bin);
299
+ }
300
+ //# sourceMappingURL=glb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glb.js","sourceRoot":"","sources":["../src/glb.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -24,4 +24,6 @@ export { MAGIC, FORMAT_VERSION, HEADER_SIZE, SECTION_ENTRY_SIZE, SectionType, Sc
24
24
  export type { CacheHeader, SectionEntry, CacheWriteOptions, CacheReadOptions, CacheHeaderInfo, CacheReadResult, IfcDataStore, } from './types.js';
25
25
  export { xxhash64, xxhash64Hex } from './utils/hash.js';
26
26
  export { BufferWriter, BufferReader } from './utils/buffer-utils.js';
27
+ export { parseGLB, extractGLBMapping, parseGLBToMeshData, loadGLBToMeshData, } from './glb.js';
28
+ export type { ParsedGLB, GLBMapping } from './glb.js';
27
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,KAAK,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,KAAK,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -26,4 +26,6 @@ export { MAGIC, FORMAT_VERSION, HEADER_SIZE, SECTION_ENTRY_SIZE, SectionType, Sc
26
26
  // Utilities
27
27
  export { xxhash64, xxhash64Hex } from './utils/hash.js';
28
28
  export { BufferWriter, BufferReader } from './utils/buffer-utils.js';
29
+ // GLB parser
30
+ export { parseGLB, extractGLBMapping, parseGLBToMeshData, loadGLBToMeshData, } from './glb.js';
29
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,KAAK,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAYpB,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,KAAK,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAYpB,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAErE,aAAa;AACb,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/sections/entities.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CA2B/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,CAwFpF"}
1
+ {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/sections/entities.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CA2B/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,CAuGpF"}
@@ -79,6 +79,14 @@ export function readEntities(reader, strings) {
79
79
  const indexOfId = (id) => {
80
80
  return idToIndex.get(id) ?? -1;
81
81
  };
82
+ // Build GlobalId → expressId map for BCF integration
83
+ const globalIdToExpressId = new Map();
84
+ for (let i = 0; i < count; i++) {
85
+ const gidString = strings.get(globalId[i]);
86
+ if (gidString) {
87
+ globalIdToExpressId.set(gidString, expressId[i]);
88
+ }
89
+ }
82
90
  return {
83
91
  count,
84
92
  expressId,
@@ -126,6 +134,12 @@ export function readEntities(reader, strings) {
126
134
  }
127
135
  return ids;
128
136
  },
137
+ getExpressIdByGlobalId: (gid) => {
138
+ return globalIdToExpressId.get(gid) ?? -1;
139
+ },
140
+ getGlobalIdMap: () => {
141
+ return new Map(globalIdToExpressId); // Defensive copy
142
+ },
129
143
  };
130
144
  }
131
145
  //# sourceMappingURL=entities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/sections/entities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/sections/entities.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,6 @@ import { BufferWriter, BufferReader } from '../utils/buffer-utils.js';
20
20
  * - indices: Uint32Array[indexCount]
21
21
  */
22
22
  export declare function writeGeometry(writer: BufferWriter, meshes: MeshData[], totalVertices: number, totalTriangles: number, coordinateInfo: CoordinateInfo): void;
23
- /**
24
- * Read geometry data from buffer
25
- */
26
23
  export declare function readGeometry(reader: BufferReader, version?: number): {
27
24
  meshes: MeshData[];
28
25
  totalVertices: number;
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/sections/geometry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,QAAQ,EAAE,EAClB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,cAAc,GAC7B,IAAI,CAiCN;AA2BD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,MAAU,GAAG;IACvE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;CAChC,CA+CA"}
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/sections/geometry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,QAAQ,EAAE,EAClB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,cAAc,GAC7B,IAAI,CAkEN;AAiDD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,MAAU,GAAG;IACvE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;CAChC,CA4DA"}
@@ -18,13 +18,37 @@
18
18
  * - indices: Uint32Array[indexCount]
19
19
  */
20
20
  export function writeGeometry(writer, meshes, totalVertices, totalTriangles, coordinateInfo) {
21
- writer.writeUint32(meshes.length);
22
- writer.writeUint32(totalVertices);
23
- writer.writeUint32(totalTriangles);
21
+ // First pass: validate and filter meshes, recalculate totals
22
+ const validMeshes = [];
23
+ let actualTotalVertices = 0;
24
+ let actualTotalTriangles = 0;
25
+ for (let i = 0; i < meshes.length; i++) {
26
+ const mesh = meshes[i];
27
+ const vertexCount = mesh.positions.length / 3;
28
+ const indexCount = mesh.indices.length;
29
+ // Sanity check: vertex/index counts should be reasonable
30
+ if (vertexCount > MAX_VERTEX_COUNT || indexCount > MAX_INDEX_COUNT) {
31
+ console.warn(`[writeGeometry] Skipping mesh ${i} (expressId=${mesh.expressId}): unreasonable counts`);
32
+ continue;
33
+ }
34
+ // Verify array integrity (check for detached buffers or size mismatches)
35
+ // Note: Some WASM-generated meshes may have mismatched array sizes - skip them
36
+ if (mesh.normals.length !== mesh.positions.length) {
37
+ console.warn(`[writeGeometry] Skipping mesh ${i} (expressId=${mesh.expressId}): normals/positions size mismatch (${mesh.normals.length} vs ${mesh.positions.length})`);
38
+ continue;
39
+ }
40
+ validMeshes.push(mesh);
41
+ actualTotalVertices += vertexCount;
42
+ actualTotalTriangles += indexCount / 3;
43
+ }
44
+ // Write header with actual counts
45
+ writer.writeUint32(validMeshes.length);
46
+ writer.writeUint32(actualTotalVertices);
47
+ writer.writeUint32(actualTotalTriangles);
24
48
  // Write coordinate info
25
49
  writeCoordinateInfo(writer, coordinateInfo);
26
- // Write each mesh
27
- for (const mesh of meshes) {
50
+ // Write each valid mesh
51
+ for (const mesh of validMeshes) {
28
52
  writer.writeUint32(mesh.expressId);
29
53
  const vertexCount = mesh.positions.length / 3;
30
54
  const indexCount = mesh.indices.length;
@@ -43,6 +67,9 @@ export function writeGeometry(writer, meshes, totalVertices, totalTriangles, coo
43
67
  writer.writeTypedArray(mesh.normals);
44
68
  writer.writeTypedArray(mesh.indices);
45
69
  }
70
+ if (validMeshes.length < meshes.length) {
71
+ console.warn(`[writeGeometry] Wrote ${validMeshes.length}/${meshes.length} meshes (${meshes.length - validMeshes.length} skipped due to data issues)`);
72
+ }
46
73
  }
47
74
  function writeCoordinateInfo(writer, info) {
48
75
  // Origin shift
@@ -51,8 +78,20 @@ function writeCoordinateInfo(writer, info) {
51
78
  writeAABB(writer, info.originalBounds);
52
79
  // Shifted bounds
53
80
  writeAABB(writer, info.shiftedBounds);
54
- // Is geo-referenced flag
55
- writer.writeUint8(info.isGeoReferenced ? 1 : 0);
81
+ // Has large coordinates flag (was misnamed isGeoReferenced)
82
+ writer.writeUint8(info.hasLargeCoordinates ? 1 : 0);
83
+ // Write wasmRtcOffset (optional)
84
+ const hasWasmRtc = info.wasmRtcOffset !== undefined;
85
+ writer.writeUint8(hasWasmRtc ? 1 : 0);
86
+ if (hasWasmRtc) {
87
+ writeVec3(writer, info.wasmRtcOffset);
88
+ }
89
+ // Write buildingRotation (optional)
90
+ const hasBuildingRotation = info.buildingRotation !== undefined;
91
+ writer.writeUint8(hasBuildingRotation ? 1 : 0);
92
+ if (hasBuildingRotation) {
93
+ writer.writeFloat64(info.buildingRotation);
94
+ }
56
95
  }
57
96
  function writeVec3(writer, v) {
58
97
  writer.writeFloat64(v.x);
@@ -66,16 +105,31 @@ function writeAABB(writer, aabb) {
66
105
  /**
67
106
  * Read geometry data from buffer
68
107
  */
108
+ // Maximum reasonable values for sanity checking
109
+ const MAX_MESH_COUNT = 10_000_000; // 10M meshes max
110
+ const MAX_VERTEX_COUNT = 100_000_000; // 100M vertices max per mesh
111
+ const MAX_INDEX_COUNT = 300_000_000; // 300M indices max per mesh
69
112
  export function readGeometry(reader, version = 2) {
70
113
  const meshCount = reader.readUint32();
71
114
  const totalVertices = reader.readUint32();
72
115
  const totalTriangles = reader.readUint32();
73
- const coordinateInfo = readCoordinateInfo(reader);
116
+ // Sanity check mesh count
117
+ if (meshCount > MAX_MESH_COUNT) {
118
+ throw new Error(`Invalid cache: meshCount ${meshCount} exceeds maximum ${MAX_MESH_COUNT}. Cache may be corrupted or from incompatible version.`);
119
+ }
120
+ const coordinateInfo = readCoordinateInfo(reader, version);
74
121
  const meshes = [];
75
122
  for (let i = 0; i < meshCount; i++) {
76
123
  const expressId = reader.readUint32();
77
124
  const vertexCount = reader.readUint32();
78
125
  const indexCount = reader.readUint32();
126
+ // Sanity check vertex/index counts
127
+ if (vertexCount > MAX_VERTEX_COUNT) {
128
+ throw new Error(`Invalid cache: vertexCount ${vertexCount} exceeds maximum ${MAX_VERTEX_COUNT} at mesh ${i}. Cache may be corrupted or from incompatible version.`);
129
+ }
130
+ if (indexCount > MAX_INDEX_COUNT) {
131
+ throw new Error(`Invalid cache: indexCount ${indexCount} exceeds maximum ${MAX_INDEX_COUNT} at mesh ${i}. Cache may be corrupted or from incompatible version.`);
132
+ }
79
133
  const color = [
80
134
  reader.readFloat32(),
81
135
  reader.readFloat32(),
@@ -106,16 +160,29 @@ export function readGeometry(reader, version = 2) {
106
160
  coordinateInfo,
107
161
  };
108
162
  }
109
- function readCoordinateInfo(reader) {
163
+ function readCoordinateInfo(reader, version = 2) {
110
164
  const originShift = readVec3(reader);
111
165
  const originalBounds = readAABB(reader);
112
166
  const shiftedBounds = readAABB(reader);
113
- const isGeoReferenced = reader.readUint8() === 1;
167
+ const hasLargeCoordinates = reader.readUint8() === 1;
168
+ // Version 3+: read optional fields
169
+ let wasmRtcOffset;
170
+ let buildingRotation;
171
+ if (version >= 3) {
172
+ if (reader.readUint8() === 1) {
173
+ wasmRtcOffset = readVec3(reader);
174
+ }
175
+ if (reader.readUint8() === 1) {
176
+ buildingRotation = reader.readFloat64();
177
+ }
178
+ }
114
179
  return {
115
180
  originShift,
116
181
  originalBounds,
117
182
  shiftedBounds,
118
- isGeoReferenced,
183
+ hasLargeCoordinates,
184
+ wasmRtcOffset,
185
+ buildingRotation,
119
186
  };
120
187
  }
121
188
  function readVec3(reader) {
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../src/sections/geometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../src/sections/geometry.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -6,7 +6,7 @@ import type { MeshData, CoordinateInfo } from '@ifc-lite/geometry';
6
6
  /** Magic bytes: "IFCL" */
7
7
  export declare const MAGIC = 1279477321;
8
8
  /** Current format version */
9
- export declare const FORMAT_VERSION = 2;
9
+ export declare const FORMAT_VERSION = 3;
10
10
  /** Section types in the binary format */
11
11
  export declare enum SectionType {
12
12
  Strings = 1,
package/dist/types.js CHANGED
@@ -4,7 +4,7 @@
4
4
  /** Magic bytes: "IFCL" */
5
5
  export const MAGIC = 0x4C434649; // "IFCL" in little-endian
6
6
  /** Current format version */
7
- export const FORMAT_VERSION = 2;
7
+ export const FORMAT_VERSION = 3;
8
8
  /** Section types in the binary format */
9
9
  export var SectionType;
10
10
  (function (SectionType) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/cache",
3
- "version": "1.2.1",
3
+ "version": "1.6.0",
4
4
  "description": "Binary cache format for IFC-Lite - fast model loading",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -12,11 +12,12 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@ifc-lite/data": "^1.2.1",
16
- "@ifc-lite/geometry": "^1.2.1"
15
+ "@ifc-lite/data": "^1.3.0",
16
+ "@ifc-lite/geometry": "^1.5.0"
17
17
  },
18
18
  "devDependencies": {
19
- "typescript": "^5.3.0"
19
+ "typescript": "^5.3.0",
20
+ "vitest": "^1.6.0"
20
21
  },
21
22
  "license": "MPL-2.0",
22
23
  "author": "Louis True",
@@ -44,6 +45,6 @@
44
45
  "scripts": {
45
46
  "build": "tsc",
46
47
  "dev": "tsc --watch",
47
- "test": "tsx --test src/**/*.test.ts"
48
+ "test": "vitest run"
48
49
  }
49
50
  }