pushwork 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/browser/browser-sync-engine.d.ts +64 -0
  2. package/dist/browser/browser-sync-engine.d.ts.map +1 -0
  3. package/dist/browser/browser-sync-engine.js +303 -0
  4. package/dist/browser/browser-sync-engine.js.map +1 -0
  5. package/dist/browser/filesystem-adapter.d.ts +84 -0
  6. package/dist/browser/filesystem-adapter.d.ts.map +1 -0
  7. package/dist/browser/filesystem-adapter.js +413 -0
  8. package/dist/browser/filesystem-adapter.js.map +1 -0
  9. package/dist/browser/index.d.ts +36 -0
  10. package/dist/browser/index.d.ts.map +1 -0
  11. package/dist/browser/index.js +90 -0
  12. package/dist/browser/index.js.map +1 -0
  13. package/dist/browser/types.d.ts +70 -0
  14. package/dist/browser/types.d.ts.map +1 -0
  15. package/dist/browser/types.js +6 -0
  16. package/dist/browser/types.js.map +1 -0
  17. package/dist/cli/commands.d.ts +77 -0
  18. package/dist/cli/commands.d.ts.map +1 -0
  19. package/dist/cli/commands.js +904 -0
  20. package/dist/cli/commands.js.map +1 -0
  21. package/dist/cli/index.d.ts +2 -0
  22. package/dist/cli/index.d.ts.map +1 -0
  23. package/dist/cli/index.js +19 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/cli/output.d.ts +75 -0
  26. package/dist/cli/output.d.ts.map +1 -0
  27. package/dist/cli/output.js +182 -0
  28. package/dist/cli/output.js.map +1 -0
  29. package/dist/cli.js +0 -0
  30. package/dist/config/index.d.ts +71 -0
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/config/index.js +314 -0
  33. package/dist/config/index.js.map +1 -0
  34. package/dist/config/remote-manager.d.ts +65 -0
  35. package/dist/config/remote-manager.d.ts.map +1 -0
  36. package/dist/config/remote-manager.js +243 -0
  37. package/dist/config/remote-manager.js.map +1 -0
  38. package/dist/config.d.ts +16 -0
  39. package/dist/config.d.ts.map +1 -0
  40. package/dist/config.js +83 -0
  41. package/dist/config.js.map +1 -0
  42. package/dist/core/isomorphic-snapshot.d.ts +58 -0
  43. package/dist/core/isomorphic-snapshot.d.ts.map +1 -0
  44. package/dist/core/isomorphic-snapshot.js +204 -0
  45. package/dist/core/isomorphic-snapshot.js.map +1 -0
  46. package/dist/fs-tree.d.ts +6 -0
  47. package/dist/fs-tree.d.ts.map +1 -0
  48. package/dist/fs-tree.js +99 -0
  49. package/dist/fs-tree.js.map +1 -0
  50. package/dist/ignore.d.ts +6 -0
  51. package/dist/ignore.d.ts.map +1 -0
  52. package/dist/ignore.js +74 -0
  53. package/dist/ignore.js.map +1 -0
  54. package/dist/log.d.ts +3 -0
  55. package/dist/log.d.ts.map +1 -0
  56. package/dist/log.js +14 -0
  57. package/dist/log.js.map +1 -0
  58. package/dist/platform/browser-filesystem.d.ts +26 -0
  59. package/dist/platform/browser-filesystem.d.ts.map +1 -0
  60. package/dist/platform/browser-filesystem.js +91 -0
  61. package/dist/platform/browser-filesystem.js.map +1 -0
  62. package/dist/platform/filesystem.d.ts +29 -0
  63. package/dist/platform/filesystem.d.ts.map +1 -0
  64. package/dist/platform/filesystem.js +65 -0
  65. package/dist/platform/filesystem.js.map +1 -0
  66. package/dist/platform/node-filesystem.d.ts +21 -0
  67. package/dist/platform/node-filesystem.d.ts.map +1 -0
  68. package/dist/platform/node-filesystem.js +93 -0
  69. package/dist/platform/node-filesystem.js.map +1 -0
  70. package/dist/polyfill-node-window.d.ts +13 -0
  71. package/dist/polyfill-node-window.d.ts.map +1 -0
  72. package/dist/polyfill-node-window.js +17 -0
  73. package/dist/polyfill-node-window.js.map +1 -0
  74. package/dist/pushwork.d.ts +97 -0
  75. package/dist/pushwork.d.ts.map +1 -0
  76. package/dist/pushwork.js +726 -0
  77. package/dist/pushwork.js.map +1 -0
  78. package/dist/repo.d.ts +14 -0
  79. package/dist/repo.d.ts.map +1 -0
  80. package/dist/repo.js +60 -0
  81. package/dist/repo.js.map +1 -0
  82. package/dist/shapes/custom.d.ts +3 -0
  83. package/dist/shapes/custom.d.ts.map +1 -0
  84. package/dist/shapes/custom.js +57 -0
  85. package/dist/shapes/custom.js.map +1 -0
  86. package/dist/shapes/file.d.ts +20 -0
  87. package/dist/shapes/file.d.ts.map +1 -0
  88. package/dist/shapes/file.js +140 -0
  89. package/dist/shapes/file.js.map +1 -0
  90. package/dist/shapes/index.d.ts +10 -0
  91. package/dist/shapes/index.d.ts.map +1 -0
  92. package/dist/shapes/index.js +35 -0
  93. package/dist/shapes/index.js.map +1 -0
  94. package/dist/shapes/patchwork-folder.d.ts +3 -0
  95. package/dist/shapes/patchwork-folder.d.ts.map +1 -0
  96. package/dist/shapes/patchwork-folder.js +160 -0
  97. package/dist/shapes/patchwork-folder.js.map +1 -0
  98. package/dist/shapes/types.d.ts +38 -0
  99. package/dist/shapes/types.d.ts.map +1 -0
  100. package/dist/shapes/types.js +52 -0
  101. package/dist/shapes/types.js.map +1 -0
  102. package/dist/shapes/vfs.d.ts +3 -0
  103. package/dist/shapes/vfs.d.ts.map +1 -0
  104. package/dist/shapes/vfs.js +92 -0
  105. package/dist/shapes/vfs.js.map +1 -0
  106. package/dist/snarf.d.ts +21 -0
  107. package/dist/snarf.d.ts.map +1 -0
  108. package/dist/snarf.js +117 -0
  109. package/dist/snarf.js.map +1 -0
  110. package/dist/utils/content-similarity.d.ts +53 -0
  111. package/dist/utils/content-similarity.d.ts.map +1 -0
  112. package/dist/utils/content-similarity.js +155 -0
  113. package/dist/utils/content-similarity.js.map +1 -0
  114. package/dist/utils/fs-browser.d.ts +57 -0
  115. package/dist/utils/fs-browser.d.ts.map +1 -0
  116. package/dist/utils/fs-browser.js +311 -0
  117. package/dist/utils/fs-browser.js.map +1 -0
  118. package/dist/utils/fs-node.d.ts +53 -0
  119. package/dist/utils/fs-node.d.ts.map +1 -0
  120. package/dist/utils/fs-node.js +220 -0
  121. package/dist/utils/fs-node.js.map +1 -0
  122. package/dist/utils/isomorphic.d.ts +29 -0
  123. package/dist/utils/isomorphic.d.ts.map +1 -0
  124. package/dist/utils/isomorphic.js +139 -0
  125. package/dist/utils/isomorphic.js.map +1 -0
  126. package/dist/utils/node-polyfills.d.ts +9 -0
  127. package/dist/utils/node-polyfills.d.ts.map +1 -0
  128. package/dist/utils/node-polyfills.js +9 -0
  129. package/dist/utils/node-polyfills.js.map +1 -0
  130. package/dist/utils/pure.d.ts +25 -0
  131. package/dist/utils/pure.d.ts.map +1 -0
  132. package/dist/utils/pure.js +112 -0
  133. package/dist/utils/pure.js.map +1 -0
  134. package/dist/version.d.ts +11 -0
  135. package/dist/version.d.ts.map +1 -0
  136. package/dist/version.js +93 -0
  137. package/dist/version.js.map +1 -0
  138. package/package.json +96 -98
  139. package/scripts/roundtrip-test.sh +0 -0
  140. package/test/integration/clone-test.sh +0 -0
  141. package/test/integration/conflict-resolution-test.sh +0 -0
  142. package/test/integration/deletion-behavior-test.sh +0 -0
  143. package/test/integration/deletion-sync-test-simple.sh +0 -0
  144. package/test/integration/deletion-sync-test.sh +0 -0
  145. package/test/integration/full-integration-test.sh +0 -0
  146. package/test/integration/manual-sync-test.sh +0 -0
  147. package/test/run-tests.sh +0 -0
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Browser filesystem implementation using File System Access API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BrowserFilesystem = void 0;
7
+ const filesystem_adapter_1 = require("../browser/filesystem-adapter");
8
+ class BrowserFilesystem {
9
+ constructor() {
10
+ this.rootHandle = null;
11
+ this.adapter = new filesystem_adapter_1.BrowserFilesystemAdapter();
12
+ }
13
+ async setRootDirectory(handle) {
14
+ this.rootHandle = handle;
15
+ }
16
+ ensureRootHandle() {
17
+ if (!this.rootHandle) {
18
+ throw new Error("No root directory handle set. Call setRootDirectory() first.");
19
+ }
20
+ }
21
+ async readFileContent(path) {
22
+ this.ensureRootHandle();
23
+ const handle = await this.adapter.getFileHandle(this.rootHandle, path);
24
+ return this.adapter.readFileContent(handle);
25
+ }
26
+ async writeFileContent(path, content) {
27
+ this.ensureRootHandle();
28
+ const handle = await this.adapter.getFileHandle(this.rootHandle, path, {
29
+ create: true,
30
+ });
31
+ return this.adapter.writeFileContent(handle, content);
32
+ }
33
+ async removePath(path) {
34
+ this.ensureRootHandle();
35
+ return this.adapter.removePath(this.rootHandle, path);
36
+ }
37
+ async movePath(fromPath, toPath) {
38
+ this.ensureRootHandle();
39
+ return this.adapter.movePath(this.rootHandle, fromPath, toPath);
40
+ }
41
+ async ensureDirectoryExists(path) {
42
+ this.ensureRootHandle();
43
+ const parts = path.split("/").filter((p) => p);
44
+ let currentHandle = this.rootHandle;
45
+ for (const part of parts) {
46
+ try {
47
+ currentHandle = await currentHandle.getDirectoryHandle(part);
48
+ }
49
+ catch {
50
+ currentHandle = await currentHandle.getDirectoryHandle(part, {
51
+ create: true,
52
+ });
53
+ }
54
+ }
55
+ }
56
+ async listDirectory(path) {
57
+ this.ensureRootHandle();
58
+ const entries = await this.adapter.listDirectory(this.rootHandle, path);
59
+ return entries.map((entry) => ({
60
+ name: entry.name,
61
+ type: entry.type === "file" ? "file" : "directory",
62
+ }));
63
+ }
64
+ async getFileStats(path) {
65
+ this.ensureRootHandle();
66
+ const handle = await this.adapter.getFileHandle(this.rootHandle, path);
67
+ const file = await handle.getFile();
68
+ return {
69
+ size: file.size,
70
+ mtime: new Date(file.lastModified),
71
+ };
72
+ }
73
+ async exists(path) {
74
+ this.ensureRootHandle();
75
+ try {
76
+ await this.adapter.getFileHandle(this.rootHandle, path);
77
+ return true;
78
+ }
79
+ catch {
80
+ try {
81
+ await this.adapter.getDirectoryHandle(this.rootHandle, path);
82
+ return true;
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ }
88
+ }
89
+ }
90
+ exports.BrowserFilesystem = BrowserFilesystem;
91
+ //# sourceMappingURL=browser-filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-filesystem.js","sourceRoot":"","sources":["../../src/platform/browser-filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Platform-agnostic filesystem interface
3
+ */
4
+ export interface FileSystemInterface {
5
+ readFileContent(path: string): Promise<string | Uint8Array>;
6
+ writeFileContent(path: string, content: string | Uint8Array): Promise<void>;
7
+ removePath(path: string): Promise<void>;
8
+ movePath(fromPath: string, toPath: string): Promise<void>;
9
+ ensureDirectoryExists(path: string): Promise<void>;
10
+ listDirectory(path: string): Promise<Array<{
11
+ name: string;
12
+ type: "file" | "directory";
13
+ }>>;
14
+ getFileStats(path: string): Promise<{
15
+ size: number;
16
+ mtime: Date;
17
+ }>;
18
+ exists(path: string): Promise<boolean>;
19
+ }
20
+ /**
21
+ * Platform detection
22
+ */
23
+ export declare function isBrowser(): boolean;
24
+ export declare function isNode(): boolean;
25
+ /**
26
+ * Get the appropriate filesystem implementation for the current platform
27
+ */
28
+ export declare function getFilesystem(): Promise<FileSystemInterface>;
29
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/platform/filesystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC5D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,aAAa,CACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAC,CAAC,CAAC;IAChE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAKnC;AAED,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAQlE"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Platform-agnostic filesystem interface
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.isBrowser = isBrowser;
40
+ exports.isNode = isNode;
41
+ exports.getFilesystem = getFilesystem;
42
+ /**
43
+ * Platform detection
44
+ */
45
+ function isBrowser() {
46
+ return (typeof window !== "undefined" &&
47
+ typeof window.document !== "undefined");
48
+ }
49
+ function isNode() {
50
+ return typeof process !== "undefined" && !!process.versions?.node;
51
+ }
52
+ /**
53
+ * Get the appropriate filesystem implementation for the current platform
54
+ */
55
+ async function getFilesystem() {
56
+ if (isBrowser()) {
57
+ const { BrowserFilesystem } = await Promise.resolve().then(() => __importStar(require("./browser-filesystem")));
58
+ return new BrowserFilesystem();
59
+ }
60
+ else {
61
+ const { NodeFilesystem } = await Promise.resolve().then(() => __importStar(require("./node-filesystem")));
62
+ return new NodeFilesystem();
63
+ }
64
+ }
65
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/platform/filesystem.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBH,8BAKC;AAED,wBAEC;AAKD,sCAQC;AAzBD;;GAEG;AACH,SAAgB,SAAS;IACvB,OAAO,CACL,OAAO,MAAM,KAAK,WAAW;QAC7B,OAAQ,MAAc,CAAC,QAAQ,KAAK,WAAW,CAChD,CAAC;AACJ,CAAC;AAED,SAAgB,MAAM;IACpB,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,CAAE,OAAe,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC7E,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa;IACjC,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;QACnE,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,cAAc,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;QAC7D,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Node.js filesystem implementation
3
+ */
4
+ import { FileSystemInterface } from "./filesystem";
5
+ export declare class NodeFilesystem implements FileSystemInterface {
6
+ readFileContent(filePath: string): Promise<string | Uint8Array>;
7
+ writeFileContent(filePath: string, content: string | Uint8Array): Promise<void>;
8
+ removePath(targetPath: string): Promise<void>;
9
+ movePath(fromPath: string, toPath: string): Promise<void>;
10
+ ensureDirectoryExists(dirPath: string): Promise<void>;
11
+ listDirectory(dirPath: string): Promise<Array<{
12
+ name: string;
13
+ type: "file" | "directory";
14
+ }>>;
15
+ getFileStats(filePath: string): Promise<{
16
+ size: number;
17
+ mtime: Date;
18
+ }>;
19
+ exists(targetPath: string): Promise<boolean>;
20
+ }
21
+ //# sourceMappingURL=node-filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-filesystem.d.ts","sourceRoot":"","sources":["../../src/platform/node-filesystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AASnD,qBAAa,cAAe,YAAW,mBAAmB;IAClD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAI/D,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC;IAIV,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,aAAa,CACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAC,CAAC;IAYzD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IAYtE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQnD"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * Node.js filesystem implementation
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.NodeFilesystem = void 0;
40
+ const fs = __importStar(require("fs/promises"));
41
+ const fs_1 = require("../utils/fs");
42
+ class NodeFilesystem {
43
+ async readFileContent(filePath) {
44
+ return (0, fs_1.readFileContent)(filePath);
45
+ }
46
+ async writeFileContent(filePath, content) {
47
+ return (0, fs_1.writeFileContent)(filePath, content);
48
+ }
49
+ async removePath(targetPath) {
50
+ return (0, fs_1.removePath)(targetPath);
51
+ }
52
+ async movePath(fromPath, toPath) {
53
+ return (0, fs_1.movePath)(fromPath, toPath);
54
+ }
55
+ async ensureDirectoryExists(dirPath) {
56
+ return (0, fs_1.ensureDirectoryExists)(dirPath);
57
+ }
58
+ async listDirectory(dirPath) {
59
+ try {
60
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
61
+ return entries.map((entry) => ({
62
+ name: entry.name,
63
+ type: entry.isDirectory() ? "directory" : "file",
64
+ }));
65
+ }
66
+ catch (error) {
67
+ throw new Error(`Failed to list directory ${dirPath}: ${error}`);
68
+ }
69
+ }
70
+ async getFileStats(filePath) {
71
+ try {
72
+ const stats = await fs.stat(filePath);
73
+ return {
74
+ size: stats.size,
75
+ mtime: stats.mtime,
76
+ };
77
+ }
78
+ catch (error) {
79
+ throw new Error(`Failed to get file stats for ${filePath}: ${error}`);
80
+ }
81
+ }
82
+ async exists(targetPath) {
83
+ try {
84
+ await fs.access(targetPath);
85
+ return true;
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ }
92
+ exports.NodeFilesystem = NodeFilesystem;
93
+ //# sourceMappingURL=node-filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-filesystem.js","sourceRoot":"","sources":["../../src/platform/node-filesystem.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,gDAAkC;AAGlC,oCAMqB;AAErB,MAAa,cAAc;IACzB,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,OAAO,IAAA,oBAAmB,EAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,QAAgB,EAChB,OAA4B;QAE5B,OAAO,IAAA,qBAAoB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,OAAO,IAAA,eAAc,EAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,MAAc;QAC7C,OAAO,IAAA,aAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,OAAe;QACzC,OAAO,IAAA,0BAAyB,EAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAAe;QAEf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;aACjD,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AA1DD,wCA0DC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Polyfill for browser-only code (e.g. WebCryptoSigner in @automerge/automerge_subduction)
3
+ * that expects `window`. The subduction WASM uses web_sys::window() which compiles to
4
+ * `typeof window === 'undefined' ? null : window` in JS. In Node we must define
5
+ * the global "window" before any subduction code runs.
6
+ */
7
+ declare const g: {
8
+ window?: unknown;
9
+ };
10
+ declare const nodeGlobal: {
11
+ window?: unknown;
12
+ };
13
+ //# sourceMappingURL=polyfill-node-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyfill-node-window.d.ts","sourceRoot":"","sources":["../src/polyfill-node-window.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,QAAA,MAAM,CAAC,EAA4B;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAKxD,QAAA,MAAM,UAAU;aAL8B,OAAO;CAK6C,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * Polyfill for browser-only code (e.g. WebCryptoSigner in @automerge/automerge_subduction)
4
+ * that expects `window`. The subduction WASM uses web_sys::window() which compiles to
5
+ * `typeof window === 'undefined' ? null : window` in JS. In Node we must define
6
+ * the global "window" before any subduction code runs.
7
+ */
8
+ const g = globalThis;
9
+ if (typeof g.window === "undefined") {
10
+ g.window = globalThis;
11
+ }
12
+ // Node's "global" is the traditional global object; ensure it has window too
13
+ const nodeGlobal = typeof global !== "undefined" ? global : g;
14
+ if (typeof nodeGlobal.window === "undefined") {
15
+ nodeGlobal.window = globalThis;
16
+ }
17
+ //# sourceMappingURL=polyfill-node-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyfill-node-window.js","sourceRoot":"","sources":["../src/polyfill-node-window.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,MAAM,CAAC,GAAG,UAA6C,CAAC;AACxD,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;AACxB,CAAC;AACD,6EAA6E;AAC7E,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAE,MAA0C,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;IAC7C,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC;AACjC,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { type AutomergeUrl } from "@automerge/automerge-repo";
2
+ import { type Backend, type PushworkConfig } from "./config.js";
3
+ import { type Snarf } from "./snarf.js";
4
+ import { type Shape, type UnixFileEntry, type VfsNode } from "./shapes/index.js";
5
+ export type InitOpts = {
6
+ dir: string;
7
+ backend: Backend;
8
+ shape: string;
9
+ artifactDirectories?: readonly string[];
10
+ online?: boolean;
11
+ };
12
+ export type CloneOpts = {
13
+ url: string;
14
+ dir: string;
15
+ backend: Backend;
16
+ shape: string;
17
+ artifactDirectories?: readonly string[];
18
+ online?: boolean;
19
+ onBranchesDoc?: (info: {
20
+ title?: string;
21
+ branches: {
22
+ name: string;
23
+ url: AutomergeUrl;
24
+ }[];
25
+ }) => Promise<AutomergeUrl> | AutomergeUrl;
26
+ };
27
+ export type Diff = {
28
+ added: string[];
29
+ modified: string[];
30
+ deleted: string[];
31
+ };
32
+ export declare function init(opts: InitOpts): Promise<AutomergeUrl>;
33
+ export declare function clone(opts: CloneOpts): Promise<void>;
34
+ export declare function url(cwd: string): Promise<AutomergeUrl>;
35
+ export declare function sync(cwd: string, opts?: {
36
+ nuclear?: boolean;
37
+ }): Promise<void>;
38
+ /**
39
+ * Re-create every UnixFileEntry doc this repo references with a fresh URL,
40
+ * then rewrite the existing folder doc's leaves to point at the new file
41
+ * URLs. The folder doc URL itself is preserved so anyone holding it keeps
42
+ * tracking this repo. Offline; the next sync publishes the new file docs
43
+ * and the rewritten folder doc to the server.
44
+ *
45
+ * The previous file-doc URLs are orphaned from this repo's perspective.
46
+ * Anyone holding one of those URLs directly continues to work from it;
47
+ * this client just stops referencing them.
48
+ */
49
+ export declare function nuclearizeRepo(cwd: string): Promise<void>;
50
+ export declare function save(cwd: string): Promise<void>;
51
+ export type HeadsEntry = {
52
+ path: string;
53
+ url: AutomergeUrl;
54
+ heads: string[];
55
+ };
56
+ /**
57
+ * List the current Automerge heads for the root folder doc and every file
58
+ * leaf it references. Offline; never contacts a sync server.
59
+ *
60
+ * `pathspec` filters results: exact match, or prefix match against a folder
61
+ * (e.g. "src" or "src/" matches "src/index.ts"). Pass "/" to show only the
62
+ * root folder doc.
63
+ */
64
+ export declare function heads(cwd: string, pathspec?: string): Promise<HeadsEntry[]>;
65
+ export declare function status(cwd: string): Promise<{
66
+ diff: Diff;
67
+ }>;
68
+ export declare function diff(cwd: string, limitToPath?: string): Promise<Array<{
69
+ path: string;
70
+ kind: "added" | "modified" | "deleted";
71
+ before?: Uint8Array;
72
+ after?: Uint8Array;
73
+ }>>;
74
+ /**
75
+ * Capture the working tree's changes against the saved state into a local
76
+ * snarf, then reset the working tree to the saved state. Snarfs live in
77
+ * `.pushwork/snarf/` and are never synced.
78
+ */
79
+ export declare function cutWorkdir(cwd: string, opts?: {
80
+ name?: string;
81
+ }): Promise<{
82
+ id: number;
83
+ entries: number;
84
+ }>;
85
+ /**
86
+ * Apply a snarf on top of the current working tree, then remove the snarf
87
+ * entry. Refuses if the working tree has uncommitted changes (caller can
88
+ * `pushwork save` or `pushwork cut` first).
89
+ */
90
+ export declare function pasteSnarf(cwd: string, selector?: string): Promise<{
91
+ id: number;
92
+ entries: number;
93
+ name?: string;
94
+ }>;
95
+ export declare function showSnarfs(cwd: string): Promise<Snarf[]>;
96
+ export type { Shape, UnixFileEntry, VfsNode, PushworkConfig };
97
+ //# sourceMappingURL=pushwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushwork.d.ts","sourceRoot":"","sources":["../src/pushwork.ts"],"names":[],"mappings":"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"}