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,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ConfigManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs/promises"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const utils_1 = require("../utils");
|
|
41
|
+
/**
|
|
42
|
+
* Configuration manager for pushwork
|
|
43
|
+
*/
|
|
44
|
+
class ConfigManager {
|
|
45
|
+
constructor(workingDir) {
|
|
46
|
+
this.workingDir = workingDir;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get global configuration path
|
|
50
|
+
*/
|
|
51
|
+
getGlobalConfigPath() {
|
|
52
|
+
return path.join(os.homedir(), ConfigManager.GLOBAL_CONFIG_DIR, ConfigManager.CONFIG_FILENAME);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get local configuration path
|
|
56
|
+
*/
|
|
57
|
+
getLocalConfigPath() {
|
|
58
|
+
if (!this.workingDir) {
|
|
59
|
+
throw new Error("Working directory not set for local config");
|
|
60
|
+
}
|
|
61
|
+
return path.join(this.workingDir, ConfigManager.LOCAL_CONFIG_DIR, ConfigManager.CONFIG_FILENAME);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Load global configuration
|
|
65
|
+
*/
|
|
66
|
+
async loadGlobal() {
|
|
67
|
+
try {
|
|
68
|
+
const configPath = this.getGlobalConfigPath();
|
|
69
|
+
if (!(await (0, utils_1.pathExists)(configPath))) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const content = await fs.readFile(configPath, "utf8");
|
|
73
|
+
return JSON.parse(content);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.warn(`Failed to load global config: ${error}`);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Save global configuration
|
|
82
|
+
*/
|
|
83
|
+
async saveGlobal(config) {
|
|
84
|
+
try {
|
|
85
|
+
const configPath = this.getGlobalConfigPath();
|
|
86
|
+
await (0, utils_1.ensureDirectoryExists)(path.dirname(configPath));
|
|
87
|
+
const content = JSON.stringify(config, null, 2);
|
|
88
|
+
await fs.writeFile(configPath, content, "utf8");
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw new Error(`Failed to save global config: ${error}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Load local/directory configuration
|
|
96
|
+
*/
|
|
97
|
+
async load() {
|
|
98
|
+
if (!this.workingDir) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const configPath = this.getLocalConfigPath();
|
|
103
|
+
if (!(await (0, utils_1.pathExists)(configPath))) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
const content = await fs.readFile(configPath, "utf8");
|
|
107
|
+
return JSON.parse(content);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.warn(`Failed to load local config: ${error}`);
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Save local/directory configuration
|
|
116
|
+
*/
|
|
117
|
+
async save(config) {
|
|
118
|
+
if (!this.workingDir) {
|
|
119
|
+
throw new Error("Working directory not set for local config");
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const configPath = this.getLocalConfigPath();
|
|
123
|
+
await (0, utils_1.ensureDirectoryExists)(path.dirname(configPath));
|
|
124
|
+
const content = JSON.stringify(config, null, 2);
|
|
125
|
+
await fs.writeFile(configPath, content, "utf8");
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw new Error(`Failed to save local config: ${error}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get merged configuration (global + local)
|
|
133
|
+
*/
|
|
134
|
+
async getMerged() {
|
|
135
|
+
const globalConfig = await this.loadGlobal();
|
|
136
|
+
const localConfig = await this.load();
|
|
137
|
+
// Create default configuration
|
|
138
|
+
const defaultConfig = {
|
|
139
|
+
sync_enabled: true,
|
|
140
|
+
sync_server_storage_id: "3760df37-a4c6-4f66-9ecd-732039a9385d",
|
|
141
|
+
defaults: {
|
|
142
|
+
exclude_patterns: [".git", "node_modules", "*.tmp", ".pushwork"],
|
|
143
|
+
large_file_threshold: "100MB",
|
|
144
|
+
},
|
|
145
|
+
diff: {
|
|
146
|
+
show_binary: false,
|
|
147
|
+
},
|
|
148
|
+
sync: {
|
|
149
|
+
move_detection_threshold: 0.8,
|
|
150
|
+
prompt_threshold: 0.5,
|
|
151
|
+
auto_sync: false,
|
|
152
|
+
parallel_operations: 4,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
// Merge configurations: default < global < local
|
|
156
|
+
let merged = { ...defaultConfig };
|
|
157
|
+
if (globalConfig) {
|
|
158
|
+
merged = this.mergeConfigs(merged, globalConfig);
|
|
159
|
+
}
|
|
160
|
+
if (localConfig) {
|
|
161
|
+
merged = this.mergeConfigs(merged, localConfig);
|
|
162
|
+
}
|
|
163
|
+
return merged;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Merge two configuration objects
|
|
167
|
+
*/
|
|
168
|
+
mergeConfigs(base, override) {
|
|
169
|
+
const merged = { ...base };
|
|
170
|
+
if ("sync_server" in override && override.sync_server !== undefined) {
|
|
171
|
+
merged.sync_server = override.sync_server;
|
|
172
|
+
}
|
|
173
|
+
if ("sync_server_storage_id" in override &&
|
|
174
|
+
override.sync_server_storage_id !== undefined) {
|
|
175
|
+
merged.sync_server_storage_id = override.sync_server_storage_id;
|
|
176
|
+
}
|
|
177
|
+
if ("sync_enabled" in override && override.sync_enabled !== undefined) {
|
|
178
|
+
merged.sync_enabled = override.sync_enabled;
|
|
179
|
+
}
|
|
180
|
+
// Handle GlobalConfig structure
|
|
181
|
+
if ("exclude_patterns" in override && override.exclude_patterns) {
|
|
182
|
+
merged.defaults.exclude_patterns = override.exclude_patterns;
|
|
183
|
+
}
|
|
184
|
+
if ("large_file_threshold" in override && override.large_file_threshold) {
|
|
185
|
+
merged.defaults.large_file_threshold = override.large_file_threshold;
|
|
186
|
+
}
|
|
187
|
+
// Handle DirectoryConfig structure
|
|
188
|
+
if ("defaults" in override && override.defaults) {
|
|
189
|
+
merged.defaults = { ...merged.defaults, ...override.defaults };
|
|
190
|
+
}
|
|
191
|
+
if ("diff" in override && override.diff) {
|
|
192
|
+
// Merge diff settings, ensuring show_binary has a default
|
|
193
|
+
merged.diff = {
|
|
194
|
+
...merged.diff,
|
|
195
|
+
...override.diff,
|
|
196
|
+
show_binary: override.diff.show_binary ?? merged.diff.show_binary,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
if ("sync" in override && override.sync) {
|
|
200
|
+
merged.sync = { ...merged.sync, ...override.sync };
|
|
201
|
+
}
|
|
202
|
+
return merged;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create default global configuration
|
|
206
|
+
*/
|
|
207
|
+
async createDefaultGlobal() {
|
|
208
|
+
const defaultGlobal = {
|
|
209
|
+
exclude_patterns: [
|
|
210
|
+
".git",
|
|
211
|
+
"node_modules",
|
|
212
|
+
"*.tmp",
|
|
213
|
+
".DS_Store",
|
|
214
|
+
".pushwork",
|
|
215
|
+
],
|
|
216
|
+
large_file_threshold: "100MB",
|
|
217
|
+
sync_server: "wss://sync3.automerge.org",
|
|
218
|
+
sync_server_storage_id: "3760df37-a4c6-4f66-9ecd-732039a9385d",
|
|
219
|
+
diff: {
|
|
220
|
+
show_binary: false,
|
|
221
|
+
},
|
|
222
|
+
sync: {
|
|
223
|
+
move_detection_threshold: 0.8,
|
|
224
|
+
prompt_threshold: 0.5,
|
|
225
|
+
auto_sync: false,
|
|
226
|
+
parallel_operations: 4,
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
await this.saveGlobal(defaultGlobal);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Check if global configuration exists
|
|
233
|
+
*/
|
|
234
|
+
async globalConfigExists() {
|
|
235
|
+
return await (0, utils_1.pathExists)(this.getGlobalConfigPath());
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Check if local configuration exists
|
|
239
|
+
*/
|
|
240
|
+
async localConfigExists() {
|
|
241
|
+
if (!this.workingDir)
|
|
242
|
+
return false;
|
|
243
|
+
return await (0, utils_1.pathExists)(this.getLocalConfigPath());
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get configuration value by path (e.g., 'sync.auto_sync')
|
|
247
|
+
*/
|
|
248
|
+
async getValue(keyPath) {
|
|
249
|
+
const config = await this.getMerged();
|
|
250
|
+
const keys = keyPath.split(".");
|
|
251
|
+
let value = config;
|
|
252
|
+
for (const key of keys) {
|
|
253
|
+
if (value && typeof value === "object" && key in value) {
|
|
254
|
+
value = value[key];
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Set configuration value by path
|
|
264
|
+
*/
|
|
265
|
+
async setValue(keyPath, value) {
|
|
266
|
+
const config = (await this.load()) || {};
|
|
267
|
+
const keys = keyPath.split(".");
|
|
268
|
+
let current = config;
|
|
269
|
+
// Navigate to the parent of the target key
|
|
270
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
271
|
+
const key = keys[i];
|
|
272
|
+
if (!(key in current) || typeof current[key] !== "object") {
|
|
273
|
+
current[key] = {};
|
|
274
|
+
}
|
|
275
|
+
current = current[key];
|
|
276
|
+
}
|
|
277
|
+
// Set the value
|
|
278
|
+
const finalKey = keys[keys.length - 1];
|
|
279
|
+
current[finalKey] = value;
|
|
280
|
+
await this.save(config);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Validate configuration
|
|
284
|
+
*/
|
|
285
|
+
validate(config) {
|
|
286
|
+
const errors = [];
|
|
287
|
+
if (config.sync?.move_detection_threshold !== undefined) {
|
|
288
|
+
if (config.sync.move_detection_threshold < 0 ||
|
|
289
|
+
config.sync.move_detection_threshold > 1) {
|
|
290
|
+
errors.push("move_detection_threshold must be between 0 and 1");
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (config.sync?.prompt_threshold !== undefined) {
|
|
294
|
+
if (config.sync.prompt_threshold < 0 ||
|
|
295
|
+
config.sync.prompt_threshold > 1) {
|
|
296
|
+
errors.push("prompt_threshold must be between 0 and 1");
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (config.sync?.parallel_operations !== undefined) {
|
|
300
|
+
if (config.sync.parallel_operations < 1) {
|
|
301
|
+
errors.push("parallel_operations must be at least 1");
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
valid: errors.length === 0,
|
|
306
|
+
errors,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.ConfigManager = ConfigManager;
|
|
311
|
+
ConfigManager.GLOBAL_CONFIG_DIR = ".pushwork";
|
|
312
|
+
ConfigManager.CONFIG_FILENAME = "config.json";
|
|
313
|
+
ConfigManager.LOCAL_CONFIG_DIR = ".pushwork";
|
|
314
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Repo, UrlHeads } from "@automerge/automerge-repo";
|
|
2
|
+
import { ChangeType, FileType, SyncSnapshot } from "../types";
|
|
3
|
+
export { ChangeType } from "../types";
|
|
4
|
+
/**
|
|
5
|
+
* Represents a detected change
|
|
6
|
+
*/
|
|
7
|
+
export interface DetectedChange {
|
|
8
|
+
path: string;
|
|
9
|
+
changeType: ChangeType;
|
|
10
|
+
fileType: FileType;
|
|
11
|
+
localContent: string | Uint8Array | null;
|
|
12
|
+
remoteContent: string | Uint8Array | null;
|
|
13
|
+
localHead?: UrlHeads;
|
|
14
|
+
remoteHead?: UrlHeads;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Change detection engine
|
|
18
|
+
*/
|
|
19
|
+
export declare class ChangeDetector {
|
|
20
|
+
private repo;
|
|
21
|
+
private rootPath;
|
|
22
|
+
private excludePatterns;
|
|
23
|
+
constructor(repo: Repo, rootPath: string, excludePatterns?: string[]);
|
|
24
|
+
/**
|
|
25
|
+
* Detect all changes between local filesystem and snapshot
|
|
26
|
+
*/
|
|
27
|
+
detectChanges(snapshot: SyncSnapshot): Promise<DetectedChange[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Detect changes in local filesystem compared to snapshot
|
|
30
|
+
*/
|
|
31
|
+
private detectLocalChanges;
|
|
32
|
+
/**
|
|
33
|
+
* Detect changes in remote Automerge documents compared to snapshot
|
|
34
|
+
*/
|
|
35
|
+
private detectRemoteChanges;
|
|
36
|
+
/**
|
|
37
|
+
* Detect new remote documents from directory hierarchy that aren't in snapshot
|
|
38
|
+
* This is critical for clone scenarios where local snapshot is empty
|
|
39
|
+
*/
|
|
40
|
+
private detectNewRemoteDocuments;
|
|
41
|
+
/**
|
|
42
|
+
* Recursively discover remote documents in directory hierarchy
|
|
43
|
+
*/
|
|
44
|
+
private discoverRemoteDocumentsRecursive;
|
|
45
|
+
/**
|
|
46
|
+
* Get current filesystem state as a map
|
|
47
|
+
*/
|
|
48
|
+
private getCurrentFilesystemState;
|
|
49
|
+
/**
|
|
50
|
+
* Get local file content if it exists
|
|
51
|
+
*/
|
|
52
|
+
private getLocalContent;
|
|
53
|
+
/**
|
|
54
|
+
* Get content from Automerge document at specific head
|
|
55
|
+
*/
|
|
56
|
+
private getContentAtHead;
|
|
57
|
+
/**
|
|
58
|
+
* Get current content from Automerge document
|
|
59
|
+
*/
|
|
60
|
+
private getCurrentRemoteContent;
|
|
61
|
+
/**
|
|
62
|
+
* Get current head of Automerge document
|
|
63
|
+
*/
|
|
64
|
+
private getCurrentRemoteHead;
|
|
65
|
+
/**
|
|
66
|
+
* Determine file type from content
|
|
67
|
+
*/
|
|
68
|
+
private getFileTypeFromContent;
|
|
69
|
+
/**
|
|
70
|
+
* Compare two content pieces for equality
|
|
71
|
+
*/
|
|
72
|
+
private isContentEqual;
|
|
73
|
+
/**
|
|
74
|
+
* Classify change type for a path
|
|
75
|
+
*/
|
|
76
|
+
classifyChange(relativePath: string, snapshot: SyncSnapshot): Promise<ChangeType>;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=change-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-detection.d.ts","sourceRoot":"","sources":["../../src/core/change-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEzE,OAAO,EACL,UAAU,EACV,QAAQ,EACR,YAAY,EAKb,MAAM,UAAU,CAAC;AAUlB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACzC,aAAa,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,eAAe;gBAFf,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,MAAM,EAAO;IAGxC;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAqBtE;;OAEG;YACW,kBAAkB;IA4FhC;;OAEG;YACW,mBAAmB;IA4CjC;;;OAGG;YACW,wBAAwB;IAyBtC;;OAEG;YACW,gCAAgC;IAgE9C;;OAEG;YACW,yBAAyB;IAiCvC;;OAEG;YACW,eAAe;IAW7B;;OAEG;YACW,gBAAgB;IAS9B;;OAEG;YACW,uBAAuB;IAmBrC;;OAEG;YACW,oBAAoB;IAIlC;;OAEG;YACW,sBAAsB;IAYpC;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC;CAmCvB"}
|