From 8977fc19b3a401eff1d4a0ca00c926ab850f2bf0 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 21 Jul 2022 03:40:48 +0000 Subject: [PATCH] release v1.5.2 --- .gitignore | 1 - dist/xhook.js | 1201 +++++++++++++++++++++++++++++++++++++++++ dist/xhook.js.map | 1 + dist/xhook.min.js | 5 + dist/xhook.min.js.map | 1 + package.json | 2 +- 6 files changed, 1209 insertions(+), 2 deletions(-) create mode 100644 dist/xhook.js create mode 100644 dist/xhook.js.map create mode 100644 dist/xhook.min.js create mode 100644 dist/xhook.min.js.map diff --git a/.gitignore b/.gitignore index e1fa4b6..5f0446a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ bower_components .vscode .DS_Store -dist/ diff --git a/dist/xhook.js b/dist/xhook.js new file mode 100644 index 0000000..00466b1 --- /dev/null +++ b/dist/xhook.js @@ -0,0 +1,1201 @@ +/*! + * XHook - v1.5.2 - https://github.com/jpillora/xhook + * Jaime Pillora - MIT Copyright 2022 + */ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/main.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./node_modules/webpack/buildin/amd-options.js": +/*!****************************************!*\ + !*** (webpack)/buildin/amd-options.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ +module.exports = __webpack_amd_options__; + +/* WEBPACK VAR INJECTION */}.call(this, {})) + +/***/ }), + +/***/ "./node_modules/webpack/buildin/global.js": +/*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || new Function("return this")(); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), + +/***/ "./node_modules/webpack/buildin/harmony-module.js": +/*!*******************************************!*\ + !*** (webpack)/buildin/harmony-module.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = function(originalModule) { + if (!originalModule.webpackPolyfill) { + var module = Object.create(originalModule); + // module.parent = undefined by default + if (!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + Object.defineProperty(module, "exports", { + enumerable: true + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), + +/***/ "./src/main.js": +/*!*********************!*\ + !*** ./src/main.js ***! + \*********************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _misc_event_emitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./misc/event-emitter */ "./src/misc/event-emitter.js"); +/* harmony import */ var _misc_window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./misc/window */ "./src/misc/window.js"); +/* harmony import */ var _misc_headers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./misc/headers */ "./src/misc/headers.js"); +/* harmony import */ var _patch_xmlhttprequest__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./patch/xmlhttprequest */ "./src/patch/xmlhttprequest.js"); +/* harmony import */ var _patch_fetch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./patch/fetch */ "./src/patch/fetch.js"); +/* harmony import */ var _patch_formdata__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./patch/formdata */ "./src/patch/formdata.js"); +/* harmony import */ var _misc_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./misc/hooks */ "./src/misc/hooks.js"); + + + + +//patchable types + + + + +//global state + +//the global hooks event emitter is also the global xhook object +//(not the best decision in hindsight) +const xhook = _misc_hooks__WEBPACK_IMPORTED_MODULE_6__["default"]; +xhook.EventEmitter = _misc_event_emitter__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]; +//modify hooks +xhook.before = function(handler, i) { + if (handler.length < 1 || handler.length > 2) { + throw "invalid hook"; + } + return xhook.on("before", handler, i); +}; +xhook.after = function(handler, i) { + if (handler.length < 2 || handler.length > 3) { + throw "invalid hook"; + } + return xhook.on("after", handler, i); +}; + +//globally enable/disable +xhook.enable = function() { + _patch_xmlhttprequest__WEBPACK_IMPORTED_MODULE_3__["default"].patch(); + _patch_fetch__WEBPACK_IMPORTED_MODULE_4__["default"].patch(); + _patch_formdata__WEBPACK_IMPORTED_MODULE_5__["default"].patch(); +}; +xhook.disable = function() { + _patch_xmlhttprequest__WEBPACK_IMPORTED_MODULE_3__["default"].unpatch(); + _patch_fetch__WEBPACK_IMPORTED_MODULE_4__["default"].unpatch(); + _patch_formdata__WEBPACK_IMPORTED_MODULE_5__["default"].unpatch(); +}; +//expose native objects +xhook.XMLHttpRequest = _patch_xmlhttprequest__WEBPACK_IMPORTED_MODULE_3__["default"].Native; +xhook.fetch = _patch_fetch__WEBPACK_IMPORTED_MODULE_4__["default"].Native; +xhook.FormData = _patch_formdata__WEBPACK_IMPORTED_MODULE_5__["default"].Native; + +//expose helpers +xhook.headers = _misc_headers__WEBPACK_IMPORTED_MODULE_2__["default"].convert; + +//enable by default +xhook.enable(); + +//publicise (amd+commonjs+window) +if (typeof define === "function" && __webpack_require__(/*! !webpack amd options */ "./node_modules/webpack/buildin/amd-options.js")) { + define("xhook", [], () => xhook); +} else if (module && typeof module === "object" && module.exports) { + module.exports = { xhook }; +} else if (_misc_window__WEBPACK_IMPORTED_MODULE_1__["window"]) { + _misc_window__WEBPACK_IMPORTED_MODULE_1__["window"].xhook = xhook; +} + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/harmony-module.js */ "./node_modules/webpack/buildin/harmony-module.js")(module))) + +/***/ }), + +/***/ "./src/misc/array.js": +/*!***************************!*\ + !*** ./src/misc/array.js ***! + \***************************/ +/*! exports provided: slice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +//if required, add 'indexOf' method to Array +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(item) { + for (let i = 0; i < this.length; i++) { + const x = this[i]; + if (x === item) { + return i; + } + } + return -1; + }; +} + +const slice = (o, n) => Array.prototype.slice.call(o, n); + + + + +/***/ }), + +/***/ "./src/misc/event-emitter.js": +/*!***********************************!*\ + !*** ./src/misc/event-emitter.js ***! + \***********************************/ +/*! exports provided: EventEmitter */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventEmitter", function() { return EventEmitter; }); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./src/misc/array.js"); +/* harmony import */ var _events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events */ "./src/misc/events.js"); + + + +//tiny event emitter +const EventEmitter = function(nodeStyle) { + //private + let events = {}; + const listeners = event => events[event] || []; + //public + const emitter = {}; + emitter.addEventListener = function(event, callback, i) { + events[event] = listeners(event); + if (events[event].indexOf(callback) >= 0) { + return; + } + i = i === undefined ? events[event].length : i; + events[event].splice(i, 0, callback); + }; + emitter.removeEventListener = function(event, callback) { + //remove all + if (event === undefined) { + events = {}; + return; + } + //remove all of type event + if (callback === undefined) { + events[event] = []; + } + //remove particular handler + const i = listeners(event).indexOf(callback); + if (i === -1) { + return; + } + listeners(event).splice(i, 1); + }; + emitter.dispatchEvent = function() { + const args = Object(_array__WEBPACK_IMPORTED_MODULE_0__["slice"])(arguments); + const event = args.shift(); + if (!nodeStyle) { + args[0] = Object(_events__WEBPACK_IMPORTED_MODULE_1__["mergeObjects"])(args[0], Object(_events__WEBPACK_IMPORTED_MODULE_1__["fakeEvent"])(event)); + } + const legacylistener = emitter[`on${event}`]; + if (legacylistener) { + legacylistener.apply(emitter, args); + } + const iterable = listeners(event).concat(listeners("*")); + for (let i = 0; i < iterable.length; i++) { + const listener = iterable[i]; + listener.apply(emitter, args); + } + }; + emitter._has = event => !!(events[event] || emitter[`on${event}`]); + //add extra aliases + if (nodeStyle) { + emitter.listeners = event => Object(_array__WEBPACK_IMPORTED_MODULE_0__["slice"])(listeners(event)); + emitter.on = emitter.addEventListener; + emitter.off = emitter.removeEventListener; + emitter.fire = emitter.dispatchEvent; + emitter.once = function(e, fn) { + var fire = function() { + emitter.off(e, fire); + return fn.apply(null, arguments); + }; + return emitter.on(e, fire); + }; + emitter.destroy = () => (events = {}); + } + + return emitter; +}; + + +/***/ }), + +/***/ "./src/misc/events.js": +/*!****************************!*\ + !*** ./src/misc/events.js ***! + \****************************/ +/*! exports provided: UPLOAD_EVENTS, COMMON_EVENTS, mergeObjects, proxyEvents, fakeEvent */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UPLOAD_EVENTS", function() { return UPLOAD_EVENTS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "COMMON_EVENTS", function() { return COMMON_EVENTS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeObjects", function() { return mergeObjects; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "proxyEvents", function() { return proxyEvents; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fakeEvent", function() { return fakeEvent; }); +/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./window */ "./src/misc/window.js"); + + +const UPLOAD_EVENTS = ["load", "loadend", "loadstart"]; +const COMMON_EVENTS = ["progress", "abort", "error", "timeout"]; + +const depricatedProp = p => + ["returnValue", "totalSize", "position"].includes(p); + +const mergeObjects = function(src, dst) { + for (let k in src) { + if (depricatedProp(k)) { + continue; + } + const v = src[k]; + try { + dst[k] = v; + } catch (error) {} + } + return dst; +}; + +//proxy events from one emitter to another +const proxyEvents = function(events, src, dst) { + const p = event => + function(e) { + const clone = {}; + //copies event, with dst emitter inplace of src + for (let k in e) { + if (depricatedProp(k)) { + continue; + } + const val = e[k]; + clone[k] = val === src ? dst : val; + } + //emits out the dst + return dst.dispatchEvent(event, clone); + }; + //dont proxy manual events + for (let event of Array.from(events)) { + if (dst._has(event)) { + src[`on${event}`] = p(event); + } + } +}; + +//create fake event +const fakeEvent = function(type) { + if (_window__WEBPACK_IMPORTED_MODULE_0__["document"] && _window__WEBPACK_IMPORTED_MODULE_0__["document"].createEventObject != null) { + const msieEventObject = _window__WEBPACK_IMPORTED_MODULE_0__["document"].createEventObject(); + msieEventObject.type = type; + return msieEventObject; + } + // on some platforms like android 4.1.2 and safari on windows, it appears + // that new Event is not allowed + try { + return new Event(type); + } catch (error) { + return { type }; + } +}; + + +/***/ }), + +/***/ "./src/misc/headers.js": +/*!*****************************!*\ + !*** ./src/misc/headers.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +//helper +const convert = function(h, dest) { + let name; + if (dest == null) { + dest = {}; + } + switch (typeof h) { + case "object": + var headers = []; + for (let k in h) { + const v = h[k]; + name = k.toLowerCase(); + headers.push(`${name}:\t${v}`); + } + return headers.join("\n") + "\n"; + case "string": + headers = h.split("\n"); + for (let header of Array.from(headers)) { + if (/([^:]+):\s*(.+)/.test(header)) { + name = RegExp.$1 != null ? RegExp.$1.toLowerCase() : undefined; + const value = RegExp.$2; + if (dest[name] == null) { + dest[name] = value; + } + } + } + return dest; + } + return []; +}; + +/* harmony default export */ __webpack_exports__["default"] = ({ convert }); + + +/***/ }), + +/***/ "./src/misc/hooks.js": +/*!***************************!*\ + !*** ./src/misc/hooks.js ***! + \***************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _event_emitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./event-emitter */ "./src/misc/event-emitter.js"); + + +//global set of hook functions, +//uses event emitter to store hooks +const hooks = Object(_event_emitter__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])(true); + +/* harmony default export */ __webpack_exports__["default"] = (hooks); + + +/***/ }), + +/***/ "./src/misc/window.js": +/*!****************************!*\ + !*** ./src/misc/window.js ***! + \****************************/ +/*! exports provided: msie, window, document */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "msie", function() { return msie; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "window", function() { return window; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "document", function() { return document; }); +let result = null; + +//find global object +if ( + typeof WorkerGlobalScope !== "undefined" && + self instanceof WorkerGlobalScope +) { + result = self; +} else if (typeof global !== "undefined") { + result = global; +} else if (window) { + result = window; +} + +//find IE version +const useragent = + typeof navigator !== "undefined" && navigator["useragent"] + ? navigator.userAgent + : ""; + +let msie = null; +if ( + /msie (\d+)/.test(useragent.toLowerCase()) || + /trident\/.*; rv:(\d+)/.test(useragent.toLowerCase()) +) { + msie = parseInt(RegExp.$1, 10); +} + +const window = result; +const document = result.document; + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./src/patch/fetch.js": +/*!****************************!*\ + !*** ./src/patch/fetch.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _misc_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../misc/window */ "./src/misc/window.js"); +/* harmony import */ var _misc_events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../misc/events */ "./src/misc/events.js"); +/* harmony import */ var _misc_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../misc/hooks */ "./src/misc/hooks.js"); +/* harmony import */ var _formdata__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formdata */ "./src/patch/formdata.js"); + + + + + +//browser's fetch +const Native = _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].fetch; + +//xhook's fetch +const Xhook = function(url, options) { + if (options == null) { + options = { headers: {} }; + } + + let request = null; + + if (url instanceof Request) { + request = url + } else { + options.url = url; + } + + const beforeHooks = _misc_hooks__WEBPACK_IMPORTED_MODULE_2__["default"].listeners("before"); + const afterHooks = _misc_hooks__WEBPACK_IMPORTED_MODULE_2__["default"].listeners("after"); + + return new Promise(function(resolve, reject) { + let fullfiled = resolve + const getRequest = function() { + if (options.body instanceof _formdata__WEBPACK_IMPORTED_MODULE_3__["default"].Xhook) { + options.body = options.body.fd; + } + + if (options.headers) { + options.headers = new Headers(options.headers); + } + + if (!request) { + request = new Request(options.url, options); + } + + return Object(_misc_events__WEBPACK_IMPORTED_MODULE_1__["mergeObjects"])(options, request); + }; + + var processAfter = function(response) { + if (!afterHooks.length) { + return fullfiled(response); + } + + const hook = afterHooks.shift(); + + if (hook.length === 2) { + hook(getRequest(), response); + return processAfter(response); + } else if (hook.length === 3) { + return hook(getRequest(), response, processAfter); + } else { + return processAfter(response); + } + }; + + const done = function(userResponse) { + if (userResponse !== undefined) { + const response = new Response( + userResponse.body || userResponse.text, + userResponse + ); + resolve(response); + processAfter(response); + return; + } + + //continue processing until no hooks left + processBefore(); + }; + + var processBefore = function() { + if (!beforeHooks.length) { + send(); + return; + } + + const hook = beforeHooks.shift(); + + if (hook.length === 1) { + return done(hook(options)); + } else if (hook.length === 2) { + return hook(getRequest(), done); + } + }; + + var send = () => + Native(getRequest()) + .then(response => processAfter(response)) + .catch(function(err) { + fullfiled = reject + processAfter(err); + return reject(err); + }); + + processBefore(); + }); +}; + +//patch interface +/* harmony default export */ __webpack_exports__["default"] = ({ + patch() { + if (Native) { + _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].fetch = Xhook; + } + }, + unpatch() { + if (Native) { + _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].fetch = Native; + } + }, + Native, + Xhook +}); + + +/***/ }), + +/***/ "./src/patch/formdata.js": +/*!*******************************!*\ + !*** ./src/patch/formdata.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _misc_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../misc/window */ "./src/misc/window.js"); +/* harmony import */ var _misc_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../misc/array */ "./src/misc/array.js"); + + + +//note: +// we can patch FormData safely because all XHR +// is hooked, so we can ensure the real FormData +// object is used on send + +//browser's FormData +var Native = _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].FormData; + +//xhooks's FormData +const Xhook = function(form) { + this.fd = form ? new Native(form) : new Native(); + this.form = form; + const entries = []; + Object.defineProperty(this, "entries", { + get() { + //extract form entries + const fentries = !form + ? [] + : Object(_misc_array__WEBPACK_IMPORTED_MODULE_1__["slice"])(form.querySelectorAll("input,select")) + .filter(e => !["checkbox", "radio"].includes(e.type) || e.checked) + .map(e => [e.name, e.type === "file" ? e.files : e.value]); + //combine with js entries + return fentries.concat(entries); + } + }); + this.append = function() { + const args = Object(_misc_array__WEBPACK_IMPORTED_MODULE_1__["slice"])(arguments); + entries.push(args); + return this.fd.append.apply(this.fd, args); + }.bind(this); +}; + +//patch interface +/* harmony default export */ __webpack_exports__["default"] = ({ + patch() { + if (Native) { + _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].FormData = Xhook; + } + }, + unpatch() { + if (Native) { + _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].FormData = Native; + } + }, + Native, + Xhook +}); + + +/***/ }), + +/***/ "./src/patch/xmlhttprequest.js": +/*!*************************************!*\ + !*** ./src/patch/xmlhttprequest.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _misc_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../misc/window */ "./src/misc/window.js"); +/* harmony import */ var _misc_events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../misc/events */ "./src/misc/events.js"); +/* harmony import */ var _misc_event_emitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../misc/event-emitter */ "./src/misc/event-emitter.js"); +/* harmony import */ var _misc_headers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../misc/headers */ "./src/misc/headers.js"); +/* harmony import */ var _formdata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formdata */ "./src/patch/formdata.js"); + + + + + + +const nullify = res => (res === undefined ? null : res); + +//browser's XMLHttpRequest +const Native = _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].XMLHttpRequest; + +//xhook's XMLHttpRequest +const Xhook = function() { + const ABORTED = -1; + const xhr = new Native(); + + //========================== + // Extra state + const request = {}; + let status = null; + let hasError = undefined; + let transiting = undefined; + let response = undefined; + var currentState = 0; + + //========================== + // Private API + + //read results from real xhr into response + const readHead = function() { + // Accessing attributes on an aborted xhr object will + // throw an 'c00c023f error' in IE9 and lower, don't touch it. + response.status = status || xhr.status; + if (status !== ABORTED || !(_misc_window__WEBPACK_IMPORTED_MODULE_0__["msie"] < 10)) { + response.statusText = xhr.statusText; + } + if (status !== ABORTED) { + const object = _misc_headers__WEBPACK_IMPORTED_MODULE_3__["default"].convert(xhr.getAllResponseHeaders()); + for (let key in object) { + const val = object[key]; + if (!response.headers[key]) { + const name = key.toLowerCase(); + response.headers[name] = val; + } + } + return; + } + }; + + const readBody = function() { + //https://xhr.spec.whatwg.org/ + if (!xhr.responseType || xhr.responseType === "text") { + response.text = xhr.responseText; + response.data = xhr.responseText; + try { + response.xml = xhr.responseXML; + } catch (error) {} + // unable to set responseXML due to response type, we attempt to assign responseXML + // when the type is text even though it's against the spec due to several libraries + // and browser vendors who allow this behavior. causing these requests to fail when + // xhook is installed on a page. + } else if (xhr.responseType === "document") { + response.xml = xhr.responseXML; + response.data = xhr.responseXML; + } else { + response.data = xhr.response; + } + //new in some browsers + if ("responseURL" in xhr) { + response.finalUrl = xhr.responseURL; + } + }; + + //write response into facade xhr + const writeHead = function() { + facade.status = response.status; + facade.statusText = response.statusText; + }; + + const writeBody = function() { + if ("text" in response) { + facade.responseText = response.text; + } + if ("xml" in response) { + facade.responseXML = response.xml; + } + if ("data" in response) { + facade.response = response.data; + } + if ("finalUrl" in response) { + facade.responseURL = response.finalUrl; + } + }; + + const emitFinal = function() { + if (!hasError) { + facade.dispatchEvent("load", {}); + } + facade.dispatchEvent("loadend", {}); + if (hasError) { + facade.readyState = 0; + } + }; + + //ensure ready state 0 through 4 is handled + const emitReadyState = function(n) { + while (n > currentState && currentState < 4) { + facade.readyState = ++currentState; + // make fake events for libraries that actually check the type on + // the event object + if (currentState === 1) { + facade.dispatchEvent("loadstart", {}); + } + if (currentState === 2) { + writeHead(); + } + if (currentState === 4) { + writeHead(); + writeBody(); + } + facade.dispatchEvent("readystatechange", {}); + //delay final events incase of error + if (currentState === 4) { + if (request.async === false) { + emitFinal(); + } else { + setTimeout(emitFinal, 0); + } + } + } + }; + + //control facade ready state + const setReadyState = function(n) { + //emit events until readyState reaches 4 + if (n !== 4) { + emitReadyState(n); + return; + } + //before emitting 4, run all 'after' hooks in sequence + const hooks = xhook.listeners("after"); + var process = function() { + if (hooks.length > 0) { + //execute each 'before' hook one at a time + const hook = hooks.shift(); + if (hook.length === 2) { + hook(request, response); + process(); + } else if (hook.length === 3 && request.async) { + hook(request, response, process); + } else { + process(); + } + } else { + //response ready for reading + emitReadyState(4); + } + return; + }; + process(); + }; + + //========================== + // Facade XHR + var facade = Object(_misc_event_emitter__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"])(); + request.xhr = facade; + + // Handle the underlying ready state + xhr.onreadystatechange = function(event) { + //pull status and headers + try { + if (xhr.readyState === 2) { + readHead(); + } + } catch (error) {} + //pull response data + if (xhr.readyState === 4) { + transiting = false; + readHead(); + readBody(); + } + + setReadyState(xhr.readyState); + }; + + //mark this xhr as errored + const hasErrorHandler = function() { + hasError = true; + }; + facade.addEventListener("error", hasErrorHandler); + facade.addEventListener("timeout", hasErrorHandler); + facade.addEventListener("abort", hasErrorHandler); + // progress means we're current downloading... + facade.addEventListener("progress", function(event) { + if (currentState < 3) { + setReadyState(3); + } else if (xhr.readyState <= 3) { + //until ready (4), each progress event is followed by readystatechange... + facade.dispatchEvent("readystatechange", {}); //TODO fake an XHR event + } + }); + + // initialise 'withCredentials' on facade xhr in browsers with it + // or if explicitly told to do so + if ("withCredentials" in xhr || xhook.addWithCredentials) { + facade.withCredentials = false; + } + facade.status = 0; + + // initialise all possible event handlers + for (let event of Array.from(_misc_events__WEBPACK_IMPORTED_MODULE_1__["COMMON_EVENTS"].concat(_misc_events__WEBPACK_IMPORTED_MODULE_1__["UPLOAD_EVENTS"]))) { + facade[`on${event}`] = null; + } + + facade.open = function(method, url, async, user, pass) { + // Initailize empty XHR facade + currentState = 0; + hasError = false; + transiting = false; + //reset request + request.headers = {}; + request.headerNames = {}; + request.status = 0; + request.method = method; + request.url = url; + request.async = async !== false; + request.user = user; + request.pass = pass; + //reset response + response = {}; + response.headers = {}; + // openned facade xhr (not real xhr) + setReadyState(1); + }; + + facade.send = function(body) { + //read xhr settings before hooking + let k, modk; + for (k of ["type", "timeout", "withCredentials"]) { + modk = k === "type" ? "responseType" : k; + if (modk in facade) { + request[k] = facade[modk]; + } + } + + request.body = body; + const send = function() { + //proxy all events from real xhr to facade + Object(_misc_events__WEBPACK_IMPORTED_MODULE_1__["proxyEvents"])(_misc_events__WEBPACK_IMPORTED_MODULE_1__["COMMON_EVENTS"], xhr, facade); + //proxy all upload events from the real to the upload facade + if (facade.upload) { + Object(_misc_events__WEBPACK_IMPORTED_MODULE_1__["proxyEvents"])( + _misc_events__WEBPACK_IMPORTED_MODULE_1__["COMMON_EVENTS"].concat(_misc_events__WEBPACK_IMPORTED_MODULE_1__["UPLOAD_EVENTS"]), + xhr.upload, + facade.upload + ); + } + + //prepare request all at once + transiting = true; + //perform open + xhr.open( + request.method, + request.url, + request.async, + request.user, + request.pass + ); + + //write xhr settings + for (k of ["type", "timeout", "withCredentials"]) { + modk = k === "type" ? "responseType" : k; + if (k in request) { + xhr[modk] = request[k]; + } + } + + //insert headers + for (let header in request.headers) { + const value = request.headers[header]; + if (header) { + xhr.setRequestHeader(header, value); + } + } + //extract real formdata + if (request.body instanceof _formdata__WEBPACK_IMPORTED_MODULE_4__["default"].Xhook) { + request.body = request.body.fd; + } + //real send! + xhr.send(request.body); + }; + + const hooks = xhook.listeners("before"); + //process hooks sequentially + var process = function() { + if (!hooks.length) { + return send(); + } + //go to next hook OR optionally provide response + const done = function(userResponse) { + //break chain - provide dummy response (readyState 4) + if ( + typeof userResponse === "object" && + (typeof userResponse.status === "number" || + typeof response.status === "number") + ) { + Object(_misc_events__WEBPACK_IMPORTED_MODULE_1__["mergeObjects"])(userResponse, response); + if (!("data" in userResponse)) { + userResponse.data = userResponse.response || userResponse.text; + } + setReadyState(4); + return; + } + //continue processing until no hooks left + process(); + }; + //specifically provide headers (readyState 2) + done.head = function(userResponse) { + Object(_misc_events__WEBPACK_IMPORTED_MODULE_1__["mergeObjects"])(userResponse, response); + setReadyState(2); + }; + //specifically provide partial text (responseText readyState 3) + done.progress = function(userResponse) { + Object(_misc_events__WEBPACK_IMPORTED_MODULE_1__["mergeObjects"])(userResponse, response); + setReadyState(3); + }; + + const hook = hooks.shift(); + //async or sync? + if (hook.length === 1) { + done(hook(request)); + } else if (hook.length === 2 && request.async) { + //async handlers must use an async xhr + hook(request, done); + } else { + //skip async hook on sync requests + done(); + } + return; + }; + //kick off + process(); + }; + + facade.abort = function() { + status = ABORTED; + if (transiting) { + xhr.abort(); //this will emit an 'abort' for us + } else { + facade.dispatchEvent("abort", {}); + } + }; + + facade.setRequestHeader = function(header, value) { + //the first header set is used for all future case-alternatives of 'name' + const lName = header != null ? header.toLowerCase() : undefined; + const name = (request.headerNames[lName] = + request.headerNames[lName] || header); + //append header to any previous values + if (request.headers[name]) { + value = request.headers[name] + ", " + value; + } + request.headers[name] = value; + }; + facade.getResponseHeader = header => + nullify(response.headers[header ? header.toLowerCase() : undefined]); + + facade.getAllResponseHeaders = () => + nullify(_misc_headers__WEBPACK_IMPORTED_MODULE_3__["default"].convert(response.headers)); + + //proxy call only when supported + if (xhr.overrideMimeType) { + facade.overrideMimeType = function() { + xhr.overrideMimeType.apply(xhr, arguments); + }; + } + + //create emitter when supported + if (xhr.upload) { + let up = Object(_misc_event_emitter__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"])(); + facade.upload = up; + request.upload = up; + } + + facade.UNSENT = 0; + facade.OPENED = 1; + facade.HEADERS_RECEIVED = 2; + facade.LOADING = 3; + facade.DONE = 4; + + // fill in default values for an empty XHR object according to the spec + facade.response = ""; + facade.responseText = ""; + facade.responseXML = null; + facade.readyState = 0; + facade.statusText = ""; + + return facade; +}; + +Xhook.UNSENT = 0; +Xhook.OPENED = 1; +Xhook.HEADERS_RECEIVED = 2; +Xhook.LOADING = 3; +Xhook.DONE = 4; + +//patch interface +/* harmony default export */ __webpack_exports__["default"] = ({ + patch() { + if (Native) { + _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].XMLHttpRequest = Xhook; + } + }, + unpatch() { + if (Native) { + _misc_window__WEBPACK_IMPORTED_MODULE_0__["window"].XMLHttpRequest = Native; + } + }, + Native, + Xhook +}); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=xhook.js.map \ No newline at end of file diff --git a/dist/xhook.js.map b/dist/xhook.js.map new file mode 100644 index 0000000..d99601e --- /dev/null +++ b/dist/xhook.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/amd-options.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./src/main.js","webpack:///./src/misc/array.js","webpack:///./src/misc/event-emitter.js","webpack:///./src/misc/events.js","webpack:///./src/misc/headers.js","webpack:///./src/misc/hooks.js","webpack:///./src/misc/window.js","webpack:///./src/patch/fetch.js","webpack:///./src/patch/formdata.js","webpack:///./src/patch/xmlhttprequest.js"],"names":[],"mappings":";;;;;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA;AACA;;;;;;;;;;;;;ACDA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoD;AACb;AACF;;AAErC;AACoD;AAClB;AACM;;AAExC;AACiC;AACjC;AACA;AACA,cAAc,mDAAK;AACnB,qBAAqB,gEAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE,6DAAc;AAChB,EAAE,oDAAK;AACP,EAAE,uDAAQ;AACV;AACA;AACA,EAAE,6DAAc;AAChB,EAAE,oDAAK;AACP,EAAE,uDAAQ;AACV;AACA;AACA,uBAAuB,6DAAc;AACrC,cAAc,oDAAK;AACnB,iBAAiB,uDAAQ;;AAEzB;AACA,gBAAgB,qDAAO;;AAEvB;AACA;;AAEA;AACA,oCAAoC,gGAAU;AAC9C;AACA,CAAC;AACD,oBAAoB;AACpB,CAAC,UAAU,mDAAM;AACjB,EAAE,mDAAM;AACR;;;;;;;;;;;;;;AC1DA;AAAA;AAAA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEiB;;;;;;;;;;;;;ACfjB;AAAA;AAAA;AAAA;AAAgC;AACmB;;AAEnD;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oDAAK;AACtB;AACA;AACA,gBAAgB,4DAAY,UAAU,yDAAS;AAC/C;AACA,wCAAwC,MAAM;AAC9C;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA,2DAA2D,MAAM;AACjE;AACA;AACA,iCAAiC,oDAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;;AAEA;AACA;;;;;;;;;;;;;ACrEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoC;;AAE7B;AACA;;AAEP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACO;AACP,MAAM,gDAAQ,IAAI,gDAAQ;AAC1B,4BAA4B,gDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,YAAY;AACZ;AACA;;;;;;;;;;;;;AC3DA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,KAAK,KAAK,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,gEAAC,UAAU,EAAC;;;;;;;;;;;;;AC/B3B;AAAA;AAA+C;;AAE/C;AACA;AACA,cAAc,mEAAY;;AAEX,oEAAK,EAAC;;;;;;;;;;;;;ACNrB;AAAA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEO;AACA;;;;;;;;;;;;;;AC7BP;AAAA;AAAA;AAAA;AAAA;AAAwC;AACM;AACZ;AACA;;AAElC;AACA,eAAe,mDAAM;;AAErB;AACA;AACA;AACA,eAAe,YAAY;AAC3B;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA,sBAAsB,mDAAK;AAC3B,qBAAqB,mDAAK;;AAE1B;AACA;AACA;AACA,kCAAkC,iDAAQ;AAC1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,iEAAY;AACzB;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,GAAG;AACH;;AAEA;AACe;AACf;AACA;AACA,MAAM,mDAAM;AACZ;AACA,GAAG;AACH;AACA;AACA,MAAM,mDAAM;AACZ;AACA,GAAG;AACH;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;ACrHF;AAAA;AAAA;AAAwC;AACF;;AAEtC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mDAAM;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yDAAK;AACf;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iBAAiB,yDAAK;AACtB;AACA;AACA,GAAG;AACH;;AAEA;AACe;AACf;AACA;AACA,MAAM,mDAAM;AACZ;AACA,GAAG;AACH;AACA;AACA,MAAM,mDAAM;AACZ;AACA,GAAG;AACH;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;ACjDF;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AAMtB;AAC6B;AACf;AACJ;;AAElC;;AAEA;AACA,eAAe,mDAAM;;AAErB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iDAAI;AACpC;AACA;AACA;AACA,qBAAqB,qDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC;AACA,sCAAsC;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,wEAAY;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,iDAAiD,EAAE;AACnD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,0DAAa,QAAQ,0DAAa;AACjE,gBAAgB,MAAM;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM,gEAAW,CAAC,0DAAa;AAC/B;AACA;AACA,QAAQ,gEAAW;AACnB,UAAU,0DAAa,QAAQ,0DAAa;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iDAAQ;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,iEAAY;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,iEAAY;AACpB;AACA;AACA;AACA;AACA,QAAQ,iEAAY;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB,KAAK;AACL,sCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,qDAAO;;AAEnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,wEAAY;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACe;AACf;AACA;AACA,MAAM,mDAAM;AACZ;AACA,GAAG;AACH;AACA;AACA,MAAM,mDAAM;AACZ;AACA,GAAG;AACH;AACA;AACA,CAAC,EAAC","file":"xhook.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/main.js\");\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","import { EventEmitter } from \"./misc/event-emitter\";\nimport { window } from \"./misc/window\";\nimport headers from \"./misc/headers\";\n\n//patchable types\nimport XMLHttpRequest from \"./patch/xmlhttprequest\";\nimport fetch from \"./patch/fetch\";\nimport FormData from \"./patch/formdata\";\n\n//global state\nimport hooks from \"./misc/hooks\";\n//the global hooks event emitter is also the global xhook object\n//(not the best decision in hindsight)\nconst xhook = hooks;\nxhook.EventEmitter = EventEmitter;\n//modify hooks\nxhook.before = function(handler, i) {\n if (handler.length < 1 || handler.length > 2) {\n throw \"invalid hook\";\n }\n return xhook.on(\"before\", handler, i);\n};\nxhook.after = function(handler, i) {\n if (handler.length < 2 || handler.length > 3) {\n throw \"invalid hook\";\n }\n return xhook.on(\"after\", handler, i);\n};\n\n//globally enable/disable\nxhook.enable = function() {\n XMLHttpRequest.patch();\n fetch.patch();\n FormData.patch();\n};\nxhook.disable = function() {\n XMLHttpRequest.unpatch();\n fetch.unpatch();\n FormData.unpatch();\n};\n//expose native objects\nxhook.XMLHttpRequest = XMLHttpRequest.Native;\nxhook.fetch = fetch.Native;\nxhook.FormData = FormData.Native;\n\n//expose helpers\nxhook.headers = headers.convert;\n\n//enable by default\nxhook.enable();\n\n//publicise (amd+commonjs+window)\nif (typeof define === \"function\" && define.amd) {\n define(\"xhook\", [], () => xhook);\n} else if (module && typeof module === \"object\" && module.exports) {\n module.exports = { xhook };\n} else if (window) {\n window.xhook = xhook;\n}\n","//if required, add 'indexOf' method to Array\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function(item) {\n for (let i = 0; i < this.length; i++) {\n const x = this[i];\n if (x === item) {\n return i;\n }\n }\n return -1;\n };\n}\n\nconst slice = (o, n) => Array.prototype.slice.call(o, n);\n\nexport { slice };\n","import { slice } from \"./array\";\nimport { mergeObjects, fakeEvent } from \"./events\";\n\n//tiny event emitter\nexport const EventEmitter = function(nodeStyle) {\n //private\n let events = {};\n const listeners = event => events[event] || [];\n //public\n const emitter = {};\n emitter.addEventListener = function(event, callback, i) {\n events[event] = listeners(event);\n if (events[event].indexOf(callback) >= 0) {\n return;\n }\n i = i === undefined ? events[event].length : i;\n events[event].splice(i, 0, callback);\n };\n emitter.removeEventListener = function(event, callback) {\n //remove all\n if (event === undefined) {\n events = {};\n return;\n }\n //remove all of type event\n if (callback === undefined) {\n events[event] = [];\n }\n //remove particular handler\n const i = listeners(event).indexOf(callback);\n if (i === -1) {\n return;\n }\n listeners(event).splice(i, 1);\n };\n emitter.dispatchEvent = function() {\n const args = slice(arguments);\n const event = args.shift();\n if (!nodeStyle) {\n args[0] = mergeObjects(args[0], fakeEvent(event));\n }\n const legacylistener = emitter[`on${event}`];\n if (legacylistener) {\n legacylistener.apply(emitter, args);\n }\n const iterable = listeners(event).concat(listeners(\"*\"));\n for (let i = 0; i < iterable.length; i++) {\n const listener = iterable[i];\n listener.apply(emitter, args);\n }\n };\n emitter._has = event => !!(events[event] || emitter[`on${event}`]);\n //add extra aliases\n if (nodeStyle) {\n emitter.listeners = event => slice(listeners(event));\n emitter.on = emitter.addEventListener;\n emitter.off = emitter.removeEventListener;\n emitter.fire = emitter.dispatchEvent;\n emitter.once = function(e, fn) {\n var fire = function() {\n emitter.off(e, fire);\n return fn.apply(null, arguments);\n };\n return emitter.on(e, fire);\n };\n emitter.destroy = () => (events = {});\n }\n\n return emitter;\n};\n","import { document } from \"./window\";\n\nexport const UPLOAD_EVENTS = [\"load\", \"loadend\", \"loadstart\"];\nexport const COMMON_EVENTS = [\"progress\", \"abort\", \"error\", \"timeout\"];\n\nconst depricatedProp = p =>\n [\"returnValue\", \"totalSize\", \"position\"].includes(p);\n\nexport const mergeObjects = function(src, dst) {\n for (let k in src) {\n if (depricatedProp(k)) {\n continue;\n }\n const v = src[k];\n try {\n dst[k] = v;\n } catch (error) {}\n }\n return dst;\n};\n\n//proxy events from one emitter to another\nexport const proxyEvents = function(events, src, dst) {\n const p = event =>\n function(e) {\n const clone = {};\n //copies event, with dst emitter inplace of src\n for (let k in e) {\n if (depricatedProp(k)) {\n continue;\n }\n const val = e[k];\n clone[k] = val === src ? dst : val;\n }\n //emits out the dst\n return dst.dispatchEvent(event, clone);\n };\n //dont proxy manual events\n for (let event of Array.from(events)) {\n if (dst._has(event)) {\n src[`on${event}`] = p(event);\n }\n }\n};\n\n//create fake event\nexport const fakeEvent = function(type) {\n if (document && document.createEventObject != null) {\n const msieEventObject = document.createEventObject();\n msieEventObject.type = type;\n return msieEventObject;\n }\n // on some platforms like android 4.1.2 and safari on windows, it appears\n // that new Event is not allowed\n try {\n return new Event(type);\n } catch (error) {\n return { type };\n }\n};\n","//helper\nconst convert = function(h, dest) {\n let name;\n if (dest == null) {\n dest = {};\n }\n switch (typeof h) {\n case \"object\":\n var headers = [];\n for (let k in h) {\n const v = h[k];\n name = k.toLowerCase();\n headers.push(`${name}:\\t${v}`);\n }\n return headers.join(\"\\n\") + \"\\n\";\n case \"string\":\n headers = h.split(\"\\n\");\n for (let header of Array.from(headers)) {\n if (/([^:]+):\\s*(.+)/.test(header)) {\n name = RegExp.$1 != null ? RegExp.$1.toLowerCase() : undefined;\n const value = RegExp.$2;\n if (dest[name] == null) {\n dest[name] = value;\n }\n }\n }\n return dest;\n }\n return [];\n};\n\nexport default { convert };\n","import { EventEmitter } from \"./event-emitter\";\n\n//global set of hook functions,\n//uses event emitter to store hooks\nconst hooks = EventEmitter(true);\n\nexport default hooks;\n","let result = null;\n\n//find global object\nif (\n typeof WorkerGlobalScope !== \"undefined\" &&\n self instanceof WorkerGlobalScope\n) {\n result = self;\n} else if (typeof global !== \"undefined\") {\n result = global;\n} else if (window) {\n result = window;\n}\n\n//find IE version\nconst useragent =\n typeof navigator !== \"undefined\" && navigator[\"useragent\"]\n ? navigator.userAgent\n : \"\";\n\nexport let msie = null;\nif (\n /msie (\\d+)/.test(useragent.toLowerCase()) ||\n /trident\\/.*; rv:(\\d+)/.test(useragent.toLowerCase())\n) {\n msie = parseInt(RegExp.$1, 10);\n}\n\nexport const window = result;\nexport const document = result.document;\n","import { window } from \"../misc/window\";\nimport { mergeObjects } from \"../misc/events\";\nimport hooks from \"../misc/hooks\";\nimport formData from \"./formdata\";\n\n//browser's fetch\nconst Native = window.fetch;\n\n//xhook's fetch\nconst Xhook = function(url, options) {\n if (options == null) {\n options = { headers: {} };\n }\n\n let request = null;\n\n if (url instanceof Request) {\n request = url\n } else {\n options.url = url;\n }\n\n const beforeHooks = hooks.listeners(\"before\");\n const afterHooks = hooks.listeners(\"after\");\n\n return new Promise(function(resolve, reject) {\n let fullfiled = resolve\n const getRequest = function() {\n if (options.body instanceof formData.Xhook) {\n options.body = options.body.fd;\n }\n\n if (options.headers) {\n options.headers = new Headers(options.headers);\n }\n\n if (!request) {\n request = new Request(options.url, options);\n }\n\n return mergeObjects(options, request);\n };\n\n var processAfter = function(response) {\n if (!afterHooks.length) {\n return fullfiled(response);\n }\n\n const hook = afterHooks.shift();\n\n if (hook.length === 2) {\n hook(getRequest(), response);\n return processAfter(response);\n } else if (hook.length === 3) {\n return hook(getRequest(), response, processAfter);\n } else {\n return processAfter(response);\n }\n };\n\n const done = function(userResponse) {\n if (userResponse !== undefined) {\n const response = new Response(\n userResponse.body || userResponse.text,\n userResponse\n );\n resolve(response);\n processAfter(response);\n return;\n }\n\n //continue processing until no hooks left\n processBefore();\n };\n\n var processBefore = function() {\n if (!beforeHooks.length) {\n send();\n return;\n }\n\n const hook = beforeHooks.shift();\n\n if (hook.length === 1) {\n return done(hook(options));\n } else if (hook.length === 2) {\n return hook(getRequest(), done);\n }\n };\n\n var send = () =>\n Native(getRequest())\n .then(response => processAfter(response))\n .catch(function(err) {\n fullfiled = reject\n processAfter(err);\n return reject(err);\n });\n\n processBefore();\n });\n};\n\n//patch interface\nexport default {\n patch() {\n if (Native) {\n window.fetch = Xhook;\n }\n },\n unpatch() {\n if (Native) {\n window.fetch = Native;\n }\n },\n Native,\n Xhook\n};\n","import { window } from \"../misc/window\";\nimport { slice } from \"../misc/array\";\n\n//note:\n// we can patch FormData safely because all XHR\n// is hooked, so we can ensure the real FormData\n// object is used on send\n\n//browser's FormData\nvar Native = window.FormData;\n\n//xhooks's FormData\nconst Xhook = function(form) {\n this.fd = form ? new Native(form) : new Native();\n this.form = form;\n const entries = [];\n Object.defineProperty(this, \"entries\", {\n get() {\n //extract form entries\n const fentries = !form\n ? []\n : slice(form.querySelectorAll(\"input,select\"))\n .filter(e => ![\"checkbox\", \"radio\"].includes(e.type) || e.checked)\n .map(e => [e.name, e.type === \"file\" ? e.files : e.value]);\n //combine with js entries\n return fentries.concat(entries);\n }\n });\n this.append = function() {\n const args = slice(arguments);\n entries.push(args);\n return this.fd.append.apply(this.fd, args);\n }.bind(this);\n};\n\n//patch interface\nexport default {\n patch() {\n if (Native) {\n window.FormData = Xhook;\n }\n },\n unpatch() {\n if (Native) {\n window.FormData = Native;\n }\n },\n Native,\n Xhook\n};\n","import { window, msie } from \"../misc/window\";\nimport {\n proxyEvents,\n mergeObjects,\n COMMON_EVENTS,\n UPLOAD_EVENTS\n} from \"../misc/events\";\nimport { EventEmitter } from \"../misc/event-emitter\";\nimport headers from \"../misc/headers\";\nimport formData from \"./formdata\";\n\nconst nullify = res => (res === undefined ? null : res);\n\n//browser's XMLHttpRequest\nconst Native = window.XMLHttpRequest;\n\n//xhook's XMLHttpRequest\nconst Xhook = function() {\n const ABORTED = -1;\n const xhr = new Native();\n\n //==========================\n // Extra state\n const request = {};\n let status = null;\n let hasError = undefined;\n let transiting = undefined;\n let response = undefined;\n var currentState = 0;\n\n //==========================\n // Private API\n\n //read results from real xhr into response\n const readHead = function() {\n // Accessing attributes on an aborted xhr object will\n // throw an 'c00c023f error' in IE9 and lower, don't touch it.\n response.status = status || xhr.status;\n if (status !== ABORTED || !(msie < 10)) {\n response.statusText = xhr.statusText;\n }\n if (status !== ABORTED) {\n const object = headers.convert(xhr.getAllResponseHeaders());\n for (let key in object) {\n const val = object[key];\n if (!response.headers[key]) {\n const name = key.toLowerCase();\n response.headers[name] = val;\n }\n }\n return;\n }\n };\n\n const readBody = function() {\n //https://xhr.spec.whatwg.org/\n if (!xhr.responseType || xhr.responseType === \"text\") {\n response.text = xhr.responseText;\n response.data = xhr.responseText;\n try {\n response.xml = xhr.responseXML;\n } catch (error) {}\n // unable to set responseXML due to response type, we attempt to assign responseXML\n // when the type is text even though it's against the spec due to several libraries\n // and browser vendors who allow this behavior. causing these requests to fail when\n // xhook is installed on a page.\n } else if (xhr.responseType === \"document\") {\n response.xml = xhr.responseXML;\n response.data = xhr.responseXML;\n } else {\n response.data = xhr.response;\n }\n //new in some browsers\n if (\"responseURL\" in xhr) {\n response.finalUrl = xhr.responseURL;\n }\n };\n\n //write response into facade xhr\n const writeHead = function() {\n facade.status = response.status;\n facade.statusText = response.statusText;\n };\n\n const writeBody = function() {\n if (\"text\" in response) {\n facade.responseText = response.text;\n }\n if (\"xml\" in response) {\n facade.responseXML = response.xml;\n }\n if (\"data\" in response) {\n facade.response = response.data;\n }\n if (\"finalUrl\" in response) {\n facade.responseURL = response.finalUrl;\n }\n };\n\n const emitFinal = function() {\n if (!hasError) {\n facade.dispatchEvent(\"load\", {});\n }\n facade.dispatchEvent(\"loadend\", {});\n if (hasError) {\n facade.readyState = 0;\n }\n };\n\n //ensure ready state 0 through 4 is handled\n const emitReadyState = function(n) {\n while (n > currentState && currentState < 4) {\n facade.readyState = ++currentState;\n // make fake events for libraries that actually check the type on\n // the event object\n if (currentState === 1) {\n facade.dispatchEvent(\"loadstart\", {});\n }\n if (currentState === 2) {\n writeHead();\n }\n if (currentState === 4) {\n writeHead();\n writeBody();\n }\n facade.dispatchEvent(\"readystatechange\", {});\n //delay final events incase of error\n if (currentState === 4) {\n if (request.async === false) {\n emitFinal();\n } else {\n setTimeout(emitFinal, 0);\n }\n }\n }\n };\n\n //control facade ready state\n const setReadyState = function(n) {\n //emit events until readyState reaches 4\n if (n !== 4) {\n emitReadyState(n);\n return;\n }\n //before emitting 4, run all 'after' hooks in sequence\n const hooks = xhook.listeners(\"after\");\n var process = function() {\n if (hooks.length > 0) {\n //execute each 'before' hook one at a time\n const hook = hooks.shift();\n if (hook.length === 2) {\n hook(request, response);\n process();\n } else if (hook.length === 3 && request.async) {\n hook(request, response, process);\n } else {\n process();\n }\n } else {\n //response ready for reading\n emitReadyState(4);\n }\n return;\n };\n process();\n };\n\n //==========================\n // Facade XHR\n var facade = EventEmitter();\n request.xhr = facade;\n\n // Handle the underlying ready state\n xhr.onreadystatechange = function(event) {\n //pull status and headers\n try {\n if (xhr.readyState === 2) {\n readHead();\n }\n } catch (error) {}\n //pull response data\n if (xhr.readyState === 4) {\n transiting = false;\n readHead();\n readBody();\n }\n\n setReadyState(xhr.readyState);\n };\n\n //mark this xhr as errored\n const hasErrorHandler = function() {\n hasError = true;\n };\n facade.addEventListener(\"error\", hasErrorHandler);\n facade.addEventListener(\"timeout\", hasErrorHandler);\n facade.addEventListener(\"abort\", hasErrorHandler);\n // progress means we're current downloading...\n facade.addEventListener(\"progress\", function(event) {\n if (currentState < 3) {\n setReadyState(3);\n } else if (xhr.readyState <= 3) {\n //until ready (4), each progress event is followed by readystatechange...\n facade.dispatchEvent(\"readystatechange\", {}); //TODO fake an XHR event\n }\n });\n\n // initialise 'withCredentials' on facade xhr in browsers with it\n // or if explicitly told to do so\n if (\"withCredentials\" in xhr || xhook.addWithCredentials) {\n facade.withCredentials = false;\n }\n facade.status = 0;\n\n // initialise all possible event handlers\n for (let event of Array.from(COMMON_EVENTS.concat(UPLOAD_EVENTS))) {\n facade[`on${event}`] = null;\n }\n\n facade.open = function(method, url, async, user, pass) {\n // Initailize empty XHR facade\n currentState = 0;\n hasError = false;\n transiting = false;\n //reset request\n request.headers = {};\n request.headerNames = {};\n request.status = 0;\n request.method = method;\n request.url = url;\n request.async = async !== false;\n request.user = user;\n request.pass = pass;\n //reset response\n response = {};\n response.headers = {};\n // openned facade xhr (not real xhr)\n setReadyState(1);\n };\n\n facade.send = function(body) {\n //read xhr settings before hooking\n let k, modk;\n for (k of [\"type\", \"timeout\", \"withCredentials\"]) {\n modk = k === \"type\" ? \"responseType\" : k;\n if (modk in facade) {\n request[k] = facade[modk];\n }\n }\n\n request.body = body;\n const send = function() {\n //proxy all events from real xhr to facade\n proxyEvents(COMMON_EVENTS, xhr, facade);\n //proxy all upload events from the real to the upload facade\n if (facade.upload) {\n proxyEvents(\n COMMON_EVENTS.concat(UPLOAD_EVENTS),\n xhr.upload,\n facade.upload\n );\n }\n\n //prepare request all at once\n transiting = true;\n //perform open\n xhr.open(\n request.method,\n request.url,\n request.async,\n request.user,\n request.pass\n );\n\n //write xhr settings\n for (k of [\"type\", \"timeout\", \"withCredentials\"]) {\n modk = k === \"type\" ? \"responseType\" : k;\n if (k in request) {\n xhr[modk] = request[k];\n }\n }\n\n //insert headers\n for (let header in request.headers) {\n const value = request.headers[header];\n if (header) {\n xhr.setRequestHeader(header, value);\n }\n }\n //extract real formdata\n if (request.body instanceof formData.Xhook) {\n request.body = request.body.fd;\n }\n //real send!\n xhr.send(request.body);\n };\n\n const hooks = xhook.listeners(\"before\");\n //process hooks sequentially\n var process = function() {\n if (!hooks.length) {\n return send();\n }\n //go to next hook OR optionally provide response\n const done = function(userResponse) {\n //break chain - provide dummy response (readyState 4)\n if (\n typeof userResponse === \"object\" &&\n (typeof userResponse.status === \"number\" ||\n typeof response.status === \"number\")\n ) {\n mergeObjects(userResponse, response);\n if (!(\"data\" in userResponse)) {\n userResponse.data = userResponse.response || userResponse.text;\n }\n setReadyState(4);\n return;\n }\n //continue processing until no hooks left\n process();\n };\n //specifically provide headers (readyState 2)\n done.head = function(userResponse) {\n mergeObjects(userResponse, response);\n setReadyState(2);\n };\n //specifically provide partial text (responseText readyState 3)\n done.progress = function(userResponse) {\n mergeObjects(userResponse, response);\n setReadyState(3);\n };\n\n const hook = hooks.shift();\n //async or sync?\n if (hook.length === 1) {\n done(hook(request));\n } else if (hook.length === 2 && request.async) {\n //async handlers must use an async xhr\n hook(request, done);\n } else {\n //skip async hook on sync requests\n done();\n }\n return;\n };\n //kick off\n process();\n };\n\n facade.abort = function() {\n status = ABORTED;\n if (transiting) {\n xhr.abort(); //this will emit an 'abort' for us\n } else {\n facade.dispatchEvent(\"abort\", {});\n }\n };\n\n facade.setRequestHeader = function(header, value) {\n //the first header set is used for all future case-alternatives of 'name'\n const lName = header != null ? header.toLowerCase() : undefined;\n const name = (request.headerNames[lName] =\n request.headerNames[lName] || header);\n //append header to any previous values\n if (request.headers[name]) {\n value = request.headers[name] + \", \" + value;\n }\n request.headers[name] = value;\n };\n facade.getResponseHeader = header =>\n nullify(response.headers[header ? header.toLowerCase() : undefined]);\n\n facade.getAllResponseHeaders = () =>\n nullify(headers.convert(response.headers));\n\n //proxy call only when supported\n if (xhr.overrideMimeType) {\n facade.overrideMimeType = function() {\n xhr.overrideMimeType.apply(xhr, arguments);\n };\n }\n\n //create emitter when supported\n if (xhr.upload) {\n let up = EventEmitter();\n facade.upload = up;\n request.upload = up;\n }\n\n facade.UNSENT = 0;\n facade.OPENED = 1;\n facade.HEADERS_RECEIVED = 2;\n facade.LOADING = 3;\n facade.DONE = 4;\n\n // fill in default values for an empty XHR object according to the spec\n facade.response = \"\";\n facade.responseText = \"\";\n facade.responseXML = null;\n facade.readyState = 0;\n facade.statusText = \"\";\n\n return facade;\n};\n\nXhook.UNSENT = 0;\nXhook.OPENED = 1;\nXhook.HEADERS_RECEIVED = 2;\nXhook.LOADING = 3;\nXhook.DONE = 4;\n\n//patch interface\nexport default {\n patch() {\n if (Native) {\n window.XMLHttpRequest = Xhook;\n }\n },\n unpatch() {\n if (Native) {\n window.XMLHttpRequest = Native;\n }\n },\n Native,\n Xhook\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/xhook.min.js b/dist/xhook.min.js new file mode 100644 index 0000000..d24d746 --- /dev/null +++ b/dist/xhook.min.js @@ -0,0 +1,5 @@ +/*! + * XHook - v1.5.2 - https://github.com/jpillora/xhook + * Jaime Pillora - MIT Copyright 2022 + */!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}([function(e,t,n){"use strict";(function(e){n.d(t,"b",(function(){return s})),n.d(t,"c",(function(){return a})),n.d(t,"a",(function(){return i}));let o=null;"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?o=self:void 0!==e?o=e:a&&(o=a);const r="undefined"!=typeof navigator&&navigator.useragent?navigator.userAgent:"";let s=null;(/msie (\d+)/.test(r.toLowerCase())||/trident\/.*; rv:(\d+)/.test(r.toLowerCase()))&&(s=parseInt(RegExp.$1,10));const a=o,i=o.document}).call(this,n(11))},function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return s})),n.d(t,"d",(function(){return i})),n.d(t,"e",(function(){return c})),n.d(t,"c",(function(){return u}));var o=n(0);const r=["load","loadend","loadstart"],s=["progress","abort","error","timeout"],a=e=>["returnValue","totalSize","position"].includes(e),i=function(e,t){for(let n in e){if(a(n))continue;const o=e[n];try{t[n]=o}catch(e){}}return t},c=function(e,t,n){const o=e=>function(o){const r={};for(let e in o){if(a(e))continue;const s=o[e];r[e]=s===t?n:s}return n.dispatchEvent(e,r)};for(let r of Array.from(e))n._has(r)&&(t[`on${r}`]=o(r))},u=function(e){if(o.a&&null!=o.a.createEventObject){const t=o.a.createEventObject();return t.type=e,t}try{return new Event(e)}catch(t){return{type:e}}}},function(e,t,n){"use strict";var o=n(0),r=n(4),s=o.c.FormData;const a=function(e){this.fd=e?new s(e):new s,this.form=e;const t=[];Object.defineProperty(this,"entries",{get:()=>(e?Object(r.a)(e.querySelectorAll("input,select")).filter(e=>!["checkbox","radio"].includes(e.type)||e.checked).map(e=>[e.name,"file"===e.type?e.files:e.value]):[]).concat(t)}),this.append=function(){const e=Object(r.a)(arguments);return t.push(e),this.fd.append.apply(this.fd,e)}.bind(this)};t.a={patch(){s&&(o.c.FormData=a)},unpatch(){s&&(o.c.FormData=s)},Native:s,Xhook:a}},function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var o=n(4),r=n(1);const s=function(e){let t={};const n=e=>t[e]||[],s={addEventListener:function(e,o,r){t[e]=n(e),t[e].indexOf(o)>=0||(r=void 0===r?t[e].length:r,t[e].splice(r,0,o))},removeEventListener:function(e,o){if(void 0===e)return void(t={});void 0===o&&(t[e]=[]);const r=n(e).indexOf(o);-1!==r&&n(e).splice(r,1)},dispatchEvent:function(){const t=Object(o.a)(arguments),a=t.shift();e||(t[0]=Object(r.d)(t[0],Object(r.c)(a)));const i=s[`on${a}`];i&&i.apply(s,t);const c=n(a).concat(n("*"));for(let e=0;e!(!t[e]&&!s[`on${e}`])};return e&&(s.listeners=e=>Object(o.a)(n(e)),s.on=s.addEventListener,s.off=s.removeEventListener,s.fire=s.dispatchEvent,s.once=function(e,t){var n=function(){return s.off(e,n),t.apply(null,arguments)};return s.on(e,n)},s.destroy=()=>t={}),s}},function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){for(let t=0;tArray.prototype.slice.call(e,t)},function(e,t,n){"use strict";t.a={convert:function(e,t){let n;switch(null==t&&(t={}),typeof e){case"object":var o=[];for(let t in e){const r=e[t];n=t.toLowerCase(),o.push(`${n}:\t${r}`)}return o.join("\n")+"\n";case"string":o=e.split("\n");for(let e of Array.from(o))if(/([^:]+):\s*(.+)/.test(e)){n=null!=RegExp.$1?RegExp.$1.toLowerCase():void 0;const e=RegExp.$2;null==t[n]&&(t[n]=e)}return t}return[]}}},function(e,t,n){"use strict";var o=n(3);const r=Object(o.a)(!0);t.a=r},function(e,t,n){"use strict";var o=n(0),r=n(1),s=n(3),a=n(5),i=n(2);const c=e=>void 0===e?null:e,u=o.c.XMLHttpRequest,f=function(){const e=new u,t={};let n=null,f=void 0,d=void 0,l=void 0;var p=0;const h=function(){if(l.status=n||e.status,-1===n&&o.b<10||(l.statusText=e.statusText),-1===n);else{const t=a.a.convert(e.getAllResponseHeaders());for(let e in t){const n=t[e];if(!l.headers[e]){const t=e.toLowerCase();l.headers[t]=n}}}},y=function(){x.status=l.status,x.statusText=l.statusText},v=function(){f||x.dispatchEvent("load",{}),x.dispatchEvent("loadend",{}),f&&(x.readyState=0)},b=function(e){for(;e>p&&p<4;)x.readyState=++p,1===p&&x.dispatchEvent("loadstart",{}),2===p&&y(),4===p&&(y(),"text"in l&&(x.responseText=l.text),"xml"in l&&(x.responseXML=l.xml),"data"in l&&(x.response=l.data),"finalUrl"in l&&(x.responseURL=l.finalUrl)),x.dispatchEvent("readystatechange",{}),4===p&&(!1===t.async?v():setTimeout(v,0))},g=function(e){if(4!==e)return void b(e);const n=xhook.listeners("after");var o=function(){if(n.length>0){const e=n.shift();2===e.length?(e(t,l),o()):3===e.length&&t.async?e(t,l,o):o()}else b(4)};o()};var x=Object(s.a)();t.xhr=x,e.onreadystatechange=function(t){try{2===e.readyState&&h()}catch(e){}4===e.readyState&&(d=!1,h(),function(){if(e.responseType&&"text"!==e.responseType)"document"===e.responseType?(l.xml=e.responseXML,l.data=e.responseXML):l.data=e.response;else{l.text=e.responseText,l.data=e.responseText;try{l.xml=e.responseXML}catch(e){}}"responseURL"in e&&(l.finalUrl=e.responseURL)}()),g(e.readyState)};const m=function(){f=!0};x.addEventListener("error",m),x.addEventListener("timeout",m),x.addEventListener("abort",m),x.addEventListener("progress",(function(t){p<3?g(3):e.readyState<=3&&x.dispatchEvent("readystatechange",{})})),("withCredentials"in e||xhook.addWithCredentials)&&(x.withCredentials=!1),x.status=0;for(let e of Array.from(r.a.concat(r.b)))x[`on${e}`]=null;if(x.open=function(e,n,o,r,s){p=0,f=!1,d=!1,t.headers={},t.headerNames={},t.status=0,t.method=e,t.url=n,t.async=!1!==o,t.user=r,t.pass=s,l={},l.headers={},g(1)},x.send=function(n){let o,s;for(o of["type","timeout","withCredentials"])s="type"===o?"responseType":o,s in x&&(t[o]=x[s]);t.body=n;const a=xhook.listeners("before");var c=function(){if(!a.length)return function(){for(o of(Object(r.e)(r.a,e,x),x.upload&&Object(r.e)(r.a.concat(r.b),e.upload,x.upload),d=!0,e.open(t.method,t.url,t.async,t.user,t.pass),["type","timeout","withCredentials"]))s="type"===o?"responseType":o,o in t&&(e[s]=t[o]);for(let n in t.headers){const o=t.headers[n];n&&e.setRequestHeader(n,o)}t.body instanceof i.a.Xhook&&(t.body=t.body.fd),e.send(t.body)}();const n=function(e){if("object"==typeof e&&("number"==typeof e.status||"number"==typeof l.status))return Object(r.d)(e,l),"data"in e||(e.data=e.response||e.text),void g(4);c()};n.head=function(e){Object(r.d)(e,l),g(2)},n.progress=function(e){Object(r.d)(e,l),g(3)};const u=a.shift();1===u.length?n(u(t)):2===u.length&&t.async?u(t,n):n()};c()},x.abort=function(){n=-1,d?e.abort():x.dispatchEvent("abort",{})},x.setRequestHeader=function(e,n){const o=null!=e?e.toLowerCase():void 0,r=t.headerNames[o]=t.headerNames[o]||e;t.headers[r]&&(n=t.headers[r]+", "+n),t.headers[r]=n},x.getResponseHeader=e=>c(l.headers[e?e.toLowerCase():void 0]),x.getAllResponseHeaders=()=>c(a.a.convert(l.headers)),e.overrideMimeType&&(x.overrideMimeType=function(){e.overrideMimeType.apply(e,arguments)}),e.upload){let e=Object(s.a)();x.upload=e,t.upload=e}return x.UNSENT=0,x.OPENED=1,x.HEADERS_RECEIVED=2,x.LOADING=3,x.DONE=4,x.response="",x.responseText="",x.responseXML=null,x.readyState=0,x.statusText="",x};f.UNSENT=0,f.OPENED=1,f.HEADERS_RECEIVED=2,f.LOADING=3,f.DONE=4,t.a={patch(){u&&(o.c.XMLHttpRequest=f)},unpatch(){u&&(o.c.XMLHttpRequest=u)},Native:u,Xhook:f}},function(e,t,n){"use strict";var o=n(0),r=n(1),s=n(6),a=n(2);const i=o.c.fetch,c=function(e,t){null==t&&(t={headers:{}});let n=null;e instanceof Request?n=e:t.url=e;const o=s.a.listeners("before"),c=s.a.listeners("after");return new Promise((function(e,s){let u=e;const f=function(){return t.body instanceof a.a.Xhook&&(t.body=t.body.fd),t.headers&&(t.headers=new Headers(t.headers)),n||(n=new Request(t.url,t)),Object(r.d)(t,n)};var d=function(e){if(!c.length)return u(e);const t=c.shift();return 2===t.length?(t(f(),e),d(e)):3===t.length?t(f(),e,d):d(e)};const l=function(t){if(void 0!==t){const n=new Response(t.body||t.text,t);return e(n),void d(n)}p()};var p=function(){if(!o.length)return void h();const e=o.shift();return 1===e.length?l(e(t)):2===e.length?e(f(),l):void 0},h=()=>i(f()).then(e=>d(e)).catch((function(e){return u=s,d(e),s(e)}));p()}))};t.a={patch(){i&&(o.c.fetch=c)},unpatch(){i&&(o.c.fetch=i)},Native:i,Xhook:c}},function(e,t,n){"use strict";n.r(t),function(e){var t=n(3),o=n(0),r=n(5),s=n(7),a=n(8),i=n(2);const c=n(6).a;c.EventEmitter=t.a,c.before=function(e,t){if(e.length<1||e.length>2)throw"invalid hook";return c.on("before",e,t)},c.after=function(e,t){if(e.length<2||e.length>3)throw"invalid hook";return c.on("after",e,t)},c.enable=function(){s.a.patch(),a.a.patch(),i.a.patch()},c.disable=function(){s.a.unpatch(),a.a.unpatch(),i.a.unpatch()},c.XMLHttpRequest=s.a.Native,c.fetch=a.a.Native,c.FormData=i.a.Native,c.headers=r.a.convert,c.enable(),"function"==typeof define&&n(12)?define("xhook",[],()=>c):e&&"object"==typeof e&&e.exports?e.exports={xhook:c}:o.c&&(o.c.xhook=c)}.call(this,n(10)(e))},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){(function(t){e.exports=t}).call(this,{})}]); +//# sourceMappingURL=xhook.min.js.map \ No newline at end of file diff --git a/dist/xhook.min.js.map b/dist/xhook.min.js.map new file mode 100644 index 0000000..fefa8d8 --- /dev/null +++ b/dist/xhook.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/misc/window.js","webpack:///./src/misc/events.js","webpack:///./src/patch/formdata.js","webpack:///./src/misc/event-emitter.js","webpack:///./src/misc/array.js","webpack:///./src/misc/headers.js","webpack:///./src/misc/hooks.js","webpack:///./src/patch/xmlhttprequest.js","webpack:///./src/patch/fetch.js","webpack:///./src/main.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/amd-options.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","result","WorkerGlobalScope","self","global","window","useragent","navigator","userAgent","msie","test","toLowerCase","parseInt","RegExp","$1","document","UPLOAD_EVENTS","COMMON_EVENTS","depricatedProp","includes","mergeObjects","src","dst","k","v","error","proxyEvents","events","event","e","clone","val","dispatchEvent","Array","from","_has","fakeEvent","type","createEventObject","msieEventObject","Event","Native","FormData","Xhook","form","this","fd","entries","querySelectorAll","filter","checked","map","files","concat","append","args","arguments","push","apply","EventEmitter","nodeStyle","listeners","emitter","callback","indexOf","undefined","length","splice","shift","legacylistener","iterable","on","addEventListener","off","removeEventListener","fire","once","fn","destroy","item","slice","convert","h","dest","headers","join","split","header","$2","hooks","nullify","res","XMLHttpRequest","xhr","request","status","hasError","transiting","response","currentState","readHead","statusText","getAllResponseHeaders","writeHead","facade","emitFinal","readyState","emitReadyState","responseText","text","responseXML","xml","data","responseURL","finalUrl","async","setTimeout","setReadyState","xhook","process","hook","onreadystatechange","responseType","readBody","hasErrorHandler","addWithCredentials","withCredentials","open","method","url","user","pass","headerNames","send","body","modk","upload","setRequestHeader","done","userResponse","head","progress","abort","lName","getResponseHeader","overrideMimeType","up","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","fetch","options","Request","beforeHooks","afterHooks","Promise","resolve","reject","fullfiled","getRequest","Headers","processAfter","Response","processBefore","then","catch","err","before","handler","after","enable","patch","disable","unpatch","define","originalModule","webpackPolyfill","children","g","Function","__webpack_amd_options__"],"mappings":"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","file":"xhook.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 9);\n","let result = null;\n\n//find global object\nif (\n typeof WorkerGlobalScope !== \"undefined\" &&\n self instanceof WorkerGlobalScope\n) {\n result = self;\n} else if (typeof global !== \"undefined\") {\n result = global;\n} else if (window) {\n result = window;\n}\n\n//find IE version\nconst useragent =\n typeof navigator !== \"undefined\" && navigator[\"useragent\"]\n ? navigator.userAgent\n : \"\";\n\nexport let msie = null;\nif (\n /msie (\\d+)/.test(useragent.toLowerCase()) ||\n /trident\\/.*; rv:(\\d+)/.test(useragent.toLowerCase())\n) {\n msie = parseInt(RegExp.$1, 10);\n}\n\nexport const window = result;\nexport const document = result.document;\n","import { document } from \"./window\";\n\nexport const UPLOAD_EVENTS = [\"load\", \"loadend\", \"loadstart\"];\nexport const COMMON_EVENTS = [\"progress\", \"abort\", \"error\", \"timeout\"];\n\nconst depricatedProp = p =>\n [\"returnValue\", \"totalSize\", \"position\"].includes(p);\n\nexport const mergeObjects = function(src, dst) {\n for (let k in src) {\n if (depricatedProp(k)) {\n continue;\n }\n const v = src[k];\n try {\n dst[k] = v;\n } catch (error) {}\n }\n return dst;\n};\n\n//proxy events from one emitter to another\nexport const proxyEvents = function(events, src, dst) {\n const p = event =>\n function(e) {\n const clone = {};\n //copies event, with dst emitter inplace of src\n for (let k in e) {\n if (depricatedProp(k)) {\n continue;\n }\n const val = e[k];\n clone[k] = val === src ? dst : val;\n }\n //emits out the dst\n return dst.dispatchEvent(event, clone);\n };\n //dont proxy manual events\n for (let event of Array.from(events)) {\n if (dst._has(event)) {\n src[`on${event}`] = p(event);\n }\n }\n};\n\n//create fake event\nexport const fakeEvent = function(type) {\n if (document && document.createEventObject != null) {\n const msieEventObject = document.createEventObject();\n msieEventObject.type = type;\n return msieEventObject;\n }\n // on some platforms like android 4.1.2 and safari on windows, it appears\n // that new Event is not allowed\n try {\n return new Event(type);\n } catch (error) {\n return { type };\n }\n};\n","import { window } from \"../misc/window\";\nimport { slice } from \"../misc/array\";\n\n//note:\n// we can patch FormData safely because all XHR\n// is hooked, so we can ensure the real FormData\n// object is used on send\n\n//browser's FormData\nvar Native = window.FormData;\n\n//xhooks's FormData\nconst Xhook = function(form) {\n this.fd = form ? new Native(form) : new Native();\n this.form = form;\n const entries = [];\n Object.defineProperty(this, \"entries\", {\n get() {\n //extract form entries\n const fentries = !form\n ? []\n : slice(form.querySelectorAll(\"input,select\"))\n .filter(e => ![\"checkbox\", \"radio\"].includes(e.type) || e.checked)\n .map(e => [e.name, e.type === \"file\" ? e.files : e.value]);\n //combine with js entries\n return fentries.concat(entries);\n }\n });\n this.append = function() {\n const args = slice(arguments);\n entries.push(args);\n return this.fd.append.apply(this.fd, args);\n }.bind(this);\n};\n\n//patch interface\nexport default {\n patch() {\n if (Native) {\n window.FormData = Xhook;\n }\n },\n unpatch() {\n if (Native) {\n window.FormData = Native;\n }\n },\n Native,\n Xhook\n};\n","import { slice } from \"./array\";\nimport { mergeObjects, fakeEvent } from \"./events\";\n\n//tiny event emitter\nexport const EventEmitter = function(nodeStyle) {\n //private\n let events = {};\n const listeners = event => events[event] || [];\n //public\n const emitter = {};\n emitter.addEventListener = function(event, callback, i) {\n events[event] = listeners(event);\n if (events[event].indexOf(callback) >= 0) {\n return;\n }\n i = i === undefined ? events[event].length : i;\n events[event].splice(i, 0, callback);\n };\n emitter.removeEventListener = function(event, callback) {\n //remove all\n if (event === undefined) {\n events = {};\n return;\n }\n //remove all of type event\n if (callback === undefined) {\n events[event] = [];\n }\n //remove particular handler\n const i = listeners(event).indexOf(callback);\n if (i === -1) {\n return;\n }\n listeners(event).splice(i, 1);\n };\n emitter.dispatchEvent = function() {\n const args = slice(arguments);\n const event = args.shift();\n if (!nodeStyle) {\n args[0] = mergeObjects(args[0], fakeEvent(event));\n }\n const legacylistener = emitter[`on${event}`];\n if (legacylistener) {\n legacylistener.apply(emitter, args);\n }\n const iterable = listeners(event).concat(listeners(\"*\"));\n for (let i = 0; i < iterable.length; i++) {\n const listener = iterable[i];\n listener.apply(emitter, args);\n }\n };\n emitter._has = event => !!(events[event] || emitter[`on${event}`]);\n //add extra aliases\n if (nodeStyle) {\n emitter.listeners = event => slice(listeners(event));\n emitter.on = emitter.addEventListener;\n emitter.off = emitter.removeEventListener;\n emitter.fire = emitter.dispatchEvent;\n emitter.once = function(e, fn) {\n var fire = function() {\n emitter.off(e, fire);\n return fn.apply(null, arguments);\n };\n return emitter.on(e, fire);\n };\n emitter.destroy = () => (events = {});\n }\n\n return emitter;\n};\n","//if required, add 'indexOf' method to Array\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function(item) {\n for (let i = 0; i < this.length; i++) {\n const x = this[i];\n if (x === item) {\n return i;\n }\n }\n return -1;\n };\n}\n\nconst slice = (o, n) => Array.prototype.slice.call(o, n);\n\nexport { slice };\n","//helper\nconst convert = function(h, dest) {\n let name;\n if (dest == null) {\n dest = {};\n }\n switch (typeof h) {\n case \"object\":\n var headers = [];\n for (let k in h) {\n const v = h[k];\n name = k.toLowerCase();\n headers.push(`${name}:\\t${v}`);\n }\n return headers.join(\"\\n\") + \"\\n\";\n case \"string\":\n headers = h.split(\"\\n\");\n for (let header of Array.from(headers)) {\n if (/([^:]+):\\s*(.+)/.test(header)) {\n name = RegExp.$1 != null ? RegExp.$1.toLowerCase() : undefined;\n const value = RegExp.$2;\n if (dest[name] == null) {\n dest[name] = value;\n }\n }\n }\n return dest;\n }\n return [];\n};\n\nexport default { convert };\n","import { EventEmitter } from \"./event-emitter\";\n\n//global set of hook functions,\n//uses event emitter to store hooks\nconst hooks = EventEmitter(true);\n\nexport default hooks;\n","import { window, msie } from \"../misc/window\";\nimport {\n proxyEvents,\n mergeObjects,\n COMMON_EVENTS,\n UPLOAD_EVENTS\n} from \"../misc/events\";\nimport { EventEmitter } from \"../misc/event-emitter\";\nimport headers from \"../misc/headers\";\nimport formData from \"./formdata\";\n\nconst nullify = res => (res === undefined ? null : res);\n\n//browser's XMLHttpRequest\nconst Native = window.XMLHttpRequest;\n\n//xhook's XMLHttpRequest\nconst Xhook = function() {\n const ABORTED = -1;\n const xhr = new Native();\n\n //==========================\n // Extra state\n const request = {};\n let status = null;\n let hasError = undefined;\n let transiting = undefined;\n let response = undefined;\n var currentState = 0;\n\n //==========================\n // Private API\n\n //read results from real xhr into response\n const readHead = function() {\n // Accessing attributes on an aborted xhr object will\n // throw an 'c00c023f error' in IE9 and lower, don't touch it.\n response.status = status || xhr.status;\n if (status !== ABORTED || !(msie < 10)) {\n response.statusText = xhr.statusText;\n }\n if (status !== ABORTED) {\n const object = headers.convert(xhr.getAllResponseHeaders());\n for (let key in object) {\n const val = object[key];\n if (!response.headers[key]) {\n const name = key.toLowerCase();\n response.headers[name] = val;\n }\n }\n return;\n }\n };\n\n const readBody = function() {\n //https://xhr.spec.whatwg.org/\n if (!xhr.responseType || xhr.responseType === \"text\") {\n response.text = xhr.responseText;\n response.data = xhr.responseText;\n try {\n response.xml = xhr.responseXML;\n } catch (error) {}\n // unable to set responseXML due to response type, we attempt to assign responseXML\n // when the type is text even though it's against the spec due to several libraries\n // and browser vendors who allow this behavior. causing these requests to fail when\n // xhook is installed on a page.\n } else if (xhr.responseType === \"document\") {\n response.xml = xhr.responseXML;\n response.data = xhr.responseXML;\n } else {\n response.data = xhr.response;\n }\n //new in some browsers\n if (\"responseURL\" in xhr) {\n response.finalUrl = xhr.responseURL;\n }\n };\n\n //write response into facade xhr\n const writeHead = function() {\n facade.status = response.status;\n facade.statusText = response.statusText;\n };\n\n const writeBody = function() {\n if (\"text\" in response) {\n facade.responseText = response.text;\n }\n if (\"xml\" in response) {\n facade.responseXML = response.xml;\n }\n if (\"data\" in response) {\n facade.response = response.data;\n }\n if (\"finalUrl\" in response) {\n facade.responseURL = response.finalUrl;\n }\n };\n\n const emitFinal = function() {\n if (!hasError) {\n facade.dispatchEvent(\"load\", {});\n }\n facade.dispatchEvent(\"loadend\", {});\n if (hasError) {\n facade.readyState = 0;\n }\n };\n\n //ensure ready state 0 through 4 is handled\n const emitReadyState = function(n) {\n while (n > currentState && currentState < 4) {\n facade.readyState = ++currentState;\n // make fake events for libraries that actually check the type on\n // the event object\n if (currentState === 1) {\n facade.dispatchEvent(\"loadstart\", {});\n }\n if (currentState === 2) {\n writeHead();\n }\n if (currentState === 4) {\n writeHead();\n writeBody();\n }\n facade.dispatchEvent(\"readystatechange\", {});\n //delay final events incase of error\n if (currentState === 4) {\n if (request.async === false) {\n emitFinal();\n } else {\n setTimeout(emitFinal, 0);\n }\n }\n }\n };\n\n //control facade ready state\n const setReadyState = function(n) {\n //emit events until readyState reaches 4\n if (n !== 4) {\n emitReadyState(n);\n return;\n }\n //before emitting 4, run all 'after' hooks in sequence\n const hooks = xhook.listeners(\"after\");\n var process = function() {\n if (hooks.length > 0) {\n //execute each 'before' hook one at a time\n const hook = hooks.shift();\n if (hook.length === 2) {\n hook(request, response);\n process();\n } else if (hook.length === 3 && request.async) {\n hook(request, response, process);\n } else {\n process();\n }\n } else {\n //response ready for reading\n emitReadyState(4);\n }\n return;\n };\n process();\n };\n\n //==========================\n // Facade XHR\n var facade = EventEmitter();\n request.xhr = facade;\n\n // Handle the underlying ready state\n xhr.onreadystatechange = function(event) {\n //pull status and headers\n try {\n if (xhr.readyState === 2) {\n readHead();\n }\n } catch (error) {}\n //pull response data\n if (xhr.readyState === 4) {\n transiting = false;\n readHead();\n readBody();\n }\n\n setReadyState(xhr.readyState);\n };\n\n //mark this xhr as errored\n const hasErrorHandler = function() {\n hasError = true;\n };\n facade.addEventListener(\"error\", hasErrorHandler);\n facade.addEventListener(\"timeout\", hasErrorHandler);\n facade.addEventListener(\"abort\", hasErrorHandler);\n // progress means we're current downloading...\n facade.addEventListener(\"progress\", function(event) {\n if (currentState < 3) {\n setReadyState(3);\n } else if (xhr.readyState <= 3) {\n //until ready (4), each progress event is followed by readystatechange...\n facade.dispatchEvent(\"readystatechange\", {}); //TODO fake an XHR event\n }\n });\n\n // initialise 'withCredentials' on facade xhr in browsers with it\n // or if explicitly told to do so\n if (\"withCredentials\" in xhr || xhook.addWithCredentials) {\n facade.withCredentials = false;\n }\n facade.status = 0;\n\n // initialise all possible event handlers\n for (let event of Array.from(COMMON_EVENTS.concat(UPLOAD_EVENTS))) {\n facade[`on${event}`] = null;\n }\n\n facade.open = function(method, url, async, user, pass) {\n // Initailize empty XHR facade\n currentState = 0;\n hasError = false;\n transiting = false;\n //reset request\n request.headers = {};\n request.headerNames = {};\n request.status = 0;\n request.method = method;\n request.url = url;\n request.async = async !== false;\n request.user = user;\n request.pass = pass;\n //reset response\n response = {};\n response.headers = {};\n // openned facade xhr (not real xhr)\n setReadyState(1);\n };\n\n facade.send = function(body) {\n //read xhr settings before hooking\n let k, modk;\n for (k of [\"type\", \"timeout\", \"withCredentials\"]) {\n modk = k === \"type\" ? \"responseType\" : k;\n if (modk in facade) {\n request[k] = facade[modk];\n }\n }\n\n request.body = body;\n const send = function() {\n //proxy all events from real xhr to facade\n proxyEvents(COMMON_EVENTS, xhr, facade);\n //proxy all upload events from the real to the upload facade\n if (facade.upload) {\n proxyEvents(\n COMMON_EVENTS.concat(UPLOAD_EVENTS),\n xhr.upload,\n facade.upload\n );\n }\n\n //prepare request all at once\n transiting = true;\n //perform open\n xhr.open(\n request.method,\n request.url,\n request.async,\n request.user,\n request.pass\n );\n\n //write xhr settings\n for (k of [\"type\", \"timeout\", \"withCredentials\"]) {\n modk = k === \"type\" ? \"responseType\" : k;\n if (k in request) {\n xhr[modk] = request[k];\n }\n }\n\n //insert headers\n for (let header in request.headers) {\n const value = request.headers[header];\n if (header) {\n xhr.setRequestHeader(header, value);\n }\n }\n //extract real formdata\n if (request.body instanceof formData.Xhook) {\n request.body = request.body.fd;\n }\n //real send!\n xhr.send(request.body);\n };\n\n const hooks = xhook.listeners(\"before\");\n //process hooks sequentially\n var process = function() {\n if (!hooks.length) {\n return send();\n }\n //go to next hook OR optionally provide response\n const done = function(userResponse) {\n //break chain - provide dummy response (readyState 4)\n if (\n typeof userResponse === \"object\" &&\n (typeof userResponse.status === \"number\" ||\n typeof response.status === \"number\")\n ) {\n mergeObjects(userResponse, response);\n if (!(\"data\" in userResponse)) {\n userResponse.data = userResponse.response || userResponse.text;\n }\n setReadyState(4);\n return;\n }\n //continue processing until no hooks left\n process();\n };\n //specifically provide headers (readyState 2)\n done.head = function(userResponse) {\n mergeObjects(userResponse, response);\n setReadyState(2);\n };\n //specifically provide partial text (responseText readyState 3)\n done.progress = function(userResponse) {\n mergeObjects(userResponse, response);\n setReadyState(3);\n };\n\n const hook = hooks.shift();\n //async or sync?\n if (hook.length === 1) {\n done(hook(request));\n } else if (hook.length === 2 && request.async) {\n //async handlers must use an async xhr\n hook(request, done);\n } else {\n //skip async hook on sync requests\n done();\n }\n return;\n };\n //kick off\n process();\n };\n\n facade.abort = function() {\n status = ABORTED;\n if (transiting) {\n xhr.abort(); //this will emit an 'abort' for us\n } else {\n facade.dispatchEvent(\"abort\", {});\n }\n };\n\n facade.setRequestHeader = function(header, value) {\n //the first header set is used for all future case-alternatives of 'name'\n const lName = header != null ? header.toLowerCase() : undefined;\n const name = (request.headerNames[lName] =\n request.headerNames[lName] || header);\n //append header to any previous values\n if (request.headers[name]) {\n value = request.headers[name] + \", \" + value;\n }\n request.headers[name] = value;\n };\n facade.getResponseHeader = header =>\n nullify(response.headers[header ? header.toLowerCase() : undefined]);\n\n facade.getAllResponseHeaders = () =>\n nullify(headers.convert(response.headers));\n\n //proxy call only when supported\n if (xhr.overrideMimeType) {\n facade.overrideMimeType = function() {\n xhr.overrideMimeType.apply(xhr, arguments);\n };\n }\n\n //create emitter when supported\n if (xhr.upload) {\n let up = EventEmitter();\n facade.upload = up;\n request.upload = up;\n }\n\n facade.UNSENT = 0;\n facade.OPENED = 1;\n facade.HEADERS_RECEIVED = 2;\n facade.LOADING = 3;\n facade.DONE = 4;\n\n // fill in default values for an empty XHR object according to the spec\n facade.response = \"\";\n facade.responseText = \"\";\n facade.responseXML = null;\n facade.readyState = 0;\n facade.statusText = \"\";\n\n return facade;\n};\n\nXhook.UNSENT = 0;\nXhook.OPENED = 1;\nXhook.HEADERS_RECEIVED = 2;\nXhook.LOADING = 3;\nXhook.DONE = 4;\n\n//patch interface\nexport default {\n patch() {\n if (Native) {\n window.XMLHttpRequest = Xhook;\n }\n },\n unpatch() {\n if (Native) {\n window.XMLHttpRequest = Native;\n }\n },\n Native,\n Xhook\n};\n","import { window } from \"../misc/window\";\nimport { mergeObjects } from \"../misc/events\";\nimport hooks from \"../misc/hooks\";\nimport formData from \"./formdata\";\n\n//browser's fetch\nconst Native = window.fetch;\n\n//xhook's fetch\nconst Xhook = function(url, options) {\n if (options == null) {\n options = { headers: {} };\n }\n\n let request = null;\n\n if (url instanceof Request) {\n request = url\n } else {\n options.url = url;\n }\n\n const beforeHooks = hooks.listeners(\"before\");\n const afterHooks = hooks.listeners(\"after\");\n\n return new Promise(function(resolve, reject) {\n let fullfiled = resolve\n const getRequest = function() {\n if (options.body instanceof formData.Xhook) {\n options.body = options.body.fd;\n }\n\n if (options.headers) {\n options.headers = new Headers(options.headers);\n }\n\n if (!request) {\n request = new Request(options.url, options);\n }\n\n return mergeObjects(options, request);\n };\n\n var processAfter = function(response) {\n if (!afterHooks.length) {\n return fullfiled(response);\n }\n\n const hook = afterHooks.shift();\n\n if (hook.length === 2) {\n hook(getRequest(), response);\n return processAfter(response);\n } else if (hook.length === 3) {\n return hook(getRequest(), response, processAfter);\n } else {\n return processAfter(response);\n }\n };\n\n const done = function(userResponse) {\n if (userResponse !== undefined) {\n const response = new Response(\n userResponse.body || userResponse.text,\n userResponse\n );\n resolve(response);\n processAfter(response);\n return;\n }\n\n //continue processing until no hooks left\n processBefore();\n };\n\n var processBefore = function() {\n if (!beforeHooks.length) {\n send();\n return;\n }\n\n const hook = beforeHooks.shift();\n\n if (hook.length === 1) {\n return done(hook(options));\n } else if (hook.length === 2) {\n return hook(getRequest(), done);\n }\n };\n\n var send = () =>\n Native(getRequest())\n .then(response => processAfter(response))\n .catch(function(err) {\n fullfiled = reject\n processAfter(err);\n return reject(err);\n });\n\n processBefore();\n });\n};\n\n//patch interface\nexport default {\n patch() {\n if (Native) {\n window.fetch = Xhook;\n }\n },\n unpatch() {\n if (Native) {\n window.fetch = Native;\n }\n },\n Native,\n Xhook\n};\n","import { EventEmitter } from \"./misc/event-emitter\";\nimport { window } from \"./misc/window\";\nimport headers from \"./misc/headers\";\n\n//patchable types\nimport XMLHttpRequest from \"./patch/xmlhttprequest\";\nimport fetch from \"./patch/fetch\";\nimport FormData from \"./patch/formdata\";\n\n//global state\nimport hooks from \"./misc/hooks\";\n//the global hooks event emitter is also the global xhook object\n//(not the best decision in hindsight)\nconst xhook = hooks;\nxhook.EventEmitter = EventEmitter;\n//modify hooks\nxhook.before = function(handler, i) {\n if (handler.length < 1 || handler.length > 2) {\n throw \"invalid hook\";\n }\n return xhook.on(\"before\", handler, i);\n};\nxhook.after = function(handler, i) {\n if (handler.length < 2 || handler.length > 3) {\n throw \"invalid hook\";\n }\n return xhook.on(\"after\", handler, i);\n};\n\n//globally enable/disable\nxhook.enable = function() {\n XMLHttpRequest.patch();\n fetch.patch();\n FormData.patch();\n};\nxhook.disable = function() {\n XMLHttpRequest.unpatch();\n fetch.unpatch();\n FormData.unpatch();\n};\n//expose native objects\nxhook.XMLHttpRequest = XMLHttpRequest.Native;\nxhook.fetch = fetch.Native;\nxhook.FormData = FormData.Native;\n\n//expose helpers\nxhook.headers = headers.convert;\n\n//enable by default\nxhook.enable();\n\n//publicise (amd+commonjs+window)\nif (typeof define === \"function\" && define.amd) {\n define(\"xhook\", [], () => xhook);\n} else if (module && typeof module === \"object\" && module.exports) {\n module.exports = { xhook };\n} else if (window) {\n window.xhook = xhook;\n}\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 99f4831..5408962 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xhook", - "version": "0.0.0-git-tag", + "version": "1.5.2", "description": "Easily intercept and modify XHR request and response", "browser": "dist/xhook.js", "main": "src/main.js",