Spaces:
Sleeping
Sleeping
| ;Object.defineProperty(exports, "__esModule", {value: true}); | |
| var _chunkLK6DILFKjs = require('./chunk-LK6DILFK.js'); | |
| var _chunkEIBTX65Ojs = require('./chunk-EIBTX65O.js'); | |
| var _chunkMQJ3JOOKjs = require('./chunk-MQJ3JOOK.js'); | |
| var _chunkE4AC7YACjs = require('./chunk-E4AC7YAC.js'); | |
| // src/interceptors/XMLHttpRequest/index.ts | |
| var _outvariant = require('outvariant'); | |
| // src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts | |
| var _until = require('@open-draft/until'); | |
| // src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts | |
| var _isnodeprocess = require('is-node-process'); | |
| // src/interceptors/XMLHttpRequest/utils/concatArrayBuffer.ts | |
| function concatArrayBuffer(left, right) { | |
| const result = new Uint8Array(left.byteLength + right.byteLength); | |
| result.set(left, 0); | |
| result.set(right, left.byteLength); | |
| return result; | |
| } | |
| // src/interceptors/XMLHttpRequest/polyfills/EventPolyfill.ts | |
| var EventPolyfill = class { | |
| constructor(type, options) { | |
| this.AT_TARGET = 0; | |
| this.BUBBLING_PHASE = 0; | |
| this.CAPTURING_PHASE = 0; | |
| this.NONE = 0; | |
| this.type = ""; | |
| this.srcElement = null; | |
| this.currentTarget = null; | |
| this.eventPhase = 0; | |
| this.isTrusted = true; | |
| this.composed = false; | |
| this.cancelable = true; | |
| this.defaultPrevented = false; | |
| this.bubbles = true; | |
| this.lengthComputable = true; | |
| this.loaded = 0; | |
| this.total = 0; | |
| this.cancelBubble = false; | |
| this.returnValue = true; | |
| this.type = type; | |
| this.target = (options == null ? void 0 : options.target) || null; | |
| this.currentTarget = (options == null ? void 0 : options.currentTarget) || null; | |
| this.timeStamp = Date.now(); | |
| } | |
| composedPath() { | |
| return []; | |
| } | |
| initEvent(type, bubbles, cancelable) { | |
| this.type = type; | |
| this.bubbles = !!bubbles; | |
| this.cancelable = !!cancelable; | |
| } | |
| preventDefault() { | |
| this.defaultPrevented = true; | |
| } | |
| stopPropagation() { | |
| } | |
| stopImmediatePropagation() { | |
| } | |
| }; | |
| // src/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.ts | |
| var ProgressEventPolyfill = class extends EventPolyfill { | |
| constructor(type, init) { | |
| super(type); | |
| this.lengthComputable = (init == null ? void 0 : init.lengthComputable) || false; | |
| this.composed = (init == null ? void 0 : init.composed) || false; | |
| this.loaded = (init == null ? void 0 : init.loaded) || 0; | |
| this.total = (init == null ? void 0 : init.total) || 0; | |
| } | |
| }; | |
| // src/interceptors/XMLHttpRequest/utils/createEvent.ts | |
| var SUPPORTS_PROGRESS_EVENT = typeof ProgressEvent !== "undefined"; | |
| function createEvent(target, type, init) { | |
| const progressEvents = [ | |
| "error", | |
| "progress", | |
| "loadstart", | |
| "loadend", | |
| "load", | |
| "timeout", | |
| "abort" | |
| ]; | |
| const ProgressEventClass = SUPPORTS_PROGRESS_EVENT ? ProgressEvent : ProgressEventPolyfill; | |
| const event = progressEvents.includes(type) ? new ProgressEventClass(type, { | |
| lengthComputable: true, | |
| loaded: (init == null ? void 0 : init.loaded) || 0, | |
| total: (init == null ? void 0 : init.total) || 0 | |
| }) : new EventPolyfill(type, { | |
| target, | |
| currentTarget: target | |
| }); | |
| return event; | |
| } | |
| // src/utils/findPropertySource.ts | |
| function findPropertySource(target, propertyName) { | |
| if (!(propertyName in target)) { | |
| return null; | |
| } | |
| const hasProperty = Object.prototype.hasOwnProperty.call(target, propertyName); | |
| if (hasProperty) { | |
| return target; | |
| } | |
| const prototype = Reflect.getPrototypeOf(target); | |
| return prototype ? findPropertySource(prototype, propertyName) : null; | |
| } | |
| // src/utils/createProxy.ts | |
| function createProxy(target, options) { | |
| const proxy = new Proxy(target, optionsToProxyHandler(options)); | |
| return proxy; | |
| } | |
| function optionsToProxyHandler(options) { | |
| const { constructorCall, methodCall, getProperty, setProperty } = options; | |
| const handler = {}; | |
| if (typeof constructorCall !== "undefined") { | |
| handler.construct = function(target, args, newTarget) { | |
| const next = Reflect.construct.bind(null, target, args, newTarget); | |
| return constructorCall.call(newTarget, args, next); | |
| }; | |
| } | |
| handler.set = function(target, propertyName, nextValue) { | |
| const next = () => { | |
| const propertySource = findPropertySource(target, propertyName) || target; | |
| const ownDescriptors = Reflect.getOwnPropertyDescriptor( | |
| propertySource, | |
| propertyName | |
| ); | |
| if (typeof (ownDescriptors == null ? void 0 : ownDescriptors.set) !== "undefined") { | |
| ownDescriptors.set.apply(target, [nextValue]); | |
| return true; | |
| } | |
| return Reflect.defineProperty(propertySource, propertyName, { | |
| writable: true, | |
| enumerable: true, | |
| configurable: true, | |
| value: nextValue | |
| }); | |
| }; | |
| if (typeof setProperty !== "undefined") { | |
| return setProperty.call(target, [propertyName, nextValue], next); | |
| } | |
| return next(); | |
| }; | |
| handler.get = function(target, propertyName, receiver) { | |
| const next = () => target[propertyName]; | |
| const value = typeof getProperty !== "undefined" ? getProperty.call(target, [propertyName, receiver], next) : next(); | |
| if (typeof value === "function") { | |
| return (...args) => { | |
| const next2 = value.bind(target, ...args); | |
| if (typeof methodCall !== "undefined") { | |
| return methodCall.call(target, [propertyName, args], next2); | |
| } | |
| return next2(); | |
| }; | |
| } | |
| return value; | |
| }; | |
| return handler; | |
| } | |
| // src/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.ts | |
| function isDomParserSupportedType(type) { | |
| const supportedTypes = [ | |
| "application/xhtml+xml", | |
| "application/xml", | |
| "image/svg+xml", | |
| "text/html", | |
| "text/xml" | |
| ]; | |
| return supportedTypes.some((supportedType) => { | |
| return type.startsWith(supportedType); | |
| }); | |
| } | |
| // src/utils/parseJson.ts | |
| function parseJson(data) { | |
| try { | |
| const json = JSON.parse(data); | |
| return json; | |
| } catch (_) { | |
| return null; | |
| } | |
| } | |
| // src/interceptors/XMLHttpRequest/utils/createResponse.ts | |
| function createResponse(request, body) { | |
| const responseBodyOrNull = _chunkE4AC7YACjs.isResponseWithoutBody.call(void 0, request.status) ? null : body; | |
| return new Response(responseBodyOrNull, { | |
| status: request.status, | |
| statusText: request.statusText, | |
| headers: createHeadersFromXMLHttpReqestHeaders( | |
| request.getAllResponseHeaders() | |
| ) | |
| }); | |
| } | |
| function createHeadersFromXMLHttpReqestHeaders(headersString) { | |
| const headers = new Headers(); | |
| const lines = headersString.split(/[\r\n]+/); | |
| for (const line of lines) { | |
| if (line.trim() === "") { | |
| continue; | |
| } | |
| const [name, ...parts] = line.split(": "); | |
| const value = parts.join(": "); | |
| headers.append(name, value); | |
| } | |
| return headers; | |
| } | |
| // src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts | |
| var IS_MOCKED_RESPONSE = Symbol("isMockedResponse"); | |
| var IS_NODE = _isnodeprocess.isNodeProcess.call(void 0, ); | |
| var XMLHttpRequestController = class { | |
| constructor(initialRequest, logger) { | |
| this.initialRequest = initialRequest; | |
| this.logger = logger; | |
| this.method = "GET"; | |
| this.url = null; | |
| this.events = /* @__PURE__ */ new Map(); | |
| this.requestId = _chunkE4AC7YACjs.createRequestId.call(void 0, ); | |
| this.requestHeaders = new Headers(); | |
| this.responseBuffer = new Uint8Array(); | |
| this.request = createProxy(initialRequest, { | |
| setProperty: ([propertyName, nextValue], invoke) => { | |
| switch (propertyName) { | |
| case "ontimeout": { | |
| const eventName = propertyName.slice( | |
| 2 | |
| ); | |
| this.request.addEventListener(eventName, nextValue); | |
| return invoke(); | |
| } | |
| default: { | |
| return invoke(); | |
| } | |
| } | |
| }, | |
| methodCall: ([methodName, args], invoke) => { | |
| var _a; | |
| switch (methodName) { | |
| case "open": { | |
| const [method, url] = args; | |
| if (typeof url === "undefined") { | |
| this.method = "GET"; | |
| this.url = toAbsoluteUrl(method); | |
| } else { | |
| this.method = method; | |
| this.url = toAbsoluteUrl(url); | |
| } | |
| this.logger = this.logger.extend(`${this.method} ${this.url.href}`); | |
| this.logger.info("open", this.method, this.url.href); | |
| return invoke(); | |
| } | |
| case "addEventListener": { | |
| const [eventName, listener] = args; | |
| this.registerEvent(eventName, listener); | |
| this.logger.info("addEventListener", eventName, listener); | |
| return invoke(); | |
| } | |
| case "setRequestHeader": { | |
| const [name, value] = args; | |
| this.requestHeaders.set(name, value); | |
| this.logger.info("setRequestHeader", name, value); | |
| return invoke(); | |
| } | |
| case "send": { | |
| const [body] = args; | |
| if (body != null) { | |
| this.requestBody = typeof body === "string" ? _chunkLK6DILFKjs.encodeBuffer.call(void 0, body) : body; | |
| } | |
| this.request.addEventListener("load", () => { | |
| if (typeof this.onResponse !== "undefined") { | |
| const fetchResponse = createResponse( | |
| this.request, | |
| /** | |
| * The `response` property is the right way to read | |
| * the ambiguous response body, as the request's "responseType" may differ. | |
| * @see https://xhr.spec.whatwg.org/#the-response-attribute | |
| */ | |
| this.request.response | |
| ); | |
| this.onResponse.call(this, { | |
| response: fetchResponse, | |
| isMockedResponse: IS_MOCKED_RESPONSE in this.request, | |
| request: fetchRequest, | |
| requestId: this.requestId | |
| }); | |
| } | |
| }); | |
| const fetchRequest = this.toFetchApiRequest(); | |
| const onceRequestSettled = ((_a = this.onRequest) == null ? void 0 : _a.call(this, { | |
| request: fetchRequest, | |
| requestId: this.requestId | |
| })) || Promise.resolve(); | |
| onceRequestSettled.finally(() => { | |
| if (this.request.readyState < this.request.LOADING) { | |
| this.logger.info( | |
| "request callback settled but request has not been handled (readystate %d), performing as-is...", | |
| this.request.readyState | |
| ); | |
| if (IS_NODE) { | |
| this.request.setRequestHeader( | |
| _chunkE4AC7YACjs.INTERNAL_REQUEST_ID_HEADER_NAME, | |
| this.requestId | |
| ); | |
| } | |
| return invoke(); | |
| } | |
| }); | |
| break; | |
| } | |
| default: { | |
| return invoke(); | |
| } | |
| } | |
| } | |
| }); | |
| } | |
| registerEvent(eventName, listener) { | |
| const prevEvents = this.events.get(eventName) || []; | |
| const nextEvents = prevEvents.concat(listener); | |
| this.events.set(eventName, nextEvents); | |
| this.logger.info('registered event "%s"', eventName, listener); | |
| } | |
| /** | |
| * Responds to the current request with the given | |
| * Fetch API `Response` instance. | |
| */ | |
| respondWith(response) { | |
| this.logger.info( | |
| "responding with a mocked response: %d %s", | |
| response.status, | |
| response.statusText | |
| ); | |
| define(this.request, IS_MOCKED_RESPONSE, true); | |
| define(this.request, "status", response.status); | |
| define(this.request, "statusText", response.statusText); | |
| define(this.request, "responseURL", this.url.href); | |
| this.request.getResponseHeader = new Proxy(this.request.getResponseHeader, { | |
| apply: (_, __, args) => { | |
| this.logger.info("getResponseHeader", args[0]); | |
| if (this.request.readyState < this.request.HEADERS_RECEIVED) { | |
| this.logger.info("headers not received yet, returning null"); | |
| return null; | |
| } | |
| const headerValue = response.headers.get(args[0]); | |
| this.logger.info( | |
| 'resolved response header "%s" to', | |
| args[0], | |
| headerValue | |
| ); | |
| return headerValue; | |
| } | |
| }); | |
| this.request.getAllResponseHeaders = new Proxy( | |
| this.request.getAllResponseHeaders, | |
| { | |
| apply: () => { | |
| this.logger.info("getAllResponseHeaders"); | |
| if (this.request.readyState < this.request.HEADERS_RECEIVED) { | |
| this.logger.info("headers not received yet, returning empty string"); | |
| return ""; | |
| } | |
| const headersList = Array.from(response.headers.entries()); | |
| const allHeaders = headersList.map(([headerName, headerValue]) => { | |
| return `${headerName}: ${headerValue}`; | |
| }).join("\r\n"); | |
| this.logger.info("resolved all response headers to", allHeaders); | |
| return allHeaders; | |
| } | |
| } | |
| ); | |
| Object.defineProperties(this.request, { | |
| response: { | |
| enumerable: true, | |
| configurable: false, | |
| get: () => this.response | |
| }, | |
| responseText: { | |
| enumerable: true, | |
| configurable: false, | |
| get: () => this.responseText | |
| }, | |
| responseXML: { | |
| enumerable: true, | |
| configurable: false, | |
| get: () => this.responseXML | |
| } | |
| }); | |
| const totalResponseBodyLength = response.headers.has("Content-Length") ? Number(response.headers.get("Content-Length")) : ( | |
| /** | |
| * @todo Infer the response body length from the response body. | |
| */ | |
| void 0 | |
| ); | |
| this.logger.info("calculated response body length", totalResponseBodyLength); | |
| this.trigger("loadstart", { | |
| loaded: 0, | |
| total: totalResponseBodyLength | |
| }); | |
| this.setReadyState(this.request.HEADERS_RECEIVED); | |
| this.setReadyState(this.request.LOADING); | |
| const finalizeResponse = () => { | |
| this.logger.info("finalizing the mocked response..."); | |
| this.setReadyState(this.request.DONE); | |
| this.trigger("load", { | |
| loaded: this.responseBuffer.byteLength, | |
| total: totalResponseBodyLength | |
| }); | |
| this.trigger("loadend", { | |
| loaded: this.responseBuffer.byteLength, | |
| total: totalResponseBodyLength | |
| }); | |
| }; | |
| if (response.body) { | |
| this.logger.info("mocked response has body, streaming..."); | |
| const reader = response.body.getReader(); | |
| const readNextResponseBodyChunk = async () => { | |
| const { value, done } = await reader.read(); | |
| if (done) { | |
| this.logger.info("response body stream done!"); | |
| finalizeResponse(); | |
| return; | |
| } | |
| if (value) { | |
| this.logger.info("read response body chunk:", value); | |
| this.responseBuffer = concatArrayBuffer(this.responseBuffer, value); | |
| this.trigger("progress", { | |
| loaded: this.responseBuffer.byteLength, | |
| total: totalResponseBodyLength | |
| }); | |
| } | |
| readNextResponseBodyChunk(); | |
| }; | |
| readNextResponseBodyChunk(); | |
| } else { | |
| finalizeResponse(); | |
| } | |
| } | |
| responseBufferToText() { | |
| return _chunkLK6DILFKjs.decodeBuffer.call(void 0, this.responseBuffer); | |
| } | |
| get response() { | |
| this.logger.info( | |
| "getResponse (responseType: %s)", | |
| this.request.responseType | |
| ); | |
| if (this.request.readyState !== this.request.DONE) { | |
| return null; | |
| } | |
| switch (this.request.responseType) { | |
| case "json": { | |
| const responseJson = parseJson(this.responseBufferToText()); | |
| this.logger.info("resolved response JSON", responseJson); | |
| return responseJson; | |
| } | |
| case "arraybuffer": { | |
| const arrayBuffer = _chunkLK6DILFKjs.toArrayBuffer.call(void 0, this.responseBuffer); | |
| this.logger.info("resolved response ArrayBuffer", arrayBuffer); | |
| return arrayBuffer; | |
| } | |
| case "blob": { | |
| const mimeType = this.request.getResponseHeader("Content-Type") || "text/plain"; | |
| const responseBlob = new Blob([this.responseBufferToText()], { | |
| type: mimeType | |
| }); | |
| this.logger.info( | |
| "resolved response Blob (mime type: %s)", | |
| responseBlob, | |
| mimeType | |
| ); | |
| return responseBlob; | |
| } | |
| default: { | |
| const responseText = this.responseBufferToText(); | |
| this.logger.info( | |
| 'resolving "%s" response type as text', | |
| this.request.responseType, | |
| responseText | |
| ); | |
| return responseText; | |
| } | |
| } | |
| } | |
| get responseText() { | |
| _outvariant.invariant.call(void 0, | |
| this.request.responseType === "" || this.request.responseType === "text", | |
| "InvalidStateError: The object is in invalid state." | |
| ); | |
| if (this.request.readyState !== this.request.LOADING && this.request.readyState !== this.request.DONE) { | |
| return ""; | |
| } | |
| const responseText = this.responseBufferToText(); | |
| this.logger.info('getResponseText: "%s"', responseText); | |
| return responseText; | |
| } | |
| get responseXML() { | |
| _outvariant.invariant.call(void 0, | |
| this.request.responseType === "" || this.request.responseType === "document", | |
| "InvalidStateError: The object is in invalid state." | |
| ); | |
| if (this.request.readyState !== this.request.DONE) { | |
| return null; | |
| } | |
| const contentType = this.request.getResponseHeader("Content-Type") || ""; | |
| if (typeof DOMParser === "undefined") { | |
| console.warn( | |
| "Cannot retrieve XMLHttpRequest response body as XML: DOMParser is not defined. You are likely using an environment that is not browser or does not polyfill browser globals correctly." | |
| ); | |
| return null; | |
| } | |
| if (isDomParserSupportedType(contentType)) { | |
| return new DOMParser().parseFromString( | |
| this.responseBufferToText(), | |
| contentType | |
| ); | |
| } | |
| return null; | |
| } | |
| errorWith(error) { | |
| this.logger.info("responding with an error"); | |
| this.setReadyState(this.request.DONE); | |
| this.trigger("error"); | |
| this.trigger("loadend"); | |
| } | |
| /** | |
| * Transitions this request's `readyState` to the given one. | |
| */ | |
| setReadyState(nextReadyState) { | |
| this.logger.info( | |
| "setReadyState: %d -> %d", | |
| this.request.readyState, | |
| nextReadyState | |
| ); | |
| if (this.request.readyState === nextReadyState) { | |
| this.logger.info("ready state identical, skipping transition..."); | |
| return; | |
| } | |
| define(this.request, "readyState", nextReadyState); | |
| this.logger.info("set readyState to: %d", nextReadyState); | |
| if (nextReadyState !== this.request.UNSENT) { | |
| this.logger.info('triggerring "readystatechange" event...'); | |
| this.trigger("readystatechange"); | |
| } | |
| } | |
| /** | |
| * Triggers given event on the `XMLHttpRequest` instance. | |
| */ | |
| trigger(eventName, options) { | |
| const callback = this.request[`on${eventName}`]; | |
| const event = createEvent(this.request, eventName, options); | |
| this.logger.info('trigger "%s"', eventName, options || ""); | |
| if (typeof callback === "function") { | |
| this.logger.info('found a direct "%s" callback, calling...', eventName); | |
| callback.call(this.request, event); | |
| } | |
| for (const [registeredEventName, listeners] of this.events) { | |
| if (registeredEventName === eventName) { | |
| this.logger.info( | |
| 'found %d listener(s) for "%s" event, calling...', | |
| listeners.length, | |
| eventName | |
| ); | |
| listeners.forEach((listener) => listener.call(this.request, event)); | |
| } | |
| } | |
| } | |
| /** | |
| * Converts this `XMLHttpRequest` instance into a Fetch API `Request` instance. | |
| */ | |
| toFetchApiRequest() { | |
| this.logger.info("converting request to a Fetch API Request..."); | |
| const fetchRequest = new Request(this.url.href, { | |
| method: this.method, | |
| headers: this.requestHeaders, | |
| /** | |
| * @see https://xhr.spec.whatwg.org/#cross-origin-credentials | |
| */ | |
| credentials: this.request.withCredentials ? "include" : "same-origin", | |
| body: ["GET", "HEAD"].includes(this.method) ? null : this.requestBody | |
| }); | |
| const proxyHeaders = createProxy(fetchRequest.headers, { | |
| methodCall: ([methodName, args], invoke) => { | |
| switch (methodName) { | |
| case "append": | |
| case "set": { | |
| const [headerName, headerValue] = args; | |
| this.request.setRequestHeader(headerName, headerValue); | |
| break; | |
| } | |
| case "delete": { | |
| const [headerName] = args; | |
| console.warn( | |
| `XMLHttpRequest: Cannot remove a "${headerName}" header from the Fetch API representation of the "${fetchRequest.method} ${fetchRequest.url}" request. XMLHttpRequest headers cannot be removed.` | |
| ); | |
| break; | |
| } | |
| } | |
| return invoke(); | |
| } | |
| }); | |
| define(fetchRequest, "headers", proxyHeaders); | |
| this.logger.info("converted request to a Fetch API Request!", fetchRequest); | |
| return fetchRequest; | |
| } | |
| }; | |
| function toAbsoluteUrl(url) { | |
| if (typeof location === "undefined") { | |
| return new URL(url); | |
| } | |
| return new URL(url.toString(), location.href); | |
| } | |
| function define(target, property, value) { | |
| Reflect.defineProperty(target, property, { | |
| // Ensure writable properties to allow redefining readonly properties. | |
| writable: true, | |
| enumerable: true, | |
| value | |
| }); | |
| } | |
| // src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts | |
| function createXMLHttpRequestProxy({ | |
| emitter, | |
| logger | |
| }) { | |
| const XMLHttpRequestProxy = new Proxy(globalThis.XMLHttpRequest, { | |
| construct(target, args, newTarget) { | |
| logger.info("constructed new XMLHttpRequest"); | |
| const originalRequest = Reflect.construct( | |
| target, | |
| args, | |
| newTarget | |
| ); | |
| const prototypeDescriptors = Object.getOwnPropertyDescriptors( | |
| target.prototype | |
| ); | |
| for (const propertyName in prototypeDescriptors) { | |
| Reflect.defineProperty( | |
| originalRequest, | |
| propertyName, | |
| prototypeDescriptors[propertyName] | |
| ); | |
| } | |
| const xhrRequestController = new XMLHttpRequestController( | |
| originalRequest, | |
| logger | |
| ); | |
| xhrRequestController.onRequest = async function({ request, requestId }) { | |
| const { interactiveRequest, requestController } = _chunkMQJ3JOOKjs.toInteractiveRequest.call(void 0, request); | |
| this.logger.info("awaiting mocked response..."); | |
| emitter.once("request", ({ requestId: pendingRequestId }) => { | |
| if (pendingRequestId !== requestId) { | |
| return; | |
| } | |
| if (requestController.responsePromise.state === "pending") { | |
| requestController.respondWith(void 0); | |
| } | |
| }); | |
| const resolverResult = await _until.until.call(void 0, async () => { | |
| this.logger.info( | |
| 'emitting the "request" event for %s listener(s)...', | |
| emitter.listenerCount("request") | |
| ); | |
| await _chunkMQJ3JOOKjs.emitAsync.call(void 0, emitter, "request", { | |
| request: interactiveRequest, | |
| requestId | |
| }); | |
| this.logger.info('all "request" listeners settled!'); | |
| const mockedResponse2 = await requestController.responsePromise; | |
| this.logger.info("event.respondWith called with:", mockedResponse2); | |
| return mockedResponse2; | |
| }); | |
| if (resolverResult.error) { | |
| this.logger.info( | |
| "request listener threw an exception, aborting request...", | |
| resolverResult.error | |
| ); | |
| if (resolverResult.error instanceof Response) { | |
| if (_chunkE4AC7YACjs.isResponseError.call(void 0, resolverResult.error)) { | |
| xhrRequestController.errorWith(new TypeError("Network error")); | |
| } else { | |
| this.respondWith(resolverResult.error); | |
| } | |
| return; | |
| } | |
| if (emitter.listenerCount("unhandledException") > 0) { | |
| await _chunkMQJ3JOOKjs.emitAsync.call(void 0, emitter, "unhandledException", { | |
| error: resolverResult.error, | |
| request, | |
| requestId, | |
| controller: { | |
| respondWith: xhrRequestController.respondWith.bind(xhrRequestController), | |
| errorWith: xhrRequestController.errorWith.bind(xhrRequestController) | |
| } | |
| }); | |
| if (originalRequest.readyState > XMLHttpRequest.OPENED) { | |
| return; | |
| } | |
| } | |
| xhrRequestController.respondWith( | |
| _chunkE4AC7YACjs.createServerErrorResponse.call(void 0, resolverResult.error) | |
| ); | |
| return; | |
| } | |
| const mockedResponse = resolverResult.data; | |
| if (typeof mockedResponse !== "undefined") { | |
| this.logger.info( | |
| "received mocked response: %d %s", | |
| mockedResponse.status, | |
| mockedResponse.statusText | |
| ); | |
| if (_chunkE4AC7YACjs.isResponseError.call(void 0, mockedResponse)) { | |
| this.logger.info( | |
| "received a network error response, rejecting the request promise..." | |
| ); | |
| xhrRequestController.errorWith(new TypeError("Network error")); | |
| return; | |
| } | |
| return xhrRequestController.respondWith(mockedResponse); | |
| } | |
| this.logger.info( | |
| "no mocked response received, performing request as-is..." | |
| ); | |
| }; | |
| xhrRequestController.onResponse = async function({ | |
| response, | |
| isMockedResponse, | |
| request, | |
| requestId | |
| }) { | |
| this.logger.info( | |
| 'emitting the "response" event for %s listener(s)...', | |
| emitter.listenerCount("response") | |
| ); | |
| emitter.emit("response", { | |
| response, | |
| isMockedResponse, | |
| request, | |
| requestId | |
| }); | |
| }; | |
| return xhrRequestController.request; | |
| } | |
| }); | |
| return XMLHttpRequestProxy; | |
| } | |
| // src/interceptors/XMLHttpRequest/index.ts | |
| var _XMLHttpRequestInterceptor = class extends _chunkE4AC7YACjs.Interceptor { | |
| constructor() { | |
| super(_XMLHttpRequestInterceptor.interceptorSymbol); | |
| } | |
| checkEnvironment() { | |
| return typeof globalThis.XMLHttpRequest !== "undefined"; | |
| } | |
| setup() { | |
| const logger = this.logger.extend("setup"); | |
| logger.info('patching "XMLHttpRequest" module...'); | |
| const PureXMLHttpRequest = globalThis.XMLHttpRequest; | |
| _outvariant.invariant.call(void 0, | |
| !PureXMLHttpRequest[_chunkEIBTX65Ojs.IS_PATCHED_MODULE], | |
| 'Failed to patch the "XMLHttpRequest" module: already patched.' | |
| ); | |
| globalThis.XMLHttpRequest = createXMLHttpRequestProxy({ | |
| emitter: this.emitter, | |
| logger: this.logger | |
| }); | |
| logger.info( | |
| 'native "XMLHttpRequest" module patched!', | |
| globalThis.XMLHttpRequest.name | |
| ); | |
| Object.defineProperty(globalThis.XMLHttpRequest, _chunkEIBTX65Ojs.IS_PATCHED_MODULE, { | |
| enumerable: true, | |
| configurable: true, | |
| value: true | |
| }); | |
| this.subscriptions.push(() => { | |
| Object.defineProperty(globalThis.XMLHttpRequest, _chunkEIBTX65Ojs.IS_PATCHED_MODULE, { | |
| value: void 0 | |
| }); | |
| globalThis.XMLHttpRequest = PureXMLHttpRequest; | |
| logger.info( | |
| 'native "XMLHttpRequest" module restored!', | |
| globalThis.XMLHttpRequest.name | |
| ); | |
| }); | |
| } | |
| }; | |
| var XMLHttpRequestInterceptor = _XMLHttpRequestInterceptor; | |
| XMLHttpRequestInterceptor.interceptorSymbol = Symbol("xhr"); | |
| exports.XMLHttpRequestInterceptor = XMLHttpRequestInterceptor; | |
| //# sourceMappingURL=chunk-APT7KA3B.js.map |