pushwork 2.0.0-a.sub.0 → 2.0.0-preview
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/dist/branches.d.ts +19 -0
- package/dist/branches.d.ts.map +1 -0
- package/dist/branches.js +111 -0
- package/dist/branches.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +238 -272
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +84 -0
- package/dist/config.js.map +1 -0
- package/dist/fs-tree.d.ts +6 -0
- package/dist/fs-tree.d.ts.map +1 -0
- package/dist/fs-tree.js +99 -0
- package/dist/fs-tree.js.map +1 -0
- package/dist/ignore.d.ts +6 -0
- package/dist/ignore.d.ts.map +1 -0
- package/dist/ignore.js +74 -0
- package/dist/ignore.js.map +1 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -4
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +3 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +14 -0
- package/dist/log.js.map +1 -0
- package/dist/pushwork.d.ts +115 -0
- package/dist/pushwork.d.ts.map +1 -0
- package/dist/pushwork.js +918 -0
- package/dist/pushwork.js.map +1 -0
- package/dist/repo.d.ts +14 -0
- package/dist/repo.d.ts.map +1 -0
- package/dist/repo.js +60 -0
- package/dist/repo.js.map +1 -0
- package/dist/shapes/custom.d.ts +3 -0
- package/dist/shapes/custom.d.ts.map +1 -0
- package/dist/shapes/custom.js +57 -0
- package/dist/shapes/custom.js.map +1 -0
- package/dist/shapes/file.d.ts +20 -0
- package/dist/shapes/file.d.ts.map +1 -0
- package/dist/shapes/file.js +140 -0
- package/dist/shapes/file.js.map +1 -0
- package/dist/shapes/index.d.ts +10 -0
- package/dist/shapes/index.d.ts.map +1 -0
- package/dist/shapes/index.js +35 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/patchwork-folder.d.ts +3 -0
- package/dist/shapes/patchwork-folder.d.ts.map +1 -0
- package/dist/shapes/patchwork-folder.js +160 -0
- package/dist/shapes/patchwork-folder.js.map +1 -0
- package/dist/shapes/types.d.ts +37 -0
- package/dist/shapes/types.d.ts.map +1 -0
- package/dist/shapes/types.js +52 -0
- package/dist/shapes/types.js.map +1 -0
- package/dist/shapes/vfs.d.ts +3 -0
- package/dist/shapes/vfs.d.ts.map +1 -0
- package/dist/shapes/vfs.js +88 -0
- package/dist/shapes/vfs.js.map +1 -0
- package/dist/stash.d.ts +23 -0
- package/dist/stash.d.ts.map +1 -0
- package/dist/stash.js +118 -0
- package/dist/stash.js.map +1 -0
- package/flake.lock +128 -0
- package/flake.nix +66 -0
- package/package.json +15 -48
- package/patches/@automerge__automerge-repo@2.6.0-subduction.15.patch +26 -0
- package/pnpm-workspace.yaml +5 -0
- package/src/branches.ts +93 -0
- package/src/cli.ts +258 -408
- package/src/config.ts +64 -0
- package/src/fs-tree.ts +70 -0
- package/src/ignore.ts +33 -0
- package/src/index.ts +38 -4
- package/src/log.ts +8 -0
- package/src/pushwork.ts +1055 -0
- package/src/repo.ts +76 -0
- package/src/shapes/custom.ts +29 -0
- package/src/shapes/file.ts +115 -0
- package/src/shapes/index.ts +19 -0
- package/src/shapes/patchwork-folder.ts +156 -0
- package/src/shapes/types.ts +79 -0
- package/src/shapes/vfs.ts +93 -0
- package/src/stash.ts +106 -0
- package/test/integration/branches.test.ts +389 -0
- package/test/integration/pushwork.test.ts +547 -0
- package/test/setup.ts +29 -0
- package/test/unit/doc-shape.test.ts +612 -0
- package/tsconfig.json +2 -3
- package/vitest.config.ts +14 -0
- package/ARCHITECTURE-ACCORDING-TO-CLAUDE.md +0 -248
- package/CLAUDE.md +0 -141
- package/README.md +0 -221
- package/babel.config.js +0 -5
- package/dist/cli/commands.d.ts +0 -71
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -794
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -19
- package/dist/cli/index.js.map +0 -1
- package/dist/commands.d.ts +0 -61
- package/dist/commands.d.ts.map +0 -1
- package/dist/commands.js +0 -861
- package/dist/commands.js.map +0 -1
- package/dist/config/index.d.ts +0 -71
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -314
- package/dist/config/index.js.map +0 -1
- package/dist/core/change-detection.d.ts +0 -80
- package/dist/core/change-detection.d.ts.map +0 -1
- package/dist/core/change-detection.js +0 -523
- package/dist/core/change-detection.js.map +0 -1
- package/dist/core/config.d.ts +0 -81
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -258
- package/dist/core/config.js.map +0 -1
- package/dist/core/index.d.ts +0 -6
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -6
- package/dist/core/index.js.map +0 -1
- package/dist/core/move-detection.d.ts +0 -34
- package/dist/core/move-detection.d.ts.map +0 -1
- package/dist/core/move-detection.js +0 -121
- package/dist/core/move-detection.js.map +0 -1
- package/dist/core/snapshot.d.ts +0 -105
- package/dist/core/snapshot.d.ts.map +0 -1
- package/dist/core/snapshot.js +0 -217
- package/dist/core/snapshot.js.map +0 -1
- package/dist/core/sync-engine.d.ts +0 -151
- package/dist/core/sync-engine.d.ts.map +0 -1
- package/dist/core/sync-engine.js +0 -1346
- package/dist/core/sync-engine.js.map +0 -1
- package/dist/types/config.d.ts +0 -99
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -5
- package/dist/types/config.js.map +0 -1
- package/dist/types/documents.d.ts +0 -88
- package/dist/types/documents.d.ts.map +0 -1
- package/dist/types/documents.js +0 -20
- package/dist/types/documents.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -4
- package/dist/types/index.js.map +0 -1
- package/dist/types/snapshot.d.ts +0 -64
- package/dist/types/snapshot.d.ts.map +0 -1
- package/dist/types/snapshot.js +0 -2
- package/dist/types/snapshot.js.map +0 -1
- package/dist/utils/content-similarity.d.ts +0 -53
- package/dist/utils/content-similarity.d.ts.map +0 -1
- package/dist/utils/content-similarity.js +0 -155
- package/dist/utils/content-similarity.js.map +0 -1
- package/dist/utils/content.d.ts +0 -10
- package/dist/utils/content.d.ts.map +0 -1
- package/dist/utils/content.js +0 -31
- package/dist/utils/content.js.map +0 -1
- package/dist/utils/directory.d.ts +0 -24
- package/dist/utils/directory.d.ts.map +0 -1
- package/dist/utils/directory.js +0 -52
- package/dist/utils/directory.js.map +0 -1
- package/dist/utils/fs.d.ts +0 -74
- package/dist/utils/fs.d.ts.map +0 -1
- package/dist/utils/fs.js +0 -248
- package/dist/utils/fs.js.map +0 -1
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -5
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/mime-types.d.ts +0 -13
- package/dist/utils/mime-types.d.ts.map +0 -1
- package/dist/utils/mime-types.js +0 -209
- package/dist/utils/mime-types.js.map +0 -1
- package/dist/utils/network-sync.d.ts +0 -36
- package/dist/utils/network-sync.d.ts.map +0 -1
- package/dist/utils/network-sync.js +0 -250
- package/dist/utils/network-sync.js.map +0 -1
- package/dist/utils/node-polyfills.d.ts +0 -9
- package/dist/utils/node-polyfills.d.ts.map +0 -1
- package/dist/utils/node-polyfills.js +0 -9
- package/dist/utils/node-polyfills.js.map +0 -1
- package/dist/utils/output.d.ts +0 -129
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/output.js +0 -368
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/repo-factory.d.ts +0 -13
- package/dist/utils/repo-factory.d.ts.map +0 -1
- package/dist/utils/repo-factory.js +0 -46
- package/dist/utils/repo-factory.js.map +0 -1
- package/dist/utils/string-similarity.d.ts +0 -14
- package/dist/utils/string-similarity.d.ts.map +0 -1
- package/dist/utils/string-similarity.js +0 -39
- package/dist/utils/string-similarity.js.map +0 -1
- package/dist/utils/text-diff.d.ts +0 -37
- package/dist/utils/text-diff.d.ts.map +0 -1
- package/dist/utils/text-diff.js +0 -93
- package/dist/utils/text-diff.js.map +0 -1
- package/dist/utils/trace.d.ts +0 -19
- package/dist/utils/trace.d.ts.map +0 -1
- package/dist/utils/trace.js +0 -63
- package/dist/utils/trace.js.map +0 -1
- package/src/commands.ts +0 -1134
- package/src/core/change-detection.ts +0 -712
- package/src/core/config.ts +0 -313
- package/src/core/index.ts +0 -5
- package/src/core/move-detection.ts +0 -169
- package/src/core/snapshot.ts +0 -275
- package/src/core/sync-engine.ts +0 -1758
- package/src/types/config.ts +0 -111
- package/src/types/documents.ts +0 -91
- package/src/types/index.ts +0 -3
- package/src/types/snapshot.ts +0 -67
- package/src/utils/content.ts +0 -34
- package/src/utils/directory.ts +0 -73
- package/src/utils/fs.ts +0 -297
- package/src/utils/index.ts +0 -4
- package/src/utils/mime-types.ts +0 -244
- package/src/utils/network-sync.ts +0 -319
- package/src/utils/node-polyfills.ts +0 -8
- package/src/utils/output.ts +0 -450
- package/src/utils/repo-factory.ts +0 -73
- package/src/utils/string-similarity.ts +0 -54
- package/src/utils/text-diff.ts +0 -101
- package/src/utils/trace.ts +0 -70
- package/test/integration/README.md +0 -328
- package/test/integration/clone-test.sh +0 -310
- package/test/integration/conflict-resolution-test.sh +0 -309
- package/test/integration/debug-both-nested.sh +0 -74
- package/test/integration/debug-concurrent-nested.sh +0 -87
- package/test/integration/debug-nested.sh +0 -73
- package/test/integration/deletion-behavior-test.sh +0 -487
- package/test/integration/deletion-sync-test-simple.sh +0 -193
- package/test/integration/deletion-sync-test.sh +0 -297
- package/test/integration/exclude-patterns.test.ts +0 -144
- package/test/integration/full-integration-test.sh +0 -363
- package/test/integration/fuzzer.test.ts +0 -818
- package/test/integration/in-memory-sync.test.ts +0 -830
- package/test/integration/init-sync.test.ts +0 -89
- package/test/integration/manual-sync-test.sh +0 -84
- package/test/integration/sync-deletion.test.ts +0 -280
- package/test/integration/sync-flow.test.ts +0 -291
- package/test/jest.setup.ts +0 -34
- package/test/run-tests.sh +0 -225
- package/test/unit/deletion-behavior.test.ts +0 -249
- package/test/unit/enhanced-mime-detection.test.ts +0 -244
- package/test/unit/snapshot.test.ts +0 -404
- package/test/unit/sync-convergence.test.ts +0 -298
- package/test/unit/sync-timing.test.ts +0 -134
- package/test/unit/utils.test.ts +0 -366
package/src/core/snapshot.ts
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* pvh TODO: the files & directories could be unified into a single map of entries with a type field
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as fs from "fs/promises";
|
|
6
|
-
import * as path from "path";
|
|
7
|
-
import {
|
|
8
|
-
SyncSnapshot,
|
|
9
|
-
SerializableSyncSnapshot,
|
|
10
|
-
SnapshotFileEntry,
|
|
11
|
-
SnapshotDirectoryEntry,
|
|
12
|
-
} from "../types/index.js";
|
|
13
|
-
import { pathExists, ensureDirectoryExists } from "../utils/index.js";
|
|
14
|
-
import { out } from "../utils/output.js";
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Manages sync snapshots for local state tracking
|
|
18
|
-
*/
|
|
19
|
-
export class SnapshotManager {
|
|
20
|
-
private static readonly SNAPSHOT_FILENAME = "snapshot.json";
|
|
21
|
-
private static readonly SYNC_TOOL_DIR = ".pushwork";
|
|
22
|
-
|
|
23
|
-
constructor(private rootPath: string) {}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Get path to sync tool directory
|
|
27
|
-
*/
|
|
28
|
-
private getSyncToolDir(): string {
|
|
29
|
-
return path.join(this.rootPath, SnapshotManager.SYNC_TOOL_DIR);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Get path to snapshot file
|
|
34
|
-
*/
|
|
35
|
-
private getSnapshotPath(): string {
|
|
36
|
-
return path.join(this.getSyncToolDir(), SnapshotManager.SNAPSHOT_FILENAME);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Check if snapshot exists
|
|
41
|
-
*/
|
|
42
|
-
async exists(): Promise<boolean> {
|
|
43
|
-
return await pathExists(this.getSnapshotPath());
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Load snapshot from disk
|
|
48
|
-
*/
|
|
49
|
-
async load(): Promise<SyncSnapshot | null> {
|
|
50
|
-
try {
|
|
51
|
-
const snapshotPath = this.getSnapshotPath();
|
|
52
|
-
if (!(await pathExists(snapshotPath))) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const content = await fs.readFile(snapshotPath, "utf8");
|
|
57
|
-
const serializable: SerializableSyncSnapshot = JSON.parse(content);
|
|
58
|
-
|
|
59
|
-
return this.deserializeSnapshot(serializable);
|
|
60
|
-
} catch (error) {
|
|
61
|
-
out.taskLine(`Failed to load snapshot: ${error}`);
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Save snapshot to disk
|
|
68
|
-
*/
|
|
69
|
-
async save(snapshot: SyncSnapshot): Promise<void> {
|
|
70
|
-
try {
|
|
71
|
-
await ensureDirectoryExists(this.getSyncToolDir());
|
|
72
|
-
|
|
73
|
-
const serializable = this.serializeSnapshot(snapshot);
|
|
74
|
-
const content = JSON.stringify(serializable, null, 2);
|
|
75
|
-
|
|
76
|
-
await fs.writeFile(this.getSnapshotPath(), content, "utf8");
|
|
77
|
-
} catch (error) {
|
|
78
|
-
throw new Error(`Failed to save snapshot: ${error}`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Create empty snapshot
|
|
84
|
-
*/
|
|
85
|
-
createEmpty(): SyncSnapshot {
|
|
86
|
-
return {
|
|
87
|
-
timestamp: Date.now(),
|
|
88
|
-
rootPath: this.rootPath,
|
|
89
|
-
rootDirectoryUrl: undefined,
|
|
90
|
-
files: new Map(),
|
|
91
|
-
directories: new Map(),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Update file entry in snapshot
|
|
97
|
-
*/
|
|
98
|
-
updateFileEntry(
|
|
99
|
-
snapshot: SyncSnapshot,
|
|
100
|
-
relativePath: string,
|
|
101
|
-
entry: SnapshotFileEntry
|
|
102
|
-
): void {
|
|
103
|
-
snapshot.files.set(relativePath, entry);
|
|
104
|
-
snapshot.timestamp = Date.now();
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Update directory entry in snapshot
|
|
109
|
-
*/
|
|
110
|
-
updateDirectoryEntry(
|
|
111
|
-
snapshot: SyncSnapshot,
|
|
112
|
-
relativePath: string,
|
|
113
|
-
entry: SnapshotDirectoryEntry
|
|
114
|
-
): void {
|
|
115
|
-
snapshot.directories.set(relativePath, entry);
|
|
116
|
-
snapshot.timestamp = Date.now();
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Remove file entry from snapshot
|
|
121
|
-
*/
|
|
122
|
-
removeFileEntry(snapshot: SyncSnapshot, relativePath: string): void {
|
|
123
|
-
snapshot.files.delete(relativePath);
|
|
124
|
-
snapshot.timestamp = Date.now();
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Remove directory entry from snapshot
|
|
129
|
-
*/
|
|
130
|
-
removeDirectoryEntry(snapshot: SyncSnapshot, relativePath: string): void {
|
|
131
|
-
snapshot.directories.delete(relativePath);
|
|
132
|
-
snapshot.timestamp = Date.now();
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Get all file paths in snapshot
|
|
137
|
-
*/
|
|
138
|
-
getFilePaths(snapshot: SyncSnapshot): string[] {
|
|
139
|
-
return Array.from(snapshot.files.keys());
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Get all directory paths in snapshot
|
|
144
|
-
*/
|
|
145
|
-
getDirectoryPaths(snapshot: SyncSnapshot): string[] {
|
|
146
|
-
return Array.from(snapshot.directories.keys());
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Get file entry by path
|
|
151
|
-
*/
|
|
152
|
-
getFileEntry(
|
|
153
|
-
snapshot: SyncSnapshot,
|
|
154
|
-
relativePath: string
|
|
155
|
-
): SnapshotFileEntry | undefined {
|
|
156
|
-
return snapshot.files.get(relativePath);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Get directory entry by path
|
|
161
|
-
*/
|
|
162
|
-
getDirectoryEntry(
|
|
163
|
-
snapshot: SyncSnapshot,
|
|
164
|
-
relativePath: string
|
|
165
|
-
): SnapshotDirectoryEntry | undefined {
|
|
166
|
-
return snapshot.directories.get(relativePath);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Check if path is tracked in snapshot
|
|
171
|
-
*/
|
|
172
|
-
isTracked(snapshot: SyncSnapshot, relativePath: string): boolean {
|
|
173
|
-
return (
|
|
174
|
-
snapshot.files.has(relativePath) || snapshot.directories.has(relativePath)
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Get snapshot statistics
|
|
180
|
-
*/
|
|
181
|
-
getStats(snapshot: SyncSnapshot): {
|
|
182
|
-
files: number;
|
|
183
|
-
directories: number;
|
|
184
|
-
timestamp: Date;
|
|
185
|
-
} {
|
|
186
|
-
return {
|
|
187
|
-
files: snapshot.files.size,
|
|
188
|
-
directories: snapshot.directories.size,
|
|
189
|
-
timestamp: new Date(snapshot.timestamp),
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Validate snapshot integrity
|
|
195
|
-
*/
|
|
196
|
-
validate(snapshot: SyncSnapshot): { valid: boolean; errors: string[] } {
|
|
197
|
-
const errors: string[] = [];
|
|
198
|
-
|
|
199
|
-
if (!snapshot.timestamp || snapshot.timestamp <= 0) {
|
|
200
|
-
errors.push("Invalid timestamp");
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if (!snapshot.rootPath) {
|
|
204
|
-
errors.push("Missing root path");
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
if (!snapshot.files || !snapshot.directories) {
|
|
208
|
-
errors.push("Missing files or directories map");
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Check for path conflicts (file and directory with same path)
|
|
212
|
-
for (const filePath of snapshot.files.keys()) {
|
|
213
|
-
if (snapshot.directories.has(filePath)) {
|
|
214
|
-
errors.push(
|
|
215
|
-
`Path conflict: ${filePath} exists as both file and directory`
|
|
216
|
-
);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
return {
|
|
221
|
-
valid: errors.length === 0,
|
|
222
|
-
errors,
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Convert snapshot to serializable format
|
|
228
|
-
*/
|
|
229
|
-
private serializeSnapshot(snapshot: SyncSnapshot): SerializableSyncSnapshot {
|
|
230
|
-
return {
|
|
231
|
-
timestamp: snapshot.timestamp,
|
|
232
|
-
rootPath: snapshot.rootPath,
|
|
233
|
-
rootDirectoryUrl: snapshot.rootDirectoryUrl,
|
|
234
|
-
files: Array.from(snapshot.files.entries()),
|
|
235
|
-
directories: Array.from(snapshot.directories.entries()),
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Convert serializable format back to snapshot
|
|
241
|
-
*/
|
|
242
|
-
private deserializeSnapshot(
|
|
243
|
-
serializable: SerializableSyncSnapshot
|
|
244
|
-
): SyncSnapshot {
|
|
245
|
-
return {
|
|
246
|
-
timestamp: serializable.timestamp,
|
|
247
|
-
rootPath: serializable.rootPath,
|
|
248
|
-
rootDirectoryUrl: serializable.rootDirectoryUrl,
|
|
249
|
-
files: new Map(serializable.files),
|
|
250
|
-
directories: new Map(serializable.directories),
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Clear all snapshot data
|
|
256
|
-
*/
|
|
257
|
-
clear(snapshot: SyncSnapshot): void {
|
|
258
|
-
snapshot.files.clear();
|
|
259
|
-
snapshot.directories.clear();
|
|
260
|
-
snapshot.timestamp = Date.now();
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Clone snapshot for safe manipulation
|
|
265
|
-
*/
|
|
266
|
-
clone(snapshot: SyncSnapshot): SyncSnapshot {
|
|
267
|
-
return {
|
|
268
|
-
timestamp: snapshot.timestamp,
|
|
269
|
-
rootPath: snapshot.rootPath,
|
|
270
|
-
rootDirectoryUrl: snapshot.rootDirectoryUrl,
|
|
271
|
-
files: new Map(snapshot.files),
|
|
272
|
-
directories: new Map(snapshot.directories),
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
}
|