UNPKG

6.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"HttpReadableStream.js","sourceRoot":"","sources":["../../../../../src/_utils/http/HttpReadableStream.ts"],"names":[],"mappings":"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","sourcesContent":["// ==LICENSE-BEGIN==\n// Copyright 2017 European Digital Reading Lab. All rights reserved.\n// Licensed to the Readium Foundation under one or more contributor license agreements.\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file exposed on Github (readium) in the project repository.\n// ==LICENSE-END==\n\nimport * as debug_ from \"debug\";\nimport * as request from \"request\";\nimport * as requestPromise from \"request-promise-native\";\nimport { Readable } from \"stream\";\n\nimport { streamToBufferPromise } from \"../stream/BufferUtils\";\n\n/////////////\n/////////////\n/////////////\n///////////// THIS IS UNUSED CODE!\n/////////////\n/////////////\n/////////////\n\nconst debug = debug_(\"r2:utils#http/HttpReadableStream\");\n\nexport class HttpReadableStream extends Readable {\n\n private alreadyRead = 0;\n\n constructor(\n readonly url: string,\n readonly byteLength: number,\n readonly byteStart: number,\n readonly byteEnd: number) {\n super();\n }\n\n public _read(_size: number) {\n\n const length = this.byteEnd - this.byteStart;\n // debug(`_read: ${size} (${this.url}` +\n // ` content-length=${this.byteLength} start=${this.start} end+1=${this.end} (length=${length}))`);\n // debug(`alreadyRead: ${this.alreadyRead} (byteLength: ${length})`);\n if (this.alreadyRead >= length) {\n // debug(\"this.alreadyRead >= this.byteLength\");\n this.push(null);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const failure = (err: any) => {\n debug(err);\n this.push(null);\n };\n\n const success = async (res: request.RequestResponse) => {\n if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {\n failure(\"HTTP CODE \" + res.statusCode);\n return;\n }\n\n // debug(res.headers);\n // debug(res.headers[\"content-type\"]);\n // debug(`HTTP response content-range: ${res.headers[\"content-range\"]}`);\n // debug(`HTTP response content-length: ${res.headers[\"content-length\"]}`);\n\n let buffer: Buffer;\n try {\n buffer = await streamToBufferPromise(res);\n } catch (err) {\n failure(err);\n return;\n }\n\n // debug(`streamToBufferPromise: ${buffer.length}`);\n this.alreadyRead += buffer.length;\n this.push(buffer);\n };\n\n debug(`HTTP GET ${this.url}: ${this.byteStart}-${this.byteEnd} (${this.byteEnd - this.byteStart})`);\n\n const lastByteIndex = this.byteEnd - 1;\n const range = `${this.byteStart}-${lastByteIndex}`;\n\n // No response streaming! :(\n // https://github.com/request/request-promise/issues/90\n const needsStreamingResponse = true;\n if (needsStreamingResponse) {\n request.get({\n headers: { Range: `bytes=${range}` },\n method: \"GET\",\n uri: this.url,\n })\n .on(\"response\", async (res) => {\n try {\n await success(res);\n }\n catch (successError) {\n failure(successError);\n return;\n }\n })\n .on(\"error\", failure);\n } else {\n (async () => {\n let res: requestPromise.FullResponse;\n try {\n // tslint:disable-next-line:await-promise no-floating-promises\n res = await requestPromise({\n headers: { Range: `bytes=${range}` },\n method: \"GET\",\n resolveWithFullResponse: true,\n uri: this.url,\n });\n } catch (err) {\n failure(err);\n return;\n }\n\n await success(res);\n })();\n }\n }\n}\n"]}
\No newline at end of file