@pilotdev/pilot-bim-dataprovider 24.9.0 → 24.12.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 (54) hide show
  1. package/README.md +9 -9
  2. package/lib/index.d.ts +3 -3
  3. package/lib/index.js +2 -2
  4. package/lib/index.js.map +1 -1
  5. package/lib/src/file-system/IFileSystem.d.ts +47 -0
  6. package/lib/src/file-system/IFileSystem.js +179 -0
  7. package/lib/src/file-system/IFileSystem.js.map +1 -0
  8. package/lib/src/file-system/IFileSystemCache.d.ts +62 -0
  9. package/lib/src/file-system/IFileSystemCache.js +154 -0
  10. package/lib/src/file-system/IFileSystemCache.js.map +1 -0
  11. package/lib/src/file-system/OPFS.d.ts +35 -0
  12. package/lib/src/file-system/OPFS.js +182 -0
  13. package/lib/src/file-system/OPFS.js.map +1 -0
  14. package/lib/src/file-system/PATH.d.ts +8 -0
  15. package/lib/src/file-system/PATH.js +34 -0
  16. package/lib/src/file-system/PATH.js.map +1 -0
  17. package/lib/src/model/BimDataElement.d.ts +69 -3
  18. package/lib/src/model/BimDataElement.js +13 -4
  19. package/lib/src/model/BimDataElement.js.map +1 -1
  20. package/lib/src/model/BimDataElementPropertySet.js.map +1 -1
  21. package/lib/src/model/BimDataPart.d.ts +62 -0
  22. package/lib/src/model/BimDataPart.js +99 -0
  23. package/lib/src/model/BimDataPart.js.map +1 -0
  24. package/lib/src/model/BimDataProvider.d.ts +16 -0
  25. package/lib/src/model/BimDataProvider.js +29 -0
  26. package/lib/src/model/BimDataProvider.js.map +1 -0
  27. package/lib/src/model/Consts.d.ts +3 -0
  28. package/lib/src/model/Consts.js +3 -0
  29. package/lib/src/model/Consts.js.map +1 -1
  30. package/lib/src/utils/ViewerTools.d.ts +9 -9
  31. package/lib/src/utils/ViewerTools.js +73 -38
  32. package/lib/src/utils/ViewerTools.js.map +1 -1
  33. package/lib/src/utils/WasmTools.d.ts +10 -6
  34. package/lib/src/utils/WasmTools.js +66 -32
  35. package/lib/src/utils/WasmTools.js.map +1 -1
  36. package/lib/src/wasm/CorsWorker.d.ts +6 -0
  37. package/lib/src/wasm/CorsWorker.js +20 -0
  38. package/lib/src/wasm/CorsWorker.js.map +1 -0
  39. package/lib/src/wasm/pilot_bim_dataprovider.d.ts +136 -7
  40. package/lib/src/wasm/pilot_bim_dataprovider.js +1 -1
  41. package/lib/src/wasm/pilot_bim_dataprovider.wasm +0 -0
  42. package/lib/src/wasm/wasm.worker.d.ts +56 -0
  43. package/lib/src/wasm/wasm.worker.js +280 -0
  44. package/lib/src/wasm/wasm.worker.js.map +1 -0
  45. package/package.json +5 -12
  46. package/lib/src/model/BimDataModel.d.ts +0 -19
  47. package/lib/src/model/BimDataModel.js +0 -59
  48. package/lib/src/model/BimDataModel.js.map +0 -1
  49. package/lib/src/model/BimDataModelPart.d.ts +0 -40
  50. package/lib/src/model/BimDataModelPart.js +0 -144
  51. package/lib/src/model/BimDataModelPart.js.map +0 -1
  52. package/lib/src/model/BimNodeComparer.d.ts +0 -10
  53. package/lib/src/model/BimNodeComparer.js +0 -71
  54. package/lib/src/model/BimNodeComparer.js.map +0 -1
package/README.md CHANGED
@@ -11,33 +11,33 @@ This component is part of the **Pilot Cloud** service (https://pilotcloud.ascon.
11
11
  Initialize and read data from information model data container (**.bm** file).
12
12
 
13
13
  ```js
14
- import { BimDataBigIntMaxValue, BimDataModel } from "@pilotdev/pilot-bim-dataprovider";
14
+ import { BimDataBigIntMaxValue, BimDataProvider } from "@pilotdev/pilot-bim-dataprovider";
15
15
 
16
16
  // Create new instance of BimModel
17
- const bimModel = new BimDataModel();
17
+ const bimDataProvider = new BimDataProvider();
18
18
 
19
19
  // Initialize model.
20
20
  // Method returns Promise<void>
21
- await bimModel.init();
21
+ await bimDataProvider.init();
22
22
 
23
23
  // Read bm file and open it
24
24
  // fileBuffer - Buffer of a .bm file
25
25
  // uniqueId - must be unique identfier
26
- const modelPart = bimModel.openModelPart("uniqueId", fileBuffer);
26
+ const modelPart = await bimDataProvider.openModelPart("uniqueId", fileBuffer);
27
27
 
28
28
  // Get all elements of the model-part
29
- const elements = modelPart.getAllElements();
29
+ const elements = await modelPart.getAllElements();
30
30
 
31
31
  // Get latest version of properties of the element
32
- const properties = modelPart.getElementProperties(elements[5].guid, BimDataBigIntMaxValue);
32
+ const properties = await modelPart.getElementProperties(elements[5].guid, BimDataBigIntMaxValue);
33
33
 
34
34
  // Get all tessellations
35
- const tesselations = modelPart.getAllTessellations();
35
+ const tesselations = await modelPart.getAllTessellations();
36
36
 
37
37
  // Close model part after end
38
- modelPart.close();
38
+ await modelPart.close();
39
39
 
40
40
  // Dispose BimModel after all
41
- bimModel.dispose();
41
+ await bimDataProvider.dispose();
42
42
 
43
43
  ```
package/lib/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { BimDataModel, IBimDataModel } from "./src/model/BimDataModel.js";
2
- export { IBimDataModelPart } from "./src/model/BimDataModelPart.js";
1
+ export { BimDataProvider, IBimDataProvider } from "./src/model/BimDataProvider.js";
2
+ export { IBimDataModelPart, IBimDataCloudPart } from "./src/model/BimDataPart.js";
3
3
  export { BimDataBigIntMaxValue, BimDataBigIntMinValue } from "./src/model/Consts.js";
4
- export { BimDataElement, BimDataMeshProperty, BimDataGridObject, BimDataGridAxis } from "./src/model/BimDataElement.js";
4
+ export { BimDataElement, BimDataMeshProperty, BimDataGridObject, BimDataGridAxis, BimCloudHierarchyItem, BimCloudMetadata } from "./src/model/BimDataElement.js";
5
5
  export { BimDataIfcType } from "./src/model/BimDataIfcType.js";
6
6
  export { BimDataElementPropertySet, BimDataElementProperty, BimDataElementPropertyValue } from "./src/model/BimDataElementPropertySet.js";
7
7
  export { BimDataTessellation } from "./src/model/BimDataTessellation.js";
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
- export { BimDataModel } from "./src/model/BimDataModel.js";
1
+ export { BimDataProvider } from "./src/model/BimDataProvider.js";
2
2
  export { BimDataBigIntMaxValue, BimDataBigIntMinValue } from "./src/model/Consts.js";
3
- export { BimDataElement, BimDataMeshProperty, BimDataGridObject, BimDataGridAxis } from "./src/model/BimDataElement.js";
3
+ export { BimDataElement, BimDataMeshProperty, BimDataGridObject, BimDataGridAxis, BimCloudHierarchyItem, BimCloudMetadata } from "./src/model/BimDataElement.js";
4
4
  export { BimDataIfcType } from "./src/model/BimDataIfcType.js";
5
5
  export { BimDataElementPropertySet, BimDataElementProperty, BimDataElementPropertyValue } from "./src/model/BimDataElementPropertySet.js";
6
6
  export { BimDataTessellation } from "./src/model/BimDataTessellation.js";
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC1I,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAoB,MAAM,gCAAgC,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjK,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC1I,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { FS } from "../wasm/pilot_bim_dataprovider.js";
2
+ import { IOpfsDirNode, IOpfsFileNode } from "./IFileSystemCache.js";
3
+ import { ISyncFileSystem } from "../file-system/OPFS.js";
4
+ export interface IFileSystem {
5
+ init(): Promise<void>;
6
+ mountTo(fs: FS, mountpoint: string): void;
7
+ makeFile(path: string, data: ArrayBufferView): Promise<void>;
8
+ writeFile(path: string, data: ArrayBufferView): Promise<void>;
9
+ isFileExists(path: string): boolean;
10
+ remove(path: string): Promise<void>;
11
+ dispose(): Promise<void>;
12
+ openSyncFileAccess(path: string): Promise<void>;
13
+ closeSyncFileAccess(path: string): void;
14
+ }
15
+ export declare class AsyncFileSystem implements IFileSystem, ISyncFileSystem {
16
+ private _cache;
17
+ constructor();
18
+ mountTo(fs: FS, mountpoint: string): void;
19
+ init(): Promise<void>;
20
+ mkdirAsync(path: string): Promise<void>;
21
+ makeFile(path: string, data: ArrayBufferView): Promise<void>;
22
+ writeFile(path: string, data: ArrayBufferView): Promise<void>;
23
+ remove(path: string): Promise<void>;
24
+ openSyncFileAccess(path: string): Promise<void>;
25
+ closeSyncFileAccess(path: string): void;
26
+ readdir(path: string): string[];
27
+ lookup(path: string): IOpfsDirNode | IOpfsFileNode | undefined;
28
+ dispose(): Promise<void>;
29
+ isFileExists(path: string): boolean;
30
+ private isDirectoryExists;
31
+ private readTree;
32
+ private getLocalPath;
33
+ }
34
+ export declare class ProxyFileSystem implements IFileSystem {
35
+ private _fs;
36
+ private _mountpoint;
37
+ init(): Promise<void>;
38
+ mountTo(fs: FS, mountpoint: string): void;
39
+ makeFile(path: string, data: ArrayBufferView): Promise<void>;
40
+ writeFile(path: string, data: ArrayBufferView): Promise<void>;
41
+ remove(path: string): Promise<void>;
42
+ openSyncFileAccess(path: string): Promise<void>;
43
+ closeSyncFileAccess(path: string): void;
44
+ dispose(): Promise<void>;
45
+ isFileExists(path: string): boolean;
46
+ private getLocalPath;
47
+ }
@@ -0,0 +1,179 @@
1
+ import { FileSystemCache } from "./IFileSystemCache.js";
2
+ import { PATH } from "./PATH.js";
3
+ import { OPFS } from "../file-system/OPFS.js";
4
+ export class AsyncFileSystem {
5
+ constructor() {
6
+ this._cache = new FileSystemCache();
7
+ }
8
+ mountTo(fs, mountpoint) {
9
+ const opfs = new OPFS(fs, this);
10
+ fs.mount(fs.filesystems.PROXYFS, {
11
+ root: "/",
12
+ fs: opfs
13
+ }, `/${mountpoint}`);
14
+ }
15
+ async init() {
16
+ this._cache.clear();
17
+ const handle = await navigator.storage.getDirectory();
18
+ const root = this._cache.setDir("/", handle);
19
+ if (root)
20
+ await this.readTree(root);
21
+ }
22
+ async mkdirAsync(path) {
23
+ const parentPath = PATH.getParentPath(path);
24
+ const parentNode = this._cache.get(parentPath);
25
+ if (!parentNode)
26
+ throw "Parent not found";
27
+ const handle = parentNode.handle;
28
+ const name = PATH.getName(path);
29
+ const dirExists = await this.isDirectoryExists(name, handle);
30
+ let childHandle;
31
+ if (!dirExists) {
32
+ childHandle = await handle.getDirectoryHandle(name, { create: true });
33
+ this._cache.setDir(path, childHandle);
34
+ }
35
+ }
36
+ async makeFile(path, data) {
37
+ const lpath = this.getLocalPath(path);
38
+ const parentFolder = PATH.getParentPath(lpath);
39
+ const parent = this._cache.get(parentFolder);
40
+ const name = PATH.getName(lpath);
41
+ const fileHandle = await parent.handle.getFileHandle(name, { create: true });
42
+ this._cache.setFile(lpath, fileHandle);
43
+ return this.writeFile(lpath, data);
44
+ }
45
+ async writeFile(path, data) {
46
+ const lpath = this.getLocalPath(path);
47
+ const fileHandle = this._cache.get(lpath);
48
+ if (!fileHandle)
49
+ return Promise.reject('File does not exist.');
50
+ await fileHandle.stream_ops.open();
51
+ fileHandle.size = fileHandle.stream_ops.write(data, 0, data.byteLength, 0);
52
+ fileHandle.stream_ops.close();
53
+ }
54
+ async remove(path) {
55
+ const lpath = this.getLocalPath(path);
56
+ const node = this._cache.get(lpath);
57
+ this._cache.delete(lpath);
58
+ if (node) {
59
+ node.stream_ops?.close(undefined, true);
60
+ await node?.parent?.handle?.removeEntry(node.name, { recursive: true });
61
+ }
62
+ }
63
+ async openSyncFileAccess(path) {
64
+ const lpath = this.getLocalPath(path);
65
+ const cachedFile = this.lookup(lpath);
66
+ if (!cachedFile)
67
+ return Promise.reject('File does not cached in OPFS.');
68
+ return cachedFile.stream_ops?.open();
69
+ }
70
+ closeSyncFileAccess(path) {
71
+ const lpath = this.getLocalPath(path);
72
+ const cachedFile = this.lookup(lpath);
73
+ cachedFile?.stream_ops?.close();
74
+ }
75
+ readdir(path) {
76
+ const node = this._cache.get(path);
77
+ if (!node || node.kind === "file")
78
+ return [];
79
+ return node.children.map(n => n.name);
80
+ }
81
+ lookup(path) {
82
+ const lpath = this.getLocalPath(path);
83
+ return this._cache.get(lpath);
84
+ }
85
+ async dispose() {
86
+ const nodes = this.readdir('/');
87
+ for (const node of nodes) {
88
+ await this.remove(node);
89
+ }
90
+ this._cache.clear();
91
+ }
92
+ isFileExists(path) {
93
+ const lpath = this.getLocalPath(path);
94
+ return this._cache.get(lpath)?.kind == 'file';
95
+ }
96
+ async isDirectoryExists(name, parentDirectoryHandle) {
97
+ try {
98
+ await parentDirectoryHandle.getDirectoryHandle(name);
99
+ }
100
+ catch (error) {
101
+ return false;
102
+ }
103
+ return true;
104
+ }
105
+ async readTree(parent) {
106
+ const queue = [{ node: parent, path: "" }];
107
+ while (queue.length > 0) {
108
+ const currentNode = queue.shift();
109
+ if (!currentNode)
110
+ return;
111
+ const currentHandle = currentNode.node.handle;
112
+ if (currentHandle.kind !== "directory")
113
+ continue;
114
+ for await (const [name, handle] of currentHandle) {
115
+ const childPath = `${currentNode.path}/${name}`;
116
+ let child = undefined;
117
+ if (handle.kind === "file")
118
+ child = await this._cache.setFile(childPath, handle);
119
+ else {
120
+ child = this._cache.setDir(childPath, handle);
121
+ if (child)
122
+ queue.push({ node: child, path: childPath });
123
+ }
124
+ }
125
+ }
126
+ }
127
+ getLocalPath(path) {
128
+ if (path.startsWith('/'))
129
+ return path;
130
+ else
131
+ return '/' + path;
132
+ }
133
+ }
134
+ export class ProxyFileSystem {
135
+ init() {
136
+ return Promise.resolve();
137
+ }
138
+ mountTo(fs, mountpoint) {
139
+ this._fs = fs;
140
+ this._mountpoint = mountpoint;
141
+ }
142
+ makeFile(path, data) {
143
+ this._fs.createDataFile(this._mountpoint, path, data, true, true, true);
144
+ return Promise.resolve();
145
+ }
146
+ writeFile(path, data) {
147
+ const lpath = this.getLocalPath(path);
148
+ this._fs.writeFile(lpath, data);
149
+ return Promise.resolve();
150
+ }
151
+ remove(path) {
152
+ const lpath = this.getLocalPath(path);
153
+ this._fs.unlink(lpath);
154
+ return Promise.resolve();
155
+ }
156
+ openSyncFileAccess(path) {
157
+ return Promise.resolve();
158
+ }
159
+ closeSyncFileAccess(path) {
160
+ return;
161
+ }
162
+ dispose() {
163
+ return Promise.resolve();
164
+ }
165
+ isFileExists(path) {
166
+ try {
167
+ const lpath = this.getLocalPath(path);
168
+ const mode = this._fs.lookupPath(lpath, {}).node?.mode;
169
+ return !!mode && this._fs.isFile(mode);
170
+ }
171
+ catch (error) {
172
+ return false;
173
+ }
174
+ }
175
+ getLocalPath(path) {
176
+ return this._mountpoint + '/' + path;
177
+ }
178
+ }
179
+ //# sourceMappingURL=IFileSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IFileSystem.js","sourceRoot":"","sources":["../../../src/file-system/IFileSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export interface FileSystemSyncAccessHandle {
2
+ read(buffer: ArrayBufferView, options?: {
3
+ at?: number;
4
+ }): number;
5
+ write(buffer: ArrayBufferView, options?: {
6
+ at?: number;
7
+ }): number;
8
+ truncate(newSize: number): number;
9
+ getSize(): number; /** bigint??? */
10
+ flush(): void;
11
+ close(): void;
12
+ }
13
+ export interface IOpfsNode<T extends FileSystemHandle> {
14
+ handle: T;
15
+ name: string;
16
+ kind: FileSystemHandleKind;
17
+ id: number;
18
+ size: number;
19
+ parent?: IOpfsDirNode;
20
+ stream_ops?: StreamOps;
21
+ timestamp: number;
22
+ }
23
+ export interface IOpfsDirNode extends IOpfsNode<FileSystemDirectoryHandle> {
24
+ children: (IOpfsDirNode | IOpfsFileNode)[];
25
+ }
26
+ export interface IOpfsFileNode extends IOpfsNode<FileSystemFileHandle> {
27
+ stream_ops: StreamOps;
28
+ }
29
+ export interface IFileSystemCache {
30
+ setDir(path: string, handle: FileSystemDirectoryHandle): IOpfsDirNode | undefined;
31
+ setFile(path: string, handle: FileSystemFileHandle): IOpfsFileNode | undefined;
32
+ get(path: string): IOpfsDirNode | IOpfsFileNode | undefined;
33
+ delete(path: string): void;
34
+ unlink(path: string): void;
35
+ clear(): void;
36
+ }
37
+ export declare class FileSystemCache implements IFileSystemCache {
38
+ private _uniqueId;
39
+ private _cacheTable;
40
+ setDir(path: string, handle: FileSystemDirectoryHandle): IOpfsDirNode | undefined;
41
+ setFile(path: string, handle: FileSystemFileHandle): IOpfsFileNode | undefined;
42
+ get(path: string): IOpfsDirNode | IOpfsFileNode | undefined;
43
+ delete(path: string): void;
44
+ unlink(path: string): void;
45
+ clear(): void;
46
+ private createDirNode;
47
+ private createFileNode;
48
+ }
49
+ export declare class StreamOps {
50
+ private readonly handle;
51
+ private _syncHandle?;
52
+ private _syncHandlePromise?;
53
+ private _openCounter;
54
+ constructor(handle: FileSystemFileHandle);
55
+ open(): Promise<void>;
56
+ read(buffer: ArrayBufferView, offset: number, length: number, position?: number): number;
57
+ write(buffer: ArrayBufferView, offset: number, length: number, position?: number): number;
58
+ getSize(): number;
59
+ truncate(size: number): void;
60
+ close(stream?: object, force?: boolean): void;
61
+ isOpen(): boolean;
62
+ }
@@ -0,0 +1,154 @@
1
+ import { PATH } from "./PATH.js";
2
+ export class FileSystemCache {
3
+ constructor() {
4
+ this._uniqueId = 1;
5
+ this._cacheTable = new Map();
6
+ }
7
+ setDir(path, handle) {
8
+ if (path === "/") {
9
+ return this.createDirNode(path, handle, undefined);
10
+ }
11
+ const parentPath = PATH.getParentPath(path);
12
+ const parentNode = this.get(parentPath);
13
+ if (!parentNode)
14
+ return undefined;
15
+ // create new node
16
+ const opfsDir = this.createDirNode(path, handle, parentNode);
17
+ parentNode.children.push(opfsDir);
18
+ return opfsDir;
19
+ }
20
+ setFile(path, handle) {
21
+ const parentDir = PATH.getParentPath(path);
22
+ const parentNode = this.get(parentDir);
23
+ if (!parentNode)
24
+ return undefined;
25
+ // create new node
26
+ const opfsFile = this.createFileNode(path, handle, parentNode);
27
+ parentNode.children.push(opfsFile);
28
+ return opfsFile;
29
+ }
30
+ get(path) {
31
+ return this._cacheTable.get(path);
32
+ }
33
+ delete(path) {
34
+ const node = this._cacheTable.get(path);
35
+ if (!node)
36
+ return;
37
+ node.stream_ops?.close(undefined, true);
38
+ const parent = node.parent;
39
+ if (node.kind == 'directory') {
40
+ const children = node.children;
41
+ node.children = [];
42
+ children.forEach(child => this.delete(PATH.combine(path, child.name)));
43
+ }
44
+ if (parent) {
45
+ parent.children.splice(parent.children.indexOf(node));
46
+ }
47
+ this._cacheTable.delete(path);
48
+ }
49
+ unlink(path) {
50
+ const node = this._cacheTable.get(path);
51
+ if (!node)
52
+ return;
53
+ const parent = node.parent;
54
+ if (parent) {
55
+ parent.children.splice(parent.children.indexOf(node));
56
+ }
57
+ }
58
+ clear() {
59
+ const keys = Array.from(this._cacheTable.keys());
60
+ for (let i = 0; i < keys.length; i++) {
61
+ this.delete(keys[i]);
62
+ }
63
+ }
64
+ createDirNode(path, handle, parent) {
65
+ this._uniqueId++;
66
+ //const fsNode = this._fs.createNode(null, name, S_IFDIR | 511 /* 0777 */, 0 )
67
+ const node = {
68
+ name: PATH.getName(path),
69
+ handle: handle,
70
+ children: [],
71
+ kind: "directory",
72
+ id: this._uniqueId,
73
+ size: 4096,
74
+ parent: parent,
75
+ timestamp: Date.now(),
76
+ };
77
+ this._cacheTable.set(path, node);
78
+ return node;
79
+ }
80
+ createFileNode(path, handle, parent) {
81
+ this._uniqueId++;
82
+ const node = {
83
+ handle: handle,
84
+ name: PATH.getName(path),
85
+ kind: "file",
86
+ id: this._uniqueId,
87
+ size: 0,
88
+ parent: parent,
89
+ stream_ops: new StreamOps(handle),
90
+ timestamp: Date.now(),
91
+ };
92
+ this._cacheTable.set(path, node);
93
+ return node;
94
+ }
95
+ }
96
+ export class StreamOps {
97
+ constructor(handle) {
98
+ this.handle = handle;
99
+ this._openCounter = 0;
100
+ }
101
+ open() {
102
+ this._openCounter++;
103
+ if (this._syncHandlePromise)
104
+ return this._syncHandlePromise;
105
+ if (!this._syncHandle) {
106
+ this._syncHandlePromise = this.handle.createSyncAccessHandle()
107
+ .then(handle => {
108
+ this._syncHandlePromise = undefined;
109
+ if (this._openCounter == 0)
110
+ handle.close();
111
+ else
112
+ this._syncHandle = handle;
113
+ });
114
+ return this._syncHandlePromise;
115
+ }
116
+ return Promise.resolve();
117
+ }
118
+ read(buffer, offset, length, position) {
119
+ if (!this._syncHandle)
120
+ throw new Error("File is not in synchronous mode.");
121
+ const bufferToRead = new Uint8Array(buffer.buffer, offset, length);
122
+ this._syncHandle.read(bufferToRead, { at: position ?? 0 });
123
+ return length;
124
+ }
125
+ write(buffer, offset, length, position) {
126
+ if (!this._syncHandle)
127
+ throw new Error("File is not in synchronous mode.");
128
+ const bufferToWrite = new Uint8Array(buffer.buffer, offset, length);
129
+ this._syncHandle.write(bufferToWrite, { at: position ?? 0 });
130
+ return length;
131
+ }
132
+ getSize() {
133
+ if (!this._syncHandle)
134
+ throw new Error("File is not in synchronous mode.");
135
+ return this._syncHandle.getSize();
136
+ }
137
+ truncate(size) {
138
+ if (!this._syncHandle)
139
+ throw new Error("File is not in synchronous mode.");
140
+ this._syncHandle.truncate(size);
141
+ }
142
+ close(stream, force) {
143
+ this._openCounter--;
144
+ if (this._openCounter == 0 || force) {
145
+ this._openCounter = 0;
146
+ this._syncHandle?.close();
147
+ this._syncHandle = undefined;
148
+ }
149
+ }
150
+ isOpen() {
151
+ return !!this._syncHandle;
152
+ }
153
+ }
154
+ //# sourceMappingURL=IFileSystemCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IFileSystemCache.js","sourceRoot":"","sources":["../../../src/file-system/IFileSystemCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { FS, FSNode, FSStream, Lookup, FileSystemType } from "../wasm/pilot_bim_dataprovider.js";
2
+ import { IOpfsDirNode, IOpfsFileNode } from "./IFileSystemCache.js";
3
+ export interface ISyncFileSystem {
4
+ lookup(path: string): IOpfsDirNode | IOpfsFileNode | undefined;
5
+ readdir(path: string): string[];
6
+ }
7
+ export declare class OPFS implements FS {
8
+ private readonly _fs;
9
+ private readonly _fsSync;
10
+ private _mountpoint;
11
+ filesystems: any;
12
+ constructor(_fs: FS, _fsSync: ISyncFileSystem);
13
+ lookupPath(path: string, opts: any): Lookup;
14
+ isFile(mode: number): boolean;
15
+ isDir(mode: number): boolean;
16
+ mkdir(path: string, mode?: number): void;
17
+ readdir(path: string): string[];
18
+ stat(path: string, dontFollow?: boolean): any;
19
+ lstat(path: string): any;
20
+ truncate(path: string, len: number): void;
21
+ utime(path: string, atime: number, mtime: number): void;
22
+ open(path: string, flags: string, mode?: number, fd_start?: number, fd_end?: number): FSStream;
23
+ close(stream: FSStream): void;
24
+ read(stream: FSStream, buffer: ArrayBufferView, offset: number, length: number, position?: number): number;
25
+ write(stream: FSStream, buffer: ArrayBufferView, offset: number, length: number, position?: number, canOwn?: boolean): number;
26
+ readFile(path: string, opts?: unknown): Uint8Array;
27
+ writeFile(path: string, data: ArrayBufferView, opts?: {
28
+ flags?: string;
29
+ }): void;
30
+ mount(type: FileSystemType, opts: any, mountpoint: string): FSNode;
31
+ createNode(parent: string | FSNode, name: string, mode: number, dev: number): FSNode;
32
+ createStream(stream: FSStream, fd: number): FSStream;
33
+ unlink(path: string): void;
34
+ createDataFile(parent: string | FSNode, name: string, data: ArrayBufferView, canRead: boolean, canWrite: boolean, canOwn: boolean): FSNode;
35
+ }