ipull
Version:
The only file downloader you'll ever need. For node.js and the browser, CLI and library for fast and reliable file downloads.
45 lines • 2.09 kB
JavaScript
import path from "path";
import { Command, Option } from "commander";
import { packageJson } from "../const.js";
import { downloadFile, downloadSequence } from "../download/node-download.js";
import { setCommand } from "./commands/set.js";
import findDownloadDir, { downloadToDirectory, findFileName } from "./utils/find-download-dir.js";
const pullCommand = new Command();
pullCommand
.description("Pull/copy files from remote server/local directory")
.argument("[files...]", "Files to pull/copy")
.option("-s --save [path]", "Save location (directory/file)")
.option("-c --connections [number]", "Number of parallel connections", "4")
.addOption(new Option("-st --style [type]", "The style of the CLI progress bar").choices(["basic", "fancy", "ci", "summary"]))
.addOption(new Option("-p --program [type]", "The download strategy").choices(["stream", "chunks"]))
.option("-t --truncate-name", "Truncate file names in the CLI status to make them appear shorter")
.action(async (files = [], { save: saveLocation, truncateName, number, program, style }) => {
if (files.length === 0) {
pullCommand.outputHelp();
process.exit(0);
}
const fileDownloads = await Promise.all(files.map(async (file) => {
const isDirectory = saveLocation && await downloadToDirectory(saveLocation);
const directory = isDirectory ? saveLocation : await findDownloadDir(findFileName(file));
const fileName = isDirectory || !saveLocation ? "" : path.basename(saveLocation);
return await downloadFile({
url: file,
directory,
fileName,
truncateName,
parallelStreams: Number(number) || 4,
programType: program
});
}));
const downloader = await downloadSequence({
truncateName,
cliProgress: true,
cliStyle: style
}, ...fileDownloads);
await downloader.download();
})
.version(packageJson.version);
pullCommand.addCommand(setCommand);
pullCommand.parse();
//# sourceMappingURL=cli.js.map