UNPKG

skysync-cli

Version:

SkySync Command Line Interface

60 lines (59 loc) 2.68 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FileDownloader = void 0; const path = require('path'); const fs = require('fs'); class FileDownloader { constructor(httpClient, fileProvider) { this.httpClient = httpClient; this.fileProvider = fileProvider; } download(id, outputDirectory) { return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { try { this.createDirectory(outputDirectory); let requestPath = this.fileProvider.getDownloadRequestPath(id); return this.httpClient.download(requestPath, (fileName, response) => __awaiter(this, void 0, void 0, function* () { if (!fileName) { return reject('The server did not return a file.'); } const outputPath = path.join(outputDirectory, fileName); return yield response.pipe(fs.createWriteStream(outputPath)) .on('finish', () => { resolve(outputPath); }) .on('error', reject); })); } catch (e) { reject(e.message); } })); } createDirectory(targetDirectory) { targetDirectory.split(/[\\/]/).reduce((parentDirectory, childDirectory) => { const pathSegment = path.resolve(parentDirectory, childDirectory); try { if (!fs.existsSync(pathSegment)) { fs.mkdirSync(pathSegment); } } catch (err) { if (err.code !== 'EEXIST') { throw err; } } return pathSegment; }, path.isAbsolute(targetDirectory) ? path.sep : ''); } } exports.FileDownloader = FileDownloader;