UNPKG

nats-memory-server

Version:
72 lines 3.32 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.downloadFile = downloadFile; const http_1 = __importDefault(require("http")); const https_1 = __importDefault(require("https")); const path_1 = __importDefault(require("path")); const fs_1 = require("fs"); const CONTENT_DISPOSITION_KEY = `content-disposition`; function get(url) { return __awaiter(this, void 0, void 0, function* () { const urlObj = new URL(url); if (urlObj.protocol === `https:`) { return yield new Promise((resolve) => { https_1.default.get(url, resolve); }); } else if (urlObj.protocol === `http:`) { return yield new Promise((resolve) => { http_1.default.get(url, resolve); }); } throw new Error(`Unknown protocol ${urlObj.protocol}`); }); } function isRedirect(statusCode) { return statusCode !== undefined && statusCode >= 300 && statusCode < 400; } function downloadFile(url_1) { return __awaiter(this, arguments, void 0, function* (url, dir = `./`) { let location = url; let response; while (response === undefined) { const res = yield get(location); const statusCode = res.statusCode; if (isRedirect(statusCode) && typeof res.headers.location === `string`) { console.log(`Redirecting to ${res.headers.location}`); location = res.headers.location; continue; } else { response = res; } } return yield new Promise((resolve) => { var _a, _b; const fileName = (_b = (_a = response === null || response === void 0 ? void 0 : response.headers[CONTENT_DISPOSITION_KEY]) === null || _a === void 0 ? void 0 : _a.split(`filename=`)) === null || _b === void 0 ? void 0 : _b[1]; if (fileName == null) { throw new Error(`No filename in content-disposition`); } const dis = path_1.default.resolve(dir, fileName); const writeStream = (0, fs_1.createWriteStream)(dis); response === null || response === void 0 ? void 0 : response.pipe(writeStream); response === null || response === void 0 ? void 0 : response.on(`end`, () => { writeStream.close(); resolve(dis); }); }); }); } //# sourceMappingURL=download-file.js.map