@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.
- package/lib/index.d.ts +4 -9
- package/lib/index.js +2 -5
- package/lib/index.js.map +1 -1
- package/lib/src/BimDataProviderApi.d.ts +52 -0
- package/lib/src/BimDataProviderApi.js +2 -0
- package/lib/src/BimDataProviderApi.js.map +1 -0
- package/lib/src/model/{BimDataIfcType.d.ts → BimDataClasses.d.ts} +159 -0
- package/lib/src/model/{BimDataIfcType.js → BimDataClasses.js} +203 -1
- package/lib/src/model/BimDataClasses.js.map +1 -0
- package/lib/src/model/BimDataCloudPart.d.ts +5 -9
- package/lib/src/model/BimDataCloudPart.js +11 -12
- package/lib/src/model/BimDataCloudPart.js.map +1 -1
- package/lib/src/model/BimDataModelPart.d.ts +4 -23
- package/lib/src/model/BimDataModelPart.js +22 -36
- package/lib/src/model/BimDataModelPart.js.map +1 -1
- package/lib/src/model/BimDataPart.d.ts +11 -21
- package/lib/src/model/BimDataPart.js +41 -67
- package/lib/src/model/BimDataPart.js.map +1 -1
- package/lib/src/model/BimDataProvider.d.ts +4 -17
- package/lib/src/model/BimDataProvider.js +18 -27
- package/lib/src/model/BimDataProvider.js.map +1 -1
- package/lib/src/utils/Consts.d.ts +17 -0
- package/lib/src/utils/Consts.js +20 -0
- package/lib/src/utils/Consts.js.map +1 -0
- package/lib/src/utils/ViewerTools.d.ts +17 -16
- package/lib/src/utils/ViewerTools.js +39 -21
- package/lib/src/utils/ViewerTools.js.map +1 -1
- package/lib/src/wasm/WasmWorker.d.ts +22 -70
- package/lib/src/wasm/WasmWorker.js +89 -180
- package/lib/src/wasm/WasmWorker.js.map +1 -1
- package/lib/src/wasm/{WasmWorkerThreadSafeWrapper.d.ts → WorkerApi.d.ts} +39 -21
- package/lib/src/wasm/WorkerApi.js +2 -0
- package/lib/src/wasm/WorkerApi.js.map +1 -0
- package/lib/src/wasm/cloud_readers/BinaryCloudReader.d.ts +18 -0
- package/lib/src/wasm/cloud_readers/BinaryCloudReader.js +228 -0
- package/lib/src/wasm/cloud_readers/BinaryCloudReader.js.map +1 -0
- package/lib/src/wasm/{DataAccessors → cloud_readers}/ICloudReader.d.ts +6 -6
- package/lib/src/wasm/cloud_readers/ICloudReader.js.map +1 -0
- package/lib/src/wasm/cloud_readers/WasmCloudReader.d.ts +20 -0
- package/lib/src/wasm/cloud_readers/WasmCloudReader.js +53 -0
- package/lib/src/wasm/cloud_readers/WasmCloudReader.js.map +1 -0
- package/lib/src/wasm/data_accessors/CloudPartAccessor.d.ts +20 -0
- package/lib/src/wasm/data_accessors/CloudPartAccessor.js +70 -0
- package/lib/src/wasm/data_accessors/CloudPartAccessor.js.map +1 -0
- package/lib/src/wasm/data_accessors/FileAccessor.d.ts +37 -0
- package/lib/src/wasm/data_accessors/FileAccessor.js +237 -0
- package/lib/src/wasm/data_accessors/FileAccessor.js.map +1 -0
- package/lib/src/wasm/data_accessors/ModelPartAccessor.d.ts +27 -0
- package/lib/src/wasm/data_accessors/ModelPartAccessor.js +142 -0
- package/lib/src/wasm/data_accessors/ModelPartAccessor.js.map +1 -0
- package/lib/src/wasm/file-system/File.d.ts +30 -0
- package/lib/src/wasm/file-system/File.js +58 -0
- package/lib/src/wasm/file-system/File.js.map +1 -0
- package/lib/src/wasm/file-system/FileAccessDispatcher.d.ts +12 -0
- package/lib/src/{model → wasm/file-system}/FileAccessDispatcher.js +59 -21
- package/lib/src/wasm/file-system/FileAccessDispatcher.js.map +1 -0
- package/lib/src/wasm/file-system/FileLoader.d.ts +41 -0
- package/lib/src/wasm/file-system/FileLoader.js +107 -0
- package/lib/src/wasm/file-system/FileLoader.js.map +1 -0
- package/lib/src/wasm/file-system/IFileSystem.d.ts +76 -0
- package/lib/src/wasm/file-system/IFileSystem.js +308 -0
- package/lib/src/wasm/file-system/IFileSystem.js.map +1 -0
- package/lib/src/{file-system → wasm/file-system}/IFileSystemCache.d.ts +10 -6
- package/lib/src/{file-system → wasm/file-system}/IFileSystemCache.js +11 -13
- package/lib/src/wasm/file-system/IFileSystemCache.js.map +1 -0
- package/lib/src/{file-system → wasm/file-system}/OPFS.d.ts +6 -6
- package/lib/src/{file-system → wasm/file-system}/OPFS.js +7 -3
- package/lib/src/wasm/file-system/OPFS.js.map +1 -0
- package/lib/src/wasm/file-system/PATH.js.map +1 -0
- package/lib/src/wasm/file-system/PartialFile.d.ts +48 -0
- package/lib/src/wasm/file-system/PartialFile.js +367 -0
- package/lib/src/wasm/file-system/PartialFile.js.map +1 -0
- package/lib/src/wasm/pilot_bim_dataprovider.d.ts +17 -1
- package/lib/src/wasm/wasm.worker-node.cjs +1 -1
- package/lib/src/wasm/wasm.worker-web.cjs +1 -1
- package/lib/src/wasm/worker.js +2 -0
- package/lib/src/wasm/worker.js.map +1 -1
- package/package.json +3 -4
- package/lib/src/file-system/IFileSystem.d.ts +0 -50
- package/lib/src/file-system/IFileSystem.js +0 -233
- package/lib/src/file-system/IFileSystem.js.map +0 -1
- package/lib/src/file-system/IFileSystemCache.js.map +0 -1
- package/lib/src/file-system/OPFS.js.map +0 -1
- package/lib/src/file-system/PATH.js.map +0 -1
- package/lib/src/model/BimDataElement.d.ts +0 -113
- package/lib/src/model/BimDataElement.js +0 -45
- package/lib/src/model/BimDataElement.js.map +0 -1
- package/lib/src/model/BimDataElementPropertySet.d.ts +0 -26
- package/lib/src/model/BimDataElementPropertySet.js +0 -90
- package/lib/src/model/BimDataElementPropertySet.js.map +0 -1
- package/lib/src/model/BimDataIfcRepresentationStatus.d.ts +0 -10
- package/lib/src/model/BimDataIfcRepresentationStatus.js +0 -12
- package/lib/src/model/BimDataIfcRepresentationStatus.js.map +0 -1
- package/lib/src/model/BimDataIfcType.js.map +0 -1
- package/lib/src/model/BimDataTessellation.d.ts +0 -13
- package/lib/src/model/BimDataTessellation.js +0 -16
- package/lib/src/model/BimDataTessellation.js.map +0 -1
- package/lib/src/model/Consts.d.ts +0 -7
- package/lib/src/model/Consts.js +0 -8
- package/lib/src/model/Consts.js.map +0 -1
- package/lib/src/model/FileAccessDispatcher.d.ts +0 -14
- package/lib/src/model/FileAccessDispatcher.js.map +0 -1
- package/lib/src/wasm/DataAccessors/BimCloudPartAccessor.d.ts +0 -17
- package/lib/src/wasm/DataAccessors/BimCloudPartAccessor.js +0 -60
- package/lib/src/wasm/DataAccessors/BimCloudPartAccessor.js.map +0 -1
- package/lib/src/wasm/DataAccessors/BimDataModelPartAccessor.d.ts +0 -20
- package/lib/src/wasm/DataAccessors/BimDataModelPartAccessor.js +0 -89
- package/lib/src/wasm/DataAccessors/BimDataModelPartAccessor.js.map +0 -1
- package/lib/src/wasm/DataAccessors/BimDataPartAccessor.d.ts +0 -8
- package/lib/src/wasm/DataAccessors/BimDataPartAccessor.js +0 -19
- package/lib/src/wasm/DataAccessors/BimDataPartAccessor.js.map +0 -1
- package/lib/src/wasm/DataAccessors/BinaryCloudReader.d.ts +0 -16
- package/lib/src/wasm/DataAccessors/BinaryCloudReader.js +0 -268
- package/lib/src/wasm/DataAccessors/BinaryCloudReader.js.map +0 -1
- package/lib/src/wasm/DataAccessors/ICloudReader.js.map +0 -1
- package/lib/src/wasm/DataAccessors/WasmCloudReader.d.ts +0 -16
- package/lib/src/wasm/DataAccessors/WasmCloudReader.js +0 -47
- package/lib/src/wasm/DataAccessors/WasmCloudReader.js.map +0 -1
- package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js +0 -141
- package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js.map +0 -1
- /package/lib/src/wasm/{DataAccessors → cloud_readers}/ICloudReader.js +0 -0
- /package/lib/src/{file-system → wasm/file-system}/PATH.d.ts +0 -0
- /package/lib/src/{file-system → wasm/file-system}/PATH.js +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { FileInfo, IFileSystem } from "../file-system/IFileSystem.js";
|
|
2
|
+
import { IFile } from "../file-system/File.js";
|
|
3
|
+
import { FileAccessDispatcher } from "../file-system/FileAccessDispatcher.js";
|
|
4
|
+
import { MemoryGuardOptions, IFileAccessor, IMemoryGuard, IWasmModuleAccessor } from "../WorkerApi.js";
|
|
5
|
+
import { OpenOptions } from "../../BimDataProviderApi.js";
|
|
6
|
+
export declare class FileAccessor implements IFileAccessor {
|
|
7
|
+
readonly fs: IFileSystem;
|
|
8
|
+
readonly memoryGuard: IMemoryGuard;
|
|
9
|
+
readonly moduleAccessor: IWasmModuleAccessor;
|
|
10
|
+
readonly fileAccessDispatcher?: FileAccessDispatcher | undefined;
|
|
11
|
+
private _files;
|
|
12
|
+
private readonly _memGuardOptions;
|
|
13
|
+
constructor(fs: IFileSystem, memoryGuard: IMemoryGuard, moduleAccessor: IWasmModuleAccessor, fileAccessDispatcher?: FileAccessDispatcher | undefined);
|
|
14
|
+
isFileExists(path: string): boolean;
|
|
15
|
+
isOpen(path: string): boolean;
|
|
16
|
+
lockFile(modelPartId: string): Promise<string>;
|
|
17
|
+
unlockFile(modelPartId: string): Promise<void>;
|
|
18
|
+
open(id: string, source?: ArrayBuffer | ArrayBufferView | Blob | string, options?: OpenOptions): Promise<void>;
|
|
19
|
+
copy(modelPartTargetId: string, modelPartSourceId: string): Promise<void>;
|
|
20
|
+
write(modelPartId: string, buffer: ArrayBuffer | ArrayBufferView, position: number): Promise<void>;
|
|
21
|
+
read(modelPartId: string, position: number, size: number): Promise<Uint8Array>;
|
|
22
|
+
close(modelPartId: string): Promise<void>;
|
|
23
|
+
remove(modelPartId: string): Promise<void>;
|
|
24
|
+
isValid(modelPartId: string): Promise<boolean>;
|
|
25
|
+
getFileInfo(modelPartId: string): Promise<FileInfo>;
|
|
26
|
+
getFile(path: string, options?: {
|
|
27
|
+
create: boolean;
|
|
28
|
+
}): Promise<IFile>;
|
|
29
|
+
runSyncFileOp<T>(path: string | string[], opFunc: () => T | Promise<T>, options?: MemoryGuardOptions): Promise<T>;
|
|
30
|
+
openSyncFileAccess(path: string | string[]): Promise<void>;
|
|
31
|
+
closeSyncFileAccess(path: string | string[]): Promise<void>;
|
|
32
|
+
dispose(): Promise<void>;
|
|
33
|
+
clearCache(memToFreeAmount?: number): Promise<void>;
|
|
34
|
+
private openUrl;
|
|
35
|
+
private fileGuardOp;
|
|
36
|
+
private isPartialFile;
|
|
37
|
+
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { MAX_WRITE_CHUNK_SIZE, OPFS_CACHE_CHUNK_SIZE, BinaryCloudFileSignature, PartialFileSignature, SqliteFileSignature, SupportedFileSignatures } from "../../utils/Consts.js";
|
|
2
|
+
import { isOPFSEnabled, isValidFileSignature } from "../../utils/ViewerTools.js";
|
|
3
|
+
import { FetchStatus, FileLoader } from "../file-system/FileLoader.js";
|
|
4
|
+
import { File } from "../file-system/File.js";
|
|
5
|
+
import { PartialFile } from "../file-system/PartialFile.js";
|
|
6
|
+
export class FileAccessor {
|
|
7
|
+
fs;
|
|
8
|
+
memoryGuard;
|
|
9
|
+
moduleAccessor;
|
|
10
|
+
fileAccessDispatcher;
|
|
11
|
+
_files;
|
|
12
|
+
_memGuardOptions = { checkRAM: false, checkCache: isOPFSEnabled };
|
|
13
|
+
constructor(fs, memoryGuard, moduleAccessor, fileAccessDispatcher) {
|
|
14
|
+
this.fs = fs;
|
|
15
|
+
this.memoryGuard = memoryGuard;
|
|
16
|
+
this.moduleAccessor = moduleAccessor;
|
|
17
|
+
this.fileAccessDispatcher = fileAccessDispatcher;
|
|
18
|
+
this._files = new Map();
|
|
19
|
+
}
|
|
20
|
+
isFileExists(path) {
|
|
21
|
+
return this.fs.isFileExists(path);
|
|
22
|
+
}
|
|
23
|
+
isOpen(path) {
|
|
24
|
+
return this._files.has(path);
|
|
25
|
+
}
|
|
26
|
+
async lockFile(modelPartId) {
|
|
27
|
+
return this.fileAccessDispatcher?.lockFile(modelPartId, this.copy.bind(this), this.remove.bind(this)) ?? modelPartId;
|
|
28
|
+
}
|
|
29
|
+
async unlockFile(modelPartId) {
|
|
30
|
+
return this.fileAccessDispatcher?.unlockFile(modelPartId);
|
|
31
|
+
}
|
|
32
|
+
async open(id, source, options) {
|
|
33
|
+
let file;
|
|
34
|
+
const chunkSize = options?.chunkSize ?? MAX_WRITE_CHUNK_SIZE;
|
|
35
|
+
await this.memoryGuard.runOperation(async () => {
|
|
36
|
+
if (!source) {
|
|
37
|
+
file = await this.getFile(id, { create: true });
|
|
38
|
+
}
|
|
39
|
+
else if (typeof source == "string") {
|
|
40
|
+
file = await this.openUrl(id, source, chunkSize);
|
|
41
|
+
}
|
|
42
|
+
else if (source instanceof Blob) {
|
|
43
|
+
file = await this.getFile(id, { create: true });
|
|
44
|
+
await FileLoader.writeBlobToFile(source, chunkSize, file);
|
|
45
|
+
}
|
|
46
|
+
else if (source instanceof ArrayBuffer) {
|
|
47
|
+
file = await this.getFile(id, { create: true });
|
|
48
|
+
await file.write(source, 0);
|
|
49
|
+
}
|
|
50
|
+
else if (ArrayBuffer.isView(source)) {
|
|
51
|
+
file = await this.getFile(id, { create: true });
|
|
52
|
+
await file.write(source.buffer, 0);
|
|
53
|
+
}
|
|
54
|
+
}, this._memGuardOptions);
|
|
55
|
+
if (file)
|
|
56
|
+
this._files.set(id, file);
|
|
57
|
+
}
|
|
58
|
+
async copy(modelPartTargetId, modelPartSourceId) {
|
|
59
|
+
const source = await this.getFile(modelPartSourceId);
|
|
60
|
+
const target = await this.getFile(modelPartTargetId, { create: true });
|
|
61
|
+
return this.memoryGuard.runOperation(async () => source.copyTo(target), this._memGuardOptions);
|
|
62
|
+
}
|
|
63
|
+
async write(modelPartId, buffer, position) {
|
|
64
|
+
const arrayBuffer = ArrayBuffer.isView(buffer) ? buffer.buffer : buffer;
|
|
65
|
+
const file = await this.getFile(modelPartId, { create: true });
|
|
66
|
+
return this.memoryGuard.runOperation(async () => file.write(arrayBuffer, position), this._memGuardOptions);
|
|
67
|
+
}
|
|
68
|
+
async read(modelPartId, position, size) {
|
|
69
|
+
const file = await this.getFile(modelPartId);
|
|
70
|
+
return file.read(position, size);
|
|
71
|
+
}
|
|
72
|
+
async close(modelPartId) {
|
|
73
|
+
const file = this._files.get(modelPartId);
|
|
74
|
+
if (file) {
|
|
75
|
+
await file.close();
|
|
76
|
+
this._files.delete(modelPartId);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async remove(modelPartId) {
|
|
80
|
+
if (this.isFileExists(modelPartId)) {
|
|
81
|
+
const file = await this.getFile(modelPartId);
|
|
82
|
+
await file?.remove();
|
|
83
|
+
}
|
|
84
|
+
await this.close(modelPartId);
|
|
85
|
+
}
|
|
86
|
+
async isValid(modelPartId) {
|
|
87
|
+
try {
|
|
88
|
+
const file = await this.getFile(modelPartId, { create: false });
|
|
89
|
+
if (!await file.isValid())
|
|
90
|
+
return false;
|
|
91
|
+
const signatureSize = Math.max(...SupportedFileSignatures.map(sign => sign.byteLength));
|
|
92
|
+
const arrayBuffer = await file.read(0, signatureSize);
|
|
93
|
+
return SupportedFileSignatures.some(signature => isValidFileSignature(signature, arrayBuffer));
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async getFileInfo(modelPartId) {
|
|
100
|
+
return this.getFile(modelPartId, { create: false }).then(file => file.getFileInfo());
|
|
101
|
+
}
|
|
102
|
+
async getFile(path, options = { create: false }) {
|
|
103
|
+
const file = this._files.get(path);
|
|
104
|
+
if (file)
|
|
105
|
+
return file;
|
|
106
|
+
await this.fs.actualizeFilePath(path);
|
|
107
|
+
if (this.isFileExists(path)) {
|
|
108
|
+
const file = await File.open(this.fs, path);
|
|
109
|
+
return (await this.isPartialFile(file)) ? PartialFile.fromFile(this.fs, path) : file;
|
|
110
|
+
}
|
|
111
|
+
else if (options.create) {
|
|
112
|
+
return File.open(this.fs, path, options);
|
|
113
|
+
}
|
|
114
|
+
throw new Error("File is not exist.");
|
|
115
|
+
}
|
|
116
|
+
async runSyncFileOp(path, opFunc, options) {
|
|
117
|
+
return this.memoryGuard.runOperation(() => this.fileGuardOp(path, opFunc), options);
|
|
118
|
+
}
|
|
119
|
+
async openSyncFileAccess(path) {
|
|
120
|
+
if (Array.isArray(path)) {
|
|
121
|
+
const synchPromises = new Array(path.length);
|
|
122
|
+
for (let i = 0; i < path.length; i++) {
|
|
123
|
+
synchPromises[i] = this.getFile(path[i]).then(file => file.openSyncFileAccess());
|
|
124
|
+
}
|
|
125
|
+
await Promise.all(synchPromises);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
await this.getFile(path).then(file => file.openSyncFileAccess());
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async closeSyncFileAccess(path) {
|
|
132
|
+
if (Array.isArray(path)) {
|
|
133
|
+
const synchPromises = new Array(path.length);
|
|
134
|
+
for (let i = 0; i < path.length; i++) {
|
|
135
|
+
synchPromises[i] = this.getFile(path[i]).then(file => file.closeSyncFileAccess());
|
|
136
|
+
}
|
|
137
|
+
await Promise.all(synchPromises);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
await this.getFile(path).then(file => file.closeSyncFileAccess());
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async dispose() {
|
|
144
|
+
const closePromises = new Array();
|
|
145
|
+
for (const [, file] of this._files) {
|
|
146
|
+
closePromises.push(file.close());
|
|
147
|
+
}
|
|
148
|
+
await Promise.all(closePromises);
|
|
149
|
+
}
|
|
150
|
+
async clearCache(memToFreeAmount = Number.MAX_SAFE_INTEGER) {
|
|
151
|
+
if (!this.fileAccessDispatcher)
|
|
152
|
+
return;
|
|
153
|
+
const cachedFiles = await this.fs.getCachedFiles();
|
|
154
|
+
cachedFiles.sort((a, b) => a.lastModified - b.lastModified);
|
|
155
|
+
let freedMemory = 0;
|
|
156
|
+
for (let i = 0; i < cachedFiles.length && freedMemory < memToFreeAmount; i++) {
|
|
157
|
+
const path = cachedFiles[i].path;
|
|
158
|
+
if (!await this.fileAccessDispatcher.isLocked(path)) {
|
|
159
|
+
const file = await this.getFile(path);
|
|
160
|
+
freedMemory += file.getFileInfo().sizeOnDisk;
|
|
161
|
+
await file.remove();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async openUrl(id, source, chunkSize) {
|
|
166
|
+
// Try to fetch first chunk of the file
|
|
167
|
+
const firstChunkRange = { startByte: 0, endByte: OPFS_CACHE_CHUNK_SIZE - 1 };
|
|
168
|
+
let response = await FileLoader.fetchRange(source, firstChunkRange);
|
|
169
|
+
// If file length less than chunk size try again with new range
|
|
170
|
+
if (response.status == FetchStatus.InvalidRange && response.length < OPFS_CACHE_CHUNK_SIZE) {
|
|
171
|
+
firstChunkRange.endByte = response.length - 1;
|
|
172
|
+
response = await FileLoader.fetchRange(source, firstChunkRange);
|
|
173
|
+
}
|
|
174
|
+
// If partial load is not supported by the server, the response includes the full file contents.
|
|
175
|
+
if (response.status == FetchStatus.FullFile) {
|
|
176
|
+
// get file signature and check if file format is supported by dataprovider
|
|
177
|
+
const size = response.data.size;
|
|
178
|
+
const signatureSize = Math.min(size, Math.max(...SupportedFileSignatures.map(sign => sign.byteLength)));
|
|
179
|
+
const arrayBuffer = await FileLoader.readChunk(0, signatureSize, response.data);
|
|
180
|
+
if (SupportedFileSignatures.some(signature => isValidFileSignature(signature, arrayBuffer))) {
|
|
181
|
+
// Store full file if file format is supported
|
|
182
|
+
const file = await File.open(this.fs, id, { create: true });
|
|
183
|
+
await FileLoader.writeBlobToFile(response.data, chunkSize, file);
|
|
184
|
+
return file;
|
|
185
|
+
}
|
|
186
|
+
throw new Error("Given 3D model is not supported");
|
|
187
|
+
}
|
|
188
|
+
// If partial load is supported, the response includes first chunk of the file
|
|
189
|
+
if (response.status == FetchStatus.PartialContent) {
|
|
190
|
+
const buffer = response.data;
|
|
191
|
+
const fileLength = response.length;
|
|
192
|
+
// If SQLite database:
|
|
193
|
+
if (isValidFileSignature(SqliteFileSignature, buffer)) {
|
|
194
|
+
const file = await File.open(this.fs, id, { create: true });
|
|
195
|
+
// write first chunk
|
|
196
|
+
await file.write(buffer, 0);
|
|
197
|
+
// fetch the rest
|
|
198
|
+
await FileLoader.fetchFile(source, chunkSize, file, fileLength, buffer.byteLength);
|
|
199
|
+
return file;
|
|
200
|
+
}
|
|
201
|
+
// If binary cloud
|
|
202
|
+
if (isValidFileSignature(BinaryCloudFileSignature, buffer)) {
|
|
203
|
+
// make partial file
|
|
204
|
+
const partial = await PartialFile.fromUrl(this.fs, id, String(source), fileLength);
|
|
205
|
+
// write first chunk
|
|
206
|
+
await partial.write(buffer, 0);
|
|
207
|
+
return partial;
|
|
208
|
+
}
|
|
209
|
+
throw new Error("Given 3D model is not supported");
|
|
210
|
+
}
|
|
211
|
+
throw new Error("Failed to fetch file.");
|
|
212
|
+
}
|
|
213
|
+
async fileGuardOp(path, opFunc) {
|
|
214
|
+
try {
|
|
215
|
+
await this.openSyncFileAccess(path);
|
|
216
|
+
const result = await opFunc();
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
console.error(e);
|
|
221
|
+
throw e;
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
await this.closeSyncFileAccess(path);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
async isPartialFile(file) {
|
|
228
|
+
try {
|
|
229
|
+
const buffer = await file.read(0, PartialFileSignature.byteLength);
|
|
230
|
+
return isValidFileSignature(PartialFileSignature, buffer);
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=FileAccessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileAccessor.js","sourceRoot":"","sources":["../../../../src/wasm/data_accessors/FileAccessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BimDataElement, BimDataElementPropertySet, BimDataTessellation, BimDataTessellationInfo } from "../../model/BimDataClasses.js";
|
|
2
|
+
import { FileAccessor } from "./FileAccessor.js";
|
|
3
|
+
import { IWasmBimModule } from "../pilot_bim_dataprovider.js";
|
|
4
|
+
import { IModelPartAccessor, IWasmModuleAccessor } from "../WorkerApi.js";
|
|
5
|
+
export declare class ModelPartAccessor implements IModelPartAccessor {
|
|
6
|
+
readonly fileAccessor: FileAccessor;
|
|
7
|
+
readonly moduleAccessor: IWasmModuleAccessor;
|
|
8
|
+
private readonly _memGuardOptions;
|
|
9
|
+
constructor(fileAccessor: FileAccessor, moduleAccessor: IWasmModuleAccessor);
|
|
10
|
+
get module(): IWasmBimModule;
|
|
11
|
+
mergeModelParts(targetId: string, sourceId: string): Promise<void>;
|
|
12
|
+
getAllTessellations(modelPartId: string, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
|
|
13
|
+
getTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, firstItemIdx: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<bigint>;
|
|
14
|
+
getTessellationsInfo(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean, transmit: (map: BimDataTessellationInfo[]) => Promise<void>): Promise<void>;
|
|
15
|
+
getTessellation(modelPartId: string, tessellationKey: string, version: bigint, compressed: boolean): Promise<BimDataTessellation>;
|
|
16
|
+
getTessellationsByIds(modelPartId: string, tessellations: string[], version: bigint, compressed: boolean, transmit: (map: BimDataTessellation[]) => Promise<void>): Promise<void>;
|
|
17
|
+
getAllElements(modelPartId: string, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
|
|
18
|
+
getElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
|
|
19
|
+
getDiffElements(modelPartId: string, versionFrom: bigint, versionTo: bigint, transmit: (elements: BimDataElement[]) => Promise<void>): Promise<void>;
|
|
20
|
+
getElementProperties(modelPartId: string, elementId: string, version: bigint): Promise<BimDataElementPropertySet[]>;
|
|
21
|
+
getElementPropertiesByIds(modelPartId: string, indexes: string[], version: bigint): Promise<Map<string, BimDataElementPropertySet[]>>;
|
|
22
|
+
getElementTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint, compressed: boolean): Promise<BimDataTessellation[]>;
|
|
23
|
+
getAllVersions(modelPartId: string): Promise<bigint[]>;
|
|
24
|
+
getLatestVersion(modelPartId: string): Promise<bigint>;
|
|
25
|
+
isValid(modelPartId: string): Promise<boolean>;
|
|
26
|
+
dispose(): Promise<void>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { BimDataConverter, getPath, isOPFSEnabled, transmitWasmData } from "../../utils/ViewerTools.js";
|
|
2
|
+
import { TRANSMIT_STEP } from "../../utils/Consts.js";
|
|
3
|
+
export class ModelPartAccessor {
|
|
4
|
+
fileAccessor;
|
|
5
|
+
moduleAccessor;
|
|
6
|
+
_memGuardOptions = { checkRAM: isOPFSEnabled, checkCache: false };
|
|
7
|
+
constructor(fileAccessor, moduleAccessor) {
|
|
8
|
+
this.fileAccessor = fileAccessor;
|
|
9
|
+
this.moduleAccessor = moduleAccessor;
|
|
10
|
+
}
|
|
11
|
+
get module() {
|
|
12
|
+
return this.moduleAccessor.module;
|
|
13
|
+
}
|
|
14
|
+
async mergeModelParts(targetId, sourceId) {
|
|
15
|
+
const targetPath = getPath(targetId);
|
|
16
|
+
const sourcePath = getPath(sourceId);
|
|
17
|
+
await this.fileAccessor.runSyncFileOp([targetId, sourceId], () => {
|
|
18
|
+
const targetVersion = this.module.getDatabaseVersion(targetPath);
|
|
19
|
+
const sourceVersion = this.module.getDatabaseVersion(sourcePath);
|
|
20
|
+
if (sourceVersion != targetVersion) {
|
|
21
|
+
this.module.manualMergeDatabases(targetPath, sourcePath);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.module.mergeDatabases(targetPath, sourcePath);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async getAllTessellations(modelPartId, compressed, transmit) {
|
|
29
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
30
|
+
const result = this.module.getAllTessellations(getPath(modelPartId), compressed);
|
|
31
|
+
return transmitWasmData(this.module, result, true, BimDataConverter.toBimDataTessellation, transmit, TRANSMIT_STEP);
|
|
32
|
+
}, this._memGuardOptions);
|
|
33
|
+
}
|
|
34
|
+
async getTessellations(modelPartId, versionFrom, versionTo, firstItemIdx, compressed, transmit) {
|
|
35
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, async () => {
|
|
36
|
+
const result = this.module.getTessellations(getPath(modelPartId), versionFrom, versionTo, firstItemIdx, compressed);
|
|
37
|
+
const nextItemIdx = result.nextItemIdx;
|
|
38
|
+
await transmitWasmData(this.module, result.tessellations, true, BimDataConverter.toBimDataTessellation, transmit, TRANSMIT_STEP);
|
|
39
|
+
result.delete();
|
|
40
|
+
return Promise.resolve(nextItemIdx);
|
|
41
|
+
}, this._memGuardOptions);
|
|
42
|
+
}
|
|
43
|
+
async getTessellationsInfo(modelPartId, versionFrom, versionTo, compressed, transmit) {
|
|
44
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
45
|
+
const result = this.module.getTessellationsInfo(getPath(modelPartId), versionFrom, versionTo, compressed);
|
|
46
|
+
return transmitWasmData(this.module, result, true, BimDataConverter.toBimDataTessellationInfo, transmit, TRANSMIT_STEP);
|
|
47
|
+
}, this._memGuardOptions);
|
|
48
|
+
}
|
|
49
|
+
async getTessellation(modelPartId, tessellationKey, version, compressed) {
|
|
50
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
51
|
+
const result = this.module.getTessellation(getPath(modelPartId), tessellationKey, version, compressed);
|
|
52
|
+
return BimDataConverter.toBimDataTessellation(this.module, result, true);
|
|
53
|
+
}, this._memGuardOptions);
|
|
54
|
+
}
|
|
55
|
+
async getTessellationsByIds(modelPartId, tessellations, version, compressed, transmit) {
|
|
56
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
57
|
+
const idsVector = new this.module.StringVector();
|
|
58
|
+
idsVector.resize(tessellations.length, "");
|
|
59
|
+
for (let i = 0; i < tessellations.length; i++) {
|
|
60
|
+
idsVector.set(i, tessellations[i]);
|
|
61
|
+
}
|
|
62
|
+
const result = this.module.getTessellationsByIds(getPath(modelPartId), version, idsVector, compressed);
|
|
63
|
+
idsVector.delete();
|
|
64
|
+
return transmitWasmData(this.module, result, true, BimDataConverter.toBimDataTessellation, transmit, TRANSMIT_STEP);
|
|
65
|
+
}, this._memGuardOptions);
|
|
66
|
+
}
|
|
67
|
+
async getAllElements(modelPartId, transmit) {
|
|
68
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
69
|
+
const result = this.module.getAllNodes(getPath(modelPartId));
|
|
70
|
+
return transmitWasmData(this.module, result, true, BimDataConverter.toBimDataElement, transmit, TRANSMIT_STEP);
|
|
71
|
+
}, this._memGuardOptions);
|
|
72
|
+
}
|
|
73
|
+
async getElements(modelPartId, versionFrom, versionTo, transmit) {
|
|
74
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
75
|
+
const result = this.module.getNodes(getPath(modelPartId), versionFrom, versionTo);
|
|
76
|
+
return transmitWasmData(this.module, result, true, BimDataConverter.toBimDataElement, transmit, TRANSMIT_STEP);
|
|
77
|
+
}, this._memGuardOptions);
|
|
78
|
+
}
|
|
79
|
+
async getDiffElements(modelPartId, versionFrom, versionTo, transmit) {
|
|
80
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
81
|
+
const result = this.module.getComparedNodes(getPath(modelPartId), versionFrom, versionTo);
|
|
82
|
+
return transmitWasmData(this.module, result, true, BimDataConverter.toBimDataElement, transmit, TRANSMIT_STEP);
|
|
83
|
+
}, this._memGuardOptions);
|
|
84
|
+
}
|
|
85
|
+
async getElementProperties(modelPartId, elementId, version) {
|
|
86
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
87
|
+
const set = this.module.getProperties(getPath(modelPartId), elementId, version);
|
|
88
|
+
return BimDataConverter.toModelElementPropertySet(set, true);
|
|
89
|
+
}, this._memGuardOptions);
|
|
90
|
+
}
|
|
91
|
+
async getElementPropertiesByIds(modelPartId, indexes, version) {
|
|
92
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
93
|
+
const idsVector = new this.module.StringVector();
|
|
94
|
+
idsVector.resize(indexes.length, "");
|
|
95
|
+
for (let i = 0; i < indexes.length; i++) {
|
|
96
|
+
idsVector.set(i, indexes[i]);
|
|
97
|
+
}
|
|
98
|
+
const properties = this.module.getPropertiesByIds(getPath(modelPartId), idsVector, version);
|
|
99
|
+
const result = new Map();
|
|
100
|
+
for (let i = 0; i < indexes.length; i++) {
|
|
101
|
+
const set = BimDataConverter.toModelElementPropertySet(properties.get(i).value, true);
|
|
102
|
+
result.set(indexes[i], set);
|
|
103
|
+
}
|
|
104
|
+
idsVector.delete();
|
|
105
|
+
return result;
|
|
106
|
+
}, this._memGuardOptions);
|
|
107
|
+
}
|
|
108
|
+
async getElementTessellations(modelPartId, versionFrom, versionTo, compressed) {
|
|
109
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
110
|
+
const vts = this.module.getNodesTessellations(getPath(modelPartId), versionFrom, versionTo, compressed);
|
|
111
|
+
return BimDataConverter.toBimDataTessellations(this.module, vts, true);
|
|
112
|
+
}, this._memGuardOptions);
|
|
113
|
+
}
|
|
114
|
+
async getAllVersions(modelPartId) {
|
|
115
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
116
|
+
const bimVersions = this.module.getAllVersions(getPath(modelPartId));
|
|
117
|
+
const versions = new Array(bimVersions.size());
|
|
118
|
+
for (let i = 0; i < versions.length; i++) {
|
|
119
|
+
versions[i] = bimVersions.get(i);
|
|
120
|
+
}
|
|
121
|
+
bimVersions.delete();
|
|
122
|
+
return versions;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async getLatestVersion(modelPartId) {
|
|
126
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => this.module.getLatestVersion(getPath(modelPartId)));
|
|
127
|
+
}
|
|
128
|
+
async isValid(modelPartId) {
|
|
129
|
+
return this.fileAccessor.runSyncFileOp(modelPartId, () => {
|
|
130
|
+
try {
|
|
131
|
+
return this.module.isValidDatabase(getPath(modelPartId));
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async dispose() {
|
|
139
|
+
// empty method
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=ModelPartAccessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelPartAccessor.js","sourceRoot":"","sources":["../../../../src/wasm/data_accessors/ModelPartAccessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { FileInfo, IFileSystem } from "./IFileSystem.js";
|
|
2
|
+
export interface IFile {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
write(buffer: ArrayBuffer, position: number): Promise<void>;
|
|
5
|
+
read(position: number, size: number): Promise<Uint8Array>;
|
|
6
|
+
copyTo(file: IFile): Promise<void>;
|
|
7
|
+
openSyncFileAccess(): Promise<void>;
|
|
8
|
+
closeSyncFileAccess(force?: boolean): Promise<void>;
|
|
9
|
+
isValid(): Promise<boolean>;
|
|
10
|
+
getFileInfo(): FileInfo;
|
|
11
|
+
remove(): Promise<void>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare class File implements IFile {
|
|
15
|
+
private readonly _fs;
|
|
16
|
+
readonly id: string;
|
|
17
|
+
private constructor();
|
|
18
|
+
static open(fs: IFileSystem, id: string, options?: {
|
|
19
|
+
create: boolean;
|
|
20
|
+
}): Promise<File>;
|
|
21
|
+
write(buffer: ArrayBuffer, position: number): Promise<void>;
|
|
22
|
+
read(position: number, size: number): Promise<Uint8Array>;
|
|
23
|
+
copyTo(file: IFile): Promise<void>;
|
|
24
|
+
openSyncFileAccess(): Promise<void>;
|
|
25
|
+
closeSyncFileAccess(force?: boolean): Promise<void>;
|
|
26
|
+
getFileInfo(): FileInfo;
|
|
27
|
+
isValid(): Promise<boolean>;
|
|
28
|
+
remove(): Promise<void>;
|
|
29
|
+
close(): Promise<void>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export class File {
|
|
2
|
+
_fs;
|
|
3
|
+
id;
|
|
4
|
+
constructor(_fs, id) {
|
|
5
|
+
this._fs = _fs;
|
|
6
|
+
this.id = id;
|
|
7
|
+
}
|
|
8
|
+
static async open(fs, id, options = { create: false }) {
|
|
9
|
+
if (!fs.isFileExists(id)) {
|
|
10
|
+
if (options.create) {
|
|
11
|
+
await fs.makeFile(id, new Uint8Array());
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
throw new Error("File is not exist.");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return new File(fs, id);
|
|
18
|
+
}
|
|
19
|
+
async write(buffer, position) {
|
|
20
|
+
return this._fs.writeFile(this.id, new Uint8Array(buffer), position);
|
|
21
|
+
}
|
|
22
|
+
async read(position, size) {
|
|
23
|
+
return this._fs.readFile(this.id, position, size);
|
|
24
|
+
}
|
|
25
|
+
async copyTo(file) {
|
|
26
|
+
return this._fs.copyFile(file.id, this.id);
|
|
27
|
+
}
|
|
28
|
+
async openSyncFileAccess() {
|
|
29
|
+
await this._fs.openSyncFileAccess(this.id);
|
|
30
|
+
}
|
|
31
|
+
async closeSyncFileAccess(force = false) {
|
|
32
|
+
await this._fs.closeSyncFileAccess(this.id, force);
|
|
33
|
+
}
|
|
34
|
+
getFileInfo() {
|
|
35
|
+
return this._fs.getFileInfo(this.id);
|
|
36
|
+
}
|
|
37
|
+
async isValid() {
|
|
38
|
+
try {
|
|
39
|
+
// check if file is still present in fs
|
|
40
|
+
if (!this._fs.isFileExists(this.id))
|
|
41
|
+
return false;
|
|
42
|
+
// check if file is can be accessed in synch mode
|
|
43
|
+
await this._fs.openSyncFileAccess(this.id);
|
|
44
|
+
await this._fs.closeSyncFileAccess(this.id);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
async remove() {
|
|
52
|
+
return this._fs.remove(this.id);
|
|
53
|
+
}
|
|
54
|
+
async close() {
|
|
55
|
+
await this.closeSyncFileAccess(true);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=File.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"File.js","sourceRoot":"","sources":["../../../../src/wasm/file-system/File.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,IAAI;IACsB;IAA2B;IAAhE,YAAqC,GAAgB,EAAW,EAAU;QAArC,QAAG,GAAH,GAAG,CAAa;QAAW,OAAE,GAAF,EAAE,CAAQ;IAAI,CAAC;IAE/E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAe,EAAE,EAAU,EAAE,UAA+B,EAAE,MAAM,EAAE,KAAK,EAAE;QAC7F,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;aACzC;iBACI;gBACH,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACvC;SACF;QACD,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAmB,EAAE,QAAgB;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,IAAY;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAW;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAiB,KAAK;QAC9C,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAEA,WAAW;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI;YACF,uCAAuC;YACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC;YAEf,iDAAiD;YACjD,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC7C;QACD,MAAM;YACJ,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class FileAccessDispatcher {
|
|
2
|
+
private _locks;
|
|
3
|
+
private _broadcastChannel;
|
|
4
|
+
private _tabId;
|
|
5
|
+
constructor();
|
|
6
|
+
lockFile(path: string, copyFunc: (targetPath: string, sourcePath: string) => Promise<void>, removeFunc: (path: string) => Promise<void>): Promise<string>;
|
|
7
|
+
unlockFile(path: string): Promise<void>;
|
|
8
|
+
isLockedByThisTab(path: string): boolean;
|
|
9
|
+
isLocked(path: string): Promise<boolean>;
|
|
10
|
+
dispose(): Promise<void>;
|
|
11
|
+
private requestCopy;
|
|
12
|
+
}
|