@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
package/dist/lib/sync.js CHANGED
@@ -4,13 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Sync = void 0;
7
- const sdk_1 = __importDefault(require("@filen/sdk"));
8
7
  const constants_1 = require("../constants");
9
8
  const local_1 = require("./filesystems/local");
10
9
  const remote_1 = require("./filesystems/remote");
11
10
  const deltas_1 = __importDefault(require("./deltas"));
12
11
  const tasks_1 = __importDefault(require("./tasks"));
13
12
  const state_1 = __importDefault(require("./state"));
13
+ const ipc_1 = require("./ipc");
14
+ const worker_threads_1 = require("worker_threads");
15
+ const ignorer_1 = __importDefault(require("../ignorer"));
16
+ const utils_1 = require("../utils");
17
+ const lock_1 = __importDefault(require("./lock"));
14
18
  /**
15
19
  * Sync
16
20
  *
@@ -24,24 +28,99 @@ class Sync {
24
28
  *
25
29
  * @constructor
26
30
  * @public
27
- * @param {{ syncPair: SyncPair; dbPath: string, sdkConfig: FilenSDKConfig }} param0
31
+ * @param {{ syncPair: SyncPair; worker: SyncWorker }} param0
28
32
  * @param {SyncPair} param0.syncPair
29
- * @param {string} param0.dbPath
30
- * @param {FilenSDKConfig} param0.sdkConfig
33
+ * @param {SyncWorker} param0.worker
31
34
  */
32
- constructor({ syncPair, dbPath, sdkConfig }) {
35
+ constructor({ syncPair, worker }) {
33
36
  this.isInitialized = false;
34
- this.previousLocalTree = { tree: {}, inodes: {} };
35
- this.previousRemoteTree = { tree: {}, uuids: {} };
37
+ this.previousLocalTree = {
38
+ tree: {},
39
+ inodes: {}
40
+ };
41
+ this.previousRemoteTree = {
42
+ tree: {},
43
+ uuids: {}
44
+ };
36
45
  this.localFileHashes = {};
46
+ this.abortControllers = {};
47
+ this.pauseSignals = {};
48
+ this.removed = false;
49
+ this.saveStateOnNoChanges = true;
50
+ this.taskErrors = [];
51
+ this.worker = worker;
37
52
  this.syncPair = syncPair;
38
- this.dbPath = dbPath;
39
- this.sdk = new sdk_1.default(sdkConfig);
40
- this.localFileSystem = new local_1.LocalFileSystem({ sync: this });
41
- this.remoteFileSystem = new remote_1.RemoteFileSystem({ sync: this });
42
- this.deltas = new deltas_1.default({ sync: this });
43
- this.tasks = new tasks_1.default({ sync: this });
44
- this.state = new state_1.default({ sync: this });
53
+ this.mode = syncPair.mode;
54
+ this.paused = syncPair.paused;
55
+ this.excludeDotFiles = syncPair.excludeDotFiles;
56
+ this.dbPath = worker.dbPath;
57
+ this.sdk = worker.sdk;
58
+ this.localFileSystem = new local_1.LocalFileSystem(this);
59
+ this.remoteFileSystem = new remote_1.RemoteFileSystem(this);
60
+ this.deltas = new deltas_1.default(this);
61
+ this.tasks = new tasks_1.default(this);
62
+ this.state = new state_1.default(this);
63
+ this.localIgnorer = new ignorer_1.default(this, "localIgnorer");
64
+ this.remoteIgnorer = new ignorer_1.default(this, "remoteIgnorer");
65
+ this.lock = new lock_1.default(this);
66
+ this.setupMainThreadListeners();
67
+ }
68
+ /**
69
+ * Sets up receiving message from the main thread.
70
+ *
71
+ * @private
72
+ */
73
+ setupMainThreadListeners() {
74
+ const receiver = !worker_threads_1.isMainThread && worker_threads_1.parentPort ? worker_threads_1.parentPort : process;
75
+ receiver.on("message", (message) => {
76
+ var _a, _b;
77
+ if (message.type === "stopTransfer" && message.syncPair.uuid === this.syncPair.uuid) {
78
+ const abortController = this.abortControllers[`${message.data.of}:${message.data.relativePath}`];
79
+ if (!abortController || abortController.signal.aborted) {
80
+ return;
81
+ }
82
+ abortController.abort();
83
+ }
84
+ else if (message.type === "pauseTransfer" && message.syncPair.uuid === this.syncPair.uuid) {
85
+ const pauseSignal = this.pauseSignals[`${message.data.of}:${message.data.relativePath}`];
86
+ if (!pauseSignal || pauseSignal.isPaused()) {
87
+ return;
88
+ }
89
+ pauseSignal.pause();
90
+ }
91
+ else if (message.type === "resumeTransfer" && message.syncPair.uuid === this.syncPair.uuid) {
92
+ const pauseSignal = this.pauseSignals[`${message.data.of}:${message.data.relativePath}`];
93
+ if (!pauseSignal || !pauseSignal.isPaused()) {
94
+ return;
95
+ }
96
+ pauseSignal.resume();
97
+ }
98
+ else if (message.type === "updateLocalIgnorer" && message.syncPair.uuid === this.syncPair.uuid) {
99
+ this.localIgnorer.update((_a = message.data) === null || _a === void 0 ? void 0 : _a.content).catch(err => {
100
+ this.worker.logger.log("error", err, "sync.setupMainThreadListeners");
101
+ });
102
+ }
103
+ else if (message.type === "updateRemoteIgnorer" && message.syncPair.uuid === this.syncPair.uuid) {
104
+ this.remoteIgnorer.update((_b = message.data) === null || _b === void 0 ? void 0 : _b.content).catch(err => {
105
+ this.worker.logger.log("error", err, "sync.setupMainThreadListeners");
106
+ });
107
+ }
108
+ else if (message.type === "pauseSyncPair" && message.syncPair.uuid === this.syncPair.uuid) {
109
+ this.paused = true;
110
+ }
111
+ else if (message.type === "resumeSyncPair" && message.syncPair.uuid === this.syncPair.uuid) {
112
+ this.paused = false;
113
+ }
114
+ else if (message.type === "changeSyncPairMode" && message.syncPair.uuid === this.syncPair.uuid) {
115
+ this.mode = message.data.mode;
116
+ }
117
+ else if (message.type === "syncPairExcludeDotFiles" && message.syncPair.uuid === this.syncPair.uuid) {
118
+ this.excludeDotFiles = true;
119
+ }
120
+ else if (message.type === "syncPairIncludeDotFiles" && message.syncPair.uuid === this.syncPair.uuid) {
121
+ this.excludeDotFiles = false;
122
+ }
123
+ });
45
124
  }
46
125
  async initialize() {
47
126
  if (this.isInitialized) {
@@ -49,48 +128,296 @@ class Sync {
49
128
  }
50
129
  this.isInitialized = true;
51
130
  try {
52
- //local/remote smoke test
53
- await this.localFileSystem.startDirectoryWatcher();
54
- await this.state.initialize();
131
+ const [localSmokeTest, remoteSmokeTest] = await Promise.all([
132
+ this.localFileSystem.isPathWritable(this.syncPair.localPath),
133
+ this.remoteFileSystem.remoteDirPathExisting()
134
+ ]);
135
+ if (!localSmokeTest || !remoteSmokeTest) {
136
+ throw new Error("Smoke tests failed. Either the local or remote path is not readable/writable");
137
+ }
138
+ await Promise.all([
139
+ this.localFileSystem.startDirectoryWatcher(),
140
+ this.state.initialize(),
141
+ this.localIgnorer.initialize(),
142
+ this.remoteIgnorer.initialize()
143
+ ]);
55
144
  this.run();
56
145
  }
57
146
  catch (e) {
147
+ this.worker.logger.log("error", e, "sync.initialize");
58
148
  this.isInitialized = false;
59
149
  throw e;
60
150
  }
61
151
  }
152
+ async cleanup() {
153
+ await this.localFileSystem.stopDirectoryWatcher();
154
+ this.isInitialized = false;
155
+ (0, ipc_1.postMessageToMain)({
156
+ type: "cycleExited",
157
+ syncPair: this.syncPair
158
+ });
159
+ }
62
160
  async run() {
161
+ if (this.removed) {
162
+ (0, ipc_1.postMessageToMain)({
163
+ type: "syncPairRemoved",
164
+ syncPair: this.syncPair
165
+ });
166
+ return;
167
+ }
63
168
  try {
169
+ if (this.taskErrors.length > 0) {
170
+ if (this.worker.runOnce) {
171
+ await this.cleanup();
172
+ return;
173
+ }
174
+ (0, ipc_1.postMessageToMain)({
175
+ type: "doneTasks",
176
+ syncPair: this.syncPair,
177
+ data: {
178
+ tasks: [],
179
+ errors: this.taskErrors.map(e => (Object.assign(Object.assign({}, e), { error: (0, utils_1.serializeError)(e.error) })))
180
+ }
181
+ });
182
+ (0, ipc_1.postMessageToMain)({
183
+ type: "cycleRestarting",
184
+ syncPair: this.syncPair
185
+ });
186
+ return;
187
+ }
188
+ if (this.paused) {
189
+ if (this.worker.runOnce) {
190
+ await this.cleanup();
191
+ return;
192
+ }
193
+ (0, ipc_1.postMessageToMain)({
194
+ type: "cyclePaused",
195
+ syncPair: this.syncPair
196
+ });
197
+ (0, ipc_1.postMessageToMain)({
198
+ type: "cycleRestarting",
199
+ syncPair: this.syncPair
200
+ });
201
+ return;
202
+ }
203
+ (0, ipc_1.postMessageToMain)({
204
+ type: "cycleStarted",
205
+ syncPair: this.syncPair
206
+ });
207
+ const [localSmokeTest, remoteSmokeTest] = await Promise.all([
208
+ this.localFileSystem.isPathWritable(this.syncPair.localPath),
209
+ this.remoteFileSystem.remoteDirPathExisting()
210
+ ]);
211
+ if (!localSmokeTest) {
212
+ if (this.worker.runOnce) {
213
+ await this.cleanup();
214
+ return;
215
+ }
216
+ (0, ipc_1.postMessageToMain)({
217
+ type: "cycleLocalSmokeTestFailed",
218
+ syncPair: this.syncPair,
219
+ data: {
220
+ error: (0, utils_1.serializeError)(new Error("Local path is not writable."))
221
+ }
222
+ });
223
+ (0, ipc_1.postMessageToMain)({
224
+ type: "cycleRestarting",
225
+ syncPair: this.syncPair
226
+ });
227
+ return;
228
+ }
229
+ if (!remoteSmokeTest) {
230
+ if (this.worker.runOnce) {
231
+ await this.cleanup();
232
+ return;
233
+ }
234
+ (0, ipc_1.postMessageToMain)({
235
+ type: "cycleLocalSmokeTestFailed",
236
+ syncPair: this.syncPair,
237
+ data: {
238
+ error: (0, utils_1.serializeError)(new Error("Remote path is not present or in the trash."))
239
+ }
240
+ });
241
+ (0, ipc_1.postMessageToMain)({
242
+ type: "cycleRestarting",
243
+ syncPair: this.syncPair
244
+ });
245
+ return;
246
+ }
247
+ (0, ipc_1.postMessageToMain)({
248
+ type: "cycleWaitingForLocalDirectoryChangesStarted",
249
+ syncPair: this.syncPair
250
+ });
64
251
  await this.localFileSystem.waitForLocalDirectoryChanges();
252
+ (0, ipc_1.postMessageToMain)({
253
+ type: "cycleWaitingForLocalDirectoryChangesDone",
254
+ syncPair: this.syncPair
255
+ });
256
+ (0, ipc_1.postMessageToMain)({
257
+ type: "cycleGettingTreesStarted",
258
+ syncPair: this.syncPair
259
+ });
260
+ // eslint-disable-next-line prefer-const
65
261
  let [currentLocalTree, currentRemoteTree] = await Promise.all([
66
262
  this.localFileSystem.getDirectoryTree(),
67
263
  this.remoteFileSystem.getDirectoryTree()
68
264
  ]);
265
+ if (!currentLocalTree.changed && !currentRemoteTree.changed) {
266
+ if (this.taskErrors.length === 0) {
267
+ (0, ipc_1.postMessageToMain)({
268
+ type: "cycleSavingStateStarted",
269
+ syncPair: this.syncPair
270
+ });
271
+ this.previousLocalTree = currentLocalTree.result;
272
+ this.previousRemoteTree = currentRemoteTree.result;
273
+ // We only save the state once if there are no changes.
274
+ // This helps reducing the cpu and disk footprint when there are continuously no changes.
275
+ if (this.saveStateOnNoChanges) {
276
+ this.saveStateOnNoChanges = false;
277
+ await this.state.save();
278
+ }
279
+ (0, ipc_1.postMessageToMain)({
280
+ type: "cycleSavingStateDone",
281
+ syncPair: this.syncPair
282
+ });
283
+ }
284
+ (0, ipc_1.postMessageToMain)({
285
+ type: "cycleNoChanges",
286
+ syncPair: this.syncPair
287
+ });
288
+ return;
289
+ }
290
+ (0, ipc_1.postMessageToMain)({
291
+ type: "cycleGettingTreesDone",
292
+ syncPair: this.syncPair
293
+ });
294
+ (0, ipc_1.postMessageToMain)({
295
+ type: "localTreeErrors",
296
+ syncPair: this.syncPair,
297
+ data: {
298
+ errors: currentLocalTree.errors.map(e => (Object.assign(Object.assign({}, e), { error: (0, utils_1.serializeError)(e.error) })))
299
+ }
300
+ });
301
+ (0, ipc_1.postMessageToMain)({
302
+ type: "localTreeIgnored",
303
+ syncPair: this.syncPair,
304
+ data: {
305
+ ignored: currentLocalTree.ignored
306
+ }
307
+ });
308
+ (0, ipc_1.postMessageToMain)({
309
+ type: "remoteTreeIgnored",
310
+ syncPair: this.syncPair,
311
+ data: {
312
+ ignored: currentRemoteTree.ignored
313
+ }
314
+ });
315
+ (0, ipc_1.postMessageToMain)({
316
+ type: "cycleProcessingDeltasStarted",
317
+ syncPair: this.syncPair
318
+ });
69
319
  const deltas = await this.deltas.process({
70
- currentLocalTree,
71
- currentRemoteTree,
320
+ currentLocalTree: currentLocalTree.result,
321
+ currentRemoteTree: currentRemoteTree.result,
72
322
  previousLocalTree: this.previousLocalTree,
73
- previousRemoteTree: this.previousRemoteTree
74
- });
75
- console.log(deltas);
76
- const doneTasks = await this.tasks.process({ deltas });
77
- console.log(doneTasks);
78
- if (doneTasks.length > 0) {
79
- const applied = this.state.applyDoneTasksToState({ doneTasks, currentLocalTree, currentRemoteTree });
80
- currentLocalTree = applied.currentLocalTree;
81
- currentRemoteTree = applied.currentRemoteTree;
82
- }
83
- this.previousLocalTree = currentLocalTree;
84
- this.previousRemoteTree = currentRemoteTree;
85
- await this.state.save();
323
+ previousRemoteTree: this.previousRemoteTree,
324
+ currentLocalTreeErrors: currentLocalTree.errors
325
+ });
326
+ (0, ipc_1.postMessageToMain)({
327
+ type: "cycleProcessingDeltasDone",
328
+ syncPair: this.syncPair
329
+ });
330
+ (0, ipc_1.postMessageToMain)({
331
+ type: "deltas",
332
+ syncPair: this.syncPair,
333
+ data: {
334
+ deltas
335
+ }
336
+ });
337
+ this.worker.logger.log("info", { deltas, localErrors: currentLocalTree.errors });
338
+ (0, ipc_1.postMessageToMain)({
339
+ type: "cycleProcessingTasksStarted",
340
+ syncPair: this.syncPair
341
+ });
342
+ const { doneTasks, errors } = await this.tasks.process({ deltas });
343
+ this.taskErrors = errors;
344
+ (0, ipc_1.postMessageToMain)({
345
+ type: "cycleProcessingTasksDone",
346
+ syncPair: this.syncPair
347
+ });
348
+ (0, ipc_1.postMessageToMain)({
349
+ type: "doneTasks",
350
+ syncPair: this.syncPair,
351
+ data: {
352
+ tasks: doneTasks.map(task => (Object.assign({ path: task.path, type: task.type }, (task.type === "uploadFile" ? { item: task.item } : {})))),
353
+ errors: this.taskErrors.map(e => (Object.assign(Object.assign({}, e), { error: (0, utils_1.serializeError)(e.error) })))
354
+ }
355
+ });
356
+ if (this.taskErrors.length === 0) {
357
+ if (doneTasks.length > 0) {
358
+ (0, ipc_1.postMessageToMain)({
359
+ type: "cycleApplyingStateStarted",
360
+ syncPair: this.syncPair
361
+ });
362
+ const applied = this.state.applyDoneTasksToState({
363
+ doneTasks,
364
+ currentLocalTree: currentLocalTree.result,
365
+ currentRemoteTree: currentRemoteTree.result
366
+ });
367
+ currentLocalTree.result = applied.currentLocalTree;
368
+ currentRemoteTree.result = applied.currentRemoteTree;
369
+ (0, ipc_1.postMessageToMain)({
370
+ type: "cycleApplyingStateDone",
371
+ syncPair: this.syncPair
372
+ });
373
+ }
374
+ (0, ipc_1.postMessageToMain)({
375
+ type: "cycleSavingStateStarted",
376
+ syncPair: this.syncPair
377
+ });
378
+ this.previousLocalTree = currentLocalTree.result;
379
+ this.previousRemoteTree = currentRemoteTree.result;
380
+ this.saveStateOnNoChanges = true;
381
+ await this.state.save();
382
+ (0, ipc_1.postMessageToMain)({
383
+ type: "cycleSavingStateDone",
384
+ syncPair: this.syncPair
385
+ });
386
+ }
387
+ (0, ipc_1.postMessageToMain)({
388
+ type: "cycleSuccess",
389
+ syncPair: this.syncPair
390
+ });
86
391
  }
87
392
  catch (e) {
88
- console.error(e); // TODO: Proper debugger
393
+ this.worker.logger.log("error", e, "sync.run");
394
+ if (e instanceof Error) {
395
+ (0, ipc_1.postMessageToMain)({
396
+ type: "cycleError",
397
+ syncPair: this.syncPair,
398
+ data: {
399
+ error: (0, utils_1.serializeError)(e)
400
+ }
401
+ });
402
+ }
89
403
  }
90
404
  finally {
91
- setTimeout(() => {
92
- this.run();
93
- }, constants_1.SYNC_INTERVAL);
405
+ if (this.worker.runOnce || this.removed) {
406
+ await this.cleanup();
407
+ }
408
+ else {
409
+ (0, ipc_1.postMessageToMain)({
410
+ type: "cycleFinished",
411
+ syncPair: this.syncPair
412
+ });
413
+ (0, ipc_1.postMessageToMain)({
414
+ type: "cycleRestarting",
415
+ syncPair: this.syncPair
416
+ });
417
+ setTimeout(() => {
418
+ this.run();
419
+ }, constants_1.SYNC_INTERVAL);
420
+ }
94
421
  }
95
422
  }
96
423
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,27 @@
1
1
  /// <reference types="node" />
2
2
  import type Sync from "./sync";
3
- import type { Delta } from "./deltas";
4
- import type { CloudItem } from "@filen/sdk";
3
+ import { type Delta } from "./deltas";
4
+ import { type RemoteItem } from "./filesystems/remote";
5
5
  import fs from "fs-extra";
6
+ export type TaskError = {
7
+ path: string;
8
+ error: Error;
9
+ type: "uploadFile" | "createRemoteDirectory" | "createLocalDirectory" | "deleteLocalFile" | "deleteRemoteFile" | "deleteLocalDirectory" | "deleteRemoteDirectory" | "downloadFile" | "renameLocalFile" | "renameRemoteFile" | "renameRemoteDirectory" | "renameLocalDirectory";
10
+ };
6
11
  export type DoneTask = {
7
12
  path: string;
8
13
  } & ({
9
14
  type: "uploadFile";
10
- item: CloudItem;
15
+ item: RemoteItem;
16
+ stats: fs.Stats;
11
17
  } | {
12
18
  type: "createRemoteDirectory";
13
- uuid: string;
19
+ item: RemoteItem;
20
+ stats: fs.Stats;
14
21
  } | {
15
22
  type: "createLocalDirectory";
16
23
  stats: fs.Stats;
24
+ item: RemoteItem;
17
25
  } | {
18
26
  type: "deleteLocalFile";
19
27
  } | {
@@ -25,19 +33,12 @@ export type DoneTask = {
25
33
  } | {
26
34
  type: "downloadFile";
27
35
  stats: fs.Stats;
28
- } | {
29
- type: "moveLocalFile";
30
- from: string;
31
- to: string;
36
+ item: RemoteItem;
32
37
  } | {
33
38
  type: "renameLocalFile";
34
39
  from: string;
35
40
  to: string;
36
41
  stats: fs.Stats;
37
- } | {
38
- type: "moveRemoteFile";
39
- from: string;
40
- to: string;
41
42
  } | {
42
43
  type: "renameRemoteFile";
43
44
  from: string;
@@ -51,20 +52,6 @@ export type DoneTask = {
51
52
  from: string;
52
53
  to: string;
53
54
  stats: fs.Stats;
54
- } | {
55
- type: "moveRemoteDirectory";
56
- from: string;
57
- to: string;
58
- } | {
59
- type: "moveLocalFile";
60
- from: string;
61
- to: string;
62
- stats: fs.Stats;
63
- } | {
64
- type: "moveLocalDirectory";
65
- from: string;
66
- to: string;
67
- stats: fs.Stats;
68
55
  });
69
56
  /**
70
57
  * Tasks
@@ -76,41 +63,41 @@ export type DoneTask = {
76
63
  */
77
64
  export declare class Tasks {
78
65
  private readonly sync;
66
+ private readonly transfersSemaphore;
79
67
  /**
80
68
  * Creates an instance of Tasks.
81
- * @date 3/1/2024 - 11:11:36 PM
82
69
  *
83
70
  * @constructor
84
71
  * @public
85
- * @param {{ sync: Sync }} param0
86
- * @param {Sync} param0.sync
72
+ * @param {Sync} sync
87
73
  */
88
- constructor({ sync }: {
89
- sync: Sync;
90
- });
74
+ constructor(sync: Sync);
91
75
  /**
92
- * Process a task.
93
- * @date 3/2/2024 - 12:14:48 PM
76
+ * Process a delta task.
94
77
  *
95
78
  * @private
96
79
  * @async
97
- * @param {{delta: Delta}} param0
98
- * @param {Delta} param0.delta
99
- * @returns {Promise<DoneTask>}
80
+ * @param {Delta} delta
81
+ * @returns {Promise<DoneTask | null>}
100
82
  */
101
83
  private processTask;
102
84
  /**
103
85
  * Process all deltas.
104
- * @date 3/5/2024 - 3:59:51 PM
105
86
  *
106
87
  * @public
107
88
  * @async
108
89
  * @param {{ deltas: Delta[] }} param0
109
90
  * @param {{}} param0.deltas
110
- * @returns {Promise<DoneTask[]>}
91
+ * @returns {Promise<{
92
+ * doneTasks: DoneTask[]
93
+ * errors: TaskError[]
94
+ * }>}
111
95
  */
112
96
  process({ deltas }: {
113
97
  deltas: Delta[];
114
- }): Promise<DoneTask[]>;
98
+ }): Promise<{
99
+ doneTasks: DoneTask[];
100
+ errors: TaskError[];
101
+ }>;
115
102
  }
116
103
  export default Tasks;