aspect-sync 0.0.16 → 0.0.18

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 CHANGED
@@ -121,6 +121,7 @@ npx aspect-sync \
121
121
  | `--api-key <key>` | Aspect API key (or set `ASPECT_API_KEY` env var) | Yes | - |
122
122
  | `--api-url <url>` | Aspect API URL (or set `ASPECT_API_URL` env var) | No | `https://api.aspect.inc` |
123
123
  | `--concurrent <number>` | Max concurrent chunk uploads | No | `16` |
124
+ | `--batch-size <size>` | Run the migration in download→upload batches (e.g., `500GB`, `1TB`) so data is uploaded as soon as each batch finishes downloading. | No | Disabled |
124
125
  | `--keep-local` | Keep local files after upload (for debugging) | No | `false` |
125
126
  | `--check` | Run in check-only mode (list remote files and compare with Aspect without downloading/uploading) | No | `false` |
126
127
  | `--temp-dir <path>` | Base temporary directory for synced files | No | `~/.aspect/sync` |
@@ -0,0 +1,21 @@
1
+ import type { RemoteFileListing } from "./types.js";
2
+ export interface BatchInfo {
3
+ batchNumber: number;
4
+ files: RemoteFileListing[];
5
+ totalSize: number;
6
+ }
7
+ /**
8
+ * Groups files into batches, keeping directory contents together where possible.
9
+ * Each batch will be ≤ maxBatchSize bytes (except single files > maxBatchSize).
10
+ */
11
+ export declare function createBatches(files: RemoteFileListing[], maxBatchSize: number): BatchInfo[];
12
+ /**
13
+ * Writes a batch file containing relative file paths, one per line.
14
+ * Used with rclone's --files-from option.
15
+ */
16
+ export declare function writeBatchFile(batchDir: string, batchNumber: number, files: RemoteFileListing[]): Promise<string>;
17
+ /**
18
+ * Deletes a batch file after successful completion.
19
+ */
20
+ export declare function cleanupBatchFile(batchFilePath: string): Promise<void>;
21
+ //# sourceMappingURL=batchManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchManager.d.ts","sourceRoot":"","sources":["../src/batchManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,MAAM,WAAW,SAAS;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,iBAAiB,EAAE,EAC1B,YAAY,EAAE,MAAM,GACrB,SAAS,EAAE,CAmGb;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAChC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,iBAAiB,EAAE,GAC3B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3E"}
@@ -0,0 +1,121 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ /**
4
+ * Groups files into batches, keeping directory contents together where possible.
5
+ * Each batch will be ≤ maxBatchSize bytes (except single files > maxBatchSize).
6
+ */
7
+ export function createBatches(files, maxBatchSize) {
8
+ // Group files by their parent directory
9
+ const dirMap = new Map();
10
+ for (const file of files) {
11
+ const dir = path.dirname(file.path);
12
+ if (!dirMap.has(dir)) {
13
+ dirMap.set(dir, []);
14
+ }
15
+ dirMap.get(dir).push(file);
16
+ }
17
+ // Calculate size per directory
18
+ const dirSizes = new Map();
19
+ for (const [dir, dirFiles] of dirMap.entries()) {
20
+ const totalSize = dirFiles.reduce((sum, f) => sum + f.size, 0);
21
+ dirSizes.set(dir, totalSize);
22
+ }
23
+ // Sort directories by path for consistent ordering
24
+ const sortedDirs = Array.from(dirMap.keys()).sort();
25
+ const batches = [];
26
+ let currentBatch = [];
27
+ let currentBatchSize = 0;
28
+ let batchNumber = 1;
29
+ for (const dir of sortedDirs) {
30
+ const dirFiles = dirMap.get(dir);
31
+ const dirSize = dirSizes.get(dir);
32
+ // Edge case: single file or directory larger than max batch size
33
+ if (dirSize > maxBatchSize) {
34
+ // Flush current batch if it has content
35
+ if (currentBatch.length > 0) {
36
+ batches.push({
37
+ batchNumber: batchNumber++,
38
+ files: currentBatch,
39
+ totalSize: currentBatchSize,
40
+ });
41
+ currentBatch = [];
42
+ currentBatchSize = 0;
43
+ }
44
+ // Put this directory in its own batch (or split into multiple batches)
45
+ if (dirFiles.length === 1) {
46
+ // Single large file - put in its own batch
47
+ batches.push({
48
+ batchNumber: batchNumber++,
49
+ files: dirFiles,
50
+ totalSize: dirSize,
51
+ });
52
+ }
53
+ else {
54
+ // Multiple files in directory - split them across batches
55
+ for (const file of dirFiles) {
56
+ if (currentBatchSize + file.size > maxBatchSize && currentBatch.length > 0) {
57
+ // Flush current batch
58
+ batches.push({
59
+ batchNumber: batchNumber++,
60
+ files: currentBatch,
61
+ totalSize: currentBatchSize,
62
+ });
63
+ currentBatch = [];
64
+ currentBatchSize = 0;
65
+ }
66
+ currentBatch.push(file);
67
+ currentBatchSize += file.size;
68
+ }
69
+ }
70
+ continue;
71
+ }
72
+ // Check if adding this directory would exceed max batch size
73
+ if (currentBatchSize + dirSize > maxBatchSize && currentBatch.length > 0) {
74
+ // Flush current batch
75
+ batches.push({
76
+ batchNumber: batchNumber++,
77
+ files: currentBatch,
78
+ totalSize: currentBatchSize,
79
+ });
80
+ currentBatch = [];
81
+ currentBatchSize = 0;
82
+ }
83
+ // Add directory to current batch
84
+ currentBatch.push(...dirFiles);
85
+ currentBatchSize += dirSize;
86
+ }
87
+ // Flush remaining batch
88
+ if (currentBatch.length > 0) {
89
+ batches.push({
90
+ batchNumber: batchNumber++,
91
+ files: currentBatch,
92
+ totalSize: currentBatchSize,
93
+ });
94
+ }
95
+ return batches;
96
+ }
97
+ /**
98
+ * Writes a batch file containing relative file paths, one per line.
99
+ * Used with rclone's --files-from option.
100
+ */
101
+ export async function writeBatchFile(batchDir, batchNumber, files) {
102
+ const batchFilePath = path.join(batchDir, `batch${batchNumber}.txt`);
103
+ const content = files.map((f) => f.path).join("\n");
104
+ await fs.writeFile(batchFilePath, content, "utf-8");
105
+ return batchFilePath;
106
+ }
107
+ /**
108
+ * Deletes a batch file after successful completion.
109
+ */
110
+ export async function cleanupBatchFile(batchFilePath) {
111
+ try {
112
+ await fs.unlink(batchFilePath);
113
+ }
114
+ catch (error) {
115
+ // Ignore errors if file doesn't exist
116
+ if (error.code !== "ENOENT") {
117
+ throw error;
118
+ }
119
+ }
120
+ }
121
+ //# sourceMappingURL=batchManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchManager.js","sourceRoot":"","sources":["../src/batchManager.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- export declare const formatBytes: (bytes: number, decimals?: number) => string;
2
1
  declare class CliDisplay {
3
2
  #private;
4
3
  start(): void;
5
4
  stop(): void;
5
+ persistCurrentBatchLine(): void;
6
6
  }
7
7
  export declare const cliDisplay: CliDisplay;
8
8
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"cliDisplay.d.ts","sourceRoot":"","sources":["../src/cliDisplay.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,iBAAY,WAMtD,CAAA;AAED,cAAM,UAAU;;IAOd,KAAK,IAAI,IAAI;IAkBb,IAAI,IAAI,IAAI;CAkIb;AAED,eAAO,MAAM,UAAU,YAAmB,CAAA"}
1
+ {"version":3,"file":"cliDisplay.d.ts","sourceRoot":"","sources":["../src/cliDisplay.ts"],"names":[],"mappings":"AAMA,cAAM,UAAU;;IAUd,KAAK,IAAI,IAAI;IAwBb,IAAI,IAAI,IAAI;IAoBZ,uBAAuB,IAAI,IAAI;CA4UhC;AAED,eAAO,MAAM,UAAU,YAAmB,CAAA"}
@@ -1,25 +1,24 @@
1
1
  import logUpdate from "log-update";
2
2
  import chalk from "chalk";
3
3
  import { statusTracker } from "./statusTracker.js";
4
- import { UploadStatus } from "./types.js";
5
- export const formatBytes = (bytes, decimals = 2) => {
6
- if (bytes === 0)
7
- return '0 B';
8
- const units = ['B', 'KB', 'MB', 'GB', 'TB'];
9
- const unitIndex = Math.floor(Math.log(bytes) / Math.log(1000));
10
- const size = bytes / Math.pow(1000, unitIndex);
11
- return `${size.toFixed(decimals)} ${units[unitIndex]}`;
12
- };
4
+ import { UploadStatus, BatchPhase } from "./types.js";
5
+ import { formatBytes } from "./util.js";
13
6
  class CliDisplay {
14
7
  #completedLines = [];
15
8
  #completedFileIds = new Set();
16
9
  #updateInterval = null;
17
10
  #statsInterval = null;
18
11
  #isRunning = false;
12
+ #completedBatches = new Map(); // batchNumber -> completed line
13
+ #lastDownloadEtaText = null;
14
+ #lastUploadEtaText = null;
19
15
  start() {
20
16
  if (this.#isRunning)
21
17
  return;
22
18
  this.#isRunning = true;
19
+ this.#completedLines = [];
20
+ this.#completedFileIds = new Set();
21
+ this.#completedBatches.clear();
23
22
  // Update display every 500ms for smooth progress bars
24
23
  // this.#updateInterval = setInterval(() => {
25
24
  // }, 500)
@@ -30,6 +29,8 @@ class CliDisplay {
30
29
  }, 1000);
31
30
  // Calculate stats immediately on start
32
31
  statusTracker.updateUploadStats();
32
+ this.#lastDownloadEtaText = null;
33
+ this.#lastUploadEtaText = null;
33
34
  }
34
35
  stop() {
35
36
  if (!this.#isRunning)
@@ -48,7 +49,28 @@ class CliDisplay {
48
49
  this.#render();
49
50
  logUpdate.done();
50
51
  }
52
+ persistCurrentBatchLine() {
53
+ if (!this.#isRunning)
54
+ return;
55
+ const batchProgress = statusTracker.getBatchProgress();
56
+ if (!batchProgress || batchProgress.currentPhase !== BatchPhase.COMPLETE) {
57
+ return;
58
+ }
59
+ const downloadProgress = statusTracker.getDownloadProgress();
60
+ const totals = statusTracker.getUploadTotals();
61
+ const stats = statusTracker.uploadStats;
62
+ const completedLine = this.#formatBatchLine(batchProgress, downloadProgress, totals, stats);
63
+ this.#completedBatches.set(batchProgress.currentBatch, completedLine);
64
+ }
51
65
  #render() {
66
+ const batchProgress = statusTracker.getBatchProgress();
67
+ const downloadProgress = statusTracker.getDownloadProgress();
68
+ // Batch mode rendering
69
+ if (batchProgress) {
70
+ this.#renderBatchMode(batchProgress, downloadProgress);
71
+ return;
72
+ }
73
+ // Original non-batch mode rendering
52
74
  const inProgressFiles = statusTracker.getInProgressFiles();
53
75
  const allFiles = statusTracker.getAllUploadFiles();
54
76
  const totals = statusTracker.getUploadTotals();
@@ -66,10 +88,11 @@ class CliDisplay {
66
88
  const lines = [];
67
89
  // Add all completed lines (these are frozen)
68
90
  lines.push(...this.#completedLines);
91
+ // COMMENTED OUT: Per-file progress display (can be re-enabled if needed)
69
92
  // Add in-progress files (these update dynamically)
70
- for (const file of inProgressFiles) {
71
- lines.push(this.#formatInProgressFile(file));
72
- }
93
+ // for (const file of inProgressFiles) {
94
+ // lines.push(this.#formatInProgressFile(file))
95
+ // }
73
96
  // Add summary lines
74
97
  lines.push("");
75
98
  lines.push(this.#formatSummary(totals));
@@ -125,6 +148,169 @@ class CliDisplay {
125
148
  ] : [];
126
149
  return `${parts.join(" | ")}${statsLine.length > 0 ? ` | ${statsLine.join(" | ")}` : ""}`;
127
150
  }
151
+ #renderBatchMode(batchProgress, downloadProgress) {
152
+ const lines = [];
153
+ const totals = statusTracker.getUploadTotals();
154
+ const stats = statusTracker.uploadStats;
155
+ // Add all completed batch lines (frozen)
156
+ for (let i = 1; i < batchProgress.currentBatch; i++) {
157
+ if (this.#completedBatches.has(i)) {
158
+ lines.push(this.#completedBatches.get(i));
159
+ }
160
+ }
161
+ // Current batch line (dynamic)
162
+ const currentBatchLine = this.#formatBatchLine(batchProgress, downloadProgress, totals, stats);
163
+ lines.push(currentBatchLine);
164
+ // If batch is complete, save it to completed batches
165
+ if (batchProgress.currentPhase === BatchPhase.COMPLETE) {
166
+ this.#completedBatches.set(batchProgress.currentBatch, currentBatchLine);
167
+ }
168
+ // Overall totals line (always at the bottom)
169
+ const overallFilesCompleted = batchProgress.overallFilesCompleted + (totals.successFileCount + totals.skippedFileCount);
170
+ const overallBytesTransferred = batchProgress.overallBytesTransferred + totals.totalBytesUploaded;
171
+ const overallBytesRemaining = batchProgress.overallBytesTotal - overallBytesTransferred;
172
+ const completedDownloadBytes = batchProgress.overallBytesTransferred + (downloadProgress ? downloadProgress.bytesTransferred : 0);
173
+ const downloadBytesRemaining = Math.max(batchProgress.overallBytesTotal - completedDownloadBytes, 0);
174
+ let downloadEtaSeconds = null;
175
+ if (downloadBytesRemaining === 0) {
176
+ downloadEtaSeconds = 0;
177
+ }
178
+ else if (downloadProgress && downloadProgress.speed > 0) {
179
+ downloadEtaSeconds = Math.ceil(downloadBytesRemaining / downloadProgress.speed);
180
+ }
181
+ let downloadEtaText;
182
+ if (downloadEtaSeconds !== null) {
183
+ downloadEtaText = `Download ETA: ${this.#formatSeconds(downloadEtaSeconds)}`;
184
+ this.#lastDownloadEtaText = downloadEtaText;
185
+ }
186
+ else {
187
+ downloadEtaText = this.#lastDownloadEtaText ?? "Download ETA: ...";
188
+ }
189
+ const uploadBytesCompleted = batchProgress.overallBytesTransferred + totals.totalBytesUploaded;
190
+ const uploadBytesRemaining = Math.max(batchProgress.overallBytesTotal - uploadBytesCompleted, 0);
191
+ let uploadEtaSeconds = null;
192
+ if (uploadBytesRemaining === 0) {
193
+ uploadEtaSeconds = 0;
194
+ }
195
+ else if (stats.uploadSpeedBps !== null && stats.uploadSpeedBps > 0) {
196
+ uploadEtaSeconds = Math.ceil(uploadBytesRemaining / stats.uploadSpeedBps);
197
+ }
198
+ let uploadEtaText;
199
+ if (uploadEtaSeconds !== null) {
200
+ uploadEtaText = `Upload ETA: ${this.#formatSeconds(uploadEtaSeconds)}`;
201
+ this.#lastUploadEtaText = uploadEtaText;
202
+ }
203
+ else {
204
+ uploadEtaText = this.#lastUploadEtaText ?? "Upload ETA: ...";
205
+ }
206
+ let totalEtaText;
207
+ if (downloadEtaSeconds !== null && uploadEtaSeconds !== null) {
208
+ const totalSeconds = downloadEtaSeconds + uploadEtaSeconds;
209
+ totalEtaText = `Total ETA: ${this.#formatSeconds(totalSeconds)}`;
210
+ }
211
+ else {
212
+ const lastDownloadSeconds = this.#extractSecondsFromEtaText(this.#lastDownloadEtaText);
213
+ const lastUploadSeconds = this.#extractSecondsFromEtaText(this.#lastUploadEtaText);
214
+ if (lastDownloadSeconds !== null && lastUploadSeconds !== null) {
215
+ totalEtaText = `Total ETA: ${this.#formatSeconds(lastDownloadSeconds + lastUploadSeconds)}`;
216
+ }
217
+ else {
218
+ totalEtaText = "Total ETA: ...";
219
+ }
220
+ }
221
+ const totalParts = [
222
+ `${overallFilesCompleted}/${batchProgress.overallFilesTotal} files`,
223
+ `${formatBytes(overallBytesTransferred)} / ${formatBytes(batchProgress.overallBytesTotal)}`,
224
+ chalk.yellow(`${formatBytes(overallBytesRemaining)} remaining`),
225
+ downloadEtaText,
226
+ uploadEtaText,
227
+ totalEtaText,
228
+ ];
229
+ lines.push(`Total: ${totalParts.join(", ")}`);
230
+ // Update the display
231
+ logUpdate(lines.join("\n"));
232
+ }
233
+ #formatBatchLine(batchProgress, downloadProgress, totals, stats) {
234
+ const phase = batchProgress.currentPhase;
235
+ const batchNum = `Batch ${batchProgress.currentBatch}/${batchProgress.totalBatches}`;
236
+ switch (phase) {
237
+ case BatchPhase.DOWNLOADING:
238
+ if (downloadProgress) {
239
+ const dlPercent = downloadProgress.percentComplete.toFixed(1);
240
+ const dlSpeed = formatBytes(downloadProgress.speed) + "/s";
241
+ const dlEta = this.#formatSeconds(downloadProgress.eta);
242
+ return `${batchNum}: ${chalk.blue("↓ Downloading")} (${formatBytes(downloadProgress.bytesTransferred)} / ${formatBytes(downloadProgress.totalBytes)}, ${dlPercent}%, ${dlSpeed}, ETA: ${dlEta})`;
243
+ }
244
+ return `${batchNum}: ${chalk.blue("↓ Downloading...")}`;
245
+ case BatchPhase.SCANNING:
246
+ return `${batchNum}: ${chalk.yellow("Scanning...")}`;
247
+ case BatchPhase.SYNCING_FOLDERS:
248
+ return `${batchNum}: ${chalk.yellow("Syncing folders...")}`;
249
+ case BatchPhase.UPLOADING:
250
+ const uploadedFiles = totals.successFileCount + totals.failedFileCount + totals.skippedFileCount;
251
+ const uploadedBytes = totals.totalBytesUploaded;
252
+ const uploadPercent = batchProgress.batchBytesTotal > 0
253
+ ? ((uploadedBytes / batchProgress.batchBytesTotal) * 100).toFixed(1)
254
+ : "0.0";
255
+ let uploadLine = `${batchNum}: ${chalk.blue("↑ Uploading")} (${uploadedFiles}/${batchProgress.batchFilesTotal} files, ${formatBytes(uploadedBytes)} / ${formatBytes(batchProgress.batchBytesTotal)}, ${uploadPercent}%`;
256
+ // Add speed and ETA if available
257
+ if (stats.uploadSpeedBps !== null && stats.timeRemainingSeconds !== null) {
258
+ uploadLine += `, ${stats.formattedSpeed}, ETA: ${stats.formattedTime}`;
259
+ }
260
+ uploadLine += ")";
261
+ return uploadLine;
262
+ case BatchPhase.CLEANING:
263
+ return `${batchNum}: ${chalk.yellow("Cleaning...")}`;
264
+ case BatchPhase.COMPLETE:
265
+ const batchSize = formatBytes(batchProgress.batchBytesTotal);
266
+ return `${batchNum}: ${chalk.green("✓ Complete")} (${batchProgress.batchFilesTotal} files, ${batchSize}${batchProgress.extraDetails ? `, ${batchProgress.extraDetails}` : ""})`;
267
+ default:
268
+ return `${batchNum}: ${chalk.gray("Processing...")}`;
269
+ }
270
+ }
271
+ #formatSeconds(seconds) {
272
+ if (seconds <= 0)
273
+ return "0s";
274
+ const hours = Math.floor(seconds / 3600);
275
+ const minutes = Math.floor((seconds % 3600) / 60);
276
+ const secs = Math.floor(seconds % 60);
277
+ if (hours > 0) {
278
+ return `${hours}h ${minutes}m`;
279
+ }
280
+ if (minutes > 0) {
281
+ return `${minutes}m ${secs}s`;
282
+ }
283
+ return `${secs}s`;
284
+ }
285
+ #extractSecondsFromEtaText(etaText) {
286
+ if (!etaText) {
287
+ return null;
288
+ }
289
+ const match = etaText.match(/(\d+)h/) || etaText.match(/(\d+)m/) || etaText.match(/(\d+)s/);
290
+ if (!match) {
291
+ return null;
292
+ }
293
+ let remainingText = etaText.replace("Download ETA:", "").replace("Upload ETA:", "").replace("Total ETA:", "").trim();
294
+ if (remainingText === "Calculating...") {
295
+ return null;
296
+ }
297
+ let totalSeconds = 0;
298
+ const hourMatch = remainingText.match(/(\d+)h/);
299
+ if (hourMatch) {
300
+ totalSeconds += parseInt(hourMatch[1], 10) * 3600;
301
+ remainingText = remainingText.replace(hourMatch[0], "");
302
+ }
303
+ const minuteMatch = remainingText.match(/(\d+)m/);
304
+ if (minuteMatch) {
305
+ totalSeconds += parseInt(minuteMatch[1], 10) * 60;
306
+ remainingText = remainingText.replace(minuteMatch[0], "");
307
+ }
308
+ const secondMatch = remainingText.match(/(\d+)s/);
309
+ if (secondMatch) {
310
+ totalSeconds += parseInt(secondMatch[1], 10);
311
+ }
312
+ return totalSeconds > 0 ? totalSeconds : null;
313
+ }
128
314
  }
129
315
  export const cliDisplay = new CliDisplay();
130
316
  //# sourceMappingURL=cliDisplay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cliDisplay.js","sourceRoot":"","sources":["../src/cliDisplay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cliDisplay.js","sourceRoot":"","sources":["../src/cliDisplay.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,6 +9,25 @@ import { SyncOrchestrator } from "./sync.js";
9
9
  const __filename = fileURLToPath(import.meta.url);
10
10
  const __dirname = path.dirname(__filename);
11
11
  const packageJson = JSON.parse(readFileSync(path.join(__dirname, "..", "package.json"), "utf-8"));
12
+ /**
13
+ * Parse size string like "500GB", "1TB", "100MB" to bytes
14
+ */
15
+ function parseSizeString(sizeStr) {
16
+ const match = sizeStr.match(/^(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)$/i);
17
+ if (!match) {
18
+ return null;
19
+ }
20
+ const value = parseFloat(match[1]);
21
+ const unit = match[2].toUpperCase();
22
+ const multipliers = {
23
+ 'B': 1,
24
+ 'KB': 1000,
25
+ 'MB': 1000 * 1000,
26
+ 'GB': 1000 * 1000 * 1000,
27
+ 'TB': 1000 * 1000 * 1000 * 1000,
28
+ };
29
+ return value * (multipliers[unit] || 1);
30
+ }
12
31
  const program = new Command();
13
32
  program
14
33
  .name("aspect-sync")
@@ -26,6 +45,7 @@ program
26
45
  .option("--temp-dir <path>", "Local temporary directory for synced files", path.join(os.homedir(), ".aspect", "sync"))
27
46
  .option("--session <name>", "Session name for isolation (default: auto-generated timestamp)")
28
47
  .option("--check", "Check remote files against Aspect without downloading/uploading", false)
48
+ .option("--batch-size <size>", "Enable batched mode with max batch size (e.g., 500GB, 1TB). Helps with large migrations.", "")
29
49
  .option("--rclone-transfers <number>", "Number of parallel file transfers (default: 4)", "4")
30
50
  .option("--rclone-multi-thread-streams <number>", "Streams per large file (default: 4, higher = faster large files)", "4")
31
51
  .option("--rclone-multi-thread-chunk-size <size>", "Chunk size for multi-threading (default: 64MiB)", "64MiB")
@@ -72,6 +92,17 @@ program
72
92
  const rcloneCheckers = rcloneTransfers >= 16
73
93
  ? Math.floor(rcloneTransfers / 4)
74
94
  : rcloneTransfers;
95
+ // Parse batch size if provided
96
+ let batchSizeBytes = undefined;
97
+ if (options.batchSize) {
98
+ const parsedSize = parseSizeString(options.batchSize);
99
+ if (parsedSize === null) {
100
+ console.error(`Error: Invalid batch size format: ${options.batchSize}`);
101
+ console.error('Expected format: <number><unit> (e.g., "500GB", "1TB", "100MB")');
102
+ process.exit(1);
103
+ }
104
+ batchSizeBytes = parsedSize;
105
+ }
75
106
  // Build config
76
107
  const config = {
77
108
  remote: options.remote,
@@ -94,6 +125,7 @@ program
94
125
  useMmap: !options.rcloneNoMmap,
95
126
  extraRcloneArgs: options.rcloneExtra,
96
127
  },
128
+ batchSizeBytes: batchSizeBytes,
97
129
  };
98
130
  // Validate config
99
131
  if (isNaN(config.maxConcurrent) || config.maxConcurrent < 1) {
@@ -113,6 +145,9 @@ program
113
145
  if (options.check) {
114
146
  await orchestrator.runCheckOnly();
115
147
  }
148
+ else if (batchSizeBytes !== undefined) {
149
+ await orchestrator.runBatched();
150
+ }
116
151
  else {
117
152
  await orchestrator.run();
118
153
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/rclone.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import type { RcloneOptions } from "./types.js";
1
+ import type { RcloneOptions, DownloadProgress } from "./types.js";
2
2
  export declare class RcloneError extends Error {
3
3
  readonly stderr: string;
4
4
  constructor(message: string, stderr: string);
5
5
  }
6
6
  export declare function checkRcloneInstalled(): Promise<void>;
7
7
  export declare function syncFromRemote(remote: string, remotePath: string, localPath: string, options: RcloneOptions): Promise<void>;
8
+ export declare function syncFromRemoteWithFiles(remote: string, remotePath: string, localPath: string, batchFilePath: string, options: RcloneOptions, onProgress?: (progress: DownloadProgress) => void): Promise<void>;
8
9
  export declare function listRemoteFiles(remote: string, remotePath: string): Promise<string[]>;
9
10
  export interface LocalFileInfo {
10
11
  relativePath: string;
@@ -1 +1 @@
1
- {"version":3,"file":"rclone.d.ts","sourceRoot":"","sources":["../src/rclone.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,qBAAa,WAAY,SAAQ,KAAK;aACS,MAAM,EAAE,MAAM;gBAA/C,OAAO,EAAE,MAAM,EAAkB,MAAM,EAAE,MAAM;CAI5D;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoB1D;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAgEf;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CA0CnB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAM,EAAO,GACvB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAuD9B;AAED,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAyC/E;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrE;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B5E"}
1
+ {"version":3,"file":"rclone.d.ts","sourceRoot":"","sources":["../src/rclone.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEjE,qBAAa,WAAY,SAAQ,KAAK;aACS,MAAM,EAAE,MAAM;gBAA/C,OAAO,EAAE,MAAM,EAAkB,MAAM,EAAE,MAAM;CAI5D;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoB1D;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAgEf;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,aAAa,EACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAChD,OAAO,CAAC,IAAI,CAAC,CAgMf;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CA0CnB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAM,EAAO,GACvB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAuD9B;AAED,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAyC/E;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrE;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B5E"}