zippycli
Version:
An unofficial Zippyshare CLI
1 lines • 9.24 kB
Source Map (JSON)
{"version":3,"sources":["request.ts"],"names":["Readable","fetch","AbortController","RequestStream","constructor","options","_options_","abort","destroy","_read","_size","url","signal","_abortController_","method","headers","compress","gzip","timeout","then","res","status","body","headersRaw","raw","headersObject","p","Object","keys","join","response","statusCode","on","err","emit","data","push","_destroy","error","callback","abortController","factory","defaults","Constructor","cb","opts","request","datas","resp","Buffer","concat","encoding","toString"],"mappings":"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","sourcesContent":["import {Readable} from 'stream';\n\nimport fetch from 'node-fetch';\nimport {AbortController} from 'abort-controller';\n\nexport interface IRequestDefaults {\n\t//\n\t/**\n\t * Request method.\n\t */\n\tmethod?: string;\n\n\t/**\n\t * Request headers.\n\t */\n\theaders?: {[key: string]: string};\n\n\t/**\n\t * Gzip compression.\n\t */\n\tgzip?: boolean;\n\n\t/**\n\t * Body encoding used for callback functions.\n\t */\n\tencoding?: string | null;\n\n\t/**\n\t * Request timeout.\n\t */\n\ttimeout?: number;\n}\n\nexport interface IRequestOptions extends IRequestDefaults {\n\t//\n\t/**\n\t * URL string.\n\t */\n\turl: string;\n}\n\nexport interface IRequestResponse {\n\t//\n\t/**\n\t * Status code.\n\t */\n\tstatusCode: number;\n\n\t/**\n\t * Response headers, all lowercase.\n\t */\n\theaders: {[key: string]: string};\n}\n\nexport interface IRequestStream extends Readable {\n\ton(event: 'error', listener: (e: Error) => void): this;\n\ton(event: 'response', listener: (resp: IRequestResponse) => void): this;\n\ton(event: 'data', listener: (data: Buffer | string) => void): this;\n\t// eslint-disable-next-line @typescript-eslint/unified-signatures\n\ton(event: 'complete', listener: (resp: IRequestResponse) => void): this;\n\ton(event: string | symbol, listener: (...args: any[]) => void): this;\n\tabort(): void;\n}\n\nexport type IRequestCallback = (\n\terror: any,\n\tresponse: IRequestResponse,\n\tbody: any\n) => void;\n\nexport type IRequestFactory = (\n\toptions: IRequestOptions,\n\tcb?: IRequestCallback\n) => IRequestStream;\n\n/**\n * RequestStream, similar to the deprecated request module stream.\n */\nexport class RequestStream extends Readable {\n\t/**\n\t * Request options.\n\t */\n\tprivate _options_: Readonly<IRequestOptions> | null;\n\n\t/**\n\t * Abort controller.\n\t */\n\tprivate _abortController_: AbortController | null = null;\n\n\t/**\n\t * Create RequestStream.\n\t *\n\t * @param options Request options.\n\t */\n\tconstructor(options: Readonly<IRequestOptions>) {\n\t\tsuper();\n\n\t\tthis._options_ = options;\n\t}\n\n\t/**\n\t * Abort request.\n\t */\n\tpublic abort() {\n\t\tthis.destroy();\n\t}\n\n\t/**\n\t * Read implementation.\n\t *\n\t * @param _size Size to be read.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic _read(_size: number) {\n\t\t// Get options if set, only starts reading once.\n\t\tconst options = this._options_;\n\t\tif (!options) {\n\t\t\treturn;\n\t\t}\n\t\tthis._options_ = null;\n\n\t\tfetch(options.url, {\n\t\t\tsignal: (this._abortController_ = new AbortController()).signal,\n\t\t\tmethod: options.method || 'GET',\n\t\t\theaders: {\n\t\t\t\t'User-Agent': '-',\n\t\t\t\t...(options.headers || {})\n\t\t\t},\n\t\t\tcompress: !!options.gzip,\n\t\t\ttimeout: options.timeout\n\t\t}).then(\n\t\t\tres => {\n\t\t\t\tconst {status, headers, body} = res;\n\t\t\t\tconst headersRaw = headers.raw();\n\t\t\t\tconst headersObject: {[key: string]: string} = {};\n\t\t\t\tfor (const p of Object.keys(headersRaw)) {\n\t\t\t\t\theadersObject[p] = headersRaw[p].join(', ');\n\t\t\t\t}\n\t\t\t\tconst response = {\n\t\t\t\t\tstatusCode: status,\n\t\t\t\t\theaders: headersObject\n\t\t\t\t};\n\t\t\t\tbody.on('error', err => {\n\t\t\t\t\tthis.emit('error', err);\n\t\t\t\t});\n\t\t\t\tbody.on('data', data => {\n\t\t\t\t\tthis.push(data);\n\t\t\t\t});\n\t\t\t\tbody.on('end', () => {\n\t\t\t\t\tthis.push(null);\n\t\t\t\t});\n\t\t\t\tthis.on('end', () => {\n\t\t\t\t\tthis.emit('complete', response);\n\t\t\t\t});\n\t\t\t\tthis.emit('response', response);\n\t\t\t},\n\t\t\terr => {\n\t\t\t\tthis.emit('error', err);\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Destroy implementation.\n\t *\n\t * @param error Error object.\n\t * @param callback Callback function.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic _destroy(\n\t\terror: Error | null,\n\t\tcallback: (error?: Error | null) => void\n\t) {\n\t\tconst abortController = this._abortController_;\n\t\tthis._abortController_ = null;\n\t\tif (abortController) {\n\t\t\tabortController.abort();\n\t\t}\n\n\t\tsuper._destroy(error, callback);\n\t}\n\n\t/**\n\t * Request factory.\n\t *\n\t * @param defaults Default options.\n\t * @returns Request factory.\n\t */\n\tpublic static factory(\n\t\tdefaults: Readonly<IRequestDefaults> = {}\n\t): IRequestFactory {\n\t\tconst Constructor = this as any as typeof RequestStream;\n\t\treturn (options: Readonly<IRequestOptions>, cb?: IRequestCallback) => {\n\t\t\tconst opts = {defaults, ...options};\n\t\t\tconst request = new Constructor(opts);\n\t\t\tif (cb) {\n\t\t\t\tlet response: IRequestResponse = {\n\t\t\t\t\tstatusCode: 0,\n\t\t\t\t\theaders: {}\n\t\t\t\t};\n\t\t\t\tconst datas: Buffer[] = [];\n\t\t\t\trequest.on('response', (resp: IRequestResponse) => {\n\t\t\t\t\tresponse = resp;\n\t\t\t\t});\n\t\t\t\trequest.on('data', (data: Buffer) => {\n\t\t\t\t\tdatas.push(data);\n\t\t\t\t});\n\t\t\t\trequest.on('error', err => {\n\t\t\t\t\trequest.abort();\n\t\t\t\t\tcb(err, response, Buffer.concat(datas));\n\t\t\t\t});\n\t\t\t\trequest.on('complete', (resp: IRequestResponse) => {\n\t\t\t\t\tconst data = Buffer.concat(datas);\n\t\t\t\t\tconst {encoding} = opts;\n\t\t\t\t\tcb(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tresp,\n\t\t\t\t\t\tencoding === null\n\t\t\t\t\t\t\t? data\n\t\t\t\t\t\t\t: data.toString(encoding as BufferEncoding)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn request;\n\t\t};\n\t}\n}\n"],"file":"request.mjs","sourceRoot":"../src"}