@filen/sync 0.2.1 → 0.3.2

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 (152) hide show
  1. package/.node-version +1 -1
  2. package/dist/ignorer.d.ts +6 -0
  3. package/dist/ignorer.js +43 -24
  4. package/dist/ignorer.js.map +1 -1
  5. package/dist/index.d.ts +4 -1
  6. package/dist/index.js +3 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/deltas.d.ts +58 -2
  9. package/dist/lib/deltas.js +693 -108
  10. package/dist/lib/deltas.js.map +1 -1
  11. package/dist/lib/environment.d.ts +47 -0
  12. package/dist/lib/environment.js +71 -0
  13. package/dist/lib/environment.js.map +1 -0
  14. package/dist/lib/filesystems/dirTree.d.ts +70 -0
  15. package/dist/lib/filesystems/dirTree.js +157 -0
  16. package/dist/lib/filesystems/dirTree.js.map +1 -0
  17. package/dist/lib/filesystems/local.d.ts +18 -8
  18. package/dist/lib/filesystems/local.js +166 -160
  19. package/dist/lib/filesystems/local.js.map +1 -1
  20. package/dist/lib/filesystems/remote.d.ts +12 -5
  21. package/dist/lib/filesystems/remote.js +226 -172
  22. package/dist/lib/filesystems/remote.js.map +1 -1
  23. package/dist/lib/ipc.js +1 -2
  24. package/dist/lib/ipc.js.map +1 -1
  25. package/dist/lib/lock.js +19 -12
  26. package/dist/lib/lock.js.map +1 -1
  27. package/dist/lib/logger.js +9 -7
  28. package/dist/lib/logger.js.map +1 -1
  29. package/dist/lib/state.js +159 -63
  30. package/dist/lib/state.js.map +1 -1
  31. package/dist/lib/sync.d.ts +18 -0
  32. package/dist/lib/sync.js +165 -96
  33. package/dist/lib/sync.js.map +1 -1
  34. package/dist/lib/tasks.d.ts +7 -8
  35. package/dist/lib/tasks.js +38 -45
  36. package/dist/lib/tasks.js.map +1 -1
  37. package/dist/semaphore.d.ts +1 -0
  38. package/dist/semaphore.js +22 -5
  39. package/dist/semaphore.js.map +1 -1
  40. package/dist/utils.js +51 -35
  41. package/dist/utils.js.map +1 -1
  42. package/eslint.config.mjs +36 -0
  43. package/package.json +19 -15
  44. package/tests/bench/collapse.bench.ts +114 -0
  45. package/tests/bench/cycle.bench.ts +111 -0
  46. package/tests/bench/deltas.bench.ts +151 -0
  47. package/tests/bench/harness/fake-sync.ts +32 -0
  48. package/tests/bench/harness/measure.ts +276 -0
  49. package/tests/bench/harness/scale-world.ts +160 -0
  50. package/tests/bench/harness/trees.ts +275 -0
  51. package/tests/bench/local-scan.bench.ts +74 -0
  52. package/tests/bench/longrun.bench.ts +130 -0
  53. package/tests/bench/profile-incremental.ts +90 -0
  54. package/tests/bench/remote-build.bench.ts +104 -0
  55. package/tests/bench/render.ts +14 -0
  56. package/tests/bench/semaphore.bench.ts +79 -0
  57. package/tests/bench/state.bench.ts +85 -0
  58. package/tests/bench/tasks-dispatch.bench.ts +156 -0
  59. package/tests/conformance/virtual-fs.test.ts +213 -0
  60. package/tests/e2e/backup.e2e.test.ts +130 -0
  61. package/tests/e2e/confirm.e2e.test.ts +191 -0
  62. package/tests/e2e/conflict.e2e.test.ts +261 -0
  63. package/tests/e2e/edge.e2e.test.ts +339 -0
  64. package/tests/e2e/harness/account.ts +104 -0
  65. package/tests/e2e/harness/assert.ts +127 -0
  66. package/tests/e2e/harness/drive.ts +88 -0
  67. package/tests/e2e/harness/mutations.ts +249 -0
  68. package/tests/e2e/harness/world.ts +222 -0
  69. package/tests/e2e/ignore.e2e.test.ts +123 -0
  70. package/tests/e2e/lifecycle.e2e.test.ts +290 -0
  71. package/tests/e2e/modes.e2e.test.ts +215 -0
  72. package/tests/e2e/platform.e2e.test.ts +157 -0
  73. package/tests/e2e/property.e2e.test.ts +163 -0
  74. package/tests/e2e/races.e2e.test.ts +90 -0
  75. package/tests/e2e/regressions.e2e.test.ts +212 -0
  76. package/tests/e2e/resilience.e2e.test.ts +231 -0
  77. package/tests/e2e/special.e2e.test.ts +185 -0
  78. package/tests/e2e/state.e2e.test.ts +229 -0
  79. package/tests/e2e/sync.e2e.test.ts +222 -0
  80. package/tests/fakes/fake-cloud.test.ts +267 -0
  81. package/tests/fakes/fake-cloud.ts +1094 -0
  82. package/tests/fakes/virtual-fs.ts +354 -0
  83. package/tests/harness/known-bug.ts +17 -0
  84. package/tests/harness/mutations.ts +65 -0
  85. package/tests/harness/runner.ts +141 -0
  86. package/tests/harness/snapshot.ts +113 -0
  87. package/tests/harness/world.ts +187 -0
  88. package/tests/scenarios/a-baseline.test.ts +107 -0
  89. package/tests/scenarios/aa-races.test.ts +258 -0
  90. package/tests/scenarios/ab-mode-property.test.ts +189 -0
  91. package/tests/scenarios/ac-platform.test.ts +320 -0
  92. package/tests/scenarios/ad-unicode-normalization.test.ts +67 -0
  93. package/tests/scenarios/b-additions.test.ts +160 -0
  94. package/tests/scenarios/c-modifications.test.ts +194 -0
  95. package/tests/scenarios/d-deletions.test.ts +259 -0
  96. package/tests/scenarios/e-rename-move.test.ts +288 -0
  97. package/tests/scenarios/f-ignore-filter.test.ts +346 -0
  98. package/tests/scenarios/g-large-deletion.test.ts +277 -0
  99. package/tests/scenarios/h-resilience.test.ts +167 -0
  100. package/tests/scenarios/i-lifecycle.test.ts +353 -0
  101. package/tests/scenarios/j-state-cache.test.ts +264 -0
  102. package/tests/scenarios/k-scale.test.ts +202 -0
  103. package/tests/scenarios/l-property.test.ts +145 -0
  104. package/tests/scenarios/m-golden.test.ts +452 -0
  105. package/tests/scenarios/o-task-errors.test.ts +497 -0
  106. package/tests/scenarios/p-remote-originated.test.ts +306 -0
  107. package/tests/scenarios/q-cycle-lifecycle.test.ts +234 -0
  108. package/tests/scenarios/r-rename-stress.test.ts +208 -0
  109. package/tests/scenarios/s-upgrade-transition.test.ts +171 -0
  110. package/tests/scenarios/t-type-change.test.ts +144 -0
  111. package/tests/scenarios/u-mode-local-to-cloud.test.ts +347 -0
  112. package/tests/scenarios/v-mode-local-backup.test.ts +201 -0
  113. package/tests/scenarios/w-mode-cloud-to-local.test.ts +304 -0
  114. package/tests/scenarios/x-mode-cloud-backup.test.ts +201 -0
  115. package/tests/scenarios/y-conflict-matrix.test.ts +292 -0
  116. package/tests/scenarios/z-cross-ops.test.ts +285 -0
  117. package/tests/scenarios/zb-dir-rename-cross.test.ts +296 -0
  118. package/tests/scenarios/zc-crash-recovery.test.ts +189 -0
  119. package/tests/scenarios/zd-inode-reuse.test.ts +118 -0
  120. package/tests/scenarios/ze-move-into-new-dir.test.ts +130 -0
  121. package/tests/scenarios/zf-remote-change-unchanged-local.test.ts +81 -0
  122. package/tests/scenarios/zg-edit-during-scan.test.ts +68 -0
  123. package/tests/scenarios/zh-dir-delete-vs-child.test.ts +104 -0
  124. package/tests/scenarios/zi-smoke-test-outage.test.ts +78 -0
  125. package/tests/scenarios/zj-trash-cleanup.test.ts +133 -0
  126. package/tests/scenarios/zk-ignore-asymmetry.test.ts +150 -0
  127. package/tests/scenarios/zl-mode-atomicity.test.ts +104 -0
  128. package/tests/scenarios/zm-scan-concurrency.test.ts +78 -0
  129. package/tests/scenarios/zn-delta-ordering.test.ts +130 -0
  130. package/tests/scenarios/zo-download-temp-cleanup.test.ts +65 -0
  131. package/tests/unit/collapse-deltas.test.ts +276 -0
  132. package/tests/unit/dir-tree.test.ts +159 -0
  133. package/tests/unit/icloud.test.ts +115 -0
  134. package/tests/unit/ignorer-cache-regression.test.ts +70 -0
  135. package/tests/unit/ignorer.test.ts +63 -0
  136. package/tests/unit/ipc-lock.test.ts +438 -0
  137. package/tests/unit/lock.test.ts +135 -0
  138. package/tests/unit/n-unit.test.ts +632 -0
  139. package/tests/unit/remote-tree-unordered-regression.test.ts +101 -0
  140. package/tests/unit/semaphore-regression.test.ts +140 -0
  141. package/tests/unit/state-refencode-regression.test.ts +224 -0
  142. package/tests/unit/state.test.ts +809 -0
  143. package/tests/unit/tasks-dispatch-order-regression.test.ts +53 -0
  144. package/tests/unit/worker-api.test.ts +379 -0
  145. package/tsconfig.json +10 -1
  146. package/tsconfig.test.json +12 -0
  147. package/tsconfig.tsbuildinfo +1 -0
  148. package/vitest.bench.config.ts +32 -0
  149. package/vitest.config.ts +27 -0
  150. package/vitest.e2e.config.ts +68 -0
  151. package/.eslintrc +0 -16
  152. package/jest.config.js +0 -5
package/dist/lib/state.js CHANGED
@@ -12,7 +12,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.State = void 0;
14
14
  const path_1 = __importDefault(require("path"));
15
- const fs_extra_1 = __importDefault(require("fs-extra"));
16
15
  const utils_1 = require("../utils");
17
16
  const readline_1 = __importDefault(require("readline"));
18
17
  const uuid_1 = require("uuid");
@@ -60,23 +59,28 @@ class State {
60
59
  currentLocalTree.inodes[oldItem.inode] = Object.assign(Object.assign({}, oldItem), { path: task.to });
61
60
  }
62
61
  delete currentLocalTree.tree[task.from];
63
- for (const oldPath in currentLocalTree.tree) {
64
- if (oldPath.startsWith(task.from + "/") && oldPath !== task.from) {
65
- const newPath = (0, utils_1.replacePathStartWithFromAndTo)(oldPath, task.from, task.to);
66
- const oldItem = currentLocalTree.tree[oldPath];
67
- if (oldItem) {
68
- const item = Object.assign(Object.assign({}, oldItem), { path: newPath });
69
- currentLocalTree.tree[newPath] = item;
70
- delete currentLocalTree.tree[oldPath];
71
- const oldItemINode = currentLocalTree.inodes[oldItem.inode];
72
- if (oldItemINode) {
73
- currentLocalTree.inodes[oldItem.inode] = Object.assign(Object.assign({}, oldItemINode), { path: newPath });
62
+ // Only a DIRECTORY carries descendants to relocate. A file rename has none, so scanning the
63
+ // whole tree (and every cached hash) for children of a file was pure waste — O(tree) per file
64
+ // rename, i.e. O(renames * tree) across a cycle that renames many scattered files. (P2)
65
+ if (task.type === "renameLocalDirectory") {
66
+ for (const oldPath in currentLocalTree.tree) {
67
+ if (oldPath.startsWith(task.from + "/") && oldPath !== task.from) {
68
+ const newPath = (0, utils_1.replacePathStartWithFromAndTo)(oldPath, task.from, task.to);
69
+ const oldItem = currentLocalTree.tree[oldPath];
70
+ if (oldItem) {
71
+ const item = Object.assign(Object.assign({}, oldItem), { path: newPath });
72
+ currentLocalTree.tree[newPath] = item;
73
+ delete currentLocalTree.tree[oldPath];
74
+ const oldItemINode = currentLocalTree.inodes[oldItem.inode];
75
+ if (oldItemINode) {
76
+ currentLocalTree.inodes[oldItem.inode] = Object.assign(Object.assign({}, oldItemINode), { path: newPath });
77
+ }
78
+ }
79
+ const oldItemHash = this.sync.localFileHashes[oldPath];
80
+ if (oldItemHash) {
81
+ this.sync.localFileHashes[newPath] = oldItemHash;
82
+ delete this.sync.localFileHashes[oldPath];
74
83
  }
75
- }
76
- const oldItemHash = this.sync.localFileHashes[oldPath];
77
- if (oldItemHash) {
78
- this.sync.localFileHashes[newPath] = oldItemHash;
79
- delete this.sync.localFileHashes[oldPath];
80
84
  }
81
85
  }
82
86
  }
@@ -91,25 +95,39 @@ class State {
91
95
  currentRemoteTree.uuids[oldItem.uuid] = newItem;
92
96
  }
93
97
  delete currentRemoteTree.tree[task.from];
94
- for (const oldPath in currentRemoteTree.tree) {
95
- if (oldPath.startsWith(task.from + "/") && oldPath !== task.from) {
96
- const newPath = (0, utils_1.replacePathStartWithFromAndTo)(oldPath, task.from, task.to);
97
- const oldItem = currentRemoteTree.tree[oldPath];
98
- if (oldItem) {
99
- const newItem = Object.assign(Object.assign({}, oldItem), { path: newPath, name: path_1.default.posix.basename(newPath) });
100
- currentRemoteTree.tree[newPath] = newItem;
101
- delete currentRemoteTree.tree[oldPath];
102
- const oldItemUUID = currentRemoteTree.uuids[oldItem.uuid];
103
- if (oldItemUUID) {
104
- currentRemoteTree.uuids[oldItemUUID.uuid] = Object.assign(Object.assign({}, oldItemUUID), { path: newPath, name: path_1.default.posix.basename(newPath) });
98
+ // As with the local side: only a directory has descendants to relocate; skip the whole-tree
99
+ // scan for a file rename. (P2)
100
+ if (task.type === "renameRemoteDirectory") {
101
+ for (const oldPath in currentRemoteTree.tree) {
102
+ if (oldPath.startsWith(task.from + "/") && oldPath !== task.from) {
103
+ const newPath = (0, utils_1.replacePathStartWithFromAndTo)(oldPath, task.from, task.to);
104
+ const oldItem = currentRemoteTree.tree[oldPath];
105
+ if (oldItem) {
106
+ const newItem = Object.assign(Object.assign({}, oldItem), { path: newPath, name: path_1.default.posix.basename(newPath) });
107
+ currentRemoteTree.tree[newPath] = newItem;
108
+ delete currentRemoteTree.tree[oldPath];
109
+ const oldItemUUID = currentRemoteTree.uuids[oldItem.uuid];
110
+ if (oldItemUUID) {
111
+ currentRemoteTree.uuids[oldItemUUID.uuid] = Object.assign(Object.assign({}, oldItemUUID), { path: newPath, name: path_1.default.posix.basename(newPath) });
112
+ }
105
113
  }
106
114
  }
107
115
  }
108
116
  }
109
117
  break;
110
118
  }
111
- case "deleteLocalDirectory":
112
119
  case "deleteLocalFile": {
120
+ // A file has no descendants: remove it directly instead of scanning the whole tree, every
121
+ // cached hash, and every inode for children that cannot exist. (P2)
122
+ const item = currentLocalTree.tree[task.path];
123
+ delete this.sync.localFileHashes[task.path];
124
+ delete currentLocalTree.tree[task.path];
125
+ if (item) {
126
+ delete currentLocalTree.inodes[item.inode];
127
+ }
128
+ break;
129
+ }
130
+ case "deleteLocalDirectory": {
113
131
  delete this.sync.localFileHashes[task.path];
114
132
  delete currentLocalTree.tree[task.path];
115
133
  for (const path in this.sync.localFileHashes) {
@@ -134,8 +152,17 @@ class State {
134
152
  }
135
153
  break;
136
154
  }
137
- case "deleteRemoteDirectory":
138
155
  case "deleteRemoteFile": {
156
+ // A file has no descendants: remove it directly instead of scanning the whole tree and every
157
+ // uuid for children that cannot exist. (P2)
158
+ const item = currentRemoteTree.tree[task.path];
159
+ delete currentRemoteTree.tree[task.path];
160
+ if (item) {
161
+ delete currentRemoteTree.uuids[item.uuid];
162
+ }
163
+ break;
164
+ }
165
+ case "deleteRemoteDirectory": {
139
166
  delete currentRemoteTree.tree[task.path];
140
167
  for (const path in currentRemoteTree.tree) {
141
168
  if (path.startsWith(task.path + "/") || path === task.path) {
@@ -222,36 +249,57 @@ class State {
222
249
  };
223
250
  }
224
251
  async writeLargeRecordSerializedAndAtomically(destination, record) {
225
- await fs_extra_1.default.ensureDir(path_1.default.dirname(destination));
252
+ await this.sync.environment.fs.ensureDir(path_1.default.dirname(destination));
226
253
  const tmpDestination = path_1.default.join(path_1.default.dirname(destination), `${(0, uuid_1.v4)()}.tmp`);
227
254
  try {
228
255
  // eslint-disable-next-line no-async-promise-executor
229
256
  await new Promise(async (resolve, reject) => {
230
257
  try {
231
258
  let didError = false;
232
- const stream = fs_extra_1.default.createWriteStream(tmpDestination, {
259
+ const stream = this.sync.environment.fs.createWriteStream(tmpDestination, {
233
260
  encoding: "utf-8"
234
261
  });
235
262
  stream.on("error", err => {
236
263
  didError = true;
237
264
  reject(err);
238
265
  });
266
+ // Accumulate serialized lines into ~64KB batches and write them in one go, instead of one
267
+ // stream.write() (and drain check) per entry. The emitted bytes are byte-for-byte identical
268
+ // (same `{prop,data}\n` lines in the same order) — this only collapses N tiny writes into a
269
+ // handful of large ones, which on a huge tree removes the per-entry write/await overhead that
270
+ // dominated the per-cycle state save. (perf)
271
+ const FLUSH_THRESHOLD = 1 << 16;
272
+ let batch = "";
273
+ const flush = async () => {
274
+ if (batch.length === 0) {
275
+ return;
276
+ }
277
+ const chunk = batch;
278
+ batch = "";
279
+ if (!stream.write(chunk)) {
280
+ await new Promise(resolve => stream.once("drain", resolve));
281
+ }
282
+ };
239
283
  for (const prop in record) {
240
284
  if (didError) {
241
285
  break;
242
286
  }
243
- if (!stream.write(JSON.stringify({
244
- prop,
245
- data: record[prop]
246
- }) + "\n")) {
247
- await new Promise(resolve => stream.once("drain", resolve));
287
+ // Build the line by concatenating the two stringified fields instead of allocating a
288
+ // `{ prop, data }` wrapper object to stringify — byte-for-byte identical output
289
+ // (`{"prop":<prop>,"data":<data>}`), just without the per-entry wrapper allocation. (perf)
290
+ batch += `{"prop":${JSON.stringify(prop)},"data":${JSON.stringify(record[prop])}}\n`;
291
+ if (batch.length >= FLUSH_THRESHOLD) {
292
+ await flush();
248
293
  }
249
294
  }
295
+ if (!didError) {
296
+ await flush();
297
+ }
250
298
  await new Promise(resolve => stream.end(resolve));
251
299
  if (didError) {
252
300
  return;
253
301
  }
254
- await fs_extra_1.default.move(tmpDestination, destination, {
302
+ await this.sync.environment.fs.move(tmpDestination, destination, {
255
303
  overwrite: true
256
304
  });
257
305
  resolve();
@@ -262,8 +310,8 @@ class State {
262
310
  });
263
311
  }
264
312
  finally {
265
- if (await fs_extra_1.default.pathExists(tmpDestination)) {
266
- await fs_extra_1.default.rm(tmpDestination, {
313
+ if (await this.sync.environment.fs.pathExists(tmpDestination)) {
314
+ await this.sync.environment.fs.rm(tmpDestination, {
267
315
  force: true,
268
316
  maxRetries: 60 * 10,
269
317
  recursive: true,
@@ -276,7 +324,7 @@ class State {
276
324
  var _a, e_1, _b, _c;
277
325
  const record = {};
278
326
  const rl = readline_1.default.createInterface({
279
- input: fs_extra_1.default.createReadStream(inputPath, {
327
+ input: this.sync.environment.fs.createReadStream(inputPath, {
280
328
  encoding: "utf-8"
281
329
  }),
282
330
  crlfDelay: Infinity,
@@ -288,7 +336,9 @@ class State {
288
336
  _c = rl_1_1.value;
289
337
  _d = false;
290
338
  const line = _c;
291
- if (line.trim()) {
339
+ // Cheap non-empty check instead of allocating a trimmed copy per line on the load hot path; a
340
+ // whitespace-only line still drops harmlessly via the JSON.parse failure caught below.
341
+ if (line.length > 0) {
292
342
  try {
293
343
  const parsed = JSON.parse(line);
294
344
  if (parsed && typeof parsed === "object" && "prop" in parsed && "data" in parsed) {
@@ -315,12 +365,12 @@ class State {
315
365
  return record;
316
366
  }
317
367
  async saveLocalFileHashes() {
318
- await fs_extra_1.default.ensureDir(this.statePath);
368
+ await this.sync.environment.fs.ensureDir(this.statePath);
319
369
  await this.writeLargeRecordSerializedAndAtomically(this.localFileHashesPath, this.sync.localFileHashes);
320
370
  }
321
371
  async loadLocalFileHashes() {
322
- await fs_extra_1.default.ensureDir(this.statePath);
323
- if (!(await fs_extra_1.default.exists(this.localFileHashesPath))) {
372
+ await this.sync.environment.fs.ensureDir(this.statePath);
373
+ if (!(await this.sync.environment.fs.exists(this.localFileHashesPath))) {
324
374
  return;
325
375
  }
326
376
  this.sync.localFileHashes = await this.readLargeRecordFromLineStream(this.localFileHashesPath);
@@ -334,7 +384,7 @@ class State {
334
384
  await this.savePreviousTrees();
335
385
  }
336
386
  async loadPreviousTrees() {
337
- await fs_extra_1.default.ensureDir(this.statePath);
387
+ await this.sync.environment.fs.ensureDir(this.statePath);
338
388
  const dir = await fast_glob_1.default.async("**/*", {
339
389
  dot: true,
340
390
  onlyDirectories: false,
@@ -343,7 +393,7 @@ class State {
343
393
  cwd: this.statePath,
344
394
  followSymbolicLinks: false,
345
395
  deep: 0,
346
- fs: fs_extra_1.default,
396
+ fs: this.sync.environment.globFs,
347
397
  suppressErrors: true,
348
398
  stats: false,
349
399
  unique: true,
@@ -354,7 +404,7 @@ class State {
354
404
  continue;
355
405
  }
356
406
  if (entry.trim().endsWith(".tmp")) {
357
- await fs_extra_1.default.rm(path_1.default.join(this.statePath, entry), {
407
+ await this.sync.environment.fs.rm(path_1.default.join(this.statePath, entry), {
358
408
  force: true,
359
409
  maxRetries: 60 * 10,
360
410
  recursive: true,
@@ -362,10 +412,15 @@ class State {
362
412
  });
363
413
  }
364
414
  }
365
- if (!(await fs_extra_1.default.exists(this.previousLocalTreePath)) ||
366
- !(await fs_extra_1.default.exists(this.previousRemoteTreePath)) ||
367
- !(await fs_extra_1.default.exists(this.previousRemoteTreePath)) ||
368
- !(await fs_extra_1.default.exists(this.previousRemoteUUIDsPath))) {
415
+ if (!(await this.sync.environment.fs.exists(this.previousLocalTreePath)) ||
416
+ !(await this.sync.environment.fs.exists(this.previousRemoteTreePath)) ||
417
+ // Previously this duplicated the remote-tree check and never looked at the local INODES file,
418
+ // even though it is read unconditionally below — a missing/partially-written inodes file then
419
+ // passed the completeness gate and threw ENOENT mid-load, bricking the whole state load. All four
420
+ // persisted files must exist for the base to be usable; otherwise treat the state as empty and
421
+ // re-derive.
422
+ !(await this.sync.environment.fs.exists(this.previousLocalINodesPath)) ||
423
+ !(await this.sync.environment.fs.exists(this.previousRemoteUUIDsPath))) {
369
424
  this.sync.isPreviousSavedTreeStateEmpty = true;
370
425
  return;
371
426
  }
@@ -373,48 +428,89 @@ class State {
373
428
  const previousRemoteTree = await this.readLargeRecordFromLineStream(this.previousRemoteTreePath);
374
429
  this.sync.isPreviousSavedTreeStateEmpty = false;
375
430
  this.sync.previousLocalTree.tree = previousLocalTree;
376
- this.sync.previousLocalTree.inodes = await this.readLargeRecordFromLineStream(this.previousLocalINodesPath);
377
431
  this.sync.previousRemoteTree.tree = previousRemoteTree;
378
- this.sync.previousRemoteTree.uuids = await this.readLargeRecordFromLineStream(this.previousRemoteUUIDsPath);
432
+ // Rebuild the inode/uuid indexes from the loaded trees instead of parsing the two sibling index
433
+ // files. Every item carries its own inode/uuid, so tree -> index is an exact reconstruction of what
434
+ // the scan built (and what those files held) — last-writer-wins on a shared inode/uuid matches the
435
+ // build order, which the trees preserve — while skipping a full parse of two N-entry files on every
436
+ // restart. The index files are still required to EXIST (the gate above) and are written as compact
437
+ // path-refs by savePreviousTrees. Back-compat: an OLD on-disk state whose index files hold full items
438
+ // is simply not read here and rebuilt identically, so the first post-upgrade cycle stays a no-op.
439
+ const inodes = {};
440
+ for (const path in previousLocalTree) {
441
+ const item = previousLocalTree[path];
442
+ if (item) {
443
+ inodes[item.inode] = item;
444
+ }
445
+ }
446
+ this.sync.previousLocalTree.inodes = inodes;
447
+ const uuids = {};
448
+ for (const path in previousRemoteTree) {
449
+ const item = previousRemoteTree[path];
450
+ if (item) {
451
+ uuids[item.uuid] = item;
452
+ }
453
+ }
454
+ this.sync.previousRemoteTree.uuids = uuids;
379
455
  this.sync.previousLocalTree.size = Object.keys(previousLocalTree).length;
380
456
  this.sync.previousRemoteTree.size = Object.keys(previousRemoteTree).length;
381
457
  }
382
458
  async savePreviousTrees() {
383
- await fs_extra_1.default.ensureDir(this.statePath);
459
+ await this.sync.environment.fs.ensureDir(this.statePath);
460
+ // The inode/uuid index files used to persist every FULL item — a byte-for-byte duplicate of what the
461
+ // two tree files already hold (each item is keyed once by path, once by inode/uuid). We now persist
462
+ // them as compact path-REFS (inode -> path, uuid -> path): the index files exist only so the load-time
463
+ // completeness gate + partial-write recovery still see four files, and loadPreviousTrees rebuilds the
464
+ // in-memory indexes from the tree files (every item carries its own inode/uuid). This halves the
465
+ // serialized bytes + CPU for two of the four files every cycle. The tree files are unchanged. (perf)
466
+ const localINodeRefs = {};
467
+ for (const inode in this.sync.previousLocalTree.inodes) {
468
+ const item = this.sync.previousLocalTree.inodes[inode];
469
+ if (item) {
470
+ localINodeRefs[inode] = item.path;
471
+ }
472
+ }
473
+ const remoteUUIDRefs = {};
474
+ for (const uuid in this.sync.previousRemoteTree.uuids) {
475
+ const item = this.sync.previousRemoteTree.uuids[uuid];
476
+ if (item) {
477
+ remoteUUIDRefs[uuid] = item.path;
478
+ }
479
+ }
384
480
  await this.writeLargeRecordSerializedAndAtomically(this.previousLocalTreePath, this.sync.previousLocalTree.tree);
385
- await this.writeLargeRecordSerializedAndAtomically(this.previousLocalINodesPath, this.sync.previousLocalTree.inodes);
481
+ await this.writeLargeRecordSerializedAndAtomically(this.previousLocalINodesPath, localINodeRefs);
386
482
  await this.writeLargeRecordSerializedAndAtomically(this.previousRemoteTreePath, this.sync.previousRemoteTree.tree);
387
- await this.writeLargeRecordSerializedAndAtomically(this.previousRemoteUUIDsPath, this.sync.previousRemoteTree.uuids);
483
+ await this.writeLargeRecordSerializedAndAtomically(this.previousRemoteUUIDsPath, remoteUUIDRefs);
388
484
  this.sync.isPreviousSavedTreeStateEmpty = false;
389
485
  }
390
486
  async clear() {
391
- await fs_extra_1.default.ensureDir(this.statePath);
487
+ await this.sync.environment.fs.ensureDir(this.statePath);
392
488
  await Promise.all([
393
- fs_extra_1.default.rm(this.previousLocalTreePath, {
489
+ this.sync.environment.fs.rm(this.previousLocalTreePath, {
394
490
  force: true,
395
491
  maxRetries: 60 * 10,
396
492
  recursive: true,
397
493
  retryDelay: 100
398
494
  }),
399
- fs_extra_1.default.rm(this.previousLocalINodesPath, {
495
+ this.sync.environment.fs.rm(this.previousLocalINodesPath, {
400
496
  force: true,
401
497
  maxRetries: 60 * 10,
402
498
  recursive: true,
403
499
  retryDelay: 100
404
500
  }),
405
- fs_extra_1.default.rm(this.previousRemoteTreePath, {
501
+ this.sync.environment.fs.rm(this.previousRemoteTreePath, {
406
502
  force: true,
407
503
  maxRetries: 60 * 10,
408
504
  recursive: true,
409
505
  retryDelay: 100
410
506
  }),
411
- fs_extra_1.default.rm(this.previousRemoteUUIDsPath, {
507
+ this.sync.environment.fs.rm(this.previousRemoteUUIDsPath, {
412
508
  force: true,
413
509
  maxRetries: 60 * 10,
414
510
  recursive: true,
415
511
  retryDelay: 100
416
512
  }),
417
- fs_extra_1.default.rm(this.localFileHashesPath, {
513
+ this.sync.environment.fs.rm(this.localFileHashesPath, {
418
514
  force: true,
419
515
  maxRetries: 60 * 10,
420
516
  recursive: true,
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import State from "./state";
8
8
  import Ignorer from "../ignorer";
9
9
  import type SyncWorker from "..";
10
10
  import Lock from "./lock";
11
+ import { type SyncEnvironment } from "./environment";
11
12
  /**
12
13
  * Sync
13
14
  *
@@ -17,6 +18,7 @@ import Lock from "./lock";
17
18
  */
18
19
  export declare class Sync {
19
20
  readonly sdk: FilenSDK;
21
+ readonly environment: SyncEnvironment;
20
22
  readonly syncPair: SyncPair;
21
23
  private isInitialized;
22
24
  readonly localFileSystem: LocalFileSystem;
@@ -41,6 +43,7 @@ export declare class Sync {
41
43
  localTrashDisabled: boolean;
42
44
  localTreeErrors: LocalTreeError[];
43
45
  cleaningLocalTrash: boolean;
46
+ cleanupLocalTrashInterval: ReturnType<typeof setInterval> | undefined;
44
47
  isPreviousSavedTreeStateEmpty: boolean;
45
48
  requireConfirmationOnLargeDeletion: boolean;
46
49
  deletionConfirmationResult: "delete" | "restart" | "waiting";
@@ -59,11 +62,26 @@ export declare class Sync {
59
62
  });
60
63
  smokeTest(): Promise<void>;
61
64
  cleanupLocalTrash(): void;
65
+ cleanupLocalTrashOnce(): Promise<void>;
62
66
  initialize(): Promise<void>;
63
67
  cleanup({ deleteLocalDbFiles }: {
64
68
  deleteLocalDbFiles?: boolean;
65
69
  }): Promise<void>;
66
70
  deleteLocalSyncDbFiles(): Promise<void>;
67
71
  private run;
72
+ /**
73
+ * Run exactly one synchronization cycle without scheduling the next one.
74
+ *
75
+ * This is the body of a single pass: error/pause gating, lock acquisition,
76
+ * tree diffing, delta processing, task execution and state persistence. It
77
+ * never throws (failures are caught and reported as a "cycleError" message)
78
+ * and never reschedules — {@link run} owns the self-scheduling loop. Exposed
79
+ * so a single cycle can be driven deterministically.
80
+ *
81
+ * @public
82
+ * @async
83
+ * @returns {Promise<void>}
84
+ */
85
+ runCycle(): Promise<void>;
68
86
  }
69
87
  export default Sync;