@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
@@ -0,0 +1,367 @@
1
+ import { OPFS_CACHE_CHUNK_SIZE, OPFS_BIM_CACHE_FOLDER, PartialFileSignature } from "../../utils/Consts.js";
2
+ import { BinaryConverter, isOPFSEnabled } from "../../utils/ViewerTools.js";
3
+ import { FetchStatus, FileLoader } from "./FileLoader.js";
4
+ import { File } from "./File.js";
5
+ export class PartialFile {
6
+ fs;
7
+ id;
8
+ _metaFile;
9
+ _url;
10
+ _fileSize;
11
+ _chunkSize;
12
+ _chunkCount;
13
+ _loadedChunks;
14
+ _openSynchAccessCounter;
15
+ _isInSynchMode;
16
+ _cacheRoot;
17
+ _cachedDirs;
18
+ _metadataUpdater;
19
+ constructor(fs, file, url, fileSize) {
20
+ this.fs = fs;
21
+ this._metaFile = file;
22
+ this.id = file.id;
23
+ this._cachedDirs = new Map();
24
+ this._url = url ?? "";
25
+ this._fileSize = fileSize ?? 0;
26
+ this._chunkSize = OPFS_CACHE_CHUNK_SIZE;
27
+ this._chunkCount = Math.ceil(this._fileSize / this._chunkSize);
28
+ this._loadedChunks = 0;
29
+ this._openSynchAccessCounter = 0;
30
+ this._isInSynchMode = false;
31
+ }
32
+ static async fromUrl(fs, id, url, fileSize) {
33
+ const file = await File.open(fs, id, { create: true });
34
+ const partialFile = new PartialFile(fs, file, url, fileSize);
35
+ await partialFile.storeMetadata();
36
+ await partialFile.initCache();
37
+ return partialFile;
38
+ }
39
+ static async fromFile(fs, id) {
40
+ const file = await File.open(fs, id);
41
+ const partialFile = new PartialFile(fs, file);
42
+ await partialFile.readMetadata();
43
+ await partialFile.initCache();
44
+ return partialFile;
45
+ }
46
+ async write(buffer, position) {
47
+ if (!this._cacheRoot)
48
+ return;
49
+ const chunksToWrite = this.calcRwChunkInfo(position, buffer.byteLength);
50
+ const writeResultPromise = new Array(chunksToWrite.length);
51
+ const array = new Uint8Array(buffer);
52
+ let offset = 0;
53
+ for (let i = 0; i < chunksToWrite.length; i++) {
54
+ writeResultPromise[i] = this.writeChunk(chunksToWrite[i], array, offset);
55
+ offset += chunksToWrite[i].rwByteLength;
56
+ }
57
+ await Promise.all(writeResultPromise);
58
+ }
59
+ async read(position, size) {
60
+ if (!this._cacheRoot) {
61
+ const response = await FileLoader.fetchRange(this._url, { startByte: position, endByte: position + size - 1 });
62
+ if (response.status != FetchStatus.PartialContent)
63
+ throw new Error("Failed to fetch remote file.");
64
+ return new Uint8Array(response.data);
65
+ }
66
+ const chunksToRead = this.calcRwChunkInfo(position, size);
67
+ const readResultPromise = new Array(chunksToRead.length);
68
+ const resultBuffer = new Uint8Array(size);
69
+ let offset = 0;
70
+ for (let i = 0; i < chunksToRead.length; i++) {
71
+ readResultPromise[i] = this.readChunk(chunksToRead[i], resultBuffer, offset);
72
+ offset += chunksToRead[i].rwByteLength;
73
+ }
74
+ await Promise.all(readResultPromise);
75
+ return resultBuffer;
76
+ }
77
+ async copyTo(file) {
78
+ return this._metaFile.copyTo(file);
79
+ }
80
+ async openSyncFileAccess() {
81
+ this._openSynchAccessCounter++;
82
+ this._isInSynchMode = this._openSynchAccessCounter > 0;
83
+ return this._metaFile.openSyncFileAccess();
84
+ }
85
+ async closeSyncFileAccess() {
86
+ this._openSynchAccessCounter--;
87
+ this._isInSynchMode = this._openSynchAccessCounter > 0;
88
+ if (!this._isInSynchMode) {
89
+ this._openSynchAccessCounter = 0;
90
+ for (const [, cacheDir] of this._cachedDirs) {
91
+ for (const [, chunk] of cacheDir.cachedChunks) {
92
+ chunk.lock.then(() => {
93
+ chunk.synchHandle?.close();
94
+ chunk.synchHandle = null;
95
+ });
96
+ }
97
+ }
98
+ }
99
+ return this._metaFile.closeSyncFileAccess();
100
+ }
101
+ getFileInfo() {
102
+ return {
103
+ path: this.id,
104
+ size: this._fileSize,
105
+ sizeOnDisk: this._chunkSize * this._loadedChunks,
106
+ lastModified: this._metaFile.getFileInfo().lastModified
107
+ };
108
+ }
109
+ async isValid() {
110
+ if (!(await this._metaFile.isValid()))
111
+ return false;
112
+ if (this._chunkSize != OPFS_CACHE_CHUNK_SIZE)
113
+ return false;
114
+ // Check if url is stil valid
115
+ const response = await FileLoader.fetchRange(this._url, { startByte: 0, endByte: 1 });
116
+ return response.status == FetchStatus.PartialContent && response.length == this._fileSize;
117
+ }
118
+ async remove() {
119
+ this.clearCache();
120
+ await this._metaFile.remove();
121
+ if (isOPFSEnabled) {
122
+ try {
123
+ const rootDirectory = await navigator.storage.getDirectory();
124
+ const cacheDirectory = await rootDirectory.getDirectoryHandle(OPFS_BIM_CACHE_FOLDER);
125
+ await cacheDirectory.removeEntry(this.id, { recursive: true });
126
+ }
127
+ catch {
128
+ /**/
129
+ }
130
+ }
131
+ }
132
+ async close() {
133
+ this.clearCache();
134
+ await this._metaFile.close();
135
+ }
136
+ calcRwChunkInfo(offset, size) {
137
+ const fromByte = offset;
138
+ const toByte = offset + size - 1;
139
+ const fromIndex = Math.floor(fromByte / this._chunkSize);
140
+ const fromOffset = fromByte % this._chunkSize;
141
+ const toIndex = Math.floor(toByte / this._chunkSize);
142
+ const toOffset = toByte % this._chunkSize;
143
+ const lastChunkSize = this._fileSize % this._chunkSize;
144
+ let chunkOffset = fromIndex * this._chunkSize;
145
+ const result = Array(toIndex - fromIndex + 1);
146
+ for (let i = 0, index = fromIndex; i < result.length; i++, index++) {
147
+ const startByte = index == fromIndex ? fromOffset : 0;
148
+ const endByte = index == toIndex ? toOffset : this._chunkSize - 1;
149
+ const chunkSize = index == this._chunkCount - 1 ? lastChunkSize : this._chunkSize;
150
+ const rwSize = endByte - startByte + 1;
151
+ result[i] = {
152
+ index,
153
+ size: chunkSize,
154
+ chunkOffset: chunkOffset,
155
+ rwOffsetLocal: startByte,
156
+ rwByteLength: rwSize,
157
+ };
158
+ chunkOffset += chunkSize;
159
+ }
160
+ return result;
161
+ }
162
+ async storeMetadata() {
163
+ const metadataSize = 20;
164
+ const encoder = new TextEncoder();
165
+ const urlBytes = encoder.encode(this._url);
166
+ const urlLength = urlBytes.length;
167
+ const metaFileSize = PartialFileSignature.byteLength + metadataSize + urlLength;
168
+ const buffer = new ArrayBuffer(metaFileSize);
169
+ const bytes = new Uint8Array(buffer);
170
+ const byteReprArray = new Uint8Array(4);
171
+ const uintReprArray = new Uint32Array(byteReprArray.buffer);
172
+ let offset = 0;
173
+ bytes.set(PartialFileSignature, offset);
174
+ offset += PartialFileSignature.byteLength;
175
+ uintReprArray[0] = urlLength;
176
+ bytes.set(byteReprArray, offset);
177
+ offset += 4;
178
+ uintReprArray[0] = this._fileSize;
179
+ bytes.set(byteReprArray, offset);
180
+ offset += 4;
181
+ uintReprArray[0] = this._chunkSize;
182
+ bytes.set(byteReprArray, offset);
183
+ offset += 4;
184
+ uintReprArray[0] = this._chunkCount;
185
+ bytes.set(byteReprArray, offset);
186
+ offset += 4;
187
+ uintReprArray[0] = this._loadedChunks;
188
+ bytes.set(byteReprArray, offset);
189
+ offset += 4;
190
+ bytes.set(urlBytes, offset);
191
+ await this._metaFile.write(buffer, 0);
192
+ }
193
+ async readMetadata() {
194
+ const metadataSize = 20;
195
+ const metadataLength = PartialFileSignature.byteLength + metadataSize;
196
+ const bufferView = await this._metaFile.read(0, metadataLength);
197
+ const byteView = new Uint8Array(bufferView.buffer);
198
+ let offset = PartialFileSignature.byteLength;
199
+ const urlLength = BinaryConverter.toU32(byteView, offset);
200
+ offset += 4;
201
+ this._fileSize = BinaryConverter.toU32(byteView, offset);
202
+ offset += 4;
203
+ this._chunkSize = BinaryConverter.toU32(byteView, offset);
204
+ offset += 4;
205
+ this._chunkCount = BinaryConverter.toU32(byteView, offset);
206
+ offset += 4;
207
+ this._loadedChunks = BinaryConverter.toU32(byteView, offset);
208
+ offset += 4;
209
+ const urlBytes = await this._metaFile.read(offset, urlLength);
210
+ const decoder = new TextDecoder();
211
+ this._url = decoder.decode(urlBytes);
212
+ }
213
+ async initCache() {
214
+ if (isOPFSEnabled) {
215
+ const rootDirectory = await navigator.storage.getDirectory();
216
+ const bimCacheDir = await rootDirectory.getDirectoryHandle(OPFS_BIM_CACHE_FOLDER, { create: true });
217
+ this._cacheRoot = await bimCacheDir.getDirectoryHandle(this.id, { create: true });
218
+ const numOfCachedDirs = (this._chunkCount >> 10) + 1;
219
+ for (let i = 0; i < numOfCachedDirs; i++) {
220
+ const dir = await this._cacheRoot.getDirectoryHandle(i.toString(), { create: true });
221
+ this._cachedDirs.set(i, { root: dir, cachedChunks: new Map() });
222
+ }
223
+ }
224
+ }
225
+ clearCache() {
226
+ for (const [, cacheDir] of this._cachedDirs) {
227
+ for (const [, chunk] of cacheDir.cachedChunks) {
228
+ chunk.lock.then(() => {
229
+ chunk.synchHandle?.close();
230
+ chunk.synchHandle = null;
231
+ });
232
+ }
233
+ cacheDir.cachedChunks.clear();
234
+ }
235
+ }
236
+ getCached(index) {
237
+ const path = index.toString();
238
+ const dirId = index >> 10;
239
+ const cacheDir = this._cachedDirs.get(dirId);
240
+ if (cacheDir.cachedChunks.has(path))
241
+ return cacheDir.cachedChunks.get(path);
242
+ const chunkSize = this._chunkSize;
243
+ const chunk = { isLocked: true, isValid: false, handle: null, synchHandle: null, lock: Promise.resolve() };
244
+ const getChunk = async () => {
245
+ try {
246
+ // пытаемся получить файл из OPFS
247
+ chunk.handle = await cacheDir.root.getFileHandle(path, { create: true });
248
+ chunk.isValid = (await chunk.handle.getFile()).size == chunkSize;
249
+ chunk.isLocked = false;
250
+ }
251
+ catch {
252
+ chunk.isValid = false;
253
+ chunk.isLocked = false;
254
+ }
255
+ };
256
+ cacheDir.cachedChunks.set(path, chunk);
257
+ chunk.lock = getChunk();
258
+ return chunk;
259
+ }
260
+ async readChunk(chunk, array, offset) {
261
+ const cachedChunk = this.getCached(chunk.index);
262
+ // ждем пока чанк освободится
263
+ while (cachedChunk.isLocked)
264
+ await cachedChunk.lock;
265
+ // если чанк содержит данные, читаем
266
+ if (cachedChunk.isValid) {
267
+ const buffer = new Uint8Array(array.buffer, offset, chunk.rwByteLength);
268
+ return this.readCached(cachedChunk, buffer, chunk.rwOffsetLocal);
269
+ }
270
+ else {
271
+ // отправляем запрос на скачивание чанка
272
+ const readRemote = async () => {
273
+ const response = await FileLoader.fetchRange(this._url, { startByte: chunk.chunkOffset, endByte: chunk.chunkOffset + chunk.size - 1 });
274
+ if (response.status != FetchStatus.PartialContent)
275
+ throw new Error("Failed to fetch chunk");
276
+ return response.data;
277
+ };
278
+ const readRemotePromise = readRemote();
279
+ // выбираем нужные данные из чанка
280
+ const resultPromise = readRemotePromise.then(buffer => {
281
+ const source = new Uint8Array(buffer, chunk.rwOffsetLocal, chunk.rwByteLength);
282
+ const target = new Uint8Array(array.buffer, offset, chunk.rwByteLength);
283
+ target.set(source);
284
+ });
285
+ // сохраняем чанк в OPFS
286
+ cachedChunk.isLocked = true;
287
+ cachedChunk.lock = readRemotePromise
288
+ .then(buffer => this.writeCached(cachedChunk, new Uint8Array(buffer), 0))
289
+ .then(() => { if (cachedChunk.isValid) {
290
+ this._loadedChunks++;
291
+ this.updateMetadata();
292
+ } });
293
+ return resultPromise;
294
+ }
295
+ }
296
+ async writeChunk(chunk, array, offset) {
297
+ const cachedChunk = this.getCached(chunk.index);
298
+ // ждем пока чанк освободится
299
+ while (cachedChunk.isLocked)
300
+ await cachedChunk.lock;
301
+ const source = new Uint8Array(array.buffer, offset, chunk.rwByteLength);
302
+ const target = new Uint8Array(chunk.rwByteLength);
303
+ target.set(source);
304
+ return this.writeCached(cachedChunk, target, chunk.rwOffsetLocal);
305
+ }
306
+ async readCached(file, buffer, position) {
307
+ // пытаемся выполнить синхронное чтение
308
+ if (file.synchHandle) {
309
+ file.synchHandle.read(buffer, { at: position });
310
+ return;
311
+ }
312
+ // выполняем операцию асинхронно
313
+ const promise = async () => {
314
+ if (this._isInSynchMode && !file.synchHandle) {
315
+ file.synchHandle = await file.handle.createSyncAccessHandle();
316
+ file.synchHandle.read(buffer, { at: position });
317
+ }
318
+ else {
319
+ const blob = await file.handle.getFile();
320
+ const result = await blob.slice(position, position + buffer.byteLength).arrayBuffer();
321
+ buffer.set(new Uint8Array(result));
322
+ }
323
+ };
324
+ file.isLocked = true;
325
+ return file.lock = promise()
326
+ .catch(() => { file.isValid = false; })
327
+ .finally(() => { file.isLocked = false; });
328
+ }
329
+ async writeCached(file, buffer, position) {
330
+ // пытаемся выполнить синхронную запись в файл
331
+ if (file.synchHandle) {
332
+ file.synchHandle.write(buffer, { at: position });
333
+ file.isValid = file.synchHandle.getSize() == this._chunkSize;
334
+ }
335
+ // выполняем операцию асинхронно
336
+ const promise = async () => {
337
+ if (this._isInSynchMode && !file.synchHandle) {
338
+ file.synchHandle = await file.handle.createSyncAccessHandle();
339
+ file.synchHandle.write(buffer, { at: position });
340
+ file.isValid = file.synchHandle.getSize() == this._chunkSize;
341
+ }
342
+ else {
343
+ /* eslint-disable-next-line -- так как собираем и под node и под web, а createWritable определен только для web? (lib.dom) */
344
+ const stream = await file.handle.createWritable();
345
+ await stream.write({ type: "write", data: buffer, position: position, });
346
+ await stream.close();
347
+ file.isValid = (await file.handle.getFile()).size == this._chunkSize;
348
+ }
349
+ };
350
+ file.isLocked = true;
351
+ return file.lock = promise()
352
+ .catch(() => { file.isValid = false; })
353
+ .finally(() => { file.isLocked = false; });
354
+ }
355
+ updateMetadata() {
356
+ if (this._metadataUpdater)
357
+ return;
358
+ this._metadataUpdater = new Promise(resolve => {
359
+ setTimeout(async () => {
360
+ this.storeMetadata();
361
+ this._metadataUpdater = undefined;
362
+ resolve();
363
+ }, 1000);
364
+ }).catch();
365
+ }
366
+ }
367
+ //# sourceMappingURL=PartialFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PartialFile.js","sourceRoot":"","sources":["../../../../src/wasm/file-system/PartialFile.ts"],"names":[],"mappings":"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"}
@@ -292,6 +292,22 @@ export interface FileSystemType {
292
292
  type: any;
293
293
  }
294
294
 
295
+ export interface FStat {
296
+ dev: number,
297
+ ino: number,
298
+ mode: number,
299
+ nlink: number,
300
+ uid: number,
301
+ gid: number,
302
+ rdev: number,
303
+ size: number,
304
+ atime: Date,
305
+ ctime: Date,
306
+ mtime: Date,
307
+ blksize: number,
308
+ blocks: number
309
+ }
310
+
295
311
  export declare const MEMFS: Emscripten.FileSystemType;
296
312
  export declare const NODEFS: Emscripten.FileSystemType;
297
313
  export declare const IDBFS: Emscripten.FileSystemType;
@@ -306,7 +322,7 @@ export interface FS {
306
322
  unlink(path: string): void;
307
323
 
308
324
  stat(path: string, dontFollow?: boolean): any;
309
- lstat(path: string): any;
325
+ lstat(path: string): FStat;
310
326
  open(path: string, flags: string | number, mode?: number, fd_start?: number, fd_end?: number): FSStream;
311
327
  close(stream: FSStream): void;
312
328
  read(stream: FSStream, buffer: ArrayBufferView, offset: number, length: number, position?: number): number;