{"version":3,"file":"xhr.mjs","sourceRoot":"","sources":["../../../../src/request/providers/xhr.ts"],"names":[],"mappings":"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","sourcesContent":["import { Handle } from '../../interfaces';\nimport global from '@dojo/shim/global';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Task, { State } from '../../async/Task';\nimport has from '../../has';\nimport Observable from '../../Observable';\nimport { createTimer } from '../../util';\nimport Headers from '../Headers';\nimport { RequestOptions, UploadObservableTask } from '../interfaces';\nimport Response, { getArrayBufferFromBlob, getTextFromBlob } from '../Response';\nimport SubscriptionPool from '../SubscriptionPool';\nimport TimeoutError from '../TimeoutError';\nimport { generateRequestUrl } from '../util';\n\n/**\n * Request options specific to an XHR request\n */\nexport interface XhrRequestOptions extends RequestOptions {\n\t/**\n\t * Controls whether or not the request is synchronous (blocks the main thread) or asynchronous (default).\n\t */\n\tblockMainThread?: boolean;\n\t/**\n\t * Controls whether or not the X-Requested-With header is added to the request (default true). Set to false to not\n\t * include the header.\n\t */\n\tincludeRequestedWithHeader?: boolean;\n}\n\ninterface RequestData {\n\ttask: Task<XMLHttpRequest>;\n\tused: boolean;\n\trequestOptions: XhrRequestOptions;\n\tnativeResponse: XMLHttpRequest;\n\turl: string;\n\tdownloadObservable: Observable<number>;\n\tdataObservable: Observable<any>;\n}\n\nconst dataMap = new WeakMap<XhrResponse, RequestData>();\n\nfunction getDataTask(response: XhrResponse): Task<XMLHttpRequest> {\n\tconst data = dataMap.get(response)!;\n\n\tif (data.used) {\n\t\treturn Task.reject<any>(new TypeError('Body already read'));\n\t}\n\n\tdata.used = true;\n\n\treturn data.task;\n}\n\n/**\n * Wraps an XHR request in a response that mimics the fetch API\n */\nexport class XhrResponse extends Response {\n\treadonly headers: Headers;\n\treadonly ok: boolean;\n\treadonly status: number;\n\treadonly statusText: string;\n\n\tget bodyUsed(): boolean {\n\t\treturn dataMap.get(this)!.used;\n\t}\n\n\tget nativeResponse(): XMLHttpRequest {\n\t\treturn dataMap.get(this)!.nativeResponse;\n\t}\n\n\tget requestOptions(): XhrRequestOptions {\n\t\treturn dataMap.get(this)!.requestOptions;\n\t}\n\n\tget url(): string {\n\t\treturn dataMap.get(this)!.url;\n\t}\n\n\tget download(): Observable<number> {\n\t\treturn dataMap.get(this)!.downloadObservable;\n\t}\n\n\tget data(): Observable<any> {\n\t\treturn dataMap.get(this)!.dataObservable;\n\t}\n\n\tconstructor(request: XMLHttpRequest) {\n\t\tsuper();\n\n\t\tconst headers = (this.headers = new Headers());\n\n\t\tconst responseHeaders = request.getAllResponseHeaders();\n\t\tif (responseHeaders) {\n\t\t\tconst lines = responseHeaders.split(/\\r\\n/g);\n\n\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\tconst match = lines[i].match(/^(.*?): (.*)$/);\n\t\t\t\tif (match) {\n\t\t\t\t\theaders.append(match[1], match[2]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.status = request.status;\n\t\tthis.ok = this.status >= 200 && this.status < 300;\n\t\tthis.statusText = request.statusText || 'OK';\n\t}\n\n\tarrayBuffer(): Task<ArrayBuffer> {\n\t\treturn Task.reject<ArrayBuffer>(new Error('ArrayBuffer not supported'));\n\t}\n\n\tblob(): Task<Blob> {\n\t\treturn Task.reject<Blob>(new Error('Blob not supported'));\n\t}\n\n\tformData(): Task<FormData> {\n\t\treturn Task.reject<FormData>(new Error('FormData not supported'));\n\t}\n\n\ttext(): Task<string> {\n\t\treturn <any>getDataTask(this).then((request: XMLHttpRequest) => {\n\t\t\treturn String(request.responseText);\n\t\t});\n\t}\n\n\txml(): Task<Document> {\n\t\treturn <any>this.text().then((text: string) => {\n\t\t\tconst parser = new DOMParser();\n\t\t\treturn parser.parseFromString(text, this.headers.get('content-type') || 'text/html');\n\t\t});\n\t}\n}\n\nif (has('blob')) {\n\tXhrResponse.prototype.blob = function(this: XhrResponse): Task<Blob> {\n\t\treturn <any>getDataTask(this).then((request: XMLHttpRequest) => request.response);\n\t};\n\n\tXhrResponse.prototype.text = function(this: XhrResponse): Task<string> {\n\t\treturn <any>this.blob().then(getTextFromBlob);\n\t};\n\n\tif (has('arraybuffer')) {\n\t\tXhrResponse.prototype.arrayBuffer = function(this: XhrResponse): Task<ArrayBuffer> {\n\t\t\treturn <any>this.blob().then(getArrayBufferFromBlob);\n\t\t};\n\t}\n}\n\nif (has('formdata')) {\n\tXhrResponse.prototype.formData = function(this: XhrResponse): Task<FormData> {\n\t\treturn <any>this.text().then((text: string) => {\n\t\t\tconst data = new FormData();\n\n\t\t\ttext\n\t\t\t\t.trim()\n\t\t\t\t.split('&')\n\t\t\t\t.forEach((keyValues) => {\n\t\t\t\t\tif (keyValues) {\n\t\t\t\t\t\tconst pairs = keyValues.split('=');\n\t\t\t\t\t\tconst name = (pairs.shift() || '').replace(/\\+/, ' ');\n\t\t\t\t\t\tconst value = pairs.join('=').replace(/\\+/, ' ');\n\n\t\t\t\t\t\tdata.append(decodeURIComponent(name), decodeURIComponent(value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\treturn data;\n\t\t});\n\t};\n}\n\nfunction noop() {}\n\nfunction setOnError(request: XMLHttpRequest, reject: Function) {\n\trequest.addEventListener('error', function(event) {\n\t\treject(new TypeError(event.error || 'Network request failed'));\n\t});\n}\n\nexport default function xhr(url: string, options: XhrRequestOptions = {}): UploadObservableTask<XhrResponse> {\n\tconst request = new XMLHttpRequest();\n\tconst requestUrl = generateRequestUrl(url, options);\n\n\toptions = Object.create(options);\n\n\tif (!options.method) {\n\t\toptions.method = 'GET';\n\t}\n\n\tlet isAborted = false;\n\n\tfunction abort() {\n\t\tisAborted = true;\n\t\tif (request) {\n\t\t\trequest.abort();\n\t\t\trequest.onreadystatechange = noop;\n\t\t}\n\t}\n\n\tlet timeoutHandle: Handle;\n\tlet timeoutReject: Function;\n\n\tconst task = <UploadObservableTask<XhrResponse>>new Task<XhrResponse>((resolve, reject) => {\n\t\ttimeoutReject = reject;\n\n\t\trequest.onreadystatechange = function() {\n\t\t\tif (isAborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (request.readyState === 2) {\n\t\t\t\tconst response = new XhrResponse(request);\n\n\t\t\t\tconst downloadSubscriptionPool = new SubscriptionPool<number>();\n\t\t\t\tconst dataSubscriptionPool = new SubscriptionPool<any>();\n\n\t\t\t\tconst task = new Task<XMLHttpRequest>((resolve, reject) => {\n\t\t\t\t\ttimeoutReject = reject;\n\n\t\t\t\t\trequest.onprogress = function(event: any) {\n\t\t\t\t\t\tif (isAborted) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdownloadSubscriptionPool.next(event.loaded);\n\t\t\t\t\t};\n\n\t\t\t\t\trequest.onreadystatechange = function() {\n\t\t\t\t\t\tif (isAborted) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (request.readyState === 4) {\n\t\t\t\t\t\t\trequest.onreadystatechange = noop;\n\t\t\t\t\t\t\ttimeoutHandle && timeoutHandle.destroy();\n\n\t\t\t\t\t\t\tdataSubscriptionPool.next(request.response);\n\t\t\t\t\t\t\tdataSubscriptionPool.complete();\n\n\t\t\t\t\t\t\tresolve(request);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tsetOnError(request, reject);\n\t\t\t\t}, abort);\n\n\t\t\t\tdataMap.set(response, {\n\t\t\t\t\ttask,\n\t\t\t\t\tused: false,\n\t\t\t\t\tnativeResponse: request,\n\t\t\t\t\trequestOptions: options,\n\t\t\t\t\turl: requestUrl,\n\t\t\t\t\tdownloadObservable: new Observable<number>((observer) => downloadSubscriptionPool.add(observer)),\n\t\t\t\t\tdataObservable: new Observable<any>((observer) => dataSubscriptionPool.add(observer))\n\t\t\t\t});\n\n\t\t\t\tresolve(response);\n\t\t\t}\n\t\t};\n\n\t\tsetOnError(request, reject);\n\t}, abort);\n\n\trequest.open(options.method, requestUrl, !options.blockMainThread, options.user, options.password);\n\n\tif (has('filereader') && has('blob')) {\n\t\trequest.responseType = 'blob';\n\t}\n\n\tif (options.timeout && options.timeout > 0 && options.timeout !== Infinity) {\n\t\ttimeoutHandle = createTimer(() => {\n\t\t\t// Reject first, since aborting will also fire onreadystatechange which would reject with a\n\t\t\t// less specific error.  (This is also why we set up our own timeout rather than using\n\t\t\t// native timeout and ontimeout, because that aborts and fires onreadystatechange before ontimeout.)\n\t\t\ttimeoutReject && timeoutReject(new TimeoutError('The XMLHttpRequest request timed out'));\n\t\t\tabort();\n\t\t}, options.timeout);\n\t}\n\n\tlet hasContentTypeHeader = false;\n\tlet hasRequestedWithHeader = false;\n\tconst { includeRequestedWithHeader = true } = options;\n\n\tif (options.headers) {\n\t\tconst requestHeaders = new Headers(options.headers);\n\n\t\thasRequestedWithHeader = requestHeaders.has('x-requested-with');\n\t\thasContentTypeHeader = requestHeaders.has('content-type');\n\n\t\tfor (const [key, value] of requestHeaders) {\n\t\t\trequest.setRequestHeader(key, value);\n\t\t}\n\t}\n\n\tif (!hasRequestedWithHeader && includeRequestedWithHeader) {\n\t\trequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\t}\n\n\tif (!hasContentTypeHeader && has('formdata') && options.body instanceof global.FormData) {\n\t\t// Assume that most forms do not contain large binary files. If that is not the case,\n\t\t// then \"multipart/form-data\" should be manually specified as the \"Content-Type\" header.\n\t\trequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\t}\n\n\ttask.finally(() => {\n\t\tif (task.state !== State.Fulfilled) {\n\t\t\trequest.onreadystatechange = noop;\n\t\t\ttimeoutHandle && timeoutHandle.destroy();\n\t\t}\n\t});\n\n\tconst uploadObserverPool = new SubscriptionPool<number>();\n\ttask.upload = new Observable<number>((observer) => uploadObserverPool.add(observer));\n\n\tif (has('host-browser') || has('web-worker-xhr-upload')) {\n\t\trequest.upload.addEventListener('progress', (event) => {\n\t\t\tuploadObserverPool.next(event.loaded);\n\t\t});\n\t}\n\n\trequest.send(options.body || null);\n\n\treturn task;\n}\n"]}