@filen/sync 0.1.1 → 0.1.4

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 (48) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +1 -1
  3. package/SECURITY.md +17 -17
  4. package/dist/constants.d.ts +7 -0
  5. package/dist/constants.js +51 -1
  6. package/dist/constants.js.map +1 -1
  7. package/dist/ignorer.d.ts +14 -0
  8. package/dist/ignorer.js +69 -0
  9. package/dist/ignorer.js.map +1 -0
  10. package/dist/index.d.ts +31 -17
  11. package/dist/index.js +125 -24
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/deltas.d.ts +9 -31
  14. package/dist/lib/deltas.js +194 -99
  15. package/dist/lib/deltas.js.map +1 -1
  16. package/dist/lib/filesystems/local.d.ts +32 -43
  17. package/dist/lib/filesystems/local.js +383 -106
  18. package/dist/lib/filesystems/local.js.map +1 -1
  19. package/dist/lib/filesystems/remote.d.ts +21 -7
  20. package/dist/lib/filesystems/remote.js +531 -67
  21. package/dist/lib/filesystems/remote.js.map +1 -1
  22. package/dist/lib/ipc.d.ts +9 -0
  23. package/dist/lib/ipc.js +60 -0
  24. package/dist/lib/ipc.js.map +1 -0
  25. package/dist/lib/lock.d.ts +13 -0
  26. package/dist/lib/lock.js +73 -0
  27. package/dist/lib/lock.js.map +1 -0
  28. package/dist/lib/logger.d.ts +14 -0
  29. package/dist/lib/logger.js +93 -0
  30. package/dist/lib/logger.js.map +1 -0
  31. package/dist/lib/state.d.ts +4 -15
  32. package/dist/lib/state.js +106 -87
  33. package/dist/lib/state.js.map +1 -1
  34. package/dist/lib/sync.d.ts +30 -10
  35. package/dist/lib/sync.js +363 -36
  36. package/dist/lib/sync.js.map +1 -1
  37. package/dist/lib/tasks.d.ts +27 -40
  38. package/dist/lib/tasks.js +397 -48
  39. package/dist/lib/tasks.js.map +1 -1
  40. package/dist/types.d.ts +340 -0
  41. package/dist/utils.d.ts +42 -0
  42. package/dist/utils.js +164 -1
  43. package/dist/utils.js.map +1 -1
  44. package/index.d.ts +6 -295
  45. package/jest.config.js +5 -0
  46. package/package.json +62 -58
  47. package/tests/utils.test.ts +33 -0
  48. package/tsconfig.json +24 -24
@@ -13,6 +13,9 @@ const constants_1 = require("../../constants");
13
13
  const crypto_1 = __importDefault(require("crypto"));
14
14
  const stream_1 = require("stream");
15
15
  const util_1 = require("util");
16
+ const sdk_1 = require("@filen/sdk");
17
+ const ipc_1 = require("../ipc");
18
+ const semaphore_1 = require("../../semaphore");
16
19
  const pipelineAsync = (0, util_1.promisify)(stream_1.pipeline);
17
20
  /**
18
21
  * LocalFileSystem
@@ -25,14 +28,12 @@ const pipelineAsync = (0, util_1.promisify)(stream_1.pipeline);
25
28
  class LocalFileSystem {
26
29
  /**
27
30
  * Creates an instance of LocalFileSystem.
28
- * @date 3/2/2024 - 12:38:20 PM
29
31
  *
30
32
  * @constructor
31
33
  * @public
32
- * @param {{ sync: Sync }} param0
33
- * @param {Sync} param0.sync
34
+ * @param {Sync} sync
34
35
  */
35
- constructor({ sync }) {
36
+ constructor(sync) {
36
37
  this.lastDirectoryChangeTimestamp = Date.now() - constants_1.SYNC_INTERVAL * 2;
37
38
  this.getDirectoryTreeCache = {
38
39
  timestamp: 0,
@@ -41,64 +42,132 @@ class LocalFileSystem {
41
42
  };
42
43
  this.watcherRunning = false;
43
44
  this.watcherInstance = null;
45
+ this.itemsMutex = new semaphore_1.Semaphore(1);
46
+ this.mutex = new semaphore_1.Semaphore(1);
47
+ this.mkdirMutex = new semaphore_1.Semaphore(1);
44
48
  this.sync = sync;
45
49
  }
46
- /**
47
- * Get the local directory tree.
48
- * @date 3/2/2024 - 12:38:13 PM
49
- *
50
- * @public
51
- * @async
52
- * @returns {Promise<LocalTree>}
53
- */
54
50
  async getDirectoryTree() {
55
51
  if (this.lastDirectoryChangeTimestamp > 0 &&
56
52
  this.getDirectoryTreeCache.timestamp > 0 &&
57
53
  this.lastDirectoryChangeTimestamp < this.getDirectoryTreeCache.timestamp) {
58
54
  return {
59
- tree: this.getDirectoryTreeCache.tree,
60
- inodes: this.getDirectoryTreeCache.inodes
55
+ result: {
56
+ tree: this.getDirectoryTreeCache.tree,
57
+ inodes: this.getDirectoryTreeCache.inodes
58
+ },
59
+ errors: [],
60
+ ignored: [],
61
+ changed: false
61
62
  };
62
63
  }
64
+ const isWindows = process_1.default.platform === "win32";
63
65
  const tree = {};
64
66
  const inodes = {};
67
+ const errors = [];
68
+ const ignored = [];
65
69
  const dir = await fs_extra_1.default.readdir(this.sync.syncPair.localPath, {
66
70
  recursive: true,
67
71
  encoding: "utf-8"
68
72
  });
69
- const promises = [];
70
- for (const entry of dir) {
71
- promises.push(new Promise((resolve, reject) => {
72
- if (entry.startsWith(".filen.trash.local")) {
73
- resolve();
73
+ await (0, utils_1.promiseAllSettledChunked)(dir.map(async (entry) => {
74
+ if (entry.startsWith(constants_1.LOCAL_TRASH_NAME)) {
75
+ return;
76
+ }
77
+ const itemPath = path_1.default.join(this.sync.syncPair.localPath, entry);
78
+ if (this.sync.localIgnorer.ignores(entry)) {
79
+ ignored.push({
80
+ localPath: itemPath,
81
+ relativePath: entry,
82
+ reason: "localIgnore"
83
+ });
84
+ return;
85
+ }
86
+ const entryPath = `/${isWindows ? entry.replace(/\\/g, "/") : entry}`;
87
+ if ((0, utils_1.isDirectoryPathIgnoredByDefault)(entryPath) ||
88
+ (0, utils_1.isRelativePathIgnoredByDefault)(entryPath) ||
89
+ (0, utils_1.isSystemPathIgnoredByDefault)(itemPath)) {
90
+ ignored.push({
91
+ localPath: itemPath,
92
+ relativePath: entry,
93
+ reason: "defaultIgnore"
94
+ });
95
+ return;
96
+ }
97
+ const itemName = path_1.default.posix.basename(entryPath);
98
+ if (itemName.startsWith(constants_1.LOCAL_TRASH_NAME)) {
99
+ return;
100
+ }
101
+ if (this.sync.excludeDotFiles && (0, utils_1.pathIncludesDotFile)(entryPath)) {
102
+ ignored.push({
103
+ localPath: itemPath,
104
+ relativePath: entry,
105
+ reason: "dotFile"
106
+ });
107
+ return;
108
+ }
109
+ try {
110
+ const stats = await fs_extra_1.default.lstat(itemPath);
111
+ if (stats.isBlockDevice() || stats.isCharacterDevice() || stats.isFIFO() || stats.isSocket()) {
112
+ ignored.push({
113
+ localPath: itemPath,
114
+ relativePath: entry,
115
+ reason: "invalidType"
116
+ });
74
117
  return;
75
118
  }
76
- const itemPath = path_1.default.join(this.sync.syncPair.localPath, entry);
77
- const entryPath = `/${process_1.default.platform === "win32" ? entry.replace(/\\/g, "/") : entry}`;
78
- fs_extra_1.default.stat(itemPath)
79
- .then(stats => {
80
- const item = {
81
- lastModified: parseInt(stats.mtimeMs), // Sometimes comes as a float, but we need an int
82
- type: stats.isDirectory() ? "directory" : "file",
83
- path: entryPath,
84
- creation: parseInt(stats.birthtimeMs), // Sometimes comes as a float, but we need an int
85
- size: stats.size,
86
- inode: stats.ino
87
- };
88
- tree[entryPath] = item;
89
- inodes[stats.ino] = item;
90
- resolve();
91
- })
92
- .catch(reject);
93
- }));
94
- }
95
- await (0, utils_1.promiseAllChunked)(promises);
119
+ if (stats.isSymbolicLink()) {
120
+ ignored.push({
121
+ localPath: itemPath,
122
+ relativePath: entry,
123
+ reason: "symlink"
124
+ });
125
+ return;
126
+ }
127
+ if (stats.isFile() && stats.size <= 0) {
128
+ ignored.push({
129
+ localPath: itemPath,
130
+ relativePath: entry,
131
+ reason: "empty"
132
+ });
133
+ return;
134
+ }
135
+ const item = {
136
+ lastModified: parseInt(stats.mtimeMs), // Sometimes comes as a float, but we need an int
137
+ type: stats.isDirectory() ? "directory" : "file",
138
+ path: entryPath,
139
+ creation: parseInt(stats.birthtimeMs), // Sometimes comes as a float, but we need an int
140
+ size: parseInt(stats.size), // Sometimes comes as a float, but we need an int
141
+ inode: parseInt(stats.ino) // Sometimes comes as a float, but we need an int
142
+ };
143
+ tree[entryPath] = item;
144
+ inodes[item.inode] = item;
145
+ }
146
+ catch (e) {
147
+ this.sync.worker.logger.log("error", e, "filesystems.local.getDirectoryTree");
148
+ if (e instanceof Error) {
149
+ errors.push({
150
+ localPath: itemPath,
151
+ relativePath: entryPath,
152
+ error: e
153
+ });
154
+ }
155
+ }
156
+ }));
96
157
  this.getDirectoryTreeCache = {
97
158
  timestamp: Date.now(),
98
159
  tree,
99
160
  inodes
100
161
  };
101
- return { tree, inodes };
162
+ return {
163
+ result: {
164
+ tree: this.getDirectoryTreeCache.tree,
165
+ inodes: this.getDirectoryTreeCache.inodes
166
+ },
167
+ errors,
168
+ ignored,
169
+ changed: true
170
+ };
102
171
  }
103
172
  /**
104
173
  * Start the local sync directory watcher.
@@ -113,7 +182,7 @@ class LocalFileSystem {
113
182
  return;
114
183
  }
115
184
  this.watcherInstance = await watcher_1.default.subscribe(this.sync.syncPair.localPath, (err, events) => {
116
- if (!err && events) {
185
+ if (!err && events && events.length > 0) {
117
186
  this.lastDirectoryChangeTimestamp = Date.now();
118
187
  }
119
188
  });
@@ -145,13 +214,14 @@ class LocalFileSystem {
145
214
  * @returns {Promise<void>}
146
215
  */
147
216
  async waitForLocalDirectoryChanges() {
217
+ const waitTimeout = constants_1.SYNC_INTERVAL * 2;
148
218
  await new Promise(resolve => {
149
- if (Date.now() > this.lastDirectoryChangeTimestamp + constants_1.SYNC_INTERVAL) {
219
+ if (Date.now() > this.lastDirectoryChangeTimestamp + waitTimeout) {
150
220
  resolve();
151
221
  return;
152
222
  }
153
223
  const wait = setInterval(() => {
154
- if (Date.now() > this.lastDirectoryChangeTimestamp + constants_1.SYNC_INTERVAL) {
224
+ if (Date.now() > this.lastDirectoryChangeTimestamp + waitTimeout) {
155
225
  clearInterval(wait);
156
226
  resolve();
157
227
  }
@@ -160,13 +230,15 @@ class LocalFileSystem {
160
230
  }
161
231
  /**
162
232
  * Creates a hash of a file using streams.
163
- * @date 3/2/2024 - 9:29:48 AM
164
233
  *
165
234
  * @public
166
235
  * @async
167
- * @param {{ relativePath: string; algorithm: "sha512" }} param0
236
+ * @param {{
237
+ * relativePath: string
238
+ * algorithm: "sha512" | "md5" | "sha256"
239
+ * }} param0
168
240
  * @param {string} param0.relativePath
169
- * @param {"sha512"} param0.algorithm
241
+ * @param {("sha512" | "md5" | "sha256")} param0.algorithm
170
242
  * @returns {Promise<string>}
171
243
  */
172
244
  async createFileHash({ relativePath, algorithm }) {
@@ -187,63 +259,131 @@ class LocalFileSystem {
187
259
  * @returns {Promise<fs.Stats>}
188
260
  */
189
261
  async mkdir({ relativePath }) {
190
- const localPath = path_1.default.join(this.sync.syncPair.localPath, relativePath);
191
- await fs_extra_1.default.ensureDir(localPath);
192
- return await fs_extra_1.default.stat(localPath);
262
+ await this.mkdirMutex.acquire();
263
+ try {
264
+ const localPath = path_1.default.join(this.sync.syncPair.localPath, relativePath);
265
+ await fs_extra_1.default.ensureDir(localPath);
266
+ const stats = await fs_extra_1.default.stat(localPath);
267
+ await this.itemsMutex.acquire();
268
+ const item = {
269
+ type: "directory",
270
+ inode: parseInt(stats.ino), // Sometimes comes as a float, but we need an int
271
+ lastModified: parseInt(stats.mtimeMs), // Sometimes comes as a float, but we need an int
272
+ creation: parseInt(stats.birthtimeMs), // Sometimes comes as a float, but we need an int
273
+ size: 0,
274
+ path: relativePath
275
+ };
276
+ this.getDirectoryTreeCache.tree[relativePath] = item;
277
+ this.getDirectoryTreeCache.inodes[item.inode] = item;
278
+ this.itemsMutex.release();
279
+ return stats;
280
+ }
281
+ finally {
282
+ this.mkdirMutex.release();
283
+ }
193
284
  }
194
- /**
195
- * Delete a file/directory inside the local sync path.
196
- * @date 3/3/2024 - 10:05:55 PM
197
- *
198
- * @public
199
- * @async
200
- * @param {{ relativePath: string; permanent?: boolean }} param0
201
- * @param {string} param0.relativePath
202
- * @param {boolean} [param0.permanent=false]
203
- * @returns {Promise<void>}
204
- */
205
285
  async unlink({ relativePath, permanent = false }) {
206
- const localPath = path_1.default.join(this.sync.syncPair.localPath, relativePath);
207
- if (!permanent) {
208
- const localTrashPath = path_1.default.join(this.sync.syncPair.localPath, ".filen.trash.local");
209
- await fs_extra_1.default.ensureDir(localTrashPath);
210
- await fs_extra_1.default.move(localPath, path_1.default.join(localTrashPath, path_1.default.posix.basename(relativePath)), {
211
- overwrite: true
212
- });
213
- return;
286
+ await this.mutex.acquire();
287
+ try {
288
+ const item = this.getDirectoryTreeCache.tree[relativePath];
289
+ if (!item) {
290
+ return;
291
+ }
292
+ const localPath = path_1.default.join(this.sync.syncPair.localPath, relativePath);
293
+ if (!permanent) {
294
+ const localTrashPath = path_1.default.join(this.sync.syncPair.localPath, constants_1.LOCAL_TRASH_NAME);
295
+ await fs_extra_1.default.ensureDir(localTrashPath);
296
+ await fs_extra_1.default.move(localPath, path_1.default.join(localTrashPath, path_1.default.posix.basename(relativePath)), {
297
+ overwrite: true
298
+ });
299
+ }
300
+ else {
301
+ await fs_extra_1.default.rm(localPath, {
302
+ force: true,
303
+ maxRetries: 60 * 10,
304
+ recursive: true,
305
+ retryDelay: 100
306
+ });
307
+ }
308
+ await this.itemsMutex.acquire();
309
+ delete this.getDirectoryTreeCache.tree[relativePath];
310
+ delete this.getDirectoryTreeCache.inodes[item.inode];
311
+ delete this.sync.localFileHashes[relativePath];
312
+ for (const entry in this.getDirectoryTreeCache.tree) {
313
+ if (entry.startsWith(relativePath + "/") || entry === relativePath) {
314
+ const entryItem = this.getDirectoryTreeCache.tree[entry];
315
+ if (entryItem) {
316
+ delete this.getDirectoryTreeCache.inodes[entryItem.inode];
317
+ }
318
+ delete this.sync.localFileHashes[entry];
319
+ delete this.getDirectoryTreeCache.tree[entry];
320
+ }
321
+ }
322
+ this.itemsMutex.release();
323
+ }
324
+ finally {
325
+ this.mutex.release();
214
326
  }
215
- await fs_extra_1.default.rm(localPath, {
216
- force: true,
217
- maxRetries: 60 * 10,
218
- recursive: true,
219
- retryDelay: 100
220
- });
221
327
  }
222
- /**
223
- * Rename a file/directory inside the local sync path. Recursively creates intermediate directories if needed.
224
- * @date 3/2/2024 - 12:41:15 PM
225
- *
226
- * @public
227
- * @async
228
- * @param {{ fromRelativePath: string; toRelativePath: string }} param0
229
- * @param {string} param0.fromRelativePath
230
- * @param {string} param0.toRelativePath
231
- * @returns {Promise<fs.Stats>}
232
- */
233
328
  async rename({ fromRelativePath, toRelativePath }) {
234
- const fromLocalPath = path_1.default.join(this.sync.syncPair.localPath, fromRelativePath);
235
- const toLocalPath = path_1.default.join(this.sync.syncPair.localPath, toRelativePath);
236
- const fromLocalPathParentPath = path_1.default.dirname(fromLocalPath);
237
- const toLocalPathParentPath = path_1.default.dirname(toLocalPath);
238
- await fs_extra_1.default.ensureDir(toLocalPathParentPath);
239
- if (fromLocalPathParentPath === toLocalPathParentPath) {
240
- await fs_extra_1.default.rename(fromLocalPath, toLocalPath);
241
- return await fs_extra_1.default.stat(toLocalPath);
329
+ await this.mutex.acquire();
330
+ try {
331
+ if (fromRelativePath === "/" || toRelativePath === "/") {
332
+ throw new Error("Invalid paths.");
333
+ }
334
+ const item = this.getDirectoryTreeCache.tree[fromRelativePath];
335
+ if (!item) {
336
+ throw new Error(`Could not rename ${fromRelativePath} to ${toRelativePath}: Path not found.`);
337
+ }
338
+ const fromLocalPath = path_1.default.join(this.sync.syncPair.localPath, fromRelativePath);
339
+ const toLocalPath = path_1.default.join(this.sync.syncPair.localPath, toRelativePath);
340
+ const fromLocalPathParentPath = path_1.default.dirname(fromLocalPath);
341
+ const toLocalPathParentPath = path_1.default.dirname(toLocalPath);
342
+ if (!(await fs_extra_1.default.exists(toLocalPathParentPath))) {
343
+ throw new Error(`Could not rename ${fromLocalPath} to ${toLocalPath}: Parent directory missing.`);
344
+ }
345
+ if (fromLocalPathParentPath === toLocalPathParentPath) {
346
+ await fs_extra_1.default.rename(fromLocalPath, toLocalPath);
347
+ }
348
+ else {
349
+ if (toRelativePath.startsWith(fromRelativePath)) {
350
+ throw new Error("Invalid paths.");
351
+ }
352
+ await fs_extra_1.default.move(fromLocalPath, toLocalPath, {
353
+ overwrite: true
354
+ });
355
+ }
356
+ const stats = await fs_extra_1.default.stat(toLocalPath);
357
+ await this.itemsMutex.acquire();
358
+ this.getDirectoryTreeCache.tree[toRelativePath] = Object.assign(Object.assign({}, item), { path: toRelativePath });
359
+ this.getDirectoryTreeCache.inodes[item.inode] = Object.assign(Object.assign({}, item), { path: toRelativePath });
360
+ delete this.getDirectoryTreeCache.tree[fromRelativePath];
361
+ delete this.sync.localFileHashes[fromRelativePath];
362
+ for (const oldPath in this.getDirectoryTreeCache.tree) {
363
+ if (oldPath.startsWith(fromRelativePath + "/") && oldPath !== fromRelativePath) {
364
+ const newPath = (0, utils_1.replacePathStartWithFromAndTo)(oldPath, fromRelativePath, toRelativePath);
365
+ const oldItem = this.getDirectoryTreeCache.tree[oldPath];
366
+ if (oldItem) {
367
+ this.getDirectoryTreeCache.tree[newPath] = Object.assign(Object.assign({}, oldItem), { path: newPath });
368
+ delete this.getDirectoryTreeCache.tree[oldPath];
369
+ const oldItemInode = this.getDirectoryTreeCache.inodes[oldItem.inode];
370
+ if (oldItemInode) {
371
+ this.getDirectoryTreeCache.inodes[oldItem.inode] = Object.assign(Object.assign({}, oldItemInode), { path: newPath });
372
+ }
373
+ }
374
+ const oldItemHash = this.sync.localFileHashes[oldPath];
375
+ if (oldItemHash) {
376
+ this.sync.localFileHashes[newPath] = oldItemHash;
377
+ delete this.sync.localFileHashes[oldPath];
378
+ }
379
+ }
380
+ }
381
+ this.itemsMutex.release();
382
+ return stats;
383
+ }
384
+ finally {
385
+ this.mutex.release();
242
386
  }
243
- await fs_extra_1.default.move(fromLocalPath, toLocalPath, {
244
- overwrite: true
245
- });
246
- return await fs_extra_1.default.stat(toLocalPath);
247
387
  }
248
388
  /**
249
389
  * Upload a local file.
@@ -253,19 +393,156 @@ class LocalFileSystem {
253
393
  * @async
254
394
  * @param {{ relativePath: string }} param0
255
395
  * @param {string} param0.relativePath
256
- * @returns {Promise<void>}
396
+ * @returns {Promise<CloudItem>}
257
397
  */
258
398
  async upload({ relativePath }) {
399
+ var _a;
259
400
  const localPath = path_1.default.join(this.sync.syncPair.localPath, relativePath);
260
- const parentPath = path_1.default.posix.dirname(relativePath);
261
- await this.sync.remoteFileSystem.mkdir({ relativePath: parentPath });
262
- const parentUUID = await this.sync.remoteFileSystem.pathToItemUUID({ relativePath: parentPath });
263
- if (!parentUUID) {
264
- throw new Error(`Could not upload ${relativePath}: Parent path not found.`);
401
+ const signalKey = `upload:${relativePath}`;
402
+ const stats = await fs_extra_1.default.stat(localPath);
403
+ if (!this.sync.pauseSignals[signalKey]) {
404
+ this.sync.pauseSignals[signalKey] = new sdk_1.PauseSignal();
405
+ }
406
+ if (!this.sync.abortControllers[signalKey]) {
407
+ this.sync.abortControllers[signalKey] = new AbortController();
408
+ }
409
+ (0, ipc_1.postMessageToMain)({
410
+ type: "transfer",
411
+ syncPair: this.sync.syncPair,
412
+ data: {
413
+ of: "upload",
414
+ type: "queued",
415
+ relativePath,
416
+ localPath,
417
+ size: parseInt(stats.size) // Sometimes comes as a float, but we need an int
418
+ }
419
+ });
420
+ try {
421
+ const parentPath = path_1.default.posix.dirname(relativePath);
422
+ await this.sync.remoteFileSystem.mkdir({ relativePath: parentPath });
423
+ const parentUUID = await this.sync.remoteFileSystem.pathToItemUUID({ relativePath: parentPath });
424
+ if (!parentUUID) {
425
+ throw new Error(`Could not upload ${relativePath}: Parent path not found.`);
426
+ }
427
+ const hash = await this.createFileHash({
428
+ relativePath,
429
+ algorithm: "md5"
430
+ });
431
+ this.sync.localFileHashes[relativePath] = hash;
432
+ const item = await this.sync.sdk.cloud().uploadLocalFile({
433
+ source: localPath,
434
+ parent: parentUUID,
435
+ name: path_1.default.basename(localPath),
436
+ pauseSignal: this.sync.pauseSignals[signalKey],
437
+ abortSignal: (_a = this.sync.abortControllers[signalKey]) === null || _a === void 0 ? void 0 : _a.signal,
438
+ onError: err => {
439
+ this.sync.worker.logger.log("error", err, "filesystems.local.upload");
440
+ (0, ipc_1.postMessageToMain)({
441
+ type: "transfer",
442
+ syncPair: this.sync.syncPair,
443
+ data: {
444
+ of: "upload",
445
+ type: "error",
446
+ relativePath,
447
+ localPath,
448
+ error: (0, utils_1.serializeError)(err),
449
+ size: parseInt(stats.size) // Sometimes comes as a float, but we need an int
450
+ }
451
+ });
452
+ },
453
+ onProgress: bytes => {
454
+ (0, ipc_1.postMessageToMain)({
455
+ type: "transfer",
456
+ syncPair: this.sync.syncPair,
457
+ data: {
458
+ of: "upload",
459
+ type: "progress",
460
+ relativePath,
461
+ localPath,
462
+ bytes,
463
+ size: parseInt(stats.size) // Sometimes comes as a float, but we need an int
464
+ }
465
+ });
466
+ },
467
+ onStarted: () => {
468
+ (0, ipc_1.postMessageToMain)({
469
+ type: "transfer",
470
+ syncPair: this.sync.syncPair,
471
+ data: {
472
+ of: "upload",
473
+ type: "started",
474
+ relativePath,
475
+ localPath,
476
+ size: parseInt(stats.size) // Sometimes comes as a float, but we need an int
477
+ }
478
+ });
479
+ }
480
+ });
481
+ await this.sync.remoteFileSystem.itemsMutex.acquire();
482
+ this.sync.remoteFileSystem.getDirectoryTreeCache.tree[relativePath] = Object.assign(Object.assign({}, item), { path: relativePath });
483
+ this.sync.remoteFileSystem.getDirectoryTreeCache.uuids[item.uuid] = Object.assign(Object.assign({}, item), { path: relativePath });
484
+ this.sync.remoteFileSystem.itemsMutex.release();
485
+ (0, ipc_1.postMessageToMain)({
486
+ type: "transfer",
487
+ syncPair: this.sync.syncPair,
488
+ data: {
489
+ of: "upload",
490
+ type: "finished",
491
+ relativePath,
492
+ localPath,
493
+ size: parseInt(stats.size) // Sometimes comes as a float, but we need an int
494
+ }
495
+ });
496
+ return item;
497
+ }
498
+ catch (e) {
499
+ this.sync.worker.logger.log("error", e, "filesystems.local.upload");
500
+ if (e instanceof Error) {
501
+ (0, ipc_1.postMessageToMain)({
502
+ type: "transfer",
503
+ syncPair: this.sync.syncPair,
504
+ data: {
505
+ of: "upload",
506
+ type: "error",
507
+ relativePath,
508
+ localPath,
509
+ error: (0, utils_1.serializeError)(e),
510
+ size: parseInt(stats.size) // Sometimes comes as a float, but we need an int
511
+ }
512
+ });
513
+ }
514
+ throw e;
515
+ }
516
+ finally {
517
+ delete this.sync.pauseSignals[signalKey];
518
+ delete this.sync.abortControllers[signalKey];
519
+ }
520
+ }
521
+ async isPathWritable(path) {
522
+ try {
523
+ await fs_extra_1.default.access(path, fs_extra_1.default.constants.W_OK | fs_extra_1.default.constants.R_OK);
524
+ return true;
525
+ }
526
+ catch (_a) {
527
+ return false;
528
+ }
529
+ }
530
+ async isPathReadable(path) {
531
+ try {
532
+ await fs_extra_1.default.access(path, fs_extra_1.default.constants.R_OK);
533
+ return true;
534
+ }
535
+ catch (_a) {
536
+ return false;
537
+ }
538
+ }
539
+ async pathExists(path) {
540
+ try {
541
+ return await fs_extra_1.default.exists(path);
542
+ }
543
+ catch (_a) {
544
+ return false;
265
545
  }
266
- const hash = await this.createFileHash({ relativePath, algorithm: "sha512" });
267
- this.sync.localFileHashes[relativePath] = hash;
268
- return await this.sync.sdk.cloud().uploadLocalFile({ source: localPath, parent: parentUUID });
269
546
  }
270
547
  }
271
548
  exports.LocalFileSystem = LocalFileSystem;
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/lib/filesystems/local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/lib/filesystems/local.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAyB;AACzB,8DAAqC;AACrC,uCAQoB;AACpB,gDAA6B;AAC7B,sDAA6B;AAE7B,+CAAiE;AACjE,oDAA2B;AAC3B,mCAAiC;AACjC,+BAAgC;AAChC,oCAAwD;AACxD,gCAA0C;AAC1C,+CAA2C;AAE3C,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,iBAAQ,CAAC,CAAA;AA4BzC;;;;;;;GAOG;AACH,MAAa,eAAe;IAkB3B;;;;;;OAMG;IACH,YAAmB,IAAU;QAvBtB,iCAA4B,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,yBAAa,GAAG,CAAC,CAAA;QAC7D,0BAAqB,GAIxB;YACH,SAAS,EAAE,CAAC;YACZ,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACV,CAAA;QACM,mBAAc,GAAG,KAAK,CAAA;QACrB,oBAAe,GAAqC,IAAI,CAAA;QAChD,eAAU,GAAG,IAAI,qBAAS,CAAC,CAAC,CAAC,CAAA;QAC7B,UAAK,GAAG,IAAI,qBAAS,CAAC,CAAC,CAAC,CAAA;QACxB,eAAU,GAAG,IAAI,qBAAS,CAAC,CAAC,CAAC,CAAA;QAU5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAM5B,IACC,IAAI,CAAC,4BAA4B,GAAG,CAAC;YACrC,IAAI,CAAC,qBAAqB,CAAC,SAAS,GAAG,CAAC;YACxC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EACvE,CAAC;YACF,OAAO;gBACN,MAAM,EAAE;oBACP,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI;oBACrC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM;iBACzC;gBACD,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,KAAK;aACd,CAAA;QACF,CAAC;QAED,MAAM,SAAS,GAAG,iBAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;QAC9C,MAAM,IAAI,GAAuB,EAAE,CAAA;QACnC,MAAM,MAAM,GAAyB,EAAE,CAAA;QACvC,MAAM,MAAM,GAAqB,EAAE,CAAA;QACnC,MAAM,OAAO,GAAuB,EAAE,CAAA;QACtC,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YAC1D,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAA;QAEF,MAAM,IAAA,gCAAwB,EAC7B,GAAG,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;YACrB,IAAI,KAAK,CAAC,UAAU,CAAC,4BAAgB,CAAC,EAAE,CAAC;gBACxC,OAAM;YACP,CAAC;YAED,MAAM,QAAQ,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAErE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,QAAQ;oBACnB,YAAY,EAAE,KAAK;oBACnB,MAAM,EAAE,aAAa;iBACrB,CAAC,CAAA;gBAEF,OAAM;YACP,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YAErE,IACC,IAAA,uCAA+B,EAAC,SAAS,CAAC;gBAC1C,IAAA,sCAA8B,EAAC,SAAS,CAAC;gBACzC,IAAA,oCAA4B,EAAC,QAAQ,CAAC,EACrC,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,QAAQ;oBACnB,YAAY,EAAE,KAAK;oBACnB,MAAM,EAAE,eAAe;iBACvB,CAAC,CAAA;gBAEF,OAAM;YACP,CAAC;YAED,MAAM,QAAQ,GAAG,cAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAErD,IAAI,QAAQ,CAAC,UAAU,CAAC,4BAAgB,CAAC,EAAE,CAAC;gBAC3C,OAAM;YACP,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAA,2BAAmB,EAAC,SAAS,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,QAAQ;oBACnB,YAAY,EAAE,KAAK;oBACnB,MAAM,EAAE,SAAS;iBACjB,CAAC,CAAA;gBAEF,OAAM;YACP,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAEtC,IAAI,KAAK,CAAC,aAAa,EAAE,IAAI,KAAK,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAC9F,OAAO,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,QAAQ;wBACnB,YAAY,EAAE,KAAK;wBACnB,MAAM,EAAE,aAAa;qBACrB,CAAC,CAAA;oBAEF,OAAM;gBACP,CAAC;gBAED,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,QAAQ;wBACnB,YAAY,EAAE,KAAK;wBACnB,MAAM,EAAE,SAAS;qBACjB,CAAC,CAAA;oBAEF,OAAM;gBACP,CAAC;gBAED,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,QAAQ;wBACnB,YAAY,EAAE,KAAK;wBACnB,MAAM,EAAE,OAAO;qBACf,CAAC,CAAA;oBAEF,OAAM;gBACP,CAAC;gBAED,MAAM,IAAI,GAAc;oBACvB,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,OAA4B,CAAC,EAAE,iDAAiD;oBAC7G,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;oBAChD,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAgC,CAAC,EAAE,iDAAiD;oBAC7G,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAyB,CAAC,EAAE,iDAAiD;oBAClG,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAwB,CAAC,CAAC,iDAAiD;iBACjG,CAAA;gBAED,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;gBACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,oCAAoC,CAAC,CAAA;gBAE7E,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC;wBACX,SAAS,EAAE,QAAQ;wBACnB,YAAY,EAAE,SAAS;wBACvB,KAAK,EAAE,CAAC;qBACR,CAAC,CAAA;gBACH,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CACF,CAAA;QAED,IAAI,CAAC,qBAAqB,GAAG;YAC5B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI;YACJ,MAAM;SACN,CAAA;QAED,OAAO;YACN,MAAM,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI;gBACrC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM;aACzC;YACD,MAAM;YACN,OAAO;YACP,OAAO,EAAE,IAAI;SACb,CAAA;IACF,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,qBAAqB;QACjC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAM;QACP,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,MAAM,iBAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAC5F,IAAI,CAAC,GAAG,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC/C,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,oBAAoB;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,OAAM;QACP,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAA;QAExC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;IAC5B,CAAC;IAED;;;;;;;;;;OAUG;IACI,KAAK,CAAC,4BAA4B;QACxC,MAAM,WAAW,GAAG,yBAAa,GAAG,CAAC,CAAA;QAErC,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACjC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,4BAA4B,GAAG,WAAW,EAAE,CAAC;gBAClE,OAAO,EAAE,CAAA;gBAET,OAAM;YACP,CAAC;YAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,4BAA4B,GAAG,WAAW,EAAE,CAAC;oBAClE,aAAa,CAAC,IAAI,CAAC,CAAA;oBAEnB,OAAO,EAAE,CAAA;gBACV,CAAC;YACF,CAAC,EAAE,GAAG,CAAC,CAAA;QACR,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,cAAc,CAAC,EAC3B,YAAY,EACZ,SAAS,EAIT;QACA,MAAM,SAAS,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAC7E,MAAM,MAAM,GAAG,gBAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,aAAa,CAAC,kBAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;QAE3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEjC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,KAAK,CAAC,EAAE,YAAY,EAA4B;QAC5D,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;QAE/B,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YAE7E,MAAM,kBAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;YAE7B,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAEtC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAE/B,MAAM,IAAI,GAAc;gBACvB,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAwB,CAAC,EAAE,iDAAiD;gBAClG,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,OAA4B,CAAC,EAAE,iDAAiD;gBAC7G,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAgC,CAAC,EAAE,iDAAiD;gBAC7G,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,YAAY;aAClB,CAAA;YAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;YACpD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;YAEpD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAEzB,OAAO,KAAK,CAAA;QACb,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,GAAG,KAAK,EAAiD;QACrG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;QAE1B,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAE1D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,OAAM;YACP,CAAC;YAED,MAAM,SAAS,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YAE7E,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,MAAM,cAAc,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,4BAAgB,CAAC,CAAA;gBAEtF,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;gBAClC,MAAM,kBAAE,CAAC,IAAI,CAAC,SAAS,EAAE,cAAU,CAAC,IAAI,CAAC,cAAc,EAAE,cAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE;oBAClG,SAAS,EAAE,IAAI;iBACf,CAAC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACP,MAAM,kBAAE,CAAC,EAAE,CAAC,SAAS,EAAE;oBACtB,KAAK,EAAE,IAAI;oBACX,UAAU,EAAE,EAAE,GAAG,EAAE;oBACnB,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,GAAG;iBACf,CAAC,CAAA;YACH,CAAC;YAED,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAE/B,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACpD,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;YAE9C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;gBACrD,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;oBACpE,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAExD,IAAI,SAAS,EAAE,CAAC;wBACf,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;oBAC1D,CAAC;oBAED,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;oBACvC,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC9C,CAAC;YACF,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;QACrB,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,cAAc,EAAwD;QAC7G,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;QAE1B,IAAI,CAAC;YACJ,IAAI,gBAAgB,KAAK,GAAG,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;YAClC,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAE9D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,gBAAgB,OAAO,cAAc,mBAAmB,CAAC,CAAA;YAC9F,CAAC;YAED,MAAM,aAAa,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;YACrF,MAAM,WAAW,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;YACjF,MAAM,uBAAuB,GAAG,cAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;YACjE,MAAM,qBAAqB,GAAG,cAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAE7D,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,oBAAoB,aAAa,OAAO,WAAW,6BAA6B,CAAC,CAAA;YAClG,CAAC;YAED,IAAI,uBAAuB,KAAK,qBAAqB,EAAE,CAAC;gBACvD,MAAM,kBAAE,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;YAC5C,CAAC;iBAAM,CAAC;gBACP,IAAI,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACjD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;gBAClC,CAAC;gBAED,MAAM,kBAAE,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE;oBACzC,SAAS,EAAE,IAAI;iBACf,CAAC,CAAA;YACH,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAExC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAE/B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,mCAC3C,IAAI,KACP,IAAI,EAAE,cAAc,GACpB,CAAA;YAED,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mCACzC,IAAI,KACP,IAAI,EAAE,cAAc,GACpB,CAAA;YAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACxD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAA;YAElD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;gBACvD,IAAI,OAAO,CAAC,UAAU,CAAC,gBAAgB,GAAG,GAAG,CAAC,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;oBAChF,MAAM,OAAO,GAAG,IAAA,qCAA6B,EAAC,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;oBACxF,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBAExD,IAAI,OAAO,EAAE,CAAC;wBACb,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,mCACpC,OAAO,KACV,IAAI,EAAE,OAAO,GACb,CAAA;wBAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBAE/C,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;wBAErE,IAAI,YAAY,EAAE,CAAC;4BAClB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,mCAC5C,YAAY,KACf,IAAI,EAAE,OAAO,GACb,CAAA;wBACF,CAAC;oBACF,CAAC;oBAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;oBAEtD,IAAI,WAAW,EAAE,CAAC;wBACjB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,WAAW,CAAA;wBAEhD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;oBAC1C,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAEzB,OAAO,KAAK,CAAA;QACb,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;QACrB,CAAC;IACF,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,MAAM,CAAC,EAAE,YAAY,EAA4B;;QAC7D,MAAM,SAAS,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAC7E,MAAM,SAAS,GAAG,UAAU,YAAY,EAAE,CAAA;QAC1C,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAEtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,iBAAW,EAAE,CAAA;QACtD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,eAAe,EAAE,CAAA;QAC9D,CAAC;QAED,IAAA,uBAAiB,EAAC;YACjB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,IAAI,EAAE;gBACL,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,QAAQ;gBACd,YAAY;gBACZ,SAAS;gBACT,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC,iDAAiD;aACjG;SACD,CAAC,CAAA;QAEF,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,cAAU,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAEzD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;YAEpE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;YAEhG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,YAAY,0BAA0B,CAAC,CAAA;YAC5E,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;gBACtC,YAAY;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAA;YAEF,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;YAE9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC;gBACxD,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,cAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACpC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;gBAC9C,WAAW,EAAE,MAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,0CAAE,MAAM;gBAC1D,OAAO,EAAE,GAAG,CAAC,EAAE;oBACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAA;oBAErE,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAC5B,IAAI,EAAE;4BACL,EAAE,EAAE,QAAQ;4BACZ,IAAI,EAAE,OAAO;4BACb,YAAY;4BACZ,SAAS;4BACT,KAAK,EAAE,IAAA,sBAAc,EAAC,GAAG,CAAC;4BAC1B,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC,iDAAiD;yBACjG;qBACD,CAAC,CAAA;gBACH,CAAC;gBACD,UAAU,EAAE,KAAK,CAAC,EAAE;oBACnB,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAC5B,IAAI,EAAE;4BACL,EAAE,EAAE,QAAQ;4BACZ,IAAI,EAAE,UAAU;4BAChB,YAAY;4BACZ,SAAS;4BACT,KAAK;4BACL,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC,iDAAiD;yBACjG;qBACD,CAAC,CAAA;gBACH,CAAC;gBACD,SAAS,EAAE,GAAG,EAAE;oBACf,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAC5B,IAAI,EAAE;4BACL,EAAE,EAAE,QAAQ;4BACZ,IAAI,EAAE,SAAS;4BACf,YAAY;4BACZ,SAAS;4BACT,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC,iDAAiD;yBACjG;qBACD,CAAC,CAAA;gBACH,CAAC;aACD,CAAC,CAAA;YAEF,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAErD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,mCAC/D,IAAI,KACP,IAAI,EAAE,YAAY,GAClB,CAAA;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mCAC7D,IAAI,KACP,IAAI,EAAE,YAAY,GAClB,CAAA;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAE/C,IAAA,uBAAiB,EAAC;gBACjB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAC5B,IAAI,EAAE;oBACL,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,UAAU;oBAChB,YAAY;oBACZ,SAAS;oBACT,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC,iDAAiD;iBACjG;aACD,CAAC,CAAA;YAEF,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAA;YAEnE,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACxB,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAC5B,IAAI,EAAE;wBACL,EAAE,EAAE,QAAQ;wBACZ,IAAI,EAAE,OAAO;wBACb,YAAY;wBACZ,SAAS;wBACT,KAAK,EAAE,IAAA,sBAAc,EAAC,CAAC,CAAC;wBACxB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC,iDAAiD;qBACjG;iBACD,CAAC,CAAA;YACH,CAAC;YAED,MAAM,CAAC,CAAA;QACR,CAAC;gBAAS,CAAC;YACV,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;QAC7C,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAY;QACvC,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAE,CAAC,SAAS,CAAC,IAAI,GAAG,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAE5D,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,WAAM,CAAC;YACR,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAY;QACvC,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAExC,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,WAAM,CAAC;YACR,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,IAAY;QACnC,IAAI,CAAC;YACJ,OAAO,MAAM,kBAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;QAAC,WAAM,CAAC;YACR,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;CACD;AAhpBD,0CAgpBC;AAED,kBAAe,eAAe,CAAA"}