@pilotdev/pilot-bim-dataprovider 25.9.0 → 25.11.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.
Files changed (123) hide show
  1. package/lib/index.d.ts +4 -9
  2. package/lib/index.js +2 -5
  3. package/lib/index.js.map +1 -1
  4. package/lib/src/BimDataProviderApi.d.ts +52 -0
  5. package/lib/src/BimDataProviderApi.js +2 -0
  6. package/lib/src/BimDataProviderApi.js.map +1 -0
  7. package/lib/src/model/{BimDataIfcType.d.ts → BimDataClasses.d.ts} +159 -0
  8. package/lib/src/model/{BimDataIfcType.js → BimDataClasses.js} +203 -1
  9. package/lib/src/model/BimDataClasses.js.map +1 -0
  10. package/lib/src/model/BimDataCloudPart.d.ts +5 -9
  11. package/lib/src/model/BimDataCloudPart.js +11 -12
  12. package/lib/src/model/BimDataCloudPart.js.map +1 -1
  13. package/lib/src/model/BimDataModelPart.d.ts +4 -23
  14. package/lib/src/model/BimDataModelPart.js +22 -36
  15. package/lib/src/model/BimDataModelPart.js.map +1 -1
  16. package/lib/src/model/BimDataPart.d.ts +11 -21
  17. package/lib/src/model/BimDataPart.js +41 -67
  18. package/lib/src/model/BimDataPart.js.map +1 -1
  19. package/lib/src/model/BimDataProvider.d.ts +4 -17
  20. package/lib/src/model/BimDataProvider.js +18 -27
  21. package/lib/src/model/BimDataProvider.js.map +1 -1
  22. package/lib/src/utils/Consts.d.ts +17 -0
  23. package/lib/src/utils/Consts.js +20 -0
  24. package/lib/src/utils/Consts.js.map +1 -0
  25. package/lib/src/utils/ViewerTools.d.ts +17 -16
  26. package/lib/src/utils/ViewerTools.js +39 -21
  27. package/lib/src/utils/ViewerTools.js.map +1 -1
  28. package/lib/src/wasm/WasmWorker.d.ts +22 -70
  29. package/lib/src/wasm/WasmWorker.js +89 -180
  30. package/lib/src/wasm/WasmWorker.js.map +1 -1
  31. package/lib/src/wasm/{WasmWorkerThreadSafeWrapper.d.ts → WorkerApi.d.ts} +39 -21
  32. package/lib/src/wasm/WorkerApi.js +2 -0
  33. package/lib/src/wasm/WorkerApi.js.map +1 -0
  34. package/lib/src/wasm/cloud_readers/BinaryCloudReader.d.ts +18 -0
  35. package/lib/src/wasm/cloud_readers/BinaryCloudReader.js +228 -0
  36. package/lib/src/wasm/cloud_readers/BinaryCloudReader.js.map +1 -0
  37. package/lib/src/wasm/{DataAccessors → cloud_readers}/ICloudReader.d.ts +6 -6
  38. package/lib/src/wasm/cloud_readers/ICloudReader.js.map +1 -0
  39. package/lib/src/wasm/cloud_readers/WasmCloudReader.d.ts +20 -0
  40. package/lib/src/wasm/cloud_readers/WasmCloudReader.js +53 -0
  41. package/lib/src/wasm/cloud_readers/WasmCloudReader.js.map +1 -0
  42. package/lib/src/wasm/data_accessors/CloudPartAccessor.d.ts +20 -0
  43. package/lib/src/wasm/data_accessors/CloudPartAccessor.js +70 -0
  44. package/lib/src/wasm/data_accessors/CloudPartAccessor.js.map +1 -0
  45. package/lib/src/wasm/data_accessors/FileAccessor.d.ts +37 -0
  46. package/lib/src/wasm/data_accessors/FileAccessor.js +237 -0
  47. package/lib/src/wasm/data_accessors/FileAccessor.js.map +1 -0
  48. package/lib/src/wasm/data_accessors/ModelPartAccessor.d.ts +27 -0
  49. package/lib/src/wasm/data_accessors/ModelPartAccessor.js +142 -0
  50. package/lib/src/wasm/data_accessors/ModelPartAccessor.js.map +1 -0
  51. package/lib/src/wasm/file-system/File.d.ts +30 -0
  52. package/lib/src/wasm/file-system/File.js +58 -0
  53. package/lib/src/wasm/file-system/File.js.map +1 -0
  54. package/lib/src/wasm/file-system/FileAccessDispatcher.d.ts +12 -0
  55. package/lib/src/{model → wasm/file-system}/FileAccessDispatcher.js +59 -21
  56. package/lib/src/wasm/file-system/FileAccessDispatcher.js.map +1 -0
  57. package/lib/src/wasm/file-system/FileLoader.d.ts +41 -0
  58. package/lib/src/wasm/file-system/FileLoader.js +107 -0
  59. package/lib/src/wasm/file-system/FileLoader.js.map +1 -0
  60. package/lib/src/wasm/file-system/IFileSystem.d.ts +76 -0
  61. package/lib/src/wasm/file-system/IFileSystem.js +308 -0
  62. package/lib/src/wasm/file-system/IFileSystem.js.map +1 -0
  63. package/lib/src/{file-system → wasm/file-system}/IFileSystemCache.d.ts +10 -6
  64. package/lib/src/{file-system → wasm/file-system}/IFileSystemCache.js +11 -13
  65. package/lib/src/wasm/file-system/IFileSystemCache.js.map +1 -0
  66. package/lib/src/{file-system → wasm/file-system}/OPFS.d.ts +6 -6
  67. package/lib/src/{file-system → wasm/file-system}/OPFS.js +7 -3
  68. package/lib/src/wasm/file-system/OPFS.js.map +1 -0
  69. package/lib/src/wasm/file-system/PATH.js.map +1 -0
  70. package/lib/src/wasm/file-system/PartialFile.d.ts +48 -0
  71. package/lib/src/wasm/file-system/PartialFile.js +367 -0
  72. package/lib/src/wasm/file-system/PartialFile.js.map +1 -0
  73. package/lib/src/wasm/pilot_bim_dataprovider.d.ts +17 -1
  74. package/lib/src/wasm/wasm.worker-node.cjs +1 -1
  75. package/lib/src/wasm/wasm.worker-web.cjs +1 -1
  76. package/lib/src/wasm/worker.js +2 -0
  77. package/lib/src/wasm/worker.js.map +1 -1
  78. package/package.json +3 -4
  79. package/lib/src/file-system/IFileSystem.d.ts +0 -50
  80. package/lib/src/file-system/IFileSystem.js +0 -233
  81. package/lib/src/file-system/IFileSystem.js.map +0 -1
  82. package/lib/src/file-system/IFileSystemCache.js.map +0 -1
  83. package/lib/src/file-system/OPFS.js.map +0 -1
  84. package/lib/src/file-system/PATH.js.map +0 -1
  85. package/lib/src/model/BimDataElement.d.ts +0 -113
  86. package/lib/src/model/BimDataElement.js +0 -45
  87. package/lib/src/model/BimDataElement.js.map +0 -1
  88. package/lib/src/model/BimDataElementPropertySet.d.ts +0 -26
  89. package/lib/src/model/BimDataElementPropertySet.js +0 -90
  90. package/lib/src/model/BimDataElementPropertySet.js.map +0 -1
  91. package/lib/src/model/BimDataIfcRepresentationStatus.d.ts +0 -10
  92. package/lib/src/model/BimDataIfcRepresentationStatus.js +0 -12
  93. package/lib/src/model/BimDataIfcRepresentationStatus.js.map +0 -1
  94. package/lib/src/model/BimDataIfcType.js.map +0 -1
  95. package/lib/src/model/BimDataTessellation.d.ts +0 -13
  96. package/lib/src/model/BimDataTessellation.js +0 -16
  97. package/lib/src/model/BimDataTessellation.js.map +0 -1
  98. package/lib/src/model/Consts.d.ts +0 -7
  99. package/lib/src/model/Consts.js +0 -8
  100. package/lib/src/model/Consts.js.map +0 -1
  101. package/lib/src/model/FileAccessDispatcher.d.ts +0 -14
  102. package/lib/src/model/FileAccessDispatcher.js.map +0 -1
  103. package/lib/src/wasm/DataAccessors/BimCloudPartAccessor.d.ts +0 -17
  104. package/lib/src/wasm/DataAccessors/BimCloudPartAccessor.js +0 -60
  105. package/lib/src/wasm/DataAccessors/BimCloudPartAccessor.js.map +0 -1
  106. package/lib/src/wasm/DataAccessors/BimDataModelPartAccessor.d.ts +0 -20
  107. package/lib/src/wasm/DataAccessors/BimDataModelPartAccessor.js +0 -89
  108. package/lib/src/wasm/DataAccessors/BimDataModelPartAccessor.js.map +0 -1
  109. package/lib/src/wasm/DataAccessors/BimDataPartAccessor.d.ts +0 -8
  110. package/lib/src/wasm/DataAccessors/BimDataPartAccessor.js +0 -19
  111. package/lib/src/wasm/DataAccessors/BimDataPartAccessor.js.map +0 -1
  112. package/lib/src/wasm/DataAccessors/BinaryCloudReader.d.ts +0 -16
  113. package/lib/src/wasm/DataAccessors/BinaryCloudReader.js +0 -268
  114. package/lib/src/wasm/DataAccessors/BinaryCloudReader.js.map +0 -1
  115. package/lib/src/wasm/DataAccessors/ICloudReader.js.map +0 -1
  116. package/lib/src/wasm/DataAccessors/WasmCloudReader.d.ts +0 -16
  117. package/lib/src/wasm/DataAccessors/WasmCloudReader.js +0 -47
  118. package/lib/src/wasm/DataAccessors/WasmCloudReader.js.map +0 -1
  119. package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js +0 -141
  120. package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js.map +0 -1
  121. /package/lib/src/wasm/{DataAccessors → cloud_readers}/ICloudReader.js +0 -0
  122. /package/lib/src/{file-system → wasm/file-system}/PATH.d.ts +0 -0
  123. /package/lib/src/{file-system → wasm/file-system}/PATH.js +0 -0
@@ -1,8 +1,7 @@
1
1
  import * as comlink from "comlink";
2
- import { BimDataElement, BimDataMeshProperty, BimCloudHierarchyItem, BimCloudMetadata } from "../model/BimDataElement.js";
3
- import { BimDataElementPropertySet, BimDataElementProperty, BimDataElementPropertyValue } from "../model/BimDataElementPropertySet.js";
4
- import { BimDataTessellation, BimDataTessellationInfo } from "../model/BimDataTessellation.js";
2
+ import * as BimData from "../model/BimDataClasses.js";
5
3
  import { WasmTools } from "./WasmTools.js";
4
+ import { DATA_ROOT_FOLDER } from "./Consts.js";
6
5
  export const isSecureContext = isNode() ? false : self && !!self.isSecureContext;
7
6
  export const isCrossOriginIsolated = isNode() ? false : self && !!self.crossOriginIsolated;
8
7
  export const isOPFSEnabled = isSecureContext;
@@ -47,7 +46,7 @@ export class BimDataConverter {
47
46
  const sets = new Array();
48
47
  for (let index = 0; index < wasmPropertySets.size(); index++) {
49
48
  const wasmPropertySet = wasmPropertySets.get(index);
50
- const modelPropertySet = new BimDataElementPropertySet();
49
+ const modelPropertySet = new BimData.BimDataElementPropertySet();
51
50
  modelPropertySet.name = wasmPropertySet.name;
52
51
  modelPropertySet.type = wasmPropertySet.type;
53
52
  modelPropertySet.properties = this.toModelElementProperties(wasmPropertySet.properties, dispose);
@@ -75,7 +74,7 @@ export class BimDataConverter {
75
74
  return array;
76
75
  }
77
76
  static toCloudMetadata(wasmPointsMetadata, dispose) {
78
- const metadata = new BimCloudMetadata();
77
+ const metadata = new BimData.BimCloudMetadata();
79
78
  metadata.depth = wasmPointsMetadata.depth;
80
79
  const min = wasmPointsMetadata.min;
81
80
  metadata.min = { x: min[0], y: min[1], z: min[2] };
@@ -89,7 +88,7 @@ export class BimDataConverter {
89
88
  }
90
89
  static toBimDataElement(module, ifcNode, transfer) {
91
90
  const transferable = Array.isArray(transfer) ? transfer : transfer === true ? [] : undefined;
92
- const node = new BimDataElement();
91
+ const node = new BimData.BimDataElement();
93
92
  node.guid = ifcNode.id;
94
93
  node.name = ifcNode.name;
95
94
  node.parentGuid = ifcNode.parent_guid;
@@ -115,7 +114,7 @@ export class BimDataConverter {
115
114
  const valueVectorPtr = meshPtr.value;
116
115
  for (let j = 0; j < valueVectorPtr.size(); j++) {
117
116
  const propPtr = valueVectorPtr.get(j);
118
- const prop = new BimDataMeshProperty();
117
+ const prop = new BimData.BimDataMeshProperty();
119
118
  prop.meshColor = propPtr.mesh_color;
120
119
  prop.meshPlacement = WasmTools.vectorToFloat64Array(module, propPtr.mesh_placement, propPtr.getPlacementDataOffset(), true, transferable);
121
120
  propPtr.delete();
@@ -154,7 +153,7 @@ export class BimDataConverter {
154
153
  }
155
154
  static toBimDataTessellation(module, wasmTessellation, transfer) {
156
155
  const transferable = Array.isArray(transfer) ? transfer : transfer === true ? [] : undefined;
157
- const tessellation = new BimDataTessellation();
156
+ const tessellation = new BimData.BimDataTessellation();
158
157
  const modelMesh = wasmTessellation?.model_mesh;
159
158
  if (modelMesh) {
160
159
  tessellation.key = wasmTessellation.id;
@@ -173,7 +172,7 @@ export class BimDataConverter {
173
172
  }
174
173
  static toBimDataTessellationInfo(module, wasmTessellationInfo, transfer) {
175
174
  const transferable = Array.isArray(transfer) ? transfer : transfer === true ? [] : undefined;
176
- const tessellationInfo = new BimDataTessellationInfo();
175
+ const tessellationInfo = new BimData.BimDataTessellationInfo();
177
176
  tessellationInfo.key = wasmTessellationInfo.id;
178
177
  tessellationInfo.bytes = wasmTessellationInfo.bytes;
179
178
  tessellationInfo.box = WasmTools.vectorToFloat32Array(module, wasmTessellationInfo.box, wasmTessellationInfo.getBoxDataOffset(), true, transferable);
@@ -185,7 +184,7 @@ export class BimDataConverter {
185
184
  const modelElementProperties = new Array();
186
185
  for (let index = 0; index < properties.size(); index++) {
187
186
  const prop = properties.get(index);
188
- const meProperty = new BimDataElementProperty();
187
+ const meProperty = new BimData.BimDataElementProperty();
189
188
  meProperty.name = prop.name;
190
189
  meProperty.unit = prop.unit;
191
190
  meProperty.value = this.toModelElementPropertyValue(prop.value, dispose);
@@ -196,7 +195,7 @@ export class BimDataConverter {
196
195
  return modelElementProperties;
197
196
  }
198
197
  static toModelElementPropertyValue(value, dispose) {
199
- const modelElementValue = new BimDataElementPropertyValue();
198
+ const modelElementValue = new BimData.BimDataElementPropertyValue();
200
199
  modelElementValue.array_int_value = WasmTools.vectorToArray(value.array_int_value, true);
201
200
  modelElementValue.array_value = WasmTools.vectorToArray(value.array_value);
202
201
  modelElementValue.bool_value = value.bool_value?.has_value() ? value.bool_value.value() : undefined;
@@ -212,7 +211,7 @@ export class BimDataConverter {
212
211
  return modelElementValue;
213
212
  }
214
213
  static toBimCloudHierarchyItem(wasmHierarchyItem) {
215
- const hierarchyItem = new BimCloudHierarchyItem();
214
+ const hierarchyItem = new BimData.BimCloudHierarchyItem();
216
215
  hierarchyItem.index = wasmHierarchyItem.index;
217
216
  hierarchyItem.dataIndex = wasmHierarchyItem.dataIndex;
218
217
  hierarchyItem.type = wasmHierarchyItem.type;
@@ -252,12 +251,17 @@ export async function transmitWasmData(module, wasmData, dispose, convert, trans
252
251
  }
253
252
  transmit[comlink.releaseProxy]();
254
253
  }
255
- export async function transmitBimData(bimData, transmit, step) {
254
+ export async function transmitBimData(bimData, transmit, transfer, step) {
256
255
  const size = bimData.length;
257
256
  let result = new Array();
258
257
  let transferable = [];
259
258
  for (let index = 0; index < size; index++) {
260
259
  const data = bimData[index];
260
+ const transferableData = transfer(data);
261
+ if (transferableData) {
262
+ comlink.transfer(data, [transferableData]);
263
+ transferable.push(transferableData);
264
+ }
261
265
  result.push(data);
262
266
  if (result.length >= step) {
263
267
  comlink.transfer(result, transferable);
@@ -273,6 +277,14 @@ export async function transmitBimData(bimData, transmit, step) {
273
277
  transmit[comlink.releaseProxy]();
274
278
  }
275
279
  export class BinaryConverter {
280
+ static u8Array = new Uint8Array(8);
281
+ static u16Array = new Uint16Array(BinaryConverter.u8Array.buffer);
282
+ static u32Array = new Uint32Array(BinaryConverter.u8Array.buffer);
283
+ static i32Array = new Int32Array(BinaryConverter.u8Array.buffer);
284
+ static f32Array = new Float32Array(BinaryConverter.u8Array.buffer);
285
+ static u64Array = new BigUint64Array(BinaryConverter.u8Array.buffer);
286
+ static i64Array = new BigInt64Array(BinaryConverter.u8Array.buffer);
287
+ static f64Array = new Float64Array(BinaryConverter.u8Array.buffer);
276
288
  static toU16(source, offset) {
277
289
  BinaryConverter.u8Array[0] = source[offset++];
278
290
  BinaryConverter.u8Array[1] = source[offset++];
@@ -333,12 +345,18 @@ export class BinaryConverter {
333
345
  return BinaryConverter.u64Array[0];
334
346
  }
335
347
  }
336
- BinaryConverter.u8Array = new Uint8Array(8);
337
- BinaryConverter.u16Array = new Uint16Array(BinaryConverter.u8Array.buffer);
338
- BinaryConverter.u32Array = new Uint32Array(BinaryConverter.u8Array.buffer);
339
- BinaryConverter.i32Array = new Int32Array(BinaryConverter.u8Array.buffer);
340
- BinaryConverter.f32Array = new Float32Array(BinaryConverter.u8Array.buffer);
341
- BinaryConverter.u64Array = new BigUint64Array(BinaryConverter.u8Array.buffer);
342
- BinaryConverter.i64Array = new BigInt64Array(BinaryConverter.u8Array.buffer);
343
- BinaryConverter.f64Array = new Float64Array(BinaryConverter.u8Array.buffer);
348
+ export function isValidFileSignature(signature, bufferView) {
349
+ if (!bufferView || bufferView.byteLength < signature.byteLength)
350
+ return false;
351
+ const buffer = ArrayBuffer.isView(bufferView) ? bufferView.buffer : bufferView;
352
+ const int8view = new Uint8Array(buffer);
353
+ for (let index = 0; index < signature.length; index++) {
354
+ if (signature[index] !== int8view[index])
355
+ return false;
356
+ }
357
+ return true;
358
+ }
359
+ export function getPath(id) {
360
+ return '/' + DATA_ROOT_FOLDER + '/' + id;
361
+ }
344
362
  //# sourceMappingURL=ViewerTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewerTools.js","sourceRoot":"","sources":["../../../src/utils/ViewerTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ViewerTools.js","sourceRoot":"","sources":["../../../src/utils/ViewerTools.ts"],"names":[],"mappings":"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"}
@@ -1,77 +1,29 @@
1
1
  import { IWasmBimModule } from "./pilot_bim_dataprovider.js";
2
- import { BimDataTessellation, BimDataTessellationInfo } from "../model/BimDataTessellation.js";
3
- import { BimCloudHierarchyItem, BimCloudMetadata, BimDataElement } from "../model/BimDataElement.js";
4
- import { BimDataElementPropertySet } from "../model/BimDataElementPropertySet.js";
5
- import { IFileSystem } from "../file-system/IFileSystem.js";
6
- import { BimCloudPartAccessor } from "./DataAccessors/BimCloudPartAccessor.js";
7
- export interface IWasmWorker {
8
- get module(): IWasmBimModule | undefined;
9
- get cachedCloudReaders(): Map<string, BimCloudPartAccessor>;
10
- init(): Promise<void>;
11
- open(modelPartId: string, buffer?: ArrayBuffer): Promise<void>;
12
- write(modelPartId: string, buffer: ArrayBuffer, position: number): Promise<void>;
13
- close(modelPartId: string): Promise<void>;
14
- remove(modelPartId: string): Promise<void>;
15
- copy(modelPartTargetId: string, modelPartSourceId: string): Promise<void>;
16
- dispose(): void;
17
- flushMemory(): Promise<void>;
18
- isValidDatabase(modelPartId: string): Promise<boolean>;
19
- updateModelPart(modelPartId: string, buffer: ArrayBuffer): Promise<void>;
20
- mergeModelParts(targetId: string, sourceId: string): Promise<void>;
21
- getAllTessellations(modelPartId: string, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
22
- getTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, firstItemIdx: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<bigint>;
23
- getTessellationsInfo(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean, transmit: (map: BimDataTessellationInfo[]) => Promise<void>): Promise<void>;
24
- getTessellation(modelPartId: string, tessellationKey: string, version: bigint, compressed: boolean): Promise<BimDataTessellation>;
25
- getTessellationsByIds(modelPartId: string, tessellations: string[], version: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
26
- getAllElements(modelPartId: string, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
27
- getElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
28
- getDiffElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
29
- getElementTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean): Promise<BimDataTessellation[]>;
30
- getElementProperties(modelPartId: string, elementId: string, version: bigint): Promise<BimDataElementPropertySet[]>;
31
- getElementPropertiesByIds(modelPartId: string, indexes: string[], version: bigint): Promise<Map<string, BimDataElementPropertySet[]>>;
32
- getAllVersions(modelPartId: string): Promise<bigint[]>;
33
- getLatestVersion(modelPartId: string): Promise<bigint>;
34
- cacheCloudPart(modelPartId: string): Promise<void>;
35
- getCloudPoints(modelPartId: string, index: number, offset: number, count: number): Promise<Float32Array>;
36
- getCloudPointsArray(modelPartId: string, indicies: number[], transmit: (elements: Float32Array[]) => Promise<void>): Promise<void>;
37
- getCloudHierarchy(modelPartId: string): Promise<BimCloudHierarchyItem[]>;
38
- getCloudMetadata(modelPartId: string): Promise<BimCloudMetadata>;
39
- }
40
- export declare class WasmWorker implements IWasmWorker {
2
+ import { IFileSystem } from "./file-system/IFileSystem.js";
3
+ import { FileAccessDispatcher } from "./file-system/FileAccessDispatcher.js";
4
+ import { CloudPartAccessor } from "./data_accessors/CloudPartAccessor.js";
5
+ import { FileAccessor } from "./data_accessors/FileAccessor.js";
6
+ import { ModelPartAccessor } from "./data_accessors/ModelPartAccessor.js";
7
+ import { ICloudPartAccessor, IModelPartAccessor, IWasmWorker, IFileAccessor, IMemoryGuard, IWasmModuleAccessor, MemoryGuardOptions } from "./WorkerApi.js";
8
+ import { FlushMemoryOptions } from "../BimDataProviderApi.js";
9
+ export declare class WasmWorker implements IWasmWorker, IMemoryGuard, IWasmModuleAccessor {
41
10
  protected _module?: IWasmBimModule;
42
- protected _cachedCloudReaders: Map<string, BimCloudPartAccessor>;
11
+ protected _modelPartAccessor: ModelPartAccessor;
12
+ protected _cloudPartAccessor: CloudPartAccessor;
13
+ protected _fileAccessor: FileAccessor;
14
+ protected _fileAccessDispatcher?: FileAccessDispatcher;
43
15
  protected _fs: IFileSystem;
16
+ private _memoryLocker;
17
+ private _operationsSet;
44
18
  constructor();
45
- get module(): IWasmBimModule | undefined;
46
- get cachedCloudReaders(): Map<string, BimCloudPartAccessor>;
19
+ get module(): IWasmBimModule;
20
+ get modelPartAccessor(): IModelPartAccessor;
21
+ get cloudPartAccessor(): ICloudPartAccessor;
22
+ get fileAccessor(): IFileAccessor;
47
23
  init(): Promise<void>;
48
- open(id: string, buffer?: ArrayBuffer): Promise<void>;
49
- copy(modelPartTargetId: string, modelPartSourceId: string): Promise<void>;
50
- write(modelPartId: string, buffer: ArrayBuffer, position: number): Promise<void>;
51
- close(modelPartId: string): Promise<void>;
52
- remove(modelPartId: string): Promise<void>;
53
24
  dispose(): Promise<void>;
54
- flushMemory(): Promise<void>;
55
- isValidDatabase(modelPartId: string): Promise<boolean>;
56
- updateModelPart(modelPartId: string, buffer: ArrayBuffer): Promise<void>;
57
- mergeModelParts(targetId: string, sourceId: string): Promise<void>;
58
- getAllTessellations(modelPartId: string, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
59
- getTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, firstItemIdx: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<bigint>;
60
- getTessellationsInfo(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean, transmit: (map: BimDataTessellationInfo[]) => Promise<void>): Promise<void>;
61
- getTessellation(modelPartId: string, tessellationKey: string, version: bigint, compressed: boolean): Promise<BimDataTessellation>;
62
- getTessellationsByIds(modelPartId: string, tessellations: string[], version: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
63
- getAllElements(modelPartId: string, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
64
- getElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
65
- getDiffElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
66
- getElementProperties(modelPartId: string, elementId: string, version: bigint): Promise<BimDataElementPropertySet[]>;
67
- getElementPropertiesByIds(modelPartId: string, indexes: string[], version: bigint): Promise<Map<string, BimDataElementPropertySet[]>>;
68
- getElementTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean): Promise<BimDataTessellation[]>;
69
- getAllVersions(modelPartId: string): Promise<bigint[]>;
70
- getLatestVersion(modelPartId: string): Promise<bigint>;
71
- cacheCloudPart(modelPartId: string): Promise<void>;
72
- getCloudPoints(modelPartId: string, index: number, offset: number, count: number): Promise<Float32Array>;
73
- getCloudPointsArray(modelPartId: string, indicies: number[], transmit: (elements: Float32Array[]) => Promise<void>): Promise<void>;
74
- getCloudHierarchy(modelPartId: string): Promise<BimCloudHierarchyItem[]>;
75
- getCloudMetadata(modelPartId: string): Promise<BimCloudMetadata>;
76
- private runSyncFileOp;
25
+ estimate(): StorageEstimate;
26
+ runOperation<T>(op: () => Promise<T>, options?: MemoryGuardOptions): Promise<T>;
27
+ checkMemory(options?: MemoryGuardOptions): Promise<void>;
28
+ flushMemory(options?: FlushMemoryOptions): Promise<void>;
77
29
  }
@@ -1,24 +1,48 @@
1
1
  import BimDataProviderModule from "./pilot_bim_dataprovider.js";
2
- import { WasmTools } from "../utils/WasmTools.js";
3
2
  import { isNode, isCrossOriginIsolated, isSecureContext, isOPFSEnabled } from "../utils/ViewerTools.js";
4
- import { DATA_ROOT_FOLDER } from "../model/Consts.js";
5
- import { AsyncFileSystem, ProxyFileSystem } from "../file-system/IFileSystem.js";
6
- import { BimCloudPartAccessor } from "./DataAccessors/BimCloudPartAccessor.js";
7
- import { BimDataPartAccessor } from "./DataAccessors/BimDataPartAccessor.js";
8
- import { BimDataModelPartAccessor } from "./DataAccessors/BimDataModelPartAccessor.js";
3
+ import { DATA_ROOT_FOLDER, HEAP_SIZE_LIMIT, OPFS_CACHE_MIN_QUOTA, OPFS_BIM_FOLDER, OPFS_CACHE_LIMIT } from "../utils/Consts.js";
4
+ import { AsyncFileSystem, ProxyFileSystem } from "./file-system/IFileSystem.js";
5
+ import { FileAccessDispatcher } from "./file-system/FileAccessDispatcher.js";
6
+ import { CloudPartAccessor } from "./data_accessors/CloudPartAccessor.js";
7
+ import { FileAccessor } from "./data_accessors/FileAccessor.js";
8
+ import { ModelPartAccessor } from "./data_accessors/ModelPartAccessor.js";
9
+ import { expose } from "./worker.js";
9
10
  export class WasmWorker {
11
+ _module;
12
+ _modelPartAccessor;
13
+ _cloudPartAccessor;
14
+ _fileAccessor;
15
+ _fileAccessDispatcher;
16
+ _fs;
17
+ _memoryLocker = { isLocked: false, lock: Promise.resolve() };
18
+ _operationsSet = new Set();
10
19
  constructor() {
11
- this._cachedCloudReaders = new Map();
12
20
  console.log(`BimDataProvider worker: (env: ${isNode() ? 'Node.js' : 'web'}, isSecureContext: ${isSecureContext}, isCrossOriginIsolated: ${isCrossOriginIsolated})`);
13
- this._fs = isOPFSEnabled ? new AsyncFileSystem() : new ProxyFileSystem();
21
+ this._fs = isOPFSEnabled ? new AsyncFileSystem() : new ProxyFileSystem(this);
22
+ this._fileAccessDispatcher = isOPFSEnabled ? new FileAccessDispatcher() : undefined;
23
+ this._fileAccessor = new FileAccessor(this._fs, this, this, this._fileAccessDispatcher);
24
+ this._modelPartAccessor = new ModelPartAccessor(this._fileAccessor, this);
25
+ this._cloudPartAccessor = new CloudPartAccessor(this._fileAccessor, this);
14
26
  }
15
27
  get module() {
16
- return this._module;
28
+ if (this._module)
29
+ return this._module;
30
+ else
31
+ throw new Error("Wasm module is not initialized");
32
+ }
33
+ get modelPartAccessor() {
34
+ return this._modelPartAccessor;
35
+ }
36
+ get cloudPartAccessor() {
37
+ return this._cloudPartAccessor;
17
38
  }
18
- get cachedCloudReaders() {
19
- return this._cachedCloudReaders;
39
+ get fileAccessor() {
40
+ return this._fileAccessor;
20
41
  }
21
42
  async init() {
43
+ const cachedClouds = this.cloudPartAccessor.getCachedCloudKeys();
44
+ for (let i = 0; i < cachedClouds.length; i++)
45
+ await this.cloudPartAccessor.closeReader(cachedClouds[i]);
22
46
  const moduleOverrides = {
23
47
  print: (s) => console.log(s),
24
48
  printErr: (e) => console.error(e)
@@ -26,184 +50,69 @@ export class WasmWorker {
26
50
  this._module = await BimDataProviderModule(moduleOverrides);
27
51
  this._module.FS.mkdir(DATA_ROOT_FOLDER);
28
52
  const moduleFS = this._module.FS;
29
- await this._fs.init();
53
+ await this._fs.init(OPFS_BIM_FOLDER);
30
54
  this._fs.mountTo(moduleFS, DATA_ROOT_FOLDER);
31
- }
32
- async open(id, buffer) {
33
- this._cachedCloudReaders.get(id)?.close();
34
- this._cachedCloudReaders.delete(id);
35
- if (!id)
36
- id = "id_" + (0xffffffff * Math.random() >>> 0);
37
- const data = new Uint8Array(buffer ?? []);
38
- if (!this._fs.isFileExists(id)) {
39
- await this._fs.makeFile(id, data);
40
- }
41
- else if (buffer) {
42
- await this._fs.writeFile(id, data);
43
- }
44
- }
45
- async copy(modelPartTargetId, modelPartSourceId) {
46
- await this._fs.copyFile(modelPartTargetId, modelPartSourceId);
47
- }
48
- async write(modelPartId, buffer, position) {
49
- const data = new Uint8Array(buffer);
50
- if (this._fs.isFileExists(modelPartId)) {
51
- await this._fs.writeFile(modelPartId, data, position);
52
- }
53
- else {
54
- await this._fs.makeFile(modelPartId, new Uint8Array(position));
55
- await this._fs.writeFile(modelPartId, data, position);
56
- }
57
- }
58
- async close(modelPartId) {
59
- await this._cachedCloudReaders.get(modelPartId)?.close();
60
- this._cachedCloudReaders.delete(modelPartId);
61
- }
62
- async remove(modelPartId) {
63
- await this.close(modelPartId);
64
- if (this._fs.isFileExists(modelPartId)) {
65
- await this._fs.remove(modelPartId);
66
- }
55
+ for (let i = 0; i < cachedClouds.length; i++)
56
+ await this.cloudPartAccessor.openReader(cachedClouds[i]);
67
57
  }
68
58
  async dispose() {
69
- for (const [, reader] of this._cachedCloudReaders) {
70
- await reader.close();
71
- }
72
- this._cachedCloudReaders.clear();
59
+ await this._modelPartAccessor.dispose();
60
+ await this._cloudPartAccessor.dispose();
61
+ await this._fileAccessor.dispose();
62
+ await this._fileAccessDispatcher?.dispose();
73
63
  await this._fs.dispose();
74
64
  }
75
- async flushMemory() {
76
- /** */
77
- }
78
- async isValidDatabase(modelPartId) {
79
- if (this._fs.isFileExists(modelPartId)) {
80
- const modelPart = new BimDataPartAccessor(modelPartId, this._module);
81
- return this.runSyncFileOp(modelPartId, () => modelPart.isValidDatabase());
65
+ // IMemoryGuard
66
+ estimate() {
67
+ const heapSize = this._module?.HEAP8?.byteLength ?? 0;
68
+ const maxHeapSize = 2147483648;
69
+ return { usage: heapSize, quota: maxHeapSize - heapSize };
70
+ }
71
+ async runOperation(op, options) {
72
+ await this.checkMemory(options);
73
+ const opPromise = op();
74
+ this._operationsSet.add(opPromise);
75
+ opPromise.finally(() => this._operationsSet.delete(opPromise));
76
+ return opPromise;
77
+ }
78
+ async checkMemory(options) {
79
+ while (this._memoryLocker.isLocked)
80
+ await this._memoryLocker.lock;
81
+ let heapEstimate = undefined;
82
+ let cacheEstimate = undefined;
83
+ if (options?.checkRAM)
84
+ heapEstimate = this.estimate();
85
+ if (options?.checkCache)
86
+ cacheEstimate = await this._fs.estimate();
87
+ const isHeapSizeLimitExceeded = (heapEstimate?.usage != undefined) && heapEstimate.usage > HEAP_SIZE_LIMIT;
88
+ const isCacheSizeExceeded = (cacheEstimate?.usage != undefined) && cacheEstimate.usage > OPFS_CACHE_LIMIT;
89
+ const isCacheQuotaExceeded = (cacheEstimate?.quota != undefined) && cacheEstimate.quota < OPFS_CACHE_MIN_QUOTA;
90
+ if (isHeapSizeLimitExceeded || isCacheSizeExceeded || isCacheQuotaExceeded) {
91
+ await this.flushMemory({ flushRAM: isHeapSizeLimitExceeded, flushCache: isCacheSizeExceeded || isCacheQuotaExceeded, desiredCacheQuota: 2 * OPFS_CACHE_MIN_QUOTA });
82
92
  }
83
- else
84
- return false;
85
- }
86
- // ModelPart
87
- async updateModelPart(modelPartId, buffer) {
88
- const tmpModelPartId = "tmp_" + (0xffffffff * Math.random() >>> 0);
89
- await this.open(tmpModelPartId, buffer);
90
- await this.mergeModelParts(modelPartId, tmpModelPartId);
91
- await this.remove(tmpModelPartId);
92
- }
93
- async mergeModelParts(targetId, sourceId) {
94
- const module = this._module;
95
- const modelPart = new BimDataModelPartAccessor(targetId, module);
96
- const modelPartId = modelPart.path;
97
- const sourcePart = new BimDataModelPartAccessor(sourceId, module);
98
- const sourcePartId = this._fs.isFileExists(sourceId) ? sourcePart.path : sourceId;
99
- if (!WasmTools.isFileExists(sourcePartId, module))
100
- return Promise.reject('Failed to merge model parts: source file does not exist.');
101
- await this.runSyncFileOp([targetId, sourceId], () => modelPart.merge(modelPartId, sourcePartId));
102
- }
103
- async getAllTessellations(modelPartId, compressed, transmit) {
104
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
105
- return this.runSyncFileOp(modelPartId, () => modelPart.getAllTessellations(compressed, transmit));
106
- }
107
- async getTessellations(modelPartId, versionFrom, versionTo, firstItemIdx, compressed, transmit) {
108
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
109
- return this.runSyncFileOp(modelPartId, () => modelPart.getTessellations(versionFrom, versionTo, firstItemIdx, compressed, transmit));
110
- }
111
- async getTessellationsInfo(modelPartId, versionFrom, versionTo, compressed, transmit) {
112
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
113
- return this.runSyncFileOp(modelPartId, () => modelPart.getTessellationsInfo(versionFrom, versionTo, compressed, transmit));
114
- }
115
- async getTessellation(modelPartId, tessellationKey, version, compressed) {
116
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
117
- return this.runSyncFileOp(modelPartId, () => modelPart.getTessellation(tessellationKey, version, compressed));
118
93
  }
119
- async getTessellationsByIds(modelPartId, tessellations, version, compressed, transmit) {
120
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
121
- return this.runSyncFileOp(modelPartId, () => modelPart.getTessellationsByIds(tessellations, version, compressed, transmit));
122
- }
123
- async getAllElements(modelPartId, transmit) {
124
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
125
- return this.runSyncFileOp(modelPartId, () => modelPart.getAllElements(transmit));
126
- }
127
- async getElements(modelPartId, versionFrom, versionTo, transmit) {
128
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
129
- return this.runSyncFileOp(modelPartId, () => modelPart.getElements(versionFrom, versionTo, transmit));
130
- }
131
- async getDiffElements(modelPartId, versionFrom, versionTo, transmit) {
132
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
133
- return this.runSyncFileOp(modelPartId, () => modelPart.getDiffElements(versionFrom, versionTo, transmit));
134
- }
135
- async getElementProperties(modelPartId, elementId, version) {
136
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
137
- return this.runSyncFileOp(modelPartId, () => modelPart.getElementProperties(elementId, version));
138
- }
139
- async getElementPropertiesByIds(modelPartId, indexes, version) {
140
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
141
- return this.runSyncFileOp(modelPartId, () => modelPart.getElementPropertiesByIds(indexes, version));
142
- }
143
- async getElementTessellations(modelPartId, versionFrom, versionTo, compressed) {
144
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
145
- return this.runSyncFileOp(modelPartId, () => modelPart.getElementTessellations(versionFrom, versionTo, compressed));
146
- }
147
- async getAllVersions(modelPartId) {
148
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
149
- return this.runSyncFileOp(modelPartId, () => modelPart.getAllVersions());
150
- }
151
- async getLatestVersion(modelPartId) {
152
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
153
- return this.runSyncFileOp(modelPartId, () => modelPart.getLatestVersion());
154
- }
155
- // CloudPart
156
- async cacheCloudPart(modelPartId) {
157
- return this.runSyncFileOp(modelPartId, async () => {
158
- const reader = new BimCloudPartAccessor(modelPartId, this._module, () => this._fs.openSyncFileAccess(modelPartId), () => Promise.resolve(this._fs.closeSyncFileAccess(modelPartId)));
159
- await this._cachedCloudReaders.get(modelPartId)?.close();
160
- await reader.open();
161
- this._cachedCloudReaders.set(modelPartId, reader);
162
- });
163
- }
164
- async getCloudPoints(modelPartId, index, offset, count) {
165
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
166
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudPoints(index, offset, count));
167
- }
168
- async getCloudPointsArray(modelPartId, indicies, transmit) {
169
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
170
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudPointsArray(indicies, transmit));
171
- }
172
- getCloudHierarchy(modelPartId) {
173
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
174
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudHierarchy());
175
- }
176
- async getCloudMetadata(modelPartId) {
177
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
178
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudMetadata());
179
- }
180
- async runSyncFileOp(path, opFunc) {
181
- try {
182
- if (Array.isArray(path)) {
183
- for (const p of path) {
184
- await this._fs.openSyncFileAccess(p);
94
+ async flushMemory(options = { flushRAM: true, flushCache: true }) {
95
+ if (!this._module || !isOPFSEnabled)
96
+ return Promise.resolve();
97
+ if (this._memoryLocker.isLocked)
98
+ return this._memoryLocker.lock;
99
+ this._memoryLocker.isLocked = true;
100
+ const promise = async () => {
101
+ await Promise.all(Array.from(this._operationsSet.values()));
102
+ if (options.flushRAM)
103
+ await this.init();
104
+ if (options.flushCache) {
105
+ let memToFreeAmount;
106
+ if (options.desiredCacheQuota) {
107
+ const estimate = await this._fs.estimate();
108
+ memToFreeAmount = Math.max(Math.max(options.desiredCacheQuota, OPFS_CACHE_MIN_QUOTA) - (estimate.quota ?? 0), 0);
185
109
  }
110
+ await this.fileAccessor.clearCache(memToFreeAmount);
186
111
  }
187
- else {
188
- await this._fs.openSyncFileAccess(path);
189
- }
190
- const result = await opFunc();
191
- return result;
192
- }
193
- catch (e) {
194
- console.error(e);
195
- throw e;
196
- }
197
- finally {
198
- if (Array.isArray(path)) {
199
- for (const p of path) {
200
- this._fs.closeSyncFileAccess(p);
201
- }
202
- }
203
- else {
204
- this._fs.closeSyncFileAccess(path);
205
- }
206
- }
112
+ };
113
+ return this._memoryLocker.lock = promise()
114
+ .finally(() => this._memoryLocker.isLocked = false);
207
115
  }
208
116
  }
117
+ expose(WasmWorker);
209
118
  //# sourceMappingURL=WasmWorker.js.map