@filen/sync 0.1.3 → 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.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type SyncPair } from "./types";
1
+ import { type SyncPair, type SyncMessage } from "./types";
2
2
  import Sync from "./lib/sync";
3
3
  import FilenSDK, { type FilenSDKConfig } from "@filen/sdk";
4
4
  import Logger from "./lib/logger";
@@ -17,20 +17,13 @@ export declare class SyncWorker {
17
17
  readonly initSyncPairsMutex: import("./semaphore").ISemaphore;
18
18
  readonly sdk: FilenSDK;
19
19
  readonly logger: Logger;
20
- /**
21
- * Creates an instance of SyncWorker.
22
- *
23
- * @constructor
24
- * @public
25
- * @param {{ syncPairs: SyncPair[]; dbPath: string; sdkConfig: FilenSDKConfig }} param0
26
- * @param {{}} param0.syncPairs
27
- * @param {string} param0.dbPath
28
- * @param {FilenSDKConfig} param0.sdkConfig
29
- */
30
- constructor({ syncPairs, dbPath, sdkConfig }: {
20
+ readonly runOnce: boolean;
21
+ constructor({ syncPairs, dbPath, sdkConfig, onMessage, runOnce }: {
31
22
  syncPairs: SyncPair[];
32
23
  dbPath: string;
33
24
  sdkConfig: FilenSDKConfig;
25
+ onMessage?: (message: SyncMessage) => void;
26
+ runOnce?: boolean;
34
27
  });
35
28
  /**
36
29
  * Sets up receiving message from the main thread.
package/dist/index.js CHANGED
@@ -35,19 +35,13 @@ const logger_1 = __importDefault(require("./lib/logger"));
35
35
  * @typedef {SyncWorker}
36
36
  */
37
37
  class SyncWorker {
38
- /**
39
- * Creates an instance of SyncWorker.
40
- *
41
- * @constructor
42
- * @public
43
- * @param {{ syncPairs: SyncPair[]; dbPath: string; sdkConfig: FilenSDKConfig }} param0
44
- * @param {{}} param0.syncPairs
45
- * @param {string} param0.dbPath
46
- * @param {FilenSDKConfig} param0.sdkConfig
47
- */
48
- constructor({ syncPairs, dbPath, sdkConfig }) {
38
+ constructor({ syncPairs, dbPath, sdkConfig, onMessage, runOnce = false }) {
49
39
  this.syncs = {};
50
40
  this.initSyncPairsMutex = new semaphore_1.Semaphore(1);
41
+ if (onMessage) {
42
+ process.onMessage = onMessage;
43
+ }
44
+ this.runOnce = runOnce;
51
45
  this.syncPairs = syncPairs;
52
46
  this.dbPath = dbPath;
53
47
  this.logger = new logger_1.default(dbPath);
@@ -119,6 +113,8 @@ class SyncWorker {
119
113
  */
120
114
  async initSyncPairs(pairs) {
121
115
  await this.initSyncPairsMutex.acquire();
116
+ const currentSyncPairsUUIDs = this.syncPairs.map(pair => pair.uuid);
117
+ const newSyncPairsUUIDs = pairs.map(pair => pair.uuid);
122
118
  try {
123
119
  const promises = [];
124
120
  for (const pair of pairs) {
@@ -131,6 +127,11 @@ class SyncWorker {
131
127
  }
132
128
  }
133
129
  await Promise.all(promises);
130
+ for (const uuid of currentSyncPairsUUIDs) {
131
+ if (!newSyncPairsUUIDs.includes(uuid) && this.syncs[uuid]) {
132
+ this.syncs[uuid].removed = true;
133
+ }
134
+ }
134
135
  }
135
136
  catch (e) {
136
137
  this.logger.log("error", e, "index.initSyncPairs");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Deltas = void 0;
4
+ const utils_1 = require("../utils");
4
5
  /**
5
6
  * Deltas
6
7
  * @date 3/1/2024 - 11:11:32 PM
@@ -43,9 +44,20 @@ class Deltas {
43
44
  let deltas = [];
44
45
  const pathsAdded = {};
45
46
  const erroredLocalPaths = {};
47
+ const renamedRemoteDirectories = [];
48
+ const renamedLocalDirectories = [];
49
+ const deletedRemoteDirectories = [];
50
+ const deletedLocalDirectories = [];
46
51
  for (const error of currentLocalTreeErrors) {
47
52
  erroredLocalPaths[error.relativePath] = true;
48
53
  }
54
+ // The order of delta processing:
55
+ // 1. Local directory/file move/rename
56
+ // 2. Remote directory/file move/rename
57
+ // 3. Local deletions
58
+ // 4. Remote deletions
59
+ // 5. Local additions/filemodifications
60
+ // 6. Remote additions/filemodifications
49
61
  // Local file/directory move/rename
50
62
  for (const inode in currentLocalTree.inodes) {
51
63
  const currentItem = currentLocalTree.inodes[inode];
@@ -58,14 +70,18 @@ class Deltas {
58
70
  erroredLocalPaths[previousItem.path]) {
59
71
  continue;
60
72
  }
61
- // Path from current item changed, it was either renamed or moved
62
- if (currentItem.path !== previousItem.path) {
63
- deltas.push({
73
+ // Path from current item changed, it was either renamed or moved (same type)
74
+ if (currentItem.path !== previousItem.path && currentItem.type === previousItem.type) {
75
+ const delta = {
64
76
  type: currentItem.type === "directory" ? "renameRemoteDirectory" : "renameRemoteFile",
65
77
  path: currentItem.path,
66
78
  from: previousItem.path,
67
79
  to: currentItem.path
68
- });
80
+ };
81
+ deltas.push(delta);
82
+ if (currentItem.type === "directory") {
83
+ renamedRemoteDirectories.push(delta);
84
+ }
69
85
  pathsAdded[currentItem.path] = true;
70
86
  pathsAdded[previousItem.path] = true;
71
87
  }
@@ -73,18 +89,22 @@ class Deltas {
73
89
  // Remote file/directory move/rename
74
90
  for (const uuid in currentRemoteTree.uuids) {
75
91
  const currentItem = currentRemoteTree.uuids[uuid];
76
- const previousItem = currentRemoteTree.uuids[uuid];
92
+ const previousItem = previousRemoteTree.uuids[uuid];
77
93
  if (!currentItem || !previousItem || pathsAdded[currentItem.path] || pathsAdded[previousItem.path]) {
78
94
  continue;
79
95
  }
80
- // Path from current item changed, it was either renamed or moved
81
- if (currentItem.path !== previousItem.path) {
82
- deltas.push({
83
- type: currentItem.type === "directory" ? "renameRemoteDirectory" : "renameRemoteFile",
96
+ // Path from current item changed, it was either renamed or moved (same type)
97
+ if (currentItem.path !== previousItem.path && currentItem.type === previousItem.type) {
98
+ const delta = {
99
+ type: currentItem.type === "directory" ? "renameLocalDirectory" : "renameLocalFile",
84
100
  path: currentItem.path,
85
101
  from: previousItem.path,
86
102
  to: currentItem.path
87
- });
103
+ };
104
+ deltas.push(delta);
105
+ if (currentItem.type === "directory") {
106
+ renamedLocalDirectories.push(delta);
107
+ }
88
108
  pathsAdded[currentItem.path] = true;
89
109
  pathsAdded[previousItem.path] = true;
90
110
  }
@@ -96,12 +116,19 @@ class Deltas {
96
116
  }
97
117
  const previousLocalItem = previousLocalTree.tree[path];
98
118
  const currentLocalItem = currentLocalTree.tree[path];
99
- if (!currentLocalItem && previousLocalItem) {
100
- deltas.push({
119
+ // If the item does not exist in the current tree but does in the previous one, it has been deleted.
120
+ // We also check if the previous inode does not exist in the current tree.
121
+ if (!currentLocalItem && previousLocalItem && !currentLocalTree.inodes[previousLocalItem.inode]) {
122
+ const delta = {
101
123
  type: previousLocalItem.type === "directory" ? "deleteRemoteDirectory" : "deleteRemoteFile",
102
124
  path
103
- });
125
+ };
126
+ deltas.push(delta);
127
+ if (previousLocalItem.type === "directory") {
128
+ deletedRemoteDirectories.push(delta);
129
+ }
104
130
  pathsAdded[path] = true;
131
+ pathsAdded[previousLocalItem.path] = true;
105
132
  }
106
133
  }
107
134
  // Remote deletions
@@ -111,12 +138,19 @@ class Deltas {
111
138
  }
112
139
  const previousRemoteItem = previousRemoteTree.tree[path];
113
140
  const currentRemoteItem = currentRemoteTree.tree[path];
114
- if (!currentRemoteItem && previousRemoteItem) {
115
- deltas.push({
141
+ // If the item does not exist in the current tree but does in the previous one, it has been deleted.
142
+ // We also check if the previous UUID does not exist in the current tree.
143
+ if (!currentRemoteItem && previousRemoteItem && !currentRemoteTree.uuids[previousRemoteItem.uuid]) {
144
+ const delta = {
116
145
  type: previousRemoteItem.type === "directory" ? "deleteLocalDirectory" : "deleteLocalFile",
117
146
  path
118
- });
147
+ };
148
+ deltas.push(delta);
149
+ if (previousRemoteItem.type === "directory") {
150
+ deletedLocalDirectories.push(delta);
151
+ }
119
152
  pathsAdded[path] = true;
153
+ pathsAdded[previousRemoteItem.path] = true;
120
154
  }
121
155
  }
122
156
  // Local additions/filemodifications
@@ -126,7 +160,9 @@ class Deltas {
126
160
  }
127
161
  const currentLocalItem = currentLocalTree.tree[path];
128
162
  const currentRemoteItem = currentRemoteTree.tree[path];
129
- if (!currentRemoteItem && currentLocalItem) {
163
+ // If the item does not exist in the current remote tree, but does in the local one, it should be uploaded.
164
+ // We also check if it in fact has existed before (the inode), if so, we skip it.
165
+ if (!currentRemoteItem && currentLocalItem && !previousLocalTree.inodes[currentLocalItem.inode]) {
130
166
  deltas.push({
131
167
  type: currentLocalItem.type === "directory" ? "createRemoteDirectory" : "uploadFile",
132
168
  path
@@ -134,19 +170,20 @@ class Deltas {
134
170
  pathsAdded[path] = true;
135
171
  continue;
136
172
  }
137
- if (currentRemoteItem && currentRemoteItem.type === "file") {
138
- if (currentLocalItem && currentLocalItem.lastModified > currentRemoteItem.lastModified) {
139
- if ((await this.sync.localFileSystem.createFileHash({
140
- relativePath: path,
141
- algorithm: "md5"
142
- })) !== this.sync.localFileHashes[currentLocalItem.path]) {
143
- deltas.push({
144
- type: "uploadFile",
145
- path
146
- });
147
- pathsAdded[path] = true;
148
- }
149
- }
173
+ // If the item exists in both trees and has a different mod time + hash, we upload it again.
174
+ if (currentRemoteItem &&
175
+ currentRemoteItem.type === "file" &&
176
+ currentLocalItem &&
177
+ currentLocalItem.lastModified > currentRemoteItem.lastModified &&
178
+ (await this.sync.localFileSystem.createFileHash({
179
+ relativePath: path,
180
+ algorithm: "md5"
181
+ })) !== this.sync.localFileHashes[currentLocalItem.path]) {
182
+ deltas.push({
183
+ type: "uploadFile",
184
+ path
185
+ });
186
+ pathsAdded[path] = true;
150
187
  }
151
188
  }
152
189
  // Remote additions/changes
@@ -156,7 +193,9 @@ class Deltas {
156
193
  }
157
194
  const currentLocalItem = currentLocalTree.tree[path];
158
195
  const currentRemoteItem = currentRemoteTree.tree[path];
159
- if (!currentLocalItem && currentRemoteItem) {
196
+ // If the item does not exist in the current local tree, but does in the remote one, it should be download.
197
+ // We also check if it in fact has existed before (the UUID), if so, we skip it.
198
+ if (!currentLocalItem && currentRemoteItem && !previousRemoteTree.uuids[currentRemoteItem.uuid]) {
160
199
  deltas.push({
161
200
  type: currentRemoteItem.type === "directory" ? "createLocalDirectory" : "downloadFile",
162
201
  path
@@ -164,14 +203,16 @@ class Deltas {
164
203
  pathsAdded[path] = true;
165
204
  continue;
166
205
  }
167
- if (currentRemoteItem && currentRemoteItem.type === "file") {
168
- if (currentLocalItem && currentRemoteItem.lastModified > currentLocalItem.lastModified) {
169
- deltas.push({
170
- type: "downloadFile",
171
- path
172
- });
173
- pathsAdded[path] = true;
174
- }
206
+ // If the item exists in both trees and the mod time changed, we download it.
207
+ if (currentRemoteItem &&
208
+ currentRemoteItem.type === "file" &&
209
+ currentLocalItem &&
210
+ currentRemoteItem.lastModified > currentLocalItem.lastModified) {
211
+ deltas.push({
212
+ type: "downloadFile",
213
+ path
214
+ });
215
+ pathsAdded[path] = true;
175
216
  }
176
217
  }
177
218
  // Filter deltas by sync mode
@@ -203,7 +244,67 @@ class Deltas {
203
244
  delta.type === "renameLocalFile" ||
204
245
  delta.type === "downloadFile");
205
246
  }
206
- return deltas;
247
+ // Work on deltas from "left to right" (ascending order, path length).
248
+ const deltasSorted = deltas.sort((a, b) => a.path.split("/").length - b.path.split("/").length);
249
+ // Here we apply the done task to the delta state.
250
+ // E.g. when the user renames/moves a directory from "/sync/dir" to "/sync/dir2"
251
+ // we'll get all the rename/move deltas for the directory children aswell.
252
+ // This is pretty unecessary, hence we filter them here.
253
+ // Same for deletions. We only ever need to rename/move/delete the parent directory if the children did not change.
254
+ // This saves a lot of disk usage and API requests. This also saves time applying all done tasks to the overall state,
255
+ // since we need to loop through less doneTasks.
256
+ for (let i = 0; i < deltasSorted.length; i++) {
257
+ const delta = deltasSorted[i];
258
+ let moveUp = false;
259
+ if (delta.type === "renameLocalDirectory" || delta.type === "renameLocalFile") {
260
+ for (const directoryDelta of renamedLocalDirectories) {
261
+ if (directoryDelta.type === "renameLocalDirectory" && delta.from.startsWith(directoryDelta.from + "/")) {
262
+ const newFromPath = (0, utils_1.replacePathStartWithFromAndTo)(delta.from, directoryDelta.from, directoryDelta.to);
263
+ if (newFromPath === delta.to) {
264
+ deltasSorted.splice(i, 1);
265
+ moveUp = true;
266
+ }
267
+ else {
268
+ deltasSorted.splice(i, 1, Object.assign(Object.assign({}, delta), { from: newFromPath }));
269
+ }
270
+ }
271
+ }
272
+ }
273
+ else if (delta.type === "renameRemoteDirectory" || delta.type === "renameRemoteFile") {
274
+ for (const directoryDelta of renamedRemoteDirectories) {
275
+ if (directoryDelta.type === "renameRemoteDirectory" && delta.from.startsWith(directoryDelta.from + "/")) {
276
+ const newFromPath = (0, utils_1.replacePathStartWithFromAndTo)(delta.from, directoryDelta.from, directoryDelta.to);
277
+ if (newFromPath === delta.to) {
278
+ deltasSorted.splice(i, 1);
279
+ moveUp = true;
280
+ }
281
+ else {
282
+ deltasSorted.splice(i, 1, Object.assign(Object.assign({}, delta), { from: newFromPath }));
283
+ }
284
+ }
285
+ }
286
+ }
287
+ else if (delta.type === "deleteLocalDirectory" || delta.type === "deleteLocalFile") {
288
+ for (const directoryDelta of deletedLocalDirectories) {
289
+ if (directoryDelta.type === "deleteLocalDirectory" && delta.path.startsWith(directoryDelta.path + "/")) {
290
+ deltasSorted.splice(i, 1);
291
+ moveUp = true;
292
+ }
293
+ }
294
+ }
295
+ else if (delta.type === "deleteRemoteDirectory" || delta.type === "deleteRemoteFile") {
296
+ for (const directoryDelta of deletedRemoteDirectories) {
297
+ if (directoryDelta.type === "deleteRemoteDirectory" && delta.path.startsWith(directoryDelta.path + "/")) {
298
+ deltasSorted.splice(i, 1);
299
+ moveUp = true;
300
+ }
301
+ }
302
+ }
303
+ if (moveUp) {
304
+ i--;
305
+ }
306
+ }
307
+ return deltasSorted;
207
308
  }
208
309
  }
209
310
  exports.Deltas = Deltas;
@@ -1 +1 @@
1
- {"version":3,"file":"deltas.js","sourceRoot":"","sources":["../../src/lib/deltas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deltas.js","sourceRoot":"","sources":["../../src/lib/deltas.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@ export type LocalTreeError = {
24
24
  export type LocalTreeIgnored = {
25
25
  localPath: string;
26
26
  relativePath: string;
27
- reason: "dotFile" | "localIgnore" | "defaultIgnore";
27
+ reason: "dotFile" | "localIgnore" | "defaultIgnore" | "empty" | "symlink" | "invalidType";
28
28
  };
29
29
  /**
30
30
  * LocalFileSystem
@@ -44,6 +44,9 @@ export declare class LocalFileSystem {
44
44
  };
45
45
  watcherRunning: boolean;
46
46
  private watcherInstance;
47
+ readonly itemsMutex: import("../../semaphore").ISemaphore;
48
+ readonly mutex: import("../../semaphore").ISemaphore;
49
+ readonly mkdirMutex: import("../../semaphore").ISemaphore;
47
50
  /**
48
51
  * Creates an instance of LocalFileSystem.
49
52
  *
@@ -118,32 +121,10 @@ export declare class LocalFileSystem {
118
121
  mkdir({ relativePath }: {
119
122
  relativePath: string;
120
123
  }): Promise<fs.Stats>;
121
- /**
122
- * Delete a file/directory inside the local sync path.
123
- * @date 3/3/2024 - 10:05:55 PM
124
- *
125
- * @public
126
- * @async
127
- * @param {{ relativePath: string; permanent?: boolean }} param0
128
- * @param {string} param0.relativePath
129
- * @param {boolean} [param0.permanent=false]
130
- * @returns {Promise<void>}
131
- */
132
124
  unlink({ relativePath, permanent }: {
133
125
  relativePath: string;
134
126
  permanent?: boolean;
135
127
  }): Promise<void>;
136
- /**
137
- * Rename a file/directory inside the local sync path. Recursively creates intermediate directories if needed.
138
- * @date 3/2/2024 - 12:41:15 PM
139
- *
140
- * @public
141
- * @async
142
- * @param {{ fromRelativePath: string; toRelativePath: string }} param0
143
- * @param {string} param0.fromRelativePath
144
- * @param {string} param0.toRelativePath
145
- * @returns {Promise<fs.Stats>}
146
- */
147
128
  rename({ fromRelativePath, toRelativePath }: {
148
129
  fromRelativePath: string;
149
130
  toRelativePath: string;
@@ -156,10 +137,13 @@ export declare class LocalFileSystem {
156
137
  * @async
157
138
  * @param {{ relativePath: string }} param0
158
139
  * @param {string} param0.relativePath
159
- * @returns {Promise<void>}
140
+ * @returns {Promise<CloudItem>}
160
141
  */
161
142
  upload({ relativePath }: {
162
143
  relativePath: string;
163
144
  }): Promise<CloudItem>;
145
+ isPathWritable(path: string): Promise<boolean>;
146
+ isPathReadable(path: string): Promise<boolean>;
147
+ pathExists(path: string): Promise<boolean>;
164
148
  }
165
149
  export default LocalFileSystem;