pushwork 1.0.5 → 1.0.11

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 (196) hide show
  1. package/README.md +87 -335
  2. package/babel.config.js +5 -0
  3. package/dist/cli/commands.d.ts +9 -15
  4. package/dist/cli/commands.d.ts.map +1 -1
  5. package/dist/cli/commands.js +37 -170
  6. package/dist/cli/commands.js.map +1 -1
  7. package/dist/cli/output.d.ts +11 -25
  8. package/dist/cli/output.d.ts.map +1 -1
  9. package/dist/cli/output.js +55 -61
  10. package/dist/cli/output.js.map +1 -1
  11. package/dist/cli.js +208 -213
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands.d.ts +51 -0
  14. package/dist/commands.d.ts.map +1 -0
  15. package/dist/commands.js +799 -0
  16. package/dist/commands.js.map +1 -0
  17. package/dist/core/change-detection.d.ts +7 -23
  18. package/dist/core/change-detection.d.ts.map +1 -1
  19. package/dist/core/change-detection.js +108 -122
  20. package/dist/core/change-detection.js.map +1 -1
  21. package/dist/core/config.d.ts +81 -0
  22. package/dist/core/config.d.ts.map +1 -0
  23. package/dist/core/config.js +296 -0
  24. package/dist/core/config.js.map +1 -0
  25. package/dist/core/index.d.ts +1 -0
  26. package/dist/core/index.d.ts.map +1 -1
  27. package/dist/core/index.js +1 -1
  28. package/dist/core/index.js.map +1 -1
  29. package/dist/core/move-detection.d.ts +4 -3
  30. package/dist/core/move-detection.d.ts.map +1 -1
  31. package/dist/core/move-detection.js +8 -7
  32. package/dist/core/move-detection.js.map +1 -1
  33. package/dist/core/snapshot.d.ts +0 -4
  34. package/dist/core/snapshot.d.ts.map +1 -1
  35. package/dist/core/snapshot.js +2 -11
  36. package/dist/core/snapshot.js.map +1 -1
  37. package/dist/core/sync-engine.d.ts +41 -12
  38. package/dist/core/sync-engine.d.ts.map +1 -1
  39. package/dist/core/sync-engine.js +522 -359
  40. package/dist/core/sync-engine.js.map +1 -1
  41. package/dist/index.d.ts +0 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +0 -6
  44. package/dist/index.js.map +1 -1
  45. package/dist/types/config.d.ts +24 -88
  46. package/dist/types/config.d.ts.map +1 -1
  47. package/dist/types/config.js +6 -0
  48. package/dist/types/config.js.map +1 -1
  49. package/dist/types/documents.d.ts +15 -2
  50. package/dist/types/documents.d.ts.map +1 -1
  51. package/dist/types/documents.js.map +1 -1
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/types/index.js +0 -3
  54. package/dist/types/index.js.map +1 -1
  55. package/dist/types/snapshot.d.ts +0 -21
  56. package/dist/types/snapshot.d.ts.map +1 -1
  57. package/dist/types/snapshot.js +0 -14
  58. package/dist/types/snapshot.js.map +1 -1
  59. package/dist/utils/content.d.ts.map +1 -1
  60. package/dist/utils/content.js +2 -6
  61. package/dist/utils/content.js.map +1 -1
  62. package/dist/utils/directory.d.ts +24 -0
  63. package/dist/utils/directory.d.ts.map +1 -0
  64. package/dist/utils/directory.js +56 -0
  65. package/dist/utils/directory.js.map +1 -0
  66. package/dist/utils/fs.d.ts +15 -2
  67. package/dist/utils/fs.d.ts.map +1 -1
  68. package/dist/utils/fs.js +53 -20
  69. package/dist/utils/fs.js.map +1 -1
  70. package/dist/utils/index.d.ts +1 -0
  71. package/dist/utils/index.d.ts.map +1 -1
  72. package/dist/utils/index.js +1 -3
  73. package/dist/utils/index.js.map +1 -1
  74. package/dist/utils/keyhive.d.ts +9 -0
  75. package/dist/utils/keyhive.d.ts.map +1 -0
  76. package/dist/utils/keyhive.js +26 -0
  77. package/dist/utils/keyhive.js.map +1 -0
  78. package/dist/utils/mime-types.d.ts.map +1 -1
  79. package/dist/utils/mime-types.js +11 -4
  80. package/dist/utils/mime-types.js.map +1 -1
  81. package/dist/utils/network-sync.d.ts +16 -7
  82. package/dist/utils/network-sync.d.ts.map +1 -1
  83. package/dist/utils/network-sync.js +158 -99
  84. package/dist/utils/network-sync.js.map +1 -1
  85. package/dist/utils/output.d.ts +129 -0
  86. package/dist/utils/output.d.ts.map +1 -0
  87. package/dist/utils/output.js +375 -0
  88. package/dist/utils/output.js.map +1 -0
  89. package/dist/utils/repo-factory.d.ts +2 -6
  90. package/dist/utils/repo-factory.d.ts.map +1 -1
  91. package/dist/utils/repo-factory.js +8 -31
  92. package/dist/utils/repo-factory.js.map +1 -1
  93. package/dist/utils/string-similarity.js +2 -2
  94. package/dist/utils/string-similarity.js.map +1 -1
  95. package/dist/utils/trace.d.ts +19 -0
  96. package/dist/utils/trace.d.ts.map +1 -0
  97. package/dist/utils/trace.js +68 -0
  98. package/dist/utils/trace.js.map +1 -0
  99. package/package.json +21 -11
  100. package/src/cli.ts +276 -308
  101. package/src/commands.ts +988 -0
  102. package/src/core/change-detection.ts +226 -246
  103. package/src/{config/index.ts → core/config.ts} +65 -82
  104. package/src/core/index.ts +1 -1
  105. package/src/core/move-detection.ts +10 -8
  106. package/src/core/snapshot.ts +2 -12
  107. package/src/core/sync-engine.ts +630 -478
  108. package/src/index.ts +0 -10
  109. package/src/types/config.ts +28 -93
  110. package/src/types/documents.ts +16 -2
  111. package/src/types/index.ts +0 -5
  112. package/src/types/snapshot.ts +0 -23
  113. package/src/utils/content.ts +2 -6
  114. package/src/utils/directory.ts +73 -0
  115. package/src/utils/fs.ts +57 -23
  116. package/src/utils/index.ts +1 -5
  117. package/src/utils/mime-types.ts +12 -4
  118. package/src/utils/network-sync.ts +216 -138
  119. package/src/utils/output.ts +450 -0
  120. package/src/utils/repo-factory.ts +13 -44
  121. package/src/utils/string-similarity.ts +2 -2
  122. package/src/utils/trace.ts +70 -0
  123. package/test/integration/exclude-patterns.test.ts +6 -15
  124. package/test/integration/fuzzer.test.ts +308 -391
  125. package/test/integration/in-memory-sync.test.ts +435 -0
  126. package/test/integration/init-sync.test.ts +89 -0
  127. package/test/integration/sync-deletion.test.ts +2 -61
  128. package/test/integration/sync-flow.test.ts +4 -24
  129. package/test/jest.setup.ts +34 -0
  130. package/test/unit/deletion-behavior.test.ts +3 -14
  131. package/test/unit/enhanced-mime-detection.test.ts +0 -22
  132. package/test/unit/snapshot.test.ts +2 -29
  133. package/test/unit/sync-convergence.test.ts +3 -198
  134. package/test/unit/sync-timing.test.ts +0 -44
  135. package/test/unit/utils.test.ts +0 -2
  136. package/tsconfig.json +3 -3
  137. package/bench/filesystem.bench.ts +0 -78
  138. package/bench/hashing.bench.ts +0 -60
  139. package/bench/move-detection.bench.ts +0 -130
  140. package/bench/runner.ts +0 -49
  141. package/dist/browser/browser-sync-engine.d.ts +0 -64
  142. package/dist/browser/browser-sync-engine.d.ts.map +0 -1
  143. package/dist/browser/browser-sync-engine.js +0 -303
  144. package/dist/browser/browser-sync-engine.js.map +0 -1
  145. package/dist/browser/filesystem-adapter.d.ts +0 -84
  146. package/dist/browser/filesystem-adapter.d.ts.map +0 -1
  147. package/dist/browser/filesystem-adapter.js +0 -413
  148. package/dist/browser/filesystem-adapter.js.map +0 -1
  149. package/dist/browser/index.d.ts +0 -36
  150. package/dist/browser/index.d.ts.map +0 -1
  151. package/dist/browser/index.js +0 -90
  152. package/dist/browser/index.js.map +0 -1
  153. package/dist/browser/types.d.ts +0 -70
  154. package/dist/browser/types.d.ts.map +0 -1
  155. package/dist/browser/types.js +0 -6
  156. package/dist/browser/types.js.map +0 -1
  157. package/dist/config/remote-manager.d.ts +0 -65
  158. package/dist/config/remote-manager.d.ts.map +0 -1
  159. package/dist/config/remote-manager.js +0 -243
  160. package/dist/config/remote-manager.js.map +0 -1
  161. package/dist/core/isomorphic-snapshot.d.ts +0 -58
  162. package/dist/core/isomorphic-snapshot.d.ts.map +0 -1
  163. package/dist/core/isomorphic-snapshot.js +0 -204
  164. package/dist/core/isomorphic-snapshot.js.map +0 -1
  165. package/dist/platform/browser-filesystem.d.ts +0 -26
  166. package/dist/platform/browser-filesystem.d.ts.map +0 -1
  167. package/dist/platform/browser-filesystem.js +0 -91
  168. package/dist/platform/browser-filesystem.js.map +0 -1
  169. package/dist/platform/filesystem.d.ts +0 -29
  170. package/dist/platform/filesystem.d.ts.map +0 -1
  171. package/dist/platform/filesystem.js +0 -65
  172. package/dist/platform/filesystem.js.map +0 -1
  173. package/dist/platform/node-filesystem.d.ts +0 -21
  174. package/dist/platform/node-filesystem.d.ts.map +0 -1
  175. package/dist/platform/node-filesystem.js +0 -93
  176. package/dist/platform/node-filesystem.js.map +0 -1
  177. package/dist/utils/fs-browser.d.ts +0 -57
  178. package/dist/utils/fs-browser.d.ts.map +0 -1
  179. package/dist/utils/fs-browser.js +0 -311
  180. package/dist/utils/fs-browser.js.map +0 -1
  181. package/dist/utils/fs-node.d.ts +0 -53
  182. package/dist/utils/fs-node.d.ts.map +0 -1
  183. package/dist/utils/fs-node.js +0 -220
  184. package/dist/utils/fs-node.js.map +0 -1
  185. package/dist/utils/isomorphic.d.ts +0 -29
  186. package/dist/utils/isomorphic.d.ts.map +0 -1
  187. package/dist/utils/isomorphic.js +0 -139
  188. package/dist/utils/isomorphic.js.map +0 -1
  189. package/dist/utils/pure.d.ts +0 -25
  190. package/dist/utils/pure.d.ts.map +0 -1
  191. package/dist/utils/pure.js +0 -112
  192. package/dist/utils/pure.js.map +0 -1
  193. package/src/cli/commands.ts +0 -1030
  194. package/src/cli/index.ts +0 -2
  195. package/src/cli/output.ts +0 -244
  196. package/test/README-TESTING-GAPS.md +0 -174
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPlainUrl = getPlainUrl;
4
+ exports.findFileInDirectoryHierarchy = findFileInDirectoryHierarchy;
5
+ const automerge_repo_1 = require("@automerge/automerge-repo");
6
+ /**
7
+ * Get a plain URL (without heads) from any URL.
8
+ * Versioned URLs with heads return view handles, which show a frozen point in time.
9
+ * For internal navigation, we always want to see the CURRENT state of documents.
10
+ */
11
+ function getPlainUrl(url) {
12
+ const { documentId } = (0, automerge_repo_1.parseAutomergeUrl)(url);
13
+ return (0, automerge_repo_1.stringifyAutomergeUrl)({ documentId });
14
+ }
15
+ /**
16
+ * Find a file in the directory hierarchy by path.
17
+ *
18
+ * IMPORTANT: This function strips heads from all URLs before navigation.
19
+ * This ensures we always see the CURRENT state of directories, not a frozen
20
+ * point-in-time view. This is critical because:
21
+ * 1. Directory documents store versioned URLs for subdirectories
22
+ * 2. These URLs may have been captured when the subdirectory was empty
23
+ * 3. Using versioned URLs would make files appear to not exist
24
+ * 4. This would trigger false "remote deletion" detection
25
+ */
26
+ async function findFileInDirectoryHierarchy(repo, directoryUrl, filePath) {
27
+ try {
28
+ const pathParts = filePath.split("/");
29
+ let currentDirUrl = getPlainUrl(directoryUrl);
30
+ // Navigate through directories to find the parent directory
31
+ for (let i = 0; i < pathParts.length - 1; i++) {
32
+ const dirName = pathParts[i];
33
+ const dirHandle = await repo.find(currentDirUrl);
34
+ const dirDoc = await dirHandle.doc();
35
+ if (!dirDoc)
36
+ return null;
37
+ const subDirEntry = dirDoc.docs.find((entry) => entry.name === dirName && entry.type === "folder");
38
+ if (!subDirEntry)
39
+ return null;
40
+ currentDirUrl = getPlainUrl(subDirEntry.url);
41
+ }
42
+ // Now look for the file in the final directory
43
+ const fileName = pathParts[pathParts.length - 1];
44
+ const finalDirHandle = await repo.find(currentDirUrl);
45
+ const finalDirDoc = await finalDirHandle.doc();
46
+ if (!finalDirDoc)
47
+ return null;
48
+ const fileEntry = finalDirDoc.docs.find((entry) => entry.name === fileName && entry.type === "file");
49
+ return fileEntry || null;
50
+ }
51
+ catch (error) {
52
+ // Failed to find file in hierarchy
53
+ return null;
54
+ }
55
+ }
56
+ //# sourceMappingURL=directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/utils/directory.ts"],"names":[],"mappings":";;AAaA,kCAGC;AAaD,oEA2CC;AAxED,8DAKmC;AAGnC;;;;GAIG;AACH,SAAgB,WAAW,CAAC,GAAiB;IAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,kCAAiB,EAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,IAAA,sCAAqB,EAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,4BAA4B,CAChD,IAAU,EACV,YAA0B,EAC1B,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAE9C,4DAA4D;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAoB,aAAa,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC;YAErC,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEzB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAClC,CAAC,KAAwD,EAAE,EAAE,CAC3D,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CACpD,CAAC;YAEF,IAAI,CAAC,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC9B,aAAa,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAoB,aAAa,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC;QAE/C,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAE9B,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CACrC,CAAC,KAAwD,EAAE,EAAE,CAC3D,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CACnD,CAAC;QAEF,OAAO,SAAS,IAAI,IAAI,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mCAAmC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ import * as A from "@automerge/automerge";
1
2
  import { FileSystemEntry } from "../types";
2
3
  /**
3
4
  * Check if a path exists
@@ -18,7 +19,7 @@ export declare function readFileContent(filePath: string): Promise<string | Uint
18
19
  /**
19
20
  * Write file content from string or buffer
20
21
  */
21
- export declare function writeFileContent(filePath: string, content: string | Uint8Array): Promise<void>;
22
+ export declare function writeFileContent(filePath: string, content: string | A.ImmutableString | Uint8Array): Promise<void>;
22
23
  /**
23
24
  * Ensure directory exists, creating it if necessary
24
25
  */
@@ -42,7 +43,7 @@ export declare function movePath(sourcePath: string, destPath: string): Promise<
42
43
  /**
43
44
  * Calculate content hash for change detection
44
45
  */
45
- export declare function calculateContentHash(content: string | Uint8Array): Promise<string>;
46
+ export declare function calculateContentHash(content: string | A.ImmutableString | Uint8Array): Promise<string>;
46
47
  /**
47
48
  * Get MIME type for file
48
49
  */
@@ -53,10 +54,22 @@ export declare function getMimeType(filePath: string): string;
53
54
  export declare function getFileExtension(filePath: string): string;
54
55
  /**
55
56
  * Normalize path separators for cross-platform compatibility
57
+ * Converts all path separators to forward slashes for consistent storage
56
58
  */
57
59
  export declare function normalizePath(filePath: string): string;
60
+ /**
61
+ * Join paths and normalize separators for cross-platform compatibility
62
+ * Use this instead of string concatenation to ensure proper path handling on Windows
63
+ */
64
+ export declare function joinAndNormalizePath(...paths: string[]): string;
58
65
  /**
59
66
  * Get relative path from base directory
60
67
  */
61
68
  export declare function getRelativePath(basePath: string, filePath: string): string;
69
+ /**
70
+ * Format a path as a relative path with proper prefix
71
+ * Ensures paths like "src" become "./src" for clarity
72
+ * Leaves absolute paths and paths already starting with . or .. unchanged
73
+ */
74
+ export declare function formatRelativePath(filePath: string): string;
62
75
  //# sourceMappingURL=fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAY,MAAM,UAAU,CAAC;AAGrD;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmBjC;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBnE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAS9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAahE;AAsBD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,UAAQ,EACjB,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CAoC5B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,CAAC,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAY,MAAM,UAAU,CAAC;AAGrD;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmBjC;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBnE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAS9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,eAAe,GAAG,UAAU,GAC/C,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAahE;AAsBD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,UAAQ,EACjB,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CAoC5B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,eAAe,GAAG,UAAU,GAC/C,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAK/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO3D"}
package/dist/utils/fs.js CHANGED
@@ -47,13 +47,16 @@ exports.calculateContentHash = calculateContentHash;
47
47
  exports.getMimeType = getMimeType;
48
48
  exports.getFileExtension = getFileExtension;
49
49
  exports.normalizePath = normalizePath;
50
+ exports.joinAndNormalizePath = joinAndNormalizePath;
50
51
  exports.getRelativePath = getRelativePath;
52
+ exports.formatRelativePath = formatRelativePath;
51
53
  const fs = __importStar(require("fs/promises"));
52
54
  const path = __importStar(require("path"));
53
55
  const crypto = __importStar(require("crypto"));
54
56
  const glob_1 = require("glob");
55
57
  const mimeTypes = __importStar(require("mime-types"));
56
58
  const ignore = __importStar(require("ignore"));
59
+ const A = __importStar(require("@automerge/automerge"));
57
60
  const types_1 = require("../types");
58
61
  const mime_types_1 = require("./mime-types");
59
62
  /**
@@ -137,6 +140,10 @@ async function writeFileContent(filePath, content) {
137
140
  if (typeof content === "string") {
138
141
  await fs.writeFile(filePath, content, "utf8");
139
142
  }
143
+ else if (A.isImmutableString(content)) {
144
+ // Convert ImmutableString to regular string for filesystem operations
145
+ await fs.writeFile(filePath, content.toString(), "utf8");
146
+ }
140
147
  else {
141
148
  await fs.writeFile(filePath, content);
142
149
  }
@@ -161,7 +168,7 @@ async function removePath(filePath) {
161
168
  try {
162
169
  const stats = await fs.stat(filePath);
163
170
  if (stats.isDirectory()) {
164
- await fs.rmdir(filePath, { recursive: true });
171
+ await fs.rm(filePath, { recursive: true });
165
172
  }
166
173
  else {
167
174
  await fs.unlink(filePath);
@@ -192,30 +199,27 @@ function isExcluded(filePath, basePath, excludePatterns) {
192
199
  async function listDirectory(dirPath, recursive = false, excludePatterns = []) {
193
200
  const entries = [];
194
201
  try {
202
+ // Construct pattern using path.join for proper cross-platform handling
195
203
  const pattern = recursive
196
204
  ? path.join(dirPath, "**/*")
197
205
  : path.join(dirPath, "*");
198
- // Convert exclude patterns to glob ignore patterns
199
- const ignorePatterns = excludePatterns.map((pattern) => {
200
- if (pattern.startsWith(".") && !pattern.includes("*")) {
201
- // Directory patterns
202
- return `${pattern}/**`;
203
- }
204
- return pattern;
205
- });
206
- const paths = await (0, glob_1.glob)(pattern, {
206
+ // glob expects forward slashes, even on Windows
207
+ const normalizedPattern = pattern.replace(/\\/g, "/");
208
+ // Use glob to get all paths (with dot files)
209
+ // Note: We don't use glob's ignore option because it doesn't support gitignore semantics
210
+ const paths = await (0, glob_1.glob)(normalizedPattern, {
207
211
  dot: true,
208
- ignore: ignorePatterns,
209
212
  });
210
- for (const filePath of paths) {
211
- // Additional filtering for safety
212
- if (!isExcluded(filePath, dirPath, excludePatterns)) {
213
- const entry = await getFileSystemEntry(filePath);
214
- if (entry) {
215
- entries.push(entry);
216
- }
213
+ // Parallelize all stat calls for better performance
214
+ const allEntries = await Promise.all(paths.map(async (filePath) => {
215
+ // Filter using proper gitignore semantics from the ignore library
216
+ if (isExcluded(filePath, dirPath, excludePatterns)) {
217
+ return null;
217
218
  }
218
- }
219
+ return await getFileSystemEntry(filePath);
220
+ }));
221
+ // Filter out null entries (excluded files or files that couldn't be read)
222
+ entries.push(...allEntries.filter((e) => e !== null));
219
223
  }
220
224
  catch {
221
225
  // Return empty array if directory doesn't exist or can't be read
@@ -244,7 +248,12 @@ async function movePath(sourcePath, destPath) {
244
248
  */
245
249
  async function calculateContentHash(content) {
246
250
  const hash = crypto.createHash("sha256");
247
- hash.update(content);
251
+ if (A.isImmutableString(content)) {
252
+ hash.update(content.toString());
253
+ }
254
+ else {
255
+ hash.update(content);
256
+ }
248
257
  return hash.digest("hex");
249
258
  }
250
259
  /**
@@ -262,14 +271,38 @@ function getFileExtension(filePath) {
262
271
  }
263
272
  /**
264
273
  * Normalize path separators for cross-platform compatibility
274
+ * Converts all path separators to forward slashes for consistent storage
265
275
  */
266
276
  function normalizePath(filePath) {
267
277
  return path.posix.normalize(filePath.replace(/\\/g, "/"));
268
278
  }
279
+ /**
280
+ * Join paths and normalize separators for cross-platform compatibility
281
+ * Use this instead of string concatenation to ensure proper path handling on Windows
282
+ */
283
+ function joinAndNormalizePath(...paths) {
284
+ // Use path.join to properly handle path construction (handles Windows drive letters, etc.)
285
+ const joined = path.join(...paths);
286
+ // Then normalize to forward slashes for consistent storage/comparison
287
+ return normalizePath(joined);
288
+ }
269
289
  /**
270
290
  * Get relative path from base directory
271
291
  */
272
292
  function getRelativePath(basePath, filePath) {
273
293
  return normalizePath(path.relative(basePath, filePath));
274
294
  }
295
+ /**
296
+ * Format a path as a relative path with proper prefix
297
+ * Ensures paths like "src" become "./src" for clarity
298
+ * Leaves absolute paths and paths already starting with . or .. unchanged
299
+ */
300
+ function formatRelativePath(filePath) {
301
+ // Already starts with . or / - leave as-is
302
+ if (filePath.startsWith(".") || filePath.startsWith("/")) {
303
+ return filePath;
304
+ }
305
+ // Add ./ prefix for clarity
306
+ return `./${filePath}`;
307
+ }
275
308
  //# sourceMappingURL=fs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from "./fs";
2
2
  export * from "./mime-types";
3
+ export * from "./directory";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAKrB,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -14,9 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- // File system utilities
18
17
  __exportStar(require("./fs"), exports);
19
- // Content similarity utilities
20
- // Enhanced MIME type detection
21
18
  __exportStar(require("./mime-types"), exports);
19
+ __exportStar(require("./directory"), exports);
22
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAAwB;AACxB,uCAAqB;AAErB,+BAA+B;AAE/B,+BAA+B;AAC/B,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAqB;AACrB,+CAA6B;AAC7B,8CAA4B"}
@@ -0,0 +1,9 @@
1
+ import { Keyhive, Signer } from "@keyhive/keyhive/slim";
2
+ import type { NetworkAdapter, PeerId, StorageAdapterInterface } from "@automerge/automerge-repo/slim";
3
+ export declare function setupKeyhive(storageAdapter: StorageAdapterInterface, networkAdapter: NetworkAdapter): Promise<{
4
+ adapter: NetworkAdapter;
5
+ signer: Signer;
6
+ keyhive: Keyhive;
7
+ peerId: PeerId;
8
+ }>;
9
+ //# sourceMappingURL=keyhive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyhive.d.ts","sourceRoot":"","sources":["../../src/utils/keyhive.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EACP,MAAM,EAEP,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EACV,cAAc,EACd,MAAM,EACN,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAGxC,wBAAsB,YAAY,CAChC,cAAc,EAAE,uBAAuB,EACvC,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC;IACT,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAmBD"}
@@ -0,0 +1,26 @@
1
+ import { CiphertextStore, Keyhive, Signer, initFromBase64Wasm, } from "@keyhive/keyhive/slim";
2
+ // @ts-expect-error
3
+ import { wasmBase64 } from "@keyhive/keyhive/keyhive_wasm.base64.js";
4
+ initFromBase64Wasm(wasmBase64);
5
+ import { initializeKeyhive } from "@automerge/automerge-repo-keyhive";
6
+ import * as os from "node:os";
7
+ export async function setupKeyhive(storageAdapter, networkAdapter) {
8
+ const signer = Signer.generateMemory();
9
+ const store = CiphertextStore.newInMemory();
10
+ const hive = await Keyhive.init(signer, store, console.info);
11
+ const hivekit = await initializeKeyhive({
12
+ storage: storageAdapter,
13
+ peerIdSuffix: `pushwork-${os.hostname}-${os.platform}-${Math.random()
14
+ .toString(32)
15
+ .slice(2)}`,
16
+ automaticArchiveIngestion: false,
17
+ networkAdapter: networkAdapter,
18
+ });
19
+ return {
20
+ adapter: hivekit.networkAdapter,
21
+ signer,
22
+ keyhive: hive,
23
+ peerId: hivekit.peerId,
24
+ };
25
+ }
26
+ //# sourceMappingURL=keyhive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyhive.js","sourceRoot":"","sources":["../../src/utils/keyhive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,OAAO,EACP,MAAM,EACN,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrE,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAMtE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,cAAuC,EACvC,cAA8B;IAO9B,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;QACtC,OAAO,EAAE,cAAc;QACvB,YAAY,EAAE,YAAY,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;aAClE,QAAQ,CAAC,EAAE,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,EAAE;QACb,yBAAyB,EAAE,KAAK;QAChC,cAAc,EAAE,cAAc;KAC/B,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,cAAc;QAC/B,MAAM;QACN,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mime-types.d.ts","sourceRoot":"","sources":["../../src/utils/mime-types.ts"],"names":[],"mappings":"AA2GA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsB5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG3D;AAUD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB3E"}
1
+ {"version":3,"file":"mime-types.d.ts","sourceRoot":"","sources":["../../src/utils/mime-types.ts"],"names":[],"mappings":"AA2GA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuB5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG3D;AAiBD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB3E"}
@@ -132,8 +132,9 @@ const FORCE_TEXT_EXTENSIONS = new Set([
132
132
  * Get enhanced MIME type for file with custom dev file support
133
133
  */
134
134
  function getEnhancedMimeType(filePath) {
135
- const filename = filePath.split("/").pop() || "";
136
- const extension = getFileExtension(filePath);
135
+ const normalized = normalizePathSeparators(filePath);
136
+ const filename = normalized.split("/").pop() || "";
137
+ const extension = getFileExtension(normalized);
137
138
  // Check custom definitions first (by extension)
138
139
  if (extension && CUSTOM_MIME_TYPES[extension]) {
139
140
  return CUSTOM_MIME_TYPES[extension];
@@ -143,7 +144,7 @@ function getEnhancedMimeType(filePath) {
143
144
  return CUSTOM_MIME_TYPES[filename];
144
145
  }
145
146
  // Fall back to standard mime-types library
146
- const standardMime = mimeTypes.lookup(filePath);
147
+ const standardMime = mimeTypes.lookup(normalized);
147
148
  if (standardMime) {
148
149
  return standardMime;
149
150
  }
@@ -162,7 +163,13 @@ function shouldForceAsText(filePath) {
162
163
  */
163
164
  function getFileExtension(filePath) {
164
165
  const match = filePath.match(/\.[^.]*$/);
165
- return match ? match[0] : "";
166
+ return match ? match[0].toLowerCase() : "";
167
+ }
168
+ /**
169
+ * Normalize path separators to forward slashes for cross-platform consistency
170
+ */
171
+ function normalizePathSeparators(p) {
172
+ return p.replace(/\\/g, "/");
166
173
  }
167
174
  /**
168
175
  * Enhanced text file detection with developer file support
@@ -1 +1 @@
1
- {"version":3,"file":"mime-types.js","sourceRoot":"","sources":["../../src/utils/mime-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mime-types.js","sourceRoot":"","sources":["../../src/utils/mime-types.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,21 @@
1
- import { DocHandle, StorageId } from "@automerge/automerge-repo";
1
+ import { DocHandle, StorageId, Repo, AutomergeUrl } from "@automerge/automerge-repo";
2
2
  /**
3
- * Wait for documents to sync to the remote server
4
- * Based on patchwork-cli implementation with timeout for debugging
3
+ * Wait for bidirectional sync to stabilize.
4
+ * This function waits until document heads stop changing, indicating that
5
+ * both outgoing and incoming sync has completed.
6
+ *
7
+ * @param repo - The Automerge repository
8
+ * @param rootDirectoryUrl - The root directory URL to start traversal from
9
+ * @param syncServerStorageId - The sync server storage ID
10
+ * @param options - Configuration options
5
11
  */
6
- export declare function waitForSync(handlesToWaitOn: DocHandle<unknown>[], syncServerStorageId?: StorageId, timeoutMs?: number): Promise<void>;
12
+ export declare function waitForBidirectionalSync(repo: Repo, rootDirectoryUrl: AutomergeUrl | undefined, syncServerStorageId: StorageId | undefined, options?: {
13
+ timeoutMs?: number;
14
+ pollIntervalMs?: number;
15
+ stableChecksRequired?: number;
16
+ }): Promise<void>;
7
17
  /**
8
- * Get the storage ID for the sync server
9
- * Using the same ID as patchwork-cli for consistency
18
+ * Wait for documents to sync to the remote server
10
19
  */
11
- export declare function getSyncServerStorageId(customStorageId?: string): StorageId;
20
+ export declare function waitForSync(handlesToWaitOn: DocHandle<unknown>[], syncServerStorageId?: StorageId, timeoutMs?: number): Promise<void>;
12
21
  //# sourceMappingURL=network-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network-sync.d.ts","sourceRoot":"","sources":["../../src/utils/network-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGjE;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EACrC,mBAAmB,CAAC,EAAE,SAAS,EAC/B,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAoJf;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAG1E"}
1
+ {"version":3,"file":"network-sync.d.ts","sourceRoot":"","sources":["../../src/utils/network-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAMrF;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,YAAY,GAAG,SAAS,EAC1C,mBAAmB,EAAE,SAAS,GAAG,SAAS,EAC1C,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC1B,GACL,OAAO,CAAC,IAAI,CAAC,CAsCf;AA6ED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EACrC,mBAAmB,CAAC,EAAE,SAAS,EAC/B,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAmGf"}