pushwork 1.0.0

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 (184) hide show
  1. package/README.md +460 -0
  2. package/dist/browser/browser-sync-engine.d.ts +64 -0
  3. package/dist/browser/browser-sync-engine.d.ts.map +1 -0
  4. package/dist/browser/browser-sync-engine.js +303 -0
  5. package/dist/browser/browser-sync-engine.js.map +1 -0
  6. package/dist/browser/filesystem-adapter.d.ts +84 -0
  7. package/dist/browser/filesystem-adapter.d.ts.map +1 -0
  8. package/dist/browser/filesystem-adapter.js +413 -0
  9. package/dist/browser/filesystem-adapter.js.map +1 -0
  10. package/dist/browser/index.d.ts +36 -0
  11. package/dist/browser/index.d.ts.map +1 -0
  12. package/dist/browser/index.js +90 -0
  13. package/dist/browser/index.js.map +1 -0
  14. package/dist/browser/types.d.ts +70 -0
  15. package/dist/browser/types.d.ts.map +1 -0
  16. package/dist/browser/types.js +6 -0
  17. package/dist/browser/types.js.map +1 -0
  18. package/dist/cli/commands.d.ts +71 -0
  19. package/dist/cli/commands.d.ts.map +1 -0
  20. package/dist/cli/commands.js +794 -0
  21. package/dist/cli/commands.js.map +1 -0
  22. package/dist/cli/index.d.ts +2 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +19 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/cli.d.ts +3 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +199 -0
  29. package/dist/cli.js.map +1 -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/core/change-detection.d.ts +78 -0
  35. package/dist/core/change-detection.d.ts.map +1 -0
  36. package/dist/core/change-detection.js +370 -0
  37. package/dist/core/change-detection.js.map +1 -0
  38. package/dist/core/index.d.ts +5 -0
  39. package/dist/core/index.d.ts.map +1 -0
  40. package/dist/core/index.js +22 -0
  41. package/dist/core/index.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/core/move-detection.d.ts +72 -0
  47. package/dist/core/move-detection.d.ts.map +1 -0
  48. package/dist/core/move-detection.js +200 -0
  49. package/dist/core/move-detection.js.map +1 -0
  50. package/dist/core/snapshot.d.ts +109 -0
  51. package/dist/core/snapshot.d.ts.map +1 -0
  52. package/dist/core/snapshot.js +263 -0
  53. package/dist/core/snapshot.js.map +1 -0
  54. package/dist/core/sync-engine.d.ts +110 -0
  55. package/dist/core/sync-engine.d.ts.map +1 -0
  56. package/dist/core/sync-engine.js +817 -0
  57. package/dist/core/sync-engine.js.map +1 -0
  58. package/dist/index.d.ts +6 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +27 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/platform/browser-filesystem.d.ts +26 -0
  63. package/dist/platform/browser-filesystem.d.ts.map +1 -0
  64. package/dist/platform/browser-filesystem.js +91 -0
  65. package/dist/platform/browser-filesystem.js.map +1 -0
  66. package/dist/platform/filesystem.d.ts +29 -0
  67. package/dist/platform/filesystem.d.ts.map +1 -0
  68. package/dist/platform/filesystem.js +65 -0
  69. package/dist/platform/filesystem.js.map +1 -0
  70. package/dist/platform/node-filesystem.d.ts +21 -0
  71. package/dist/platform/node-filesystem.d.ts.map +1 -0
  72. package/dist/platform/node-filesystem.js +93 -0
  73. package/dist/platform/node-filesystem.js.map +1 -0
  74. package/dist/types/config.d.ts +119 -0
  75. package/dist/types/config.d.ts.map +1 -0
  76. package/dist/types/config.js +3 -0
  77. package/dist/types/config.js.map +1 -0
  78. package/dist/types/documents.d.ts +70 -0
  79. package/dist/types/documents.d.ts.map +1 -0
  80. package/dist/types/documents.js +23 -0
  81. package/dist/types/documents.js.map +1 -0
  82. package/dist/types/index.d.ts +4 -0
  83. package/dist/types/index.d.ts.map +1 -0
  84. package/dist/types/index.js +23 -0
  85. package/dist/types/index.js.map +1 -0
  86. package/dist/types/snapshot.d.ts +81 -0
  87. package/dist/types/snapshot.d.ts.map +1 -0
  88. package/dist/types/snapshot.js +17 -0
  89. package/dist/types/snapshot.js.map +1 -0
  90. package/dist/utils/content-similarity.d.ts +53 -0
  91. package/dist/utils/content-similarity.d.ts.map +1 -0
  92. package/dist/utils/content-similarity.js +155 -0
  93. package/dist/utils/content-similarity.js.map +1 -0
  94. package/dist/utils/content.d.ts +5 -0
  95. package/dist/utils/content.d.ts.map +1 -0
  96. package/dist/utils/content.js +30 -0
  97. package/dist/utils/content.js.map +1 -0
  98. package/dist/utils/fs-browser.d.ts +57 -0
  99. package/dist/utils/fs-browser.d.ts.map +1 -0
  100. package/dist/utils/fs-browser.js +311 -0
  101. package/dist/utils/fs-browser.js.map +1 -0
  102. package/dist/utils/fs-node.d.ts +53 -0
  103. package/dist/utils/fs-node.d.ts.map +1 -0
  104. package/dist/utils/fs-node.js +220 -0
  105. package/dist/utils/fs-node.js.map +1 -0
  106. package/dist/utils/fs.d.ts +62 -0
  107. package/dist/utils/fs.d.ts.map +1 -0
  108. package/dist/utils/fs.js +293 -0
  109. package/dist/utils/fs.js.map +1 -0
  110. package/dist/utils/index.d.ts +4 -0
  111. package/dist/utils/index.d.ts.map +1 -0
  112. package/dist/utils/index.js +23 -0
  113. package/dist/utils/index.js.map +1 -0
  114. package/dist/utils/isomorphic.d.ts +29 -0
  115. package/dist/utils/isomorphic.d.ts.map +1 -0
  116. package/dist/utils/isomorphic.js +139 -0
  117. package/dist/utils/isomorphic.js.map +1 -0
  118. package/dist/utils/mime-types.d.ts +13 -0
  119. package/dist/utils/mime-types.d.ts.map +1 -0
  120. package/dist/utils/mime-types.js +240 -0
  121. package/dist/utils/mime-types.js.map +1 -0
  122. package/dist/utils/network-sync.d.ts +12 -0
  123. package/dist/utils/network-sync.d.ts.map +1 -0
  124. package/dist/utils/network-sync.js +149 -0
  125. package/dist/utils/network-sync.js.map +1 -0
  126. package/dist/utils/pure.d.ts +25 -0
  127. package/dist/utils/pure.d.ts.map +1 -0
  128. package/dist/utils/pure.js +112 -0
  129. package/dist/utils/pure.js.map +1 -0
  130. package/dist/utils/repo-factory.d.ts +11 -0
  131. package/dist/utils/repo-factory.d.ts.map +1 -0
  132. package/dist/utils/repo-factory.js +77 -0
  133. package/dist/utils/repo-factory.js.map +1 -0
  134. package/package.json +83 -0
  135. package/src/cli/commands.ts +1053 -0
  136. package/src/cli/index.ts +2 -0
  137. package/src/cli.ts +287 -0
  138. package/src/config/index.ts +334 -0
  139. package/src/core/change-detection.ts +484 -0
  140. package/src/core/index.ts +5 -0
  141. package/src/core/move-detection.ts +269 -0
  142. package/src/core/snapshot.ts +285 -0
  143. package/src/core/sync-engine.ts +1167 -0
  144. package/src/index.ts +14 -0
  145. package/src/types/config.ts +130 -0
  146. package/src/types/documents.ts +72 -0
  147. package/src/types/index.ts +8 -0
  148. package/src/types/snapshot.ts +88 -0
  149. package/src/utils/content-similarity.ts +194 -0
  150. package/src/utils/content.ts +28 -0
  151. package/src/utils/fs.ts +289 -0
  152. package/src/utils/index.ts +8 -0
  153. package/src/utils/mime-types.ts +236 -0
  154. package/src/utils/network-sync.ts +153 -0
  155. package/src/utils/repo-factory.ts +58 -0
  156. package/test/README-TESTING-GAPS.md +174 -0
  157. package/test/integration/README.md +328 -0
  158. package/test/integration/clone-test.sh +310 -0
  159. package/test/integration/conflict-resolution-test.sh +309 -0
  160. package/test/integration/deletion-behavior-test.sh +487 -0
  161. package/test/integration/deletion-sync-test-simple.sh +193 -0
  162. package/test/integration/deletion-sync-test.sh +297 -0
  163. package/test/integration/exclude-patterns.test.ts +152 -0
  164. package/test/integration/full-integration-test.sh +363 -0
  165. package/test/integration/sync-deletion.test.ts +339 -0
  166. package/test/integration/sync-flow.test.ts +309 -0
  167. package/test/run-tests.sh +225 -0
  168. package/test/unit/content-similarity.test.ts +236 -0
  169. package/test/unit/deletion-behavior.test.ts +260 -0
  170. package/test/unit/enhanced-mime-detection.test.ts +266 -0
  171. package/test/unit/snapshot.test.ts +431 -0
  172. package/test/unit/sync-timing.test.ts +178 -0
  173. package/test/unit/utils.test.ts +368 -0
  174. package/tools/browser-sync/README.md +116 -0
  175. package/tools/browser-sync/package.json +44 -0
  176. package/tools/browser-sync/patchwork.json +1 -0
  177. package/tools/browser-sync/pnpm-lock.yaml +4202 -0
  178. package/tools/browser-sync/src/components/BrowserSyncTool.tsx +599 -0
  179. package/tools/browser-sync/src/index.ts +20 -0
  180. package/tools/browser-sync/src/polyfills.ts +31 -0
  181. package/tools/browser-sync/src/styles.css +290 -0
  182. package/tools/browser-sync/src/types.ts +27 -0
  183. package/tools/browser-sync/vite.config.ts +25 -0
  184. package/tsconfig.json +22 -0
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ /**
3
+ * Browser filesystem adapter using File System Access API with browser-fs-access fallbacks
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.browserFS = exports.BrowserFilesystemAdapter = void 0;
40
+ const types_1 = require("../types");
41
+ const mime_types_1 = require("../utils/mime-types");
42
+ const utils_1 = require("../utils");
43
+ require("./globals");
44
+ /**
45
+ * Browser filesystem adapter that provides Node.js fs-like interface
46
+ * using File System Access API with graceful fallbacks
47
+ */
48
+ class BrowserFilesystemAdapter {
49
+ constructor() {
50
+ this.state = {
51
+ rootHandle: null,
52
+ hasPermission: false,
53
+ isSupported: this.checkSupport(),
54
+ };
55
+ }
56
+ /**
57
+ * Check if File System Access API is supported
58
+ */
59
+ checkSupport() {
60
+ return (typeof window !== "undefined" &&
61
+ "showDirectoryPicker" in window &&
62
+ "showFilePicker" in window);
63
+ }
64
+ /**
65
+ * Check if File System Access API is supported
66
+ */
67
+ isSupported() {
68
+ return this.state.isSupported;
69
+ }
70
+ /**
71
+ * Get current sync state
72
+ */
73
+ getSyncState() {
74
+ return { ...this.state };
75
+ }
76
+ /**
77
+ * Show directory picker and set as root directory
78
+ */
79
+ async showDirectoryPicker(options = {}) {
80
+ try {
81
+ // Use native File System Access API if available
82
+ if (this.state.isSupported && "showDirectoryPicker" in window) {
83
+ const handle = await window.showDirectoryPicker({
84
+ mode: options.mode || "readwrite",
85
+ startIn: options.startIn || "documents",
86
+ id: options.id || "pushwork-sync",
87
+ });
88
+ this.state.rootHandle = handle;
89
+ this.state.hasPermission = true;
90
+ return handle;
91
+ }
92
+ else {
93
+ // Fallback using dynamic import of browser-fs-access
94
+ try {
95
+ const { directoryOpen } = await Promise.resolve().then(() => __importStar(require("browser-fs-access")));
96
+ const files = await directoryOpen({
97
+ recursive: true,
98
+ mode: options.mode || "readwrite",
99
+ });
100
+ // Create a virtual directory handle from the files
101
+ const virtualHandle = this.createVirtualDirectoryHandle(files);
102
+ this.state.rootHandle = virtualHandle;
103
+ this.state.hasPermission = true;
104
+ return virtualHandle;
105
+ }
106
+ catch (error) {
107
+ throw new Error(`Browser-fs-access fallback failed: ${error}`);
108
+ }
109
+ }
110
+ }
111
+ catch (error) {
112
+ console.error("Failed to show directory picker:", error);
113
+ throw new Error(`Directory picker failed: ${error}`);
114
+ }
115
+ }
116
+ /**
117
+ * Read file content as string or Uint8Array
118
+ */
119
+ async readFileContent(handle) {
120
+ try {
121
+ const file = await handle.getFile();
122
+ const isText = await this.isTextFile(file.name, file);
123
+ if (isText) {
124
+ return await file.text();
125
+ }
126
+ else {
127
+ const arrayBuffer = await file.arrayBuffer();
128
+ return new Uint8Array(arrayBuffer);
129
+ }
130
+ }
131
+ catch (error) {
132
+ throw new Error(`Failed to read file ${handle.name}: ${error}`);
133
+ }
134
+ }
135
+ /**
136
+ * Write file content from string or Uint8Array
137
+ */
138
+ async writeFileContent(handle, content) {
139
+ try {
140
+ // Check write permission
141
+ const permission = await handle.requestPermission({ mode: "readwrite" });
142
+ if (permission !== "granted") {
143
+ throw new Error(`Write permission denied for ${handle.name}`);
144
+ }
145
+ const writable = await handle.createWritable();
146
+ await writable.write(content);
147
+ await writable.close();
148
+ }
149
+ catch (error) {
150
+ throw new Error(`Failed to write file ${handle.name}: ${error}`);
151
+ }
152
+ }
153
+ /**
154
+ * List directory contents with metadata
155
+ */
156
+ async listDirectory(dirHandle, recursive = false, excludePatterns = []) {
157
+ const entries = [];
158
+ try {
159
+ await this.listDirectoryRecursive(dirHandle, "", entries, recursive, excludePatterns);
160
+ }
161
+ catch (error) {
162
+ console.error("Failed to list directory:", error);
163
+ }
164
+ return entries;
165
+ }
166
+ /**
167
+ * Create a file in the given directory
168
+ */
169
+ async createFile(dirHandle, fileName, content) {
170
+ const fileHandle = await dirHandle.getFileHandle(fileName, {
171
+ create: true,
172
+ });
173
+ await this.writeFileContent(fileHandle, content);
174
+ return fileHandle;
175
+ }
176
+ /**
177
+ * Create a directory
178
+ */
179
+ async createDirectory(dirHandle, dirName) {
180
+ return await dirHandle.getDirectoryHandle(dirName, { create: true });
181
+ }
182
+ /**
183
+ * Remove a file or directory
184
+ */
185
+ async removeEntry(dirHandle, name, recursive = false) {
186
+ await dirHandle.removeEntry(name, { recursive });
187
+ }
188
+ /**
189
+ * Get file handle by path relative to root
190
+ */
191
+ async getFileHandle(relativePath) {
192
+ if (!this.state.rootHandle) {
193
+ throw new Error("No root directory selected");
194
+ }
195
+ try {
196
+ const pathParts = relativePath
197
+ .split("/")
198
+ .filter((part) => part.length > 0);
199
+ let currentHandle = this.state.rootHandle;
200
+ // Navigate to parent directory
201
+ for (let i = 0; i < pathParts.length - 1; i++) {
202
+ if (currentHandle.kind !== "directory") {
203
+ return null;
204
+ }
205
+ currentHandle = await currentHandle.getDirectoryHandle(pathParts[i]);
206
+ }
207
+ // Get the file
208
+ if (currentHandle.kind === "directory") {
209
+ const fileName = pathParts[pathParts.length - 1];
210
+ return await currentHandle.getFileHandle(fileName);
211
+ }
212
+ return null;
213
+ }
214
+ catch (error) {
215
+ console.warn(`Failed to get file handle for ${relativePath}:`, error);
216
+ return null;
217
+ }
218
+ }
219
+ /**
220
+ * Get directory handle by path relative to root
221
+ */
222
+ async getDirectoryHandle(relativePath) {
223
+ if (!this.state.rootHandle) {
224
+ throw new Error("No root directory selected");
225
+ }
226
+ if (relativePath === "" || relativePath === ".") {
227
+ return this.state.rootHandle;
228
+ }
229
+ try {
230
+ const pathParts = relativePath
231
+ .split("/")
232
+ .filter((part) => part.length > 0);
233
+ let currentHandle = this.state.rootHandle;
234
+ for (const part of pathParts) {
235
+ currentHandle = await currentHandle.getDirectoryHandle(part);
236
+ }
237
+ return currentHandle;
238
+ }
239
+ catch (error) {
240
+ console.warn(`Failed to get directory handle for ${relativePath}:`, error);
241
+ return null;
242
+ }
243
+ }
244
+ /**
245
+ * Check if file is text or binary
246
+ */
247
+ async isTextFile(fileName, file) {
248
+ // Use existing enhanced text file detection
249
+ const isTextByExtension = await (0, mime_types_1.isEnhancedTextFile)(fileName);
250
+ if (isTextByExtension)
251
+ return true;
252
+ // If we have the file, sample content for binary detection
253
+ if (file && file.size > 0) {
254
+ try {
255
+ const sampleSize = Math.min(8192, file.size);
256
+ const buffer = await file.slice(0, sampleSize).arrayBuffer();
257
+ const uint8Array = new Uint8Array(buffer);
258
+ // Check for null bytes which indicate binary content
259
+ return !uint8Array.includes(0);
260
+ }
261
+ catch {
262
+ return false;
263
+ }
264
+ }
265
+ return false;
266
+ }
267
+ /**
268
+ * Recursive directory listing helper
269
+ */
270
+ async listDirectoryRecursive(dirHandle, currentPath, entries, recursive, excludePatterns) {
271
+ for await (const [name, handle] of dirHandle.entries()) {
272
+ const fullPath = currentPath ? `${currentPath}/${name}` : name;
273
+ // Check exclude patterns
274
+ if (this.isExcluded(fullPath, excludePatterns)) {
275
+ continue;
276
+ }
277
+ if (handle.kind === "file") {
278
+ const file = await handle.getFile();
279
+ const fileType = (await this.isTextFile(name, file))
280
+ ? types_1.FileType.TEXT
281
+ : types_1.FileType.BINARY;
282
+ entries.push({
283
+ path: (0, utils_1.normalizePath)(fullPath),
284
+ type: fileType,
285
+ size: file.size,
286
+ mtime: new Date(file.lastModified),
287
+ permissions: 0o644, // Default permissions for browser files
288
+ });
289
+ }
290
+ else if (handle.kind === "directory") {
291
+ entries.push({
292
+ path: (0, utils_1.normalizePath)(fullPath),
293
+ type: types_1.FileType.DIRECTORY,
294
+ size: 0,
295
+ mtime: new Date(),
296
+ permissions: 0o755, // Default permissions for browser directories
297
+ });
298
+ if (recursive) {
299
+ await this.listDirectoryRecursive(handle, fullPath, entries, recursive, excludePatterns);
300
+ }
301
+ }
302
+ }
303
+ }
304
+ /**
305
+ * Check if path should be excluded
306
+ */
307
+ isExcluded(path, excludePatterns) {
308
+ for (const pattern of excludePatterns) {
309
+ if (pattern.startsWith(".") && !pattern.includes("*")) {
310
+ // Directory pattern like ".pushwork" or ".git"
311
+ if (path.startsWith(pattern) ||
312
+ path.includes(`/${pattern}/`) ||
313
+ path.includes(`/${pattern}`)) {
314
+ return true;
315
+ }
316
+ }
317
+ else if (pattern.includes("*")) {
318
+ // Glob pattern like "*.tmp"
319
+ const regex = new RegExp(pattern.replace(/\*/g, ".*").replace(/\?/g, "."));
320
+ if (regex.test(path)) {
321
+ return true;
322
+ }
323
+ }
324
+ else {
325
+ // Exact directory name like "node_modules"
326
+ const parts = path.split("/");
327
+ if (parts.includes(pattern)) {
328
+ return true;
329
+ }
330
+ }
331
+ }
332
+ return false;
333
+ }
334
+ /**
335
+ * Create a virtual directory handle from browser-fs-access files
336
+ * (for browsers that don't support File System Access API)
337
+ */
338
+ createVirtualDirectoryHandle(files) {
339
+ // This is a simplified implementation for fallback scenarios
340
+ // In practice, you might want to use a more sophisticated virtual filesystem
341
+ const self = this;
342
+ const virtualHandle = {
343
+ kind: "directory",
344
+ name: "root",
345
+ async *keys() {
346
+ const names = new Set(files.map((file) => file.name.split("/")[0]));
347
+ for (const name of names) {
348
+ yield name;
349
+ }
350
+ },
351
+ async *values() {
352
+ // Simplified - return file handles for files in root
353
+ for (const file of files) {
354
+ if (!file.name.includes("/")) {
355
+ yield self.createVirtualFileHandle(file);
356
+ }
357
+ }
358
+ },
359
+ async *entries() {
360
+ for await (const key of this.keys()) {
361
+ const file = files.find((f) => f.name === key);
362
+ if (file) {
363
+ yield [key, self.createVirtualFileHandle(file)];
364
+ }
365
+ }
366
+ },
367
+ async getFileHandle(name) {
368
+ const file = files.find((f) => f.name === name);
369
+ if (!file)
370
+ throw new Error(`File not found: ${name}`);
371
+ return self.createVirtualFileHandle(file);
372
+ },
373
+ async getDirectoryHandle() {
374
+ throw new Error("Virtual directory handles not fully implemented");
375
+ },
376
+ async removeEntry() {
377
+ throw new Error("Remove not supported in fallback mode");
378
+ },
379
+ async queryPermission() {
380
+ return "granted";
381
+ },
382
+ async requestPermission() {
383
+ return "granted";
384
+ },
385
+ };
386
+ return virtualHandle;
387
+ }
388
+ /**
389
+ * Create a virtual file handle from a File object
390
+ */
391
+ createVirtualFileHandle(file) {
392
+ return {
393
+ kind: "file",
394
+ name: file.name,
395
+ async getFile() {
396
+ return file;
397
+ },
398
+ async createWritable() {
399
+ throw new Error("Writing not supported in fallback mode");
400
+ },
401
+ async queryPermission() {
402
+ return "granted";
403
+ },
404
+ async requestPermission() {
405
+ return "granted";
406
+ },
407
+ };
408
+ }
409
+ }
410
+ exports.BrowserFilesystemAdapter = BrowserFilesystemAdapter;
411
+ // Export singleton instance
412
+ exports.browserFS = new BrowserFilesystemAdapter();
413
+ //# sourceMappingURL=filesystem-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-adapter.js","sourceRoot":"","sources":["../../src/browser/filesystem-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Browser entry point for pushwork sync functionality
3
+ */
4
+ export { BrowserFilesystemAdapter, browserFS } from "./filesystem-adapter";
5
+ export { BrowserSyncEngine, BrowserRepoFactory } from "./browser-sync-engine";
6
+ export type { BrowserFileHandle, BrowserDirectoryHandle, BrowserFileSystemEntry, BrowserSyncState, DirectoryPickerOptions, } from "./types";
7
+ export type { SyncResult, SyncSnapshot, FileDocument, DirectoryDocument, } from "../types";
8
+ import "./globals";
9
+ /**
10
+ * Create a browser-ready pushwork sync instance
11
+ */
12
+ export declare function createBrowserSync(options?: {
13
+ syncServerUrl?: string;
14
+ syncServerStorageId?: string;
15
+ }): Promise<{
16
+ syncEngine: import("./browser-sync-engine").BrowserSyncEngine;
17
+ filesystem: import("./filesystem-adapter").BrowserFilesystemAdapter;
18
+ repo: import("@automerge/automerge-repo").Repo;
19
+ pickFolder(): Promise<import("./types").BrowserDirectoryHandle>;
20
+ sync(dryRun?: boolean): Promise<import("../types").SyncResult>;
21
+ commit(dryRun?: boolean): Promise<import("../types").SyncResult>;
22
+ getStatus(): Promise<{
23
+ snapshot: import("../types").SyncSnapshot | null;
24
+ hasChanges: boolean;
25
+ changeCount: number;
26
+ lastSync: Date | null;
27
+ browserState: import("./types").BrowserSyncState;
28
+ }>;
29
+ setRootUrl(url: string): Promise<void>;
30
+ getRootUrl(): Promise<string | null>;
31
+ }>;
32
+ /**
33
+ * Check if File System Access API is supported
34
+ */
35
+ export declare function isFileSystemAccessSupported(): boolean;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,WAAW,CAAC;AAEnB;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACzB;;;;;;;;;;;;;;oBAoCkB,MAAM;;GAQ/B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAMrD"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Browser entry point for pushwork sync functionality
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.BrowserRepoFactory = exports.BrowserSyncEngine = exports.browserFS = exports.BrowserFilesystemAdapter = void 0;
40
+ exports.createBrowserSync = createBrowserSync;
41
+ exports.isFileSystemAccessSupported = isFileSystemAccessSupported;
42
+ var filesystem_adapter_1 = require("./filesystem-adapter");
43
+ Object.defineProperty(exports, "BrowserFilesystemAdapter", { enumerable: true, get: function () { return filesystem_adapter_1.BrowserFilesystemAdapter; } });
44
+ Object.defineProperty(exports, "browserFS", { enumerable: true, get: function () { return filesystem_adapter_1.browserFS; } });
45
+ var browser_sync_engine_1 = require("./browser-sync-engine");
46
+ Object.defineProperty(exports, "BrowserSyncEngine", { enumerable: true, get: function () { return browser_sync_engine_1.BrowserSyncEngine; } });
47
+ Object.defineProperty(exports, "BrowserRepoFactory", { enumerable: true, get: function () { return browser_sync_engine_1.BrowserRepoFactory; } });
48
+ require("./globals");
49
+ /**
50
+ * Create a browser-ready pushwork sync instance
51
+ */
52
+ async function createBrowserSync(options = {}) {
53
+ const { BrowserRepoFactory, BrowserSyncEngine } = await Promise.resolve().then(() => __importStar(require("./browser-sync-engine")));
54
+ const { browserFS } = await Promise.resolve().then(() => __importStar(require("./filesystem-adapter")));
55
+ const repo = await BrowserRepoFactory.create(options.syncServerUrl, options.syncServerStorageId);
56
+ const syncEngine = new BrowserSyncEngine(repo, browserFS);
57
+ return {
58
+ syncEngine,
59
+ filesystem: browserFS,
60
+ repo,
61
+ // Convenience methods
62
+ async pickFolder() {
63
+ return await syncEngine.initializeWithDirectoryPicker();
64
+ },
65
+ async sync(dryRun = false) {
66
+ return await syncEngine.sync(dryRun);
67
+ },
68
+ async commit(dryRun = false) {
69
+ return await syncEngine.commitLocal(dryRun);
70
+ },
71
+ async getStatus() {
72
+ return await syncEngine.getStatus();
73
+ },
74
+ async setRootUrl(url) {
75
+ return await syncEngine.setRootDirectoryUrl(url);
76
+ },
77
+ async getRootUrl() {
78
+ return await syncEngine.getRootDirectoryUrl();
79
+ },
80
+ };
81
+ }
82
+ /**
83
+ * Check if File System Access API is supported
84
+ */
85
+ function isFileSystemAccessSupported() {
86
+ return (typeof window !== "undefined" &&
87
+ "showDirectoryPicker" in window &&
88
+ "showFilePicker" in window);
89
+ }
90
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBH,8CAgDC;AAKD,kEAMC;AAlFD,2DAA2E;AAAlE,8HAAA,wBAAwB,OAAA;AAAE,+GAAA,SAAS,OAAA;AAC5C,6DAA8E;AAArE,wHAAA,iBAAiB,OAAA;AAAE,yHAAA,kBAAkB,OAAA;AAiB9C,qBAAmB;AAEnB;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,UAGI,EAAE;IAEN,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,wDAChD,uBAAuB,GACxB,CAAC;IACF,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAC1C,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,mBAAmB,CAC5B,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE1D,OAAO;QACL,UAAU;QACV,UAAU,EAAE,SAAS;QACrB,IAAI;QAEJ,sBAAsB;QACtB,KAAK,CAAC,UAAU;YACd,OAAO,MAAM,UAAU,CAAC,6BAA6B,EAAE,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK;YACvB,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK;YACzB,OAAO,MAAM,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,SAAS;YACb,OAAO,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,GAAW;YAC1B,OAAO,MAAM,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,CAAC,UAAU;YACd,OAAO,MAAM,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B;IACzC,OAAO,CACL,OAAO,MAAM,KAAK,WAAW;QAC7B,qBAAqB,IAAI,MAAM;QAC/B,gBAAgB,IAAI,MAAM,CAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Browser-specific types for File System Access API compatibility
3
+ */
4
+ declare global {
5
+ interface Window {
6
+ showDirectoryPicker(options?: any): Promise<any>;
7
+ showFilePicker(options?: any): Promise<any>;
8
+ }
9
+ }
10
+ type PermissionState = "granted" | "denied" | "prompt";
11
+ interface FileSystemWritableFileStream extends WritableStream {
12
+ write(data: any): Promise<void>;
13
+ close(): Promise<void>;
14
+ }
15
+ export interface BrowserFileHandle {
16
+ kind: "file";
17
+ name: string;
18
+ getFile(): Promise<File>;
19
+ createWritable(): Promise<FileSystemWritableFileStream>;
20
+ queryPermission(options?: {
21
+ mode?: "read" | "readwrite";
22
+ }): Promise<PermissionState>;
23
+ requestPermission(options?: {
24
+ mode?: "read" | "readwrite";
25
+ }): Promise<PermissionState>;
26
+ }
27
+ export interface BrowserDirectoryHandle {
28
+ kind: "directory";
29
+ name: string;
30
+ keys(): AsyncIterableIterator<string>;
31
+ values(): AsyncIterableIterator<BrowserFileHandle | BrowserDirectoryHandle>;
32
+ entries(): AsyncIterableIterator<[
33
+ string,
34
+ BrowserFileHandle | BrowserDirectoryHandle
35
+ ]>;
36
+ getFileHandle(name: string, options?: {
37
+ create?: boolean;
38
+ }): Promise<BrowserFileHandle>;
39
+ getDirectoryHandle(name: string, options?: {
40
+ create?: boolean;
41
+ }): Promise<BrowserDirectoryHandle>;
42
+ removeEntry(name: string, options?: {
43
+ recursive?: boolean;
44
+ }): Promise<void>;
45
+ queryPermission(options?: {
46
+ mode?: "read" | "readwrite";
47
+ }): Promise<PermissionState>;
48
+ requestPermission(options?: {
49
+ mode?: "read" | "readwrite";
50
+ }): Promise<PermissionState>;
51
+ }
52
+ export interface BrowserFileSystemEntry {
53
+ path: string;
54
+ handle: BrowserFileHandle | BrowserDirectoryHandle;
55
+ type: "file" | "directory";
56
+ size?: number;
57
+ lastModified?: Date;
58
+ }
59
+ export interface DirectoryPickerOptions {
60
+ id?: string;
61
+ mode?: "read" | "readwrite";
62
+ startIn?: "desktop" | "documents" | "downloads" | "music" | "pictures" | "videos";
63
+ }
64
+ export interface BrowserSyncState {
65
+ rootHandle: BrowserDirectoryHandle | null;
66
+ hasPermission: boolean;
67
+ isSupported: boolean;
68
+ }
69
+ export {};
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Browser-specific types for File System Access API compatibility
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}