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.
- package/README.md +460 -0
- package/dist/browser/browser-sync-engine.d.ts +64 -0
- package/dist/browser/browser-sync-engine.d.ts.map +1 -0
- package/dist/browser/browser-sync-engine.js +303 -0
- package/dist/browser/browser-sync-engine.js.map +1 -0
- package/dist/browser/filesystem-adapter.d.ts +84 -0
- package/dist/browser/filesystem-adapter.d.ts.map +1 -0
- package/dist/browser/filesystem-adapter.js +413 -0
- package/dist/browser/filesystem-adapter.js.map +1 -0
- package/dist/browser/index.d.ts +36 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +90 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/types.d.ts +70 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +6 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/cli/commands.d.ts +71 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +794 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +19 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +199 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +71 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +314 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/change-detection.d.ts +78 -0
- package/dist/core/change-detection.d.ts.map +1 -0
- package/dist/core/change-detection.js +370 -0
- package/dist/core/change-detection.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +22 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/isomorphic-snapshot.d.ts +58 -0
- package/dist/core/isomorphic-snapshot.d.ts.map +1 -0
- package/dist/core/isomorphic-snapshot.js +204 -0
- package/dist/core/isomorphic-snapshot.js.map +1 -0
- package/dist/core/move-detection.d.ts +72 -0
- package/dist/core/move-detection.d.ts.map +1 -0
- package/dist/core/move-detection.js +200 -0
- package/dist/core/move-detection.js.map +1 -0
- package/dist/core/snapshot.d.ts +109 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/core/snapshot.js +263 -0
- package/dist/core/snapshot.js.map +1 -0
- package/dist/core/sync-engine.d.ts +110 -0
- package/dist/core/sync-engine.d.ts.map +1 -0
- package/dist/core/sync-engine.js +817 -0
- package/dist/core/sync-engine.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/browser-filesystem.d.ts +26 -0
- package/dist/platform/browser-filesystem.d.ts.map +1 -0
- package/dist/platform/browser-filesystem.js +91 -0
- package/dist/platform/browser-filesystem.js.map +1 -0
- package/dist/platform/filesystem.d.ts +29 -0
- package/dist/platform/filesystem.d.ts.map +1 -0
- package/dist/platform/filesystem.js +65 -0
- package/dist/platform/filesystem.js.map +1 -0
- package/dist/platform/node-filesystem.d.ts +21 -0
- package/dist/platform/node-filesystem.d.ts.map +1 -0
- package/dist/platform/node-filesystem.js +93 -0
- package/dist/platform/node-filesystem.js.map +1 -0
- package/dist/types/config.d.ts +119 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/documents.d.ts +70 -0
- package/dist/types/documents.d.ts.map +1 -0
- package/dist/types/documents.js +23 -0
- package/dist/types/documents.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/snapshot.d.ts +81 -0
- package/dist/types/snapshot.d.ts.map +1 -0
- package/dist/types/snapshot.js +17 -0
- package/dist/types/snapshot.js.map +1 -0
- package/dist/utils/content-similarity.d.ts +53 -0
- package/dist/utils/content-similarity.d.ts.map +1 -0
- package/dist/utils/content-similarity.js +155 -0
- package/dist/utils/content-similarity.js.map +1 -0
- package/dist/utils/content.d.ts +5 -0
- package/dist/utils/content.d.ts.map +1 -0
- package/dist/utils/content.js +30 -0
- package/dist/utils/content.js.map +1 -0
- package/dist/utils/fs-browser.d.ts +57 -0
- package/dist/utils/fs-browser.d.ts.map +1 -0
- package/dist/utils/fs-browser.js +311 -0
- package/dist/utils/fs-browser.js.map +1 -0
- package/dist/utils/fs-node.d.ts +53 -0
- package/dist/utils/fs-node.d.ts.map +1 -0
- package/dist/utils/fs-node.js +220 -0
- package/dist/utils/fs-node.js.map +1 -0
- package/dist/utils/fs.d.ts +62 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +293 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/isomorphic.d.ts +29 -0
- package/dist/utils/isomorphic.d.ts.map +1 -0
- package/dist/utils/isomorphic.js +139 -0
- package/dist/utils/isomorphic.js.map +1 -0
- package/dist/utils/mime-types.d.ts +13 -0
- package/dist/utils/mime-types.d.ts.map +1 -0
- package/dist/utils/mime-types.js +240 -0
- package/dist/utils/mime-types.js.map +1 -0
- package/dist/utils/network-sync.d.ts +12 -0
- package/dist/utils/network-sync.d.ts.map +1 -0
- package/dist/utils/network-sync.js +149 -0
- package/dist/utils/network-sync.js.map +1 -0
- package/dist/utils/pure.d.ts +25 -0
- package/dist/utils/pure.d.ts.map +1 -0
- package/dist/utils/pure.js +112 -0
- package/dist/utils/pure.js.map +1 -0
- package/dist/utils/repo-factory.d.ts +11 -0
- package/dist/utils/repo-factory.d.ts.map +1 -0
- package/dist/utils/repo-factory.js +77 -0
- package/dist/utils/repo-factory.js.map +1 -0
- package/package.json +83 -0
- package/src/cli/commands.ts +1053 -0
- package/src/cli/index.ts +2 -0
- package/src/cli.ts +287 -0
- package/src/config/index.ts +334 -0
- package/src/core/change-detection.ts +484 -0
- package/src/core/index.ts +5 -0
- package/src/core/move-detection.ts +269 -0
- package/src/core/snapshot.ts +285 -0
- package/src/core/sync-engine.ts +1167 -0
- package/src/index.ts +14 -0
- package/src/types/config.ts +130 -0
- package/src/types/documents.ts +72 -0
- package/src/types/index.ts +8 -0
- package/src/types/snapshot.ts +88 -0
- package/src/utils/content-similarity.ts +194 -0
- package/src/utils/content.ts +28 -0
- package/src/utils/fs.ts +289 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/mime-types.ts +236 -0
- package/src/utils/network-sync.ts +153 -0
- package/src/utils/repo-factory.ts +58 -0
- package/test/README-TESTING-GAPS.md +174 -0
- package/test/integration/README.md +328 -0
- package/test/integration/clone-test.sh +310 -0
- package/test/integration/conflict-resolution-test.sh +309 -0
- package/test/integration/deletion-behavior-test.sh +487 -0
- package/test/integration/deletion-sync-test-simple.sh +193 -0
- package/test/integration/deletion-sync-test.sh +297 -0
- package/test/integration/exclude-patterns.test.ts +152 -0
- package/test/integration/full-integration-test.sh +363 -0
- package/test/integration/sync-deletion.test.ts +339 -0
- package/test/integration/sync-flow.test.ts +309 -0
- package/test/run-tests.sh +225 -0
- package/test/unit/content-similarity.test.ts +236 -0
- package/test/unit/deletion-behavior.test.ts +260 -0
- package/test/unit/enhanced-mime-detection.test.ts +266 -0
- package/test/unit/snapshot.test.ts +431 -0
- package/test/unit/sync-timing.test.ts +178 -0
- package/test/unit/utils.test.ts +368 -0
- package/tools/browser-sync/README.md +116 -0
- package/tools/browser-sync/package.json +44 -0
- package/tools/browser-sync/patchwork.json +1 -0
- package/tools/browser-sync/pnpm-lock.yaml +4202 -0
- package/tools/browser-sync/src/components/BrowserSyncTool.tsx +599 -0
- package/tools/browser-sync/src/index.ts +20 -0
- package/tools/browser-sync/src/polyfills.ts +31 -0
- package/tools/browser-sync/src/styles.css +290 -0
- package/tools/browser-sync/src/types.ts +27 -0
- package/tools/browser-sync/vite.config.ts +25 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|