UNPKG

9.05 kBSource Map (JSON)View Raw
1{"version":3,"file":"zip2RandomAccessReader_Http.js","sourceRoot":"","sources":["../../../../../src/_utils/zip/zip2RandomAccessReader_Http.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 { PassThrough } from \"stream\";\nimport * as yauzl from \"yauzl\";\n\nimport { bufferToStream, streamToBufferPromise } from \"../stream/BufferUtils\";\n\n// import { HttpReadableStream } from \"./HttpReadableStream\";\n\nconst debug = debug_(\"r2:utils#zip/zip2RandomAccessReader_Http\");\n\n// import * as util from \"util\";\n// export interface RandomAccessReader {\n// _readStreamForRange(start: number, end: number): void;\n// }\n\n// YAUZL:\n// export abstract class RandomAccessReader extends EventEmitter {\n// _readStreamForRange(start: number, end: number): void;\n// createReadStream(options: { start: number; end: number }): void;\n// read(buffer: Buffer, offset: number, length: number, position: number, callback: (err?: Error) => void): void;\n// close(callback: (err?: Error) => void): void;\n// }\n\nexport class HttpZipReader extends yauzl.RandomAccessReader {\n\n private firstBuffer: Buffer | undefined = undefined;\n private firstBufferStart = 0;\n private firstBufferEnd = 0;\n\n constructor(readonly url: string, readonly byteLength: number) {\n super();\n // yauzl.RandomAccessReader.call(this);\n }\n\n public _readStreamForRange(start: number, end: number) {\n // const length = end - start;\n // debug(`_readStreamForRange (new HttpReadableStream) ${this.url}` +\n // ` content-length=${this.byteLength} start=${start} end+1=${end} (length=${length})`);\n\n // return new HttpReadableStream(this.url, this.byteLength, start, end);\n // =>\n\n // const length = end - start;\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\n if (this.firstBuffer && start >= this.firstBufferStart && end <= this.firstBufferEnd) {\n\n // debug(`HTTP CACHE ${this.url}: ${start}-${end} (${length}) [${this.byteLength}]`);\n\n const begin = start - this.firstBufferStart;\n const stop = end - this.firstBufferStart;\n\n return bufferToStream(this.firstBuffer.slice(begin, stop));\n }\n\n const stream = new PassThrough();\n\n const lastByteIndex = end - 1;\n const range = `${start}-${lastByteIndex}`;\n\n // debug(`HTTP GET ${this.url}: ${start}-${end} (${length}) [${this.byteLength}]`);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const failure = (err: any) => {\n debug(err);\n // this.stream.end();\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);\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 if (this.firstBuffer) {\n res.pipe(stream);\n // // .on(\"end\", () => {\n // // debug(\"END\");\n // // });\n } else {\n let buffer: Buffer;\n try {\n buffer = await streamToBufferPromise(res);\n } catch (err) {\n debug(err);\n stream.end();\n return;\n }\n debug(`streamToBufferPromise: ${buffer.length}`);\n\n this.firstBuffer = buffer;\n this.firstBufferStart = start;\n this.firstBufferEnd = end;\n\n stream.write(buffer);\n stream.end();\n }\n };\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 // tslint:disable-next-line:no-floating-promises\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 // .then(() => {\n // debug(\"done\");\n // }).catch((err) => {\n // debug(err);\n // })\n ;\n }\n\n return stream;\n }\n}\n// util.inherits(HttpZipReader, yauzl.RandomAccessReader);\n\n// // tslint:disable-next-line:space-before-function-paren\n// HttpZipReader.prototype._readStreamForRange = function (start: number, end: number) {\n\n// };\n"]}
\No newline at end of file