UNPKG

14.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"zip-ex-http.js","sourceRoot":"","sources":["../../../../../src/_utils/zip/zip-ex-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 { URL } from \"url\";\n\nimport { IStreamAndLength, IZip, Zip } from \"./zip\";\n\n// import { bufferToStream } from \"../stream/BufferUtils\";\n\nconst debug = debug_(\"r2:utils#zip/zip-ex-http\");\n\nexport class ZipExplodedHTTP extends Zip {\n\n public static async loadPromise(urlStr: string): Promise<IZip> {\n return Promise.resolve(new ZipExplodedHTTP(urlStr));\n }\n\n // private readonly url: URL;\n\n private constructor(readonly urlStr: string) {\n super();\n debug(`ZipExplodedHTTP: ${urlStr}`);\n // this.url = new URL(urlStr);\n }\n\n public freeDestroy(): void {\n debug(\"freeDestroy: ZipExplodedHTTP -- \" + this.urlStr);\n }\n\n public entriesCount(): number {\n return 0; // TODO: hacky! (not really needed ... but still)\n }\n\n public hasEntries(): boolean {\n return true; // TODO: hacky\n }\n\n public hasEntry(_entryPath: string): boolean {\n return true;\n }\n\n public async hasEntryAsync(entryPath: string): Promise<boolean> {\n\n debug(`hasEntryAsync: ${entryPath}`);\n\n const url = new URL(this.urlStr);\n // url.pathname += (\"/\" + entryPath);\n url.pathname += entryPath;\n const urlStrEntry = url.toString();\n debug(\"urlStrEntry: \", urlStrEntry);\n\n return new Promise(async (topresolve, _topreject) => {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const failure = async (err: any) => {\n debug(err);\n // topreject(err);\n topresolve(false);\n };\n\n const success = async (response: request.RequestResponse) => {\n\n // Object.keys(response.headers).forEach((header: string) => {\n // debug(header + \" => \" + response.headers[header]);\n // });\n\n // debug(response);\n // debug(response.body);\n\n if (response.statusCode && (response.statusCode < 200 || response.statusCode >= 300)) {\n // await failure(\"HTTP CODE \" + response.statusCode);\n topresolve(false);\n return;\n }\n\n topresolve(true);\n };\n\n // No response streaming! :(\n // https://github.com/request/request-promise/issues/90\n const needsStreamingResponse = true;\n\n if (needsStreamingResponse) {\n const promise = new Promise<void>((resolve, reject) => {\n request.get({\n headers: {},\n method: \"HEAD\",\n uri: urlStrEntry,\n })\n .on(\"response\", async (response: request.RequestResponse) => {\n try {\n await success(response);\n }\n catch (successError) {\n await failure(successError);\n return;\n }\n resolve();\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on(\"error\", async (err: any) => {\n await failure(err);\n reject();\n });\n });\n try {\n await promise;\n } catch (_err) {\n // ignore\n }\n } else {\n let response: requestPromise.FullResponse;\n try {\n // tslint:disable-next-line:await-promise no-floating-promises\n response = await requestPromise({\n headers: {},\n method: \"HEAD\",\n resolveWithFullResponse: true,\n uri: urlStrEntry,\n });\n await success(response);\n } catch (err) {\n await failure(err);\n }\n }\n });\n }\n\n public async getEntries(): Promise<string[]> {\n\n return new Promise<string[]>(async (_resolve, reject) => {\n reject(\"Not implemented.\");\n });\n }\n\n public async entryStreamPromise(entryPath: string): Promise<IStreamAndLength> {\n\n debug(`entryStreamPromise: ${entryPath}`);\n\n // if (!this.hasEntries() || !this.hasEntry(entryPath)) {\n // return Promise.reject(\"no such path in zip exploded: \" + entryPath);\n // }\n\n const url = new URL(this.urlStr);\n // url.pathname += (\"/\" + entryPath);\n url.pathname += entryPath;\n const urlStrEntry = url.toString();\n debug(\"urlStrEntry: \", urlStrEntry);\n\n return new Promise(async (topresolve, topreject) => {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const failure = async (err: any) => {\n debug(err);\n topreject(err);\n };\n\n const success = async (response: request.RequestResponse) => {\n\n // Object.keys(response.headers).forEach((header: string) => {\n // debug(header + \" => \" + response.headers[header]);\n // });\n\n // debug(response);\n // debug(response.body);\n\n if (response.statusCode && (response.statusCode < 200 || response.statusCode >= 300)) {\n await failure(\"HTTP CODE \" + response.statusCode);\n return;\n }\n\n let length = 0;\n const lengthStr = response.headers[\"content-length\"];\n if (lengthStr) {\n length = parseInt(lengthStr, 10);\n }\n\n const stream = new PassThrough();\n response.pipe(stream);\n\n const streamAndLength: IStreamAndLength = {\n length,\n reset: async () => {\n return this.entryStreamPromise(entryPath);\n },\n stream,\n };\n topresolve(streamAndLength);\n\n // let responseStr: string;\n // if (response.body) {\n // debug(\"RES BODY\");\n // responseStr = response.body;\n // } else {\n // debug(\"RES STREAM\");\n // let responseData: Buffer;\n // try {\n // responseData = await streamToBufferPromise(response);\n // } catch (err) {\n // debug(err);\n // return;\n // }\n // responseStr = responseData.toString(\"utf8\");\n // }\n };\n\n // No response streaming! :(\n // https://github.com/request/request-promise/issues/90\n const needsStreamingResponse = true;\n\n if (needsStreamingResponse) {\n const promise = new Promise<void>((resolve, reject) => {\n request.get({\n headers: {},\n method: \"GET\",\n uri: urlStrEntry,\n })\n .on(\"response\", async (response: request.RequestResponse) => {\n try {\n await success(response);\n }\n catch (successError) {\n await failure(successError);\n return;\n }\n resolve();\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on(\"error\", async (err: any) => {\n await failure(err);\n reject();\n });\n });\n try {\n await promise;\n } catch (_err) {\n // ignore\n }\n } else {\n let response: requestPromise.FullResponse;\n try {\n // tslint:disable-next-line:await-promise no-floating-promises\n response = await requestPromise({\n headers: {},\n method: \"GET\",\n resolveWithFullResponse: true,\n uri: urlStrEntry,\n });\n await success(response);\n } catch (err) {\n await failure(err);\n }\n }\n });\n }\n}\n"]}
\No newline at end of file