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