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.
- package/README.md +87 -335
- package/babel.config.js +5 -0
- package/dist/cli/commands.d.ts +9 -15
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +37 -170
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/output.d.ts +11 -25
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +55 -61
- package/dist/cli/output.js.map +1 -1
- package/dist/cli.js +208 -213
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +51 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +799 -0
- package/dist/commands.js.map +1 -0
- package/dist/core/change-detection.d.ts +7 -23
- package/dist/core/change-detection.d.ts.map +1 -1
- package/dist/core/change-detection.js +108 -122
- package/dist/core/change-detection.js.map +1 -1
- package/dist/core/config.d.ts +81 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +296 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/move-detection.d.ts +4 -3
- package/dist/core/move-detection.d.ts.map +1 -1
- package/dist/core/move-detection.js +8 -7
- package/dist/core/move-detection.js.map +1 -1
- package/dist/core/snapshot.d.ts +0 -4
- package/dist/core/snapshot.d.ts.map +1 -1
- package/dist/core/snapshot.js +2 -11
- package/dist/core/snapshot.js.map +1 -1
- package/dist/core/sync-engine.d.ts +41 -12
- package/dist/core/sync-engine.d.ts.map +1 -1
- package/dist/core/sync-engine.js +522 -359
- package/dist/core/sync-engine.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -6
- package/dist/index.js.map +1 -1
- package/dist/types/config.d.ts +24 -88
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/documents.d.ts +15 -2
- package/dist/types/documents.d.ts.map +1 -1
- package/dist/types/documents.js.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/snapshot.d.ts +0 -21
- package/dist/types/snapshot.d.ts.map +1 -1
- package/dist/types/snapshot.js +0 -14
- package/dist/types/snapshot.js.map +1 -1
- package/dist/utils/content.d.ts.map +1 -1
- package/dist/utils/content.js +2 -6
- package/dist/utils/content.js.map +1 -1
- package/dist/utils/directory.d.ts +24 -0
- package/dist/utils/directory.d.ts.map +1 -0
- package/dist/utils/directory.js +56 -0
- package/dist/utils/directory.js.map +1 -0
- package/dist/utils/fs.d.ts +15 -2
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +53 -20
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/keyhive.d.ts +9 -0
- package/dist/utils/keyhive.d.ts.map +1 -0
- package/dist/utils/keyhive.js +26 -0
- package/dist/utils/keyhive.js.map +1 -0
- package/dist/utils/mime-types.d.ts.map +1 -1
- package/dist/utils/mime-types.js +11 -4
- package/dist/utils/mime-types.js.map +1 -1
- package/dist/utils/network-sync.d.ts +16 -7
- package/dist/utils/network-sync.d.ts.map +1 -1
- package/dist/utils/network-sync.js +158 -99
- package/dist/utils/network-sync.js.map +1 -1
- package/dist/utils/output.d.ts +129 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +375 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/repo-factory.d.ts +2 -6
- package/dist/utils/repo-factory.d.ts.map +1 -1
- package/dist/utils/repo-factory.js +8 -31
- package/dist/utils/repo-factory.js.map +1 -1
- package/dist/utils/string-similarity.js +2 -2
- package/dist/utils/string-similarity.js.map +1 -1
- package/dist/utils/trace.d.ts +19 -0
- package/dist/utils/trace.d.ts.map +1 -0
- package/dist/utils/trace.js +68 -0
- package/dist/utils/trace.js.map +1 -0
- package/package.json +21 -11
- package/src/cli.ts +276 -308
- package/src/commands.ts +988 -0
- package/src/core/change-detection.ts +226 -246
- package/src/{config/index.ts → core/config.ts} +65 -82
- package/src/core/index.ts +1 -1
- package/src/core/move-detection.ts +10 -8
- package/src/core/snapshot.ts +2 -12
- package/src/core/sync-engine.ts +630 -478
- package/src/index.ts +0 -10
- package/src/types/config.ts +28 -93
- package/src/types/documents.ts +16 -2
- package/src/types/index.ts +0 -5
- package/src/types/snapshot.ts +0 -23
- package/src/utils/content.ts +2 -6
- package/src/utils/directory.ts +73 -0
- package/src/utils/fs.ts +57 -23
- package/src/utils/index.ts +1 -5
- package/src/utils/mime-types.ts +12 -4
- package/src/utils/network-sync.ts +216 -138
- package/src/utils/output.ts +450 -0
- package/src/utils/repo-factory.ts +13 -44
- package/src/utils/string-similarity.ts +2 -2
- package/src/utils/trace.ts +70 -0
- package/test/integration/exclude-patterns.test.ts +6 -15
- package/test/integration/fuzzer.test.ts +308 -391
- package/test/integration/in-memory-sync.test.ts +435 -0
- package/test/integration/init-sync.test.ts +89 -0
- package/test/integration/sync-deletion.test.ts +2 -61
- package/test/integration/sync-flow.test.ts +4 -24
- package/test/jest.setup.ts +34 -0
- package/test/unit/deletion-behavior.test.ts +3 -14
- package/test/unit/enhanced-mime-detection.test.ts +0 -22
- package/test/unit/snapshot.test.ts +2 -29
- package/test/unit/sync-convergence.test.ts +3 -198
- package/test/unit/sync-timing.test.ts +0 -44
- package/test/unit/utils.test.ts +0 -2
- package/tsconfig.json +3 -3
- package/bench/filesystem.bench.ts +0 -78
- package/bench/hashing.bench.ts +0 -60
- package/bench/move-detection.bench.ts +0 -130
- package/bench/runner.ts +0 -49
- package/dist/browser/browser-sync-engine.d.ts +0 -64
- package/dist/browser/browser-sync-engine.d.ts.map +0 -1
- package/dist/browser/browser-sync-engine.js +0 -303
- package/dist/browser/browser-sync-engine.js.map +0 -1
- package/dist/browser/filesystem-adapter.d.ts +0 -84
- package/dist/browser/filesystem-adapter.d.ts.map +0 -1
- package/dist/browser/filesystem-adapter.js +0 -413
- package/dist/browser/filesystem-adapter.js.map +0 -1
- package/dist/browser/index.d.ts +0 -36
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -90
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/types.d.ts +0 -70
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -6
- package/dist/browser/types.js.map +0 -1
- package/dist/config/remote-manager.d.ts +0 -65
- package/dist/config/remote-manager.d.ts.map +0 -1
- package/dist/config/remote-manager.js +0 -243
- package/dist/config/remote-manager.js.map +0 -1
- package/dist/core/isomorphic-snapshot.d.ts +0 -58
- package/dist/core/isomorphic-snapshot.d.ts.map +0 -1
- package/dist/core/isomorphic-snapshot.js +0 -204
- package/dist/core/isomorphic-snapshot.js.map +0 -1
- package/dist/platform/browser-filesystem.d.ts +0 -26
- package/dist/platform/browser-filesystem.d.ts.map +0 -1
- package/dist/platform/browser-filesystem.js +0 -91
- package/dist/platform/browser-filesystem.js.map +0 -1
- package/dist/platform/filesystem.d.ts +0 -29
- package/dist/platform/filesystem.d.ts.map +0 -1
- package/dist/platform/filesystem.js +0 -65
- package/dist/platform/filesystem.js.map +0 -1
- package/dist/platform/node-filesystem.d.ts +0 -21
- package/dist/platform/node-filesystem.d.ts.map +0 -1
- package/dist/platform/node-filesystem.js +0 -93
- package/dist/platform/node-filesystem.js.map +0 -1
- package/dist/utils/fs-browser.d.ts +0 -57
- package/dist/utils/fs-browser.d.ts.map +0 -1
- package/dist/utils/fs-browser.js +0 -311
- package/dist/utils/fs-browser.js.map +0 -1
- package/dist/utils/fs-node.d.ts +0 -53
- package/dist/utils/fs-node.d.ts.map +0 -1
- package/dist/utils/fs-node.js +0 -220
- package/dist/utils/fs-node.js.map +0 -1
- package/dist/utils/isomorphic.d.ts +0 -29
- package/dist/utils/isomorphic.d.ts.map +0 -1
- package/dist/utils/isomorphic.js +0 -139
- package/dist/utils/isomorphic.js.map +0 -1
- package/dist/utils/pure.d.ts +0 -25
- package/dist/utils/pure.d.ts.map +0 -1
- package/dist/utils/pure.js +0 -112
- package/dist/utils/pure.js.map +0 -1
- package/src/cli/commands.ts +0 -1030
- package/src/cli/index.ts +0 -2
- package/src/cli/output.ts +0 -244
- 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"}
|
package/dist/utils/fs.d.ts
CHANGED
|
@@ -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
|
package/dist/utils/fs.d.ts.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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
|
-
//
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
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
|
package/dist/utils/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,gCAOC;AAKD,gDAqBC;AAKD,gCAwBC;AAKD,0CAWC;AAKD,4CAcC;AAKD,sDAQC;AAKD,gCAaC;AAyBD,sCAwCC;AAKD,4BAUC;AAKD,4BAMC;AAKD,oDAUC;AAKD,kCAEC;AAKD,4CAGC;AAMD,sCAEC;AAMD,oDAKC;AAKD,0CAEC;AAOD,gDAOC;AA9SD,gDAAkC;AAClC,2CAA6B;AAC7B,+CAAiC;AACjC,+BAA4B;AAC5B,sDAAwC;AACxC,+CAAiC;AACjC,wDAA0C;AAC1C,oCAAqD;AACrD,6CAAkD;AAElD;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACtC,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE;YAC9B,CAAC,CAAC,gBAAQ,CAAC,SAAS;YACpB,CAAC,CAAC,CAAC,MAAM,IAAA,+BAAkB,EAAC,QAAQ,CAAC,CAAC;gBACtC,CAAC,CAAC,gBAAQ,CAAC,IAAI;gBACf,CAAC,CAAC,gBAAQ,CAAC,MAAM,CAAC;QAEpB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SAC7C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CACL,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC5B,QAAQ,KAAK,kBAAkB;gBAC/B,QAAQ,KAAK,iBAAiB;gBAC9B,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC/B,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAChC,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,qDAAqD;QACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAkB,EAAC,QAAQ,CAAC,CAAC;IAElD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,OAAgD;IAEhD,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,sEAAsE;QACtE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAAC,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CACjB,QAAgB,EAChB,QAAgB,EAChB,eAAyB;IAEzB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvD,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEjD,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,SAAS,GAAG,KAAK,EACjB,kBAA4B,EAAE;IAE9B,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,uEAAuE;QACvE,MAAM,OAAO,GAAG,SAAS;YACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE5B,gDAAgD;QAChD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEtD,6CAA6C;QAC7C,yFAAyF;QACzF,MAAM,KAAK,GAAG,MAAM,IAAA,WAAI,EAAC,iBAAiB,EAAE;YAC1C,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;QAEH,oDAAoD;QACpD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC3B,kEAAkE;YAClE,IAAI,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC,CACH,CAAC;QAEF,0EAA0E;QAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAC5B,UAAkB,EAClB,QAAgB;IAEhB,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAExC,4BAA4B;IAC5B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAC5B,UAAkB,EAClB,QAAgB;IAEhB,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,OAAgD;IAEhD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,QAAgB;IAC1C,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,0BAA0B,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,GAAG,KAAe;IACrD,2FAA2F;IAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACnC,sEAAsE;IACtE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,QAAgB,EAAE,QAAgB;IAChE,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,2CAA2C;IAC3C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,4BAA4B;IAC5B,OAAO,KAAK,QAAQ,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/utils/index.js
CHANGED
|
@@ -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
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
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,
|
|
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"}
|
package/dist/utils/mime-types.js
CHANGED
|
@@ -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
|
|
136
|
-
const
|
|
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(
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8GA,
|
|
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
|
|
4
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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;
|
|
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"}
|