UNPKG

geotiff

Version:

GeoTIFF image decoding in JavaScript

89 lines 3.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpClient = void 0; const http_1 = __importDefault(require("http")); const https_1 = __importDefault(require("https")); const url_1 = __importDefault(require("url")); const base_js_1 = require("./base.js"); const utils_js_1 = require("../../utils.js"); class HttpResponse extends base_js_1.BaseResponse { /** * BaseResponse facade for node HTTP/HTTPS API Response * @param {import('http').IncomingMessage} response * @param {Promise<ArrayBuffer>} dataPromise */ constructor(response, dataPromise) { super(); this.response = response; this.dataPromise = dataPromise; } get status() { return /** @type {number} */ (this.response.statusCode); } /** * @param {string} name * @returns {string|undefined} */ getHeader(name) { const value = this.response.headers[name]; return Array.isArray(value) ? value.join(', ') : value; } async getData() { const data = await this.dataPromise; return data; } } class HttpClient extends base_js_1.BaseClient { /** @param {string} url */ constructor(url) { super(url); this.parsedUrl = url_1.default.parse(this.url); this.httpApi = (this.parsedUrl.protocol === 'http:' ? http_1.default : https_1.default); } /** * @param {Object<string, string>} headers * @param {AbortSignal} [signal] * @returns {Promise<HttpResponse>} */ constructRequest(headers, signal) { return new Promise((resolve, reject) => { const request = this.httpApi.get({ ...this.parsedUrl, headers, }, (response) => { const dataPromise = new Promise((resolveData) => { /** @type {Uint8Array[]} */ const chunks = []; // collect chunks response.on('data', (chunk) => { chunks.push(chunk); }); // concatenate all chunks and resolve the promise with the resulting buffer response.on('end', () => { const data = Buffer.concat(chunks).buffer; resolveData(data); }); response.on('error', reject); }); resolve(new HttpResponse(response, dataPromise)); }); request.on('error', reject); if (signal) { if (signal.aborted) { request.destroy(new utils_js_1.AbortError('Request aborted')); } signal.addEventListener('abort', () => request.destroy(new utils_js_1.AbortError('Request aborted'))); } }); } async request({ headers = {}, signal = undefined } = {}) { const response = await this.constructRequest(headers, signal); return response; } } exports.HttpClient = HttpClient; //# sourceMappingURL=http.js.map //# sourceMappingURL=http.js.map