UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

55 lines 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.downloadToFile = void 0; const util_1 = require("util"); const path_1 = require("path"); const fs_1 = require("fs"); const mkdirp = require("mkdirp"); const pump = require("pump"); const rimraf_1 = require("rimraf"); const alwayscli_1 = require("@alwaysai/alwayscli"); const random_string_1 = require("./random-string"); const constants_1 = require("../constants"); const logger_1 = require("./logger"); const stringify_error_1 = require("./stringify-error"); const fetch_1 = require("./fetch"); async function writeToFile(path, readable) { mkdirp.sync((0, path_1.dirname)(path)); const tmpFilePath = `${path}.${(0, random_string_1.RandomString)()}.tmp`; try { await new Promise((resolve, reject) => { const writeable = (0, fs_1.createWriteStream)(tmpFilePath); pump(readable, writeable, (err) => { if (err) { reject(err); } else { resolve(); } }); }); await (0, util_1.promisify)(fs_1.rename)(tmpFilePath, path); } catch (exception) { try { await (0, rimraf_1.default)(tmpFilePath); } catch (err) { logger_1.logger.warn('Failed to delete %s! %s', tmpFilePath, (0, stringify_error_1.stringifyError)(err)); } throw exception; } } async function downloadToFile(props) { const { url, path } = props; logger_1.logger.debug(`Downloading package from ${url}`); try { const filestream = await (0, fetch_1.fetchFilestream)(url); await writeToFile(path, filestream); } catch (e) { throw new alwayscli_1.CliTerseError(`Failed to download ${url}. ${constants_1.PLEASE_REPORT_THIS_ERROR_MESSAGE}`); } } exports.downloadToFile = downloadToFile; //# sourceMappingURL=download-to-file.js.map