aspect-sync 0.1.10 → 0.1.12

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/sync.js DELETED
@@ -1,529 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import axios from "axios";
4
- import { v4 as uuidv4 } from "uuid";
5
- import { statusTracker } from "./statusTracker.js";
6
- import { Uploader } from "./uploader.js";
7
- import { cliDisplay } from "./cliDisplay.js";
8
- import { formatBytes } from "./util.js";
9
- import { checkRcloneInstalled, syncFromRemote, syncFromRemoteWithFiles, scanLocalDirectory, listRemoteFilesWithSize, } from "./rclone.js";
10
- import { createBatches, writeBatchFile, cleanupBatchFile } from "./batchManager.js";
11
- import { BatchPhase, UploadStatus } from "./types.js";
12
- export class SyncOrchestrator {
13
- #config;
14
- #uploader;
15
- #apiClient;
16
- #directoryCache = new Map(); // relativePath -> directoryId
17
- constructor(config) {
18
- this.#config = config;
19
- this.#uploader = new Uploader(config);
20
- this.#apiClient = axios.create({
21
- baseURL: config.apiUrl,
22
- headers: {
23
- "Authorization": `Bearer ${config.apiKey}`,
24
- "Content-Type": "application/json",
25
- },
26
- });
27
- }
28
- async run() {
29
- console.log("Starting data sync...");
30
- console.log(`Session: ${this.#config.sessionName}`);
31
- console.log(`Remote: ${this.#config.remote}:${this.#config.remotePath}`);
32
- console.log(`Root directory ID: ${this.#config.directoryId}`);
33
- console.log(`Project ID: ${this.#config.projectId}`);
34
- console.log(`Temp directory: ${this.#config.localTempDir}`);
35
- console.log("");
36
- // Step 1: Check rclone is installed
37
- console.log("Checking rclone installation...");
38
- await checkRcloneInstalled();
39
- console.log("✓ rclone is installed");
40
- console.log("");
41
- // Step 2: Ensure local temp directory exists
42
- console.log("Creating session directory...");
43
- await fs.promises.mkdir(this.#config.localTempDir, { recursive: true });
44
- console.log(`✓ Session directory: ${this.#config.localTempDir}`);
45
- console.log("");
46
- // Step 3: Sync files from remote to local
47
- console.log("Syncing files from remote...");
48
- await syncFromRemote(this.#config.remote, this.#config.remotePath, this.#config.localTempDir, this.#config.rcloneOptions);
49
- console.log("");
50
- // Step 4: Scan local directory for files
51
- console.log("Scanning local directory...");
52
- const scanResult = await scanLocalDirectory(this.#config.localTempDir);
53
- console.log(`Found ${scanResult.files.length} files to sync`);
54
- console.log(`Found ${scanResult.directoryCount} folders to sync`);
55
- console.log("");
56
- if (scanResult.files.length === 0) {
57
- console.log("No files to upload. Exiting.");
58
- return;
59
- }
60
- // Step 5: Fetch existing directory tree and create missing directories
61
- console.log("Syncing folder structure...");
62
- await this.#fetchAndCreateDirectories(scanResult.files);
63
- console.log("");
64
- // Step 6: Start CLI display
65
- cliDisplay.start();
66
- // Step 7: Upload all files
67
- console.log(`Syncing ${scanResult.files.length} files...`);
68
- console.log("Checking for existing assets...");
69
- const filesWithDirectories = scanResult.files.map((file) => ({
70
- file,
71
- directoryId: this.#getDirectoryIdForFile(file.relativePath),
72
- }));
73
- const existenceResults = await this.#checkAssetsExistence(filesWithDirectories.map(({ file, directoryId }) => ({
74
- directory_id: directoryId,
75
- name: file.fileName,
76
- size_bytes: file.size,
77
- })));
78
- const uploadPromises = filesWithDirectories.map(async ({ file, directoryId }, index) => {
79
- const fileId = uuidv4();
80
- statusTracker.addUploadFile(fileId, file.absolutePath, file.fileName, file.relativePath, file.size);
81
- const existsResult = existenceResults[index];
82
- if (existsResult?.exists) {
83
- statusTracker.markUploadSkipped(fileId);
84
- return;
85
- }
86
- try {
87
- await this.#uploader.uploadFile(fileId, file.absolutePath, directoryId);
88
- }
89
- catch (error) {
90
- console.error(`Failed to upload ${file.fileName}:`, error);
91
- }
92
- });
93
- await Promise.all(uploadPromises);
94
- // Step 8: Stop CLI display
95
- cliDisplay.stop();
96
- // Step 9: Clean up entire session directory (unless keepLocal is true)
97
- if (!this.#config.keepLocal) {
98
- console.log("");
99
- console.log("Cleaning up session directory...");
100
- await fs.promises.rm(this.#config.localTempDir, { recursive: true, force: true });
101
- console.log(`✓ Deleted session directory: ${this.#config.localTempDir}`);
102
- }
103
- // Step 10: Print summary
104
- console.log("");
105
- this.#printSummary();
106
- }
107
- async runBatched() {
108
- if (!this.#config.batchSizeBytes) {
109
- throw new Error("Batch size not configured. Use batchSizeBytes in config.");
110
- }
111
- console.log("Starting batched data sync...");
112
- console.log(`Session: ${this.#config.sessionName}`);
113
- console.log(`Remote: ${this.#config.remote}:${this.#config.remotePath}`);
114
- console.log(`Root directory ID: ${this.#config.directoryId}`);
115
- console.log(`Project ID: ${this.#config.projectId}`);
116
- console.log(`Batch size: ${formatBytes(this.#config.batchSizeBytes)}`);
117
- console.log("");
118
- // Step 1: Check rclone is installed
119
- console.log("Checking rclone installation...");
120
- await checkRcloneInstalled();
121
- console.log("✓ rclone is installed");
122
- console.log("");
123
- // Step 2: Create session directory
124
- console.log("Creating session directory...");
125
- const sessionDir = this.#config.localTempDir;
126
- await fs.promises.mkdir(sessionDir, { recursive: true });
127
- console.log(`✓ Session directory: ${sessionDir}`);
128
- console.log("");
129
- // Step 3: List all remote files and create batches
130
- console.log("Listing all remote files...");
131
- const allRemoteFiles = await listRemoteFilesWithSize(this.#config.remote, this.#config.remotePath, this.#config.rcloneOptions.extraRcloneArgs ?? []);
132
- console.log(`Found ${allRemoteFiles.length} files`);
133
- const totalSize = allRemoteFiles.reduce((sum, f) => sum + f.size, 0);
134
- console.log(`Total size: ${formatBytes(totalSize)}`);
135
- console.log("");
136
- if (allRemoteFiles.length === 0) {
137
- console.log("No files to sync. Exiting.");
138
- return;
139
- }
140
- // Step 4: Create batches
141
- console.log("Creating batches...");
142
- const batches = createBatches(allRemoteFiles, this.#config.batchSizeBytes);
143
- console.log(`Created ${batches.length} batches`);
144
- console.log("");
145
- // Step 5: Write batch files
146
- console.log("Writing batch files...");
147
- const batchFiles = [];
148
- const batchSummaryLines = [];
149
- for (const batch of batches) {
150
- const line = `Batch ${batch.batchNumber}: ${batch.files.length} files, ${formatBytes(batch.totalSize)}`;
151
- batchSummaryLines.push(line);
152
- const batchFilePath = await writeBatchFile(sessionDir, batch.batchNumber, batch.files);
153
- batchFiles.push(batchFilePath);
154
- console.log(line);
155
- }
156
- await fs.promises.writeFile(path.join(sessionDir, "batches.txt"), `${batchSummaryLines.join("\n")}\n`, "utf-8");
157
- console.log("");
158
- // Step 6: Initialize batch progress tracking
159
- statusTracker.initBatchProgress(batches.length, allRemoteFiles.length, totalSize);
160
- // Step 7: Start CLI display
161
- cliDisplay.start();
162
- const THROTTLE_ASSET_EXISTENCE_CHECK_THRESHOLD = 3; // throttle after 3 in a row
163
- const THROTTLE_ASSET_EXISTENCE_CHECK_TIME = 1000; // throttle for 1 second
164
- let throttleAssetExistenceCheckCount = 0; // how many times in a row we've done the asset existence check
165
- const summaryTotals = {
166
- totalFileCount: 0,
167
- successFileCount: 0,
168
- skippedFileCount: 0,
169
- failedFileCount: 0,
170
- };
171
- const summaryFailedFiles = [];
172
- try {
173
- // Step 8: Process each batch
174
- for (let i = 0; i < batches.length; i++) {
175
- if (throttleAssetExistenceCheckCount >= THROTTLE_ASSET_EXISTENCE_CHECK_THRESHOLD) {
176
- await new Promise(resolve => setTimeout(resolve, THROTTLE_ASSET_EXISTENCE_CHECK_TIME));
177
- throttleAssetExistenceCheckCount = 0;
178
- }
179
- const batch = batches[i];
180
- const batchFilePath = batchFiles[i];
181
- const batchDir = path.join(sessionDir, `batch${batch.batchNumber}`);
182
- // Update batch info in tracker
183
- statusTracker.setBatchInfo(batch.batchNumber, batch.files.length, batch.totalSize);
184
- // Step 8a: Create batch directory and prepare planned files
185
- await fs.promises.mkdir(batchDir, { recursive: true });
186
- const plannedFiles = batch.files.map((remoteFile) => ({
187
- relativePath: remoteFile.path,
188
- absolutePath: path.join(batchDir, remoteFile.path),
189
- fileName: path.basename(remoteFile.path),
190
- size: remoteFile.size,
191
- }));
192
- const cleanUpBatchArtifacts = async () => {
193
- if (!this.#config.keepLocal) {
194
- await fs.promises.rm(batchDir, { recursive: true, force: true });
195
- }
196
- await cleanupBatchFile(batchFilePath);
197
- };
198
- statusTracker.setBatchPhase(BatchPhase.SCANNING, `Preparing ${plannedFiles.length} files...`);
199
- statusTracker.setBatchPhase(BatchPhase.SYNCING_FOLDERS, "Ensuring target directories exist...");
200
- await this.#fetchAndCreateDirectories(plannedFiles);
201
- const plannedFilesWithDirectories = plannedFiles.map((file) => ({
202
- file,
203
- directoryId: this.#getDirectoryIdForFile(file.relativePath),
204
- }));
205
- statusTracker.setBatchPhase(BatchPhase.SCANNING, "Checking existing assets...");
206
- const plannedExistenceResults = await this.#checkAssetsExistence(plannedFilesWithDirectories.map(({ file, directoryId }) => ({
207
- directory_id: directoryId,
208
- name: file.fileName,
209
- size_bytes: file.size,
210
- })));
211
- const existenceByPath = new Map();
212
- plannedFilesWithDirectories.forEach(({ file }, index) => {
213
- existenceByPath.set(file.relativePath, plannedExistenceResults[index]);
214
- });
215
- const allFilesAlreadySynced = plannedFiles.length > 0 &&
216
- plannedFiles.every((file) => existenceByPath.get(file.relativePath)?.exists === true);
217
- if (allFilesAlreadySynced) {
218
- statusTracker.incrementOverallProgress(plannedFiles.length, batch.totalSize);
219
- statusTracker.setBatchPhase(BatchPhase.COMPLETE, "Everything already synced");
220
- cliDisplay.persistCurrentBatchLine();
221
- summaryTotals.totalFileCount += plannedFiles.length;
222
- summaryTotals.skippedFileCount += plannedFiles.length;
223
- await cleanUpBatchArtifacts();
224
- statusTracker.resetBatchUploadState();
225
- ++throttleAssetExistenceCheckCount;
226
- continue;
227
- }
228
- throttleAssetExistenceCheckCount = 0;
229
- // Step 8b: Download files for this batch
230
- statusTracker.setBatchPhase(BatchPhase.DOWNLOADING);
231
- await syncFromRemoteWithFiles(this.#config.remote, this.#config.remotePath, batchDir, batchFilePath, this.#config.rcloneOptions, (progress) => {
232
- statusTracker.updateDownloadProgress(progress);
233
- });
234
- // Clear download progress after download completes
235
- statusTracker.updateDownloadProgress({
236
- bytesTransferred: batch.totalSize,
237
- totalBytes: batch.totalSize,
238
- speed: 0,
239
- eta: 0,
240
- percentComplete: 100,
241
- });
242
- // Step 8c: Scan local files in batch directory
243
- statusTracker.setBatchPhase(BatchPhase.SCANNING, "Scanning batch directory...");
244
- const scanResult = await scanLocalDirectory(batchDir);
245
- statusTracker.setBatchPhase(BatchPhase.SCANNING, `Found ${scanResult.files.length} files in batch`);
246
- // Step 8d: Check directories are ready (already ensured above)
247
- // Step 8e: Check asset existence results (using precomputed map) and upload files
248
- statusTracker.setBatchPhase(BatchPhase.UPLOADING);
249
- const filesWithDirectories = scanResult.files.map((file) => ({
250
- file,
251
- directoryId: this.#getDirectoryIdForFile(file.relativePath),
252
- }));
253
- const uploadPromises = filesWithDirectories.map(async ({ file, directoryId }) => {
254
- const fileId = uuidv4();
255
- statusTracker.addUploadFile(fileId, file.absolutePath, file.fileName, file.relativePath, file.size);
256
- const existsResult = existenceByPath.get(file.relativePath);
257
- if (existsResult?.exists) {
258
- statusTracker.markUploadSkipped(fileId);
259
- return;
260
- }
261
- try {
262
- await this.#uploader.uploadFile(fileId, file.absolutePath, directoryId);
263
- }
264
- catch (error) {
265
- console.error(`Failed to upload ${file.fileName}:`, error);
266
- }
267
- });
268
- await Promise.all(uploadPromises);
269
- // Step 8f: Update overall progress
270
- const batchTotals = statusTracker.getUploadTotals();
271
- statusTracker.incrementOverallProgress(batchTotals.successFileCount + batchTotals.skippedFileCount, batch.totalSize);
272
- summaryTotals.totalFileCount += batchTotals.totalFileCount;
273
- summaryTotals.successFileCount += batchTotals.successFileCount;
274
- summaryTotals.skippedFileCount += batchTotals.skippedFileCount;
275
- summaryTotals.failedFileCount += batchTotals.failedFileCount;
276
- const batchFailedFiles = statusTracker
277
- .getAllUploadFiles()
278
- .filter((file) => file.uploadStatus === UploadStatus.FAILED)
279
- .map((file) => ({
280
- fileName: file.fileName,
281
- errorMessage: file.errorMessage,
282
- }));
283
- if (batchFailedFiles.length > 0) {
284
- summaryFailedFiles.push(...batchFailedFiles);
285
- }
286
- // Step 8g: Clean up batch directory
287
- statusTracker.setBatchPhase(BatchPhase.CLEANING);
288
- await cleanUpBatchArtifacts();
289
- // Step 8i: Mark batch as complete
290
- statusTracker.setBatchPhase(BatchPhase.COMPLETE);
291
- cliDisplay.persistCurrentBatchLine();
292
- // Step 8j: Reset batch upload state
293
- statusTracker.resetBatchUploadState();
294
- }
295
- }
296
- finally {
297
- cliDisplay.stop();
298
- }
299
- // Step 9: Clean up session directory (unless keepLocal is true)
300
- if (!this.#config.keepLocal) {
301
- console.log("");
302
- console.log("Cleaning up session directory...");
303
- await fs.promises.rm(sessionDir, { recursive: true, force: true });
304
- console.log(`✓ Deleted session directory: ${sessionDir}`);
305
- }
306
- // Step 10: Print final summary
307
- console.log("");
308
- this.#printSummary({
309
- totals: summaryTotals,
310
- failedFiles: summaryFailedFiles,
311
- extraLines: [`Batches: ${batches.length}`],
312
- });
313
- }
314
- async runCheckOnly() {
315
- console.log("Running in check-only mode (no downloads/uploads)...");
316
- await checkRcloneInstalled();
317
- console.log(`Listing remote files from ${this.#config.remote}:${this.#config.remotePath}...`);
318
- const remoteFiles = await listRemoteFilesWithSize(this.#config.remote, this.#config.remotePath, this.#config.rcloneOptions.extraRcloneArgs ?? []);
319
- console.log(`Found ${remoteFiles.length} remote files to check`);
320
- if (remoteFiles.length === 0) {
321
- console.log("No remote files to check. Exiting.");
322
- return;
323
- }
324
- console.log("Fetching existing directory structure...");
325
- const tree = await this.#fetchDirectoryTree(this.#config.directoryId);
326
- this.#directoryCache.clear();
327
- this.#flattenDirectoryTree(tree, "");
328
- const checkInputs = [];
329
- const missingFiles = [];
330
- const duplicateFiles = [];
331
- const seenPaths = new Set();
332
- for (const remoteFile of remoteFiles) {
333
- const displayPath = remoteFile.path;
334
- const normalizedPath = path.normalize(displayPath);
335
- const dirPath = path.dirname(normalizedPath);
336
- if (seenPaths.has(normalizedPath)) {
337
- duplicateFiles.push(displayPath);
338
- continue;
339
- }
340
- seenPaths.add(normalizedPath);
341
- let directoryId;
342
- if (dirPath === "." || dirPath === path.sep) {
343
- directoryId = this.#config.directoryId;
344
- }
345
- else {
346
- directoryId = this.#directoryCache.get(dirPath);
347
- }
348
- if (!directoryId) {
349
- missingFiles.push(displayPath);
350
- continue;
351
- }
352
- checkInputs.push({
353
- displayPath,
354
- request: {
355
- directory_id: directoryId,
356
- name: path.basename(normalizedPath),
357
- size_bytes: remoteFile.size,
358
- }
359
- });
360
- }
361
- const existenceResults = await this.#checkAssetsExistence(checkInputs.map((input) => input.request), false);
362
- let existingCount = 0;
363
- let missingCount = missingFiles.length;
364
- checkInputs.forEach((input, index) => {
365
- const result = existenceResults[index];
366
- if (result?.exists) {
367
- existingCount += 1;
368
- }
369
- else {
370
- missingCount += 1;
371
- missingFiles.push(input.displayPath);
372
- }
373
- });
374
- console.log("");
375
- console.log("=".repeat(60));
376
- console.log("Check Summary");
377
- console.log("=".repeat(60));
378
- console.log(`Total (remote): ${remoteFiles.length}`);
379
- console.log(`Duplicates skipped: ${duplicateFiles.length}`);
380
- console.log(`Already exist: ${existingCount}`);
381
- console.log(`Missing: ${missingCount}`);
382
- console.log("=".repeat(60));
383
- if (missingFiles.length > 0) {
384
- console.log("");
385
- console.log("Files missing on server:");
386
- for (const filePath of missingFiles) {
387
- console.log(` - ${filePath}`);
388
- }
389
- }
390
- if (duplicateFiles.length > 0) {
391
- console.log("");
392
- console.log("Duplicate remote files skipped:");
393
- for (const filePath of duplicateFiles) {
394
- console.log(` - ${filePath}`);
395
- }
396
- }
397
- }
398
- async #fetchAndCreateDirectories(files) {
399
- // Step 1: Fetch existing directory tree from server
400
- const tree = await this.#fetchDirectoryTree(this.#config.directoryId);
401
- // Step 2: Flatten tree into cache (relativePath -> directoryId)
402
- this.#flattenDirectoryTree(tree, "");
403
- // Step 3: Extract unique directory paths from files
404
- const directoryPaths = new Set();
405
- for (const file of files) {
406
- const dirPath = path.dirname(file.relativePath);
407
- if (dirPath !== ".") {
408
- // Add all parent directories
409
- const parts = dirPath.split(path.sep);
410
- for (let i = 0; i < parts.length; i++) {
411
- const partialPath = parts.slice(0, i + 1).join(path.sep);
412
- directoryPaths.add(partialPath);
413
- }
414
- }
415
- }
416
- // Step 4: Sort directories by depth (shallowest first)
417
- const sortedDirectories = Array.from(directoryPaths).sort((a, b) => a.split(path.sep).length - b.split(path.sep).length);
418
- // Step 5: Create missing directories (skip existing ones)
419
- for (const dirPath of sortedDirectories) {
420
- // Check if directory already exists in cache
421
- if (this.#directoryCache.has(dirPath)) {
422
- // console.log(`Using existing directory: ${dirPath}`)
423
- continue;
424
- }
425
- // Directory doesn't exist, create it
426
- const parentPath = path.dirname(dirPath);
427
- const dirName = path.basename(dirPath);
428
- const parentId = parentPath === "." ? this.#config.directoryId : this.#directoryCache.get(parentPath);
429
- if (!parentId) {
430
- throw new Error(`Parent directory ID not found for path: ${dirPath}`);
431
- }
432
- const directory = await this.#createDirectory(parentId, dirName);
433
- this.#directoryCache.set(dirPath, directory.id);
434
- // console.log(`Created directory: ${dirPath}`)
435
- }
436
- }
437
- async #fetchDirectoryTree(directoryId) {
438
- const response = await this.#apiClient.get(`/directories/${directoryId}/tree`);
439
- return response.data;
440
- }
441
- #flattenDirectoryTree(node, parentPath) {
442
- // For root node (parentPath is empty), don't add to cache - it's the sync root
443
- // For child nodes, build relative path from root
444
- let currentPath = "";
445
- if (parentPath === "") {
446
- // This is the root directory - don't cache it, but process children
447
- currentPath = "";
448
- }
449
- else if (parentPath === ".") {
450
- // First level child - just use the name
451
- currentPath = node.name;
452
- }
453
- else {
454
- // Nested child - append to parent path
455
- currentPath = `${parentPath}${path.sep}${node.name}`;
456
- }
457
- // Add to cache if not root
458
- if (currentPath && currentPath !== "") {
459
- this.#directoryCache.set(currentPath, node.id);
460
- }
461
- // Recursively process children
462
- for (const child of node.children) {
463
- // First level: pass "." so children know they're at root level
464
- // Nested levels: pass the current path
465
- const childParentPath = parentPath === "" ? "." : currentPath;
466
- this.#flattenDirectoryTree(child, childParentPath);
467
- }
468
- }
469
- async #createDirectory(parentId, name) {
470
- const response = await this.#apiClient.post(`/directories/${parentId}/directories`, { name });
471
- return response.data;
472
- }
473
- async #checkAssetsExistence(items, deleteIfNotExist = true) {
474
- if (items.length === 0) {
475
- return [];
476
- }
477
- const response = await this.#apiClient.post("/assets/check-exists-and-uploaded", { items, delete_if_not_exist: deleteIfNotExist });
478
- return response.data.items;
479
- }
480
- #getDirectoryIdForFile(relativePath) {
481
- const dirPath = path.dirname(relativePath);
482
- if (dirPath === ".") {
483
- return this.#config.directoryId;
484
- }
485
- const directoryId = this.#directoryCache.get(dirPath);
486
- if (!directoryId) {
487
- throw new Error(`Directory ID not found for path: ${dirPath}`);
488
- }
489
- return directoryId;
490
- }
491
- #printSummary(options) {
492
- const computedTotals = statusTracker.getUploadTotals();
493
- const totals = options?.totals ?? {
494
- totalFileCount: computedTotals.totalFileCount,
495
- successFileCount: computedTotals.successFileCount,
496
- skippedFileCount: computedTotals.skippedFileCount,
497
- failedFileCount: computedTotals.failedFileCount,
498
- };
499
- const extraLines = options?.extraLines ?? [];
500
- const failedFiles = options?.failedFiles ?? (options?.totals
501
- ? []
502
- : statusTracker
503
- .getAllUploadFiles()
504
- .filter((file) => file.uploadStatus === UploadStatus.FAILED)
505
- .map((file) => ({
506
- fileName: file.fileName,
507
- errorMessage: file.errorMessage,
508
- })));
509
- console.log("=".repeat(60));
510
- console.log("Sync Summary");
511
- console.log("=".repeat(60));
512
- console.log(`Total files: ${totals.totalFileCount}`);
513
- console.log(`Successful: ${totals.successFileCount}`);
514
- console.log(`Skipped: ${totals.skippedFileCount}`);
515
- console.log(`Failed: ${totals.failedFileCount}`);
516
- for (const line of extraLines) {
517
- console.log(line);
518
- }
519
- console.log("=".repeat(60));
520
- if (failedFiles.length > 0) {
521
- console.log("");
522
- console.log("Failed files:");
523
- for (const file of failedFiles) {
524
- console.log(` - ${file.fileName}: ${file.errorMessage ?? "Unknown error"}`);
525
- }
526
- }
527
- }
528
- }
529
- //# sourceMappingURL=sync.js.map
package/dist/sync.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}