diff --git a/CHANGELOG.md b/CHANGELOG.md index e7e6259..548e7e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,21 @@ + +# [1.4.0](https://github.com/elbywan/wretch/compare/1.3.1...1.4.0) (2018-07-10) + + +### :fire: Breaking change(s) + +* Make .formUrl encode arrays in a standard way ([4e90cba](https://github.com/elbywan/wretch/commit/4e90cba)) + + + ## [1.3.1](https://github.com/elbywan/wretch/compare/1.3.0...1.3.1) (2018-06-12) +### :arrow_up: Version update(s) + +* 1.3.1 tag ([f162e0e](https://github.com/elbywan/wretch/commit/f162e0e)) + ### :art: Code improvement(s) * Launch the mock server aside of the test file. ([35c5a4e](https://github.com/elbywan/wretch/commit/35c5a4e)) diff --git a/README.md b/README.md index bf11c3c..6029940 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@
-##### Wretch 1.3 is now live 🎉 ! Please check out the [changelog](https://github.com/elbywan/wretch/blob/master/CHANGELOG.md) after each update for new features and breaking changes. If you want to try out the hot stuff, look at the [dev](https://github.com/elbywan/wretch/tree/dev) branch. +##### Wretch 1.4 is now live 🎉 ! Please check out the [changelog](https://github.com/elbywan/wretch/blob/master/CHANGELOG.md) after each update for new features and breaking changes. If you want to try out the hot stuff, look at the [dev](https://github.com/elbywan/wretch/tree/dev) branch. ##### A collection of middlewares is available through the [wretch-middlewares](https://github.com/elbywan/wretch-middlewares) package! 📦 diff --git a/dist/bundle/wretch.js.map b/dist/bundle/wretch.js.map index 309d435..0c818da 100644 --- a/dist/bundle/wretch.js.map +++ b/dist/bundle/wretch.js.map @@ -1 +1 @@ -{"version":3,"file":"wretch.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/mix.ts","../../src/config.ts","../../src/perfs.ts","../../src/wretcher.ts","../../src/resolver.ts","../../src/middleware.ts","../../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export const mix = function(one: object, two: object, mergeArrays: boolean = false) {\n if(!one || !two || typeof one !== \"object\" || typeof two !== \"object\")\n return one\n\n const clone = { ...one }\n for(const prop in two) {\n if(two.hasOwnProperty(prop)) {\n if(two[prop] instanceof Array && one[prop] instanceof Array) {\n clone[prop] = mergeArrays ? [ ...one[prop], ...two[prop] ] : two[prop]\n } else if(typeof two[prop] === \"object\" && typeof one[prop] === \"object\") {\n clone[prop] = mix(one[prop], two[prop], mergeArrays)\n } else {\n clone[prop] = two[prop]\n }\n }\n }\n\n return clone\n}\n","declare const global\n\nconst config = {\n // Default options\n defaults: {},\n // Error type\n errorType: null,\n // Polyfills\n polyfills: {\n fetch: null,\n FormData: null,\n URLSearchParams: null,\n performance: null,\n PerformanceObserver: null,\n AbortController: null\n },\n polyfill(p: string, { doThrow = true, instance = false } = {}, ...args) {\n const res = this.polyfills[p] ||\n (typeof self !== \"undefined\" ? self[p] : null) ||\n (typeof global !== \"undefined\" ? global[p] : null)\n if(doThrow && !res) throw new Error(p + \" is not defined\")\n return instance && res ? new res(...args) : res\n }\n}\n\nexport default config\n","import conf from \"./config\"\n\nconst onMatch = (entries, name, callback, _performance) => {\n if(!entries.getEntriesByName)\n return false\n const matches = entries.getEntriesByName(name)\n if(matches && matches.length > 0) {\n callback(matches.reverse()[0])\n if(_performance.clearMeasures)\n _performance.clearMeasures(name)\n perfs.callbacks.delete(name)\n\n if(perfs.callbacks.size < 1) {\n perfs.observer.disconnect()\n if(_performance.clearResourceTimings) {\n _performance.clearResourceTimings()\n }\n }\n return true\n }\n return false\n}\n\nconst lazyObserver = (_performance, _observer) => {\n if(!perfs.observer && _performance && _observer) {\n perfs.observer = new _observer(entries => {\n perfs.callbacks.forEach((callback, name) => {\n onMatch(entries, name, callback, _performance)\n })\n })\n if(_performance.clearResourceTimings)\n _performance.clearResourceTimings()\n }\n return perfs.observer\n}\n\nconst perfs = {\n callbacks: new Map(),\n observer: null,\n observe: (name, callback) => {\n if(!name || !callback)\n return\n\n const _performance = conf.polyfill(\"performance\", { doThrow: false })\n const _observer = conf.polyfill(\"PerformanceObserver\", { doThrow: false })\n\n if(!lazyObserver(_performance, _observer))\n return\n\n if(!onMatch(_performance, name, callback, _performance)) {\n if(perfs.callbacks.size < 1)\n perfs.observer.observe({ entryTypes: [\"resource\", \"measure\"] })\n perfs.callbacks.set(name, callback)\n }\n\n }\n}\n\nexport default perfs\n","import { mix } from \"./mix\"\nimport conf from \"./config\"\nimport { resolver, WretcherError, ResponseChain } from \"./resolver\"\nimport { ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherOptions = RequestInit & {\n [key: string]: any\n}\n\nexport type DeferredCallback = (wretcher: Wretcher, url: string, options: WretcherOptions) => Wretcher\n\n/**\n * The Wretcher class used to perform easy fetch requests.\n *\n * Immutability : almost every method of this class return a fresh Wretcher object.\n */\nexport class Wretcher {\n\n protected constructor(\n public _url: string,\n public _options: WretcherOptions,\n public _catchers: Map void> = new Map(),\n public _resolvers: Array<(resolver: ResponseChain, originalRequest: Wretcher) => any> = [],\n public _middlewares: ConfiguredMiddleware[] = [],\n public _deferredChain: DeferredCallback[] = []) {}\n\n static factory(url = \"\", options: WretcherOptions = {}) { return new Wretcher(url, options) }\n private selfFactory({ url = this._url, options = this._options, catchers = this._catchers,\n resolvers = this._resolvers, middlewares = this._middlewares, deferredChain = this._deferredChain } = {}) {\n return new Wretcher(url, options, catchers, resolvers, middlewares, deferredChain)\n }\n\n /**\n * Sets the default fetch options used for every subsequent fetch call.\n * @param options New default options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n defaults(options: WretcherOptions, mixin = false) {\n conf.defaults = mixin ? mix(conf.defaults, options) : options\n return this\n }\n\n /**\n * Sets the method (text, json ...) used to parse the data contained in the response body in case of an HTTP error.\n *\n * Persists for every subsequent requests.\n *\n * Default is \"text\".\n */\n errorType(method: \"text\" | \"json\") {\n conf.errorType = method\n return this\n }\n\n /**\n * Sets the non-global polyfills which will be used for every subsequent calls.\n *\n * Needed for libraries like [fetch-ponyfill](https://github.com/qubyte/fetch-ponyfill).\n *\n * @param polyfills An object containing the polyfills.\n */\n polyfills(polyfills: Partial) {\n conf.polyfills = { ...conf.polyfills, ...polyfills }\n return this\n }\n\n /**\n * Returns a new Wretcher object with the argument url appended and the same options.\n * @param url String url\n * @param replace Boolean If true, replaces the current url instead of appending\n */\n url(url: string, replace = false) {\n if(replace)\n return this.selfFactory({ url })\n const split = this._url.split(\"?\")\n return this.selfFactory({\n url: split.length > 1 ?\n split[0] + url + \"?\" + split[1] :\n this._url + url\n })\n }\n\n /**\n * Returns a new Wretcher object with the same url and new options.\n * @param options New options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n options(options: WretcherOptions, mixin = true) {\n return this.selfFactory({ options: mixin ? mix(this._options, options) : options })\n }\n\n /**\n * Converts a javascript object to query parameters,\n * then appends this query string to the current url.\n *\n * If given a string, use the string as the query verbatim.\n *\n * ```\n * let w = wretch(\"http://example.com\") // url is http://example.com\n *\n * // Chain query calls\n * w = w.query({ a: 1, b : 2 }) // url is now http://example.com?a=1&b=2\n * w = w.query(\"foo-bar-baz-woz\") // url is now http://example.com?a=1&b=2&foo-bar-baz-woz\n *\n * // Pass true as the second argument to replace existing query parameters\n * w = w.query(\"c=3&d=4\", true) // url is now http://example.com?c=3&d=4\n * ```\n *\n * @param qp An object which will be converted, or a string which will be used verbatim.\n */\n query(qp: object | string, replace: boolean = false) {\n return this.selfFactory({ url: appendQueryParams(this._url, qp, replace) })\n }\n\n /**\n * Set request headers.\n * @param headerValues An object containing header keys and values\n */\n headers(headerValues: { [headerName: string]: any }) {\n return this.selfFactory({ options: mix(this._options, { headers: headerValues }) })\n }\n\n /**\n * Shortcut to set the \"Accept\" header.\n * @param headerValue Header value\n */\n accept(headerValue: string) {\n return this.headers({ Accept : headerValue })\n }\n\n /**\n * Shortcut to set the \"Content-Type\" header.\n * @param headerValue Header value\n */\n content(headerValue: string) {\n return this.headers({ \"Content-Type\" : headerValue })\n }\n\n /**\n * Shortcut to set the \"Authorization\" header.\n * @param headerValue Header value\n */\n auth(headerValue: string) {\n return this.headers({ Authorization: headerValue })\n }\n\n /**\n * Adds a default catcher which will be called on every subsequent request error when the error code matches.\n * @param errorId Error code or name\n * @param catcher: The catcher method\n */\n catcher(errorId: number | string, catcher: (error: WretcherError, originalRequest: Wretcher) => any) {\n const newMap = new Map(this._catchers)\n newMap.set(errorId, catcher)\n return this.selfFactory({ catchers: newMap })\n }\n\n /**\n * Associates a custom signal with the request.\n * @param controller : An AbortController\n */\n signal(controller: any) {\n return this.selfFactory({ options: { ...this._options, signal: controller.signal } as any })\n }\n\n /**\n * Program a resolver to perform response chain tasks automatically.\n * @param doResolve : Resolver callback\n */\n resolve(doResolve: (chain: ResponseChain, originalRequest: Wretcher) => ResponseChain | Promise, clear: boolean = false) {\n return this.selfFactory({ resolvers: clear ? [ doResolve ] : [ ...this._resolvers, doResolve ]})\n }\n\n /**\n * Defer wretcher methods that will be chained and called just before the request is performed.\n */\n defer(callback: DeferredCallback, clear = false) {\n return this.selfFactory({\n deferredChain: clear ? [callback] : [ ...this._deferredChain, callback ]\n })\n }\n\n /**\n * Add middlewares to intercept a request before being sent.\n */\n middlewares(middlewares: ConfiguredMiddleware[], clear = false) {\n return this.selfFactory({\n middlewares: clear ? middlewares : [ ...this._middlewares, ...middlewares ]\n })\n }\n\n private method(method, options = {}, body = null) {\n const baseWretcher =\n !body ? this :\n typeof body === \"object\" ? this.json(body) :\n this.body(body)\n const deferredWretcher = baseWretcher._deferredChain.reduce((acc: Wretcher, curr) => curr(acc, acc._url, acc._options), baseWretcher)\n return resolver(deferredWretcher.options({ ...options, method }))\n }\n\n /**\n * Performs a get request.\n */\n get(options?) {\n return this.method(\"GET\", options)\n }\n /**\n * Performs a delete request.\n */\n delete(options?) {\n return this.method(\"DELETE\", options)\n }\n /**\n * Performs a put request.\n */\n put(body?, options?) {\n return this.method(\"PUT\", options, body)\n }\n /**\n * Performs a post request.\n */\n post(body?, options?) {\n return this.method(\"POST\", options, body)\n }\n /**\n * Performs a patch request.\n */\n patch(body?, options?) {\n return this.method(\"PATCH\", options, body)\n }\n /**\n * Performs a head request.\n */\n head(options?) {\n return this.method(\"HEAD\", options)\n }\n /**\n * Performs an options request\n */\n opts(options?) {\n return this.method(\"OPTIONS\", options)\n }\n\n /**\n * Sets the request body with any content.\n * @param contents The body contents\n */\n body(contents: any) {\n return this.selfFactory({ options: { ...this._options, body: contents }})\n }\n /**\n * Sets the content type header, stringifies an object and sets the request body.\n * @param jsObject An object which will be serialized into a JSON\n */\n json(jsObject: object) {\n return this.content(\"application/json\").body(JSON.stringify(jsObject))\n }\n /**\n * Converts the javascript object to a FormData and sets the request body.\n * @param formObject An object which will be converted to a FormData\n */\n formData(formObject: object) {\n return this.body(convertFormData(formObject))\n }\n /**\n * Converts the input to an url encoded string and sets the content-type header and body.\n * If the input argument is already a string, skips the conversion part.\n *\n * @param input An object to convert into an url encoded string or an already encoded string\n */\n formUrl(input: (object | string)) {\n return this\n .body(typeof input === \"string\" ? input : convertFormUrl(input))\n .content(\"application/x-www-form-urlencoded\")\n }\n}\n\n// Internal helpers\n\nconst appendQueryParams = (url: string, qp: object | string, replace: boolean) => {\n let queryString\n\n if(typeof qp === \"string\") {\n queryString = qp\n } else {\n const usp = conf.polyfill(\"URLSearchParams\", { instance: true })\n for(const key in qp) {\n if(qp[key] instanceof Array) {\n for(const val of qp[key])\n usp.append(key, val)\n } else {\n usp.append(key, qp[key])\n }\n }\n queryString = usp.toString()\n }\n\n const split = url.split(\"?\")\n if(replace || split.length < 2)\n return split[0] + \"?\" + queryString\n\n return url + \"&\" + queryString\n}\n\nfunction convertFormData(formObject: object) {\n const formData = conf.polyfill(\"FormData\", { instance: true })\n for(const key in formObject) {\n if(formObject[key] instanceof Array) {\n for(const item of formObject[key])\n formData.append(key + \"[]\", item)\n } else {\n formData.append(key, formObject[key])\n }\n }\n\n return formData\n}\n\nfunction encodeQueryValue(key: string, value: any) {\n return encodeURIComponent(key) +\n \"=\" +\n encodeURIComponent(\n typeof value === \"object\" ?\n JSON.stringify(value) :\n value)\n}\nfunction convertFormUrl(formObject: object) {\n return Object.keys(formObject)\n .map(key => {\n const value = formObject[key]\n if(value instanceof Array) {\n return value.map(v => encodeQueryValue(key, v)).join(\"&\")\n }\n return encodeQueryValue(key, value)\n })\n .join(\"&\")\n}\n","import { Wretcher } from \"./wretcher\"\nimport { mix } from \"./mix\"\nimport conf from \"./config\"\nimport perfs from \"./perfs\"\nimport { middlewareHelper, ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherError = Error & { status: number, response: WretcherResponse, text?: string, json?: any }\nexport type WretcherResponse = Response & { [key: string]: any }\nexport type ResponseChain = {\n // Response types\n res: (cb?: (type: WretcherResponse) => Result) => Promise,\n json: (cb?: (type: {[key: string]: any}) => Result) => Promise,\n blob: (cb?: (type: Blob) => Result) => Promise,\n formData: (cb?: (type: FormData) => Result) => Promise,\n arrayBuffer: (cb?: (type: ArrayBuffer) => Result) => Promise,\n text: (cb?: (type: string) => Result) => Promise,\n // Extras\n perfs: (cb?: (type: any) => void) => ResponseChain,\n setTimeout: (time: number, controller?: any) => ResponseChain,\n controller: () => [any, ResponseChain],\n // Catchers\n error: (code: (number | string), cb: any) => ResponseChain,\n badRequest: (cb: (error: WretcherError, originalRequest: Wretcher) => void) => ResponseChain,\n unauthorized: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n forbidden: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n notFound: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n timeout: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n internalError: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n onAbort: (cb: (error: Error, originalRequest: Wretcher) => any) => ResponseChain\n}\n\nexport const resolver = (wretcher: Wretcher) => {\n const {\n _url: url,\n _catchers: catchers,\n _resolvers: resolvers,\n _middlewares: middlewares,\n _options: opts\n } = wretcher\n\n type TypeParser = (funName: string | null) => (cb?: (type: Type) => Result) => Promise\n\n const finalOpts = mix(conf.defaults, opts)\n const fetchController = conf.polyfill(\"AbortController\", { doThrow: false, instance: true })\n if(!finalOpts[\"signal\"] && fetchController) {\n finalOpts[\"signal\"] = fetchController.signal\n }\n\n const req = middlewareHelper(middlewares)(conf.polyfill(\"fetch\"))(url, finalOpts)\n const wrapper: Promise = req.then(response => {\n if (!response.ok) {\n return response[conf.errorType || \"text\"]().then(msg => {\n const err = new Error(msg)\n err[conf.errorType] = msg\n err[\"status\"] = response.status\n err[\"response\"] = response\n throw err\n })\n }\n return response\n })\n\n const doCatch = (promise: Promise): Promise => {\n return promise.catch(err => {\n if(catchers.has(err.status))\n return catchers.get(err.status)(err, wretcher)\n else if(catchers.has(err.name))\n return catchers.get(err.name)(err, wretcher)\n else\n throw err\n })\n }\n const wrapTypeParser: TypeParser = (funName) => (cb) => funName ?\n doCatch(wrapper.then(_ => _ && _[funName]()).then(_ => _ && cb && cb(_) || _)) :\n doCatch(wrapper.then(_ => _ && cb && cb(_) || _))\n\n const responseChain: ResponseChain = {\n /**\n * Retrieves the raw result as a promise.\n */\n res: wrapTypeParser(null),\n /**\n * Retrieves the result as a parsed JSON object.\n */\n json: wrapTypeParser(\"json\"),\n /**\n * Retrieves the result as a Blob object.\n */\n blob: wrapTypeParser(\"blob\"),\n /**\n * Retrieves the result as a FormData object.\n */\n formData: wrapTypeParser(\"formData\"),\n /**\n * Retrieves the result as an ArrayBuffer object.\n */\n arrayBuffer: wrapTypeParser(\"arrayBuffer\"),\n /**\n * Retrieves the result as a string.\n */\n text: wrapTypeParser(\"text\"),\n /**\n * Performs a callback on the API performance timings of the request.\n *\n * Warning: Still experimental on browsers and node.js\n */\n perfs: cb => {\n req.then(res => perfs.observe(res.url, cb))\n return responseChain\n },\n /**\n * Aborts the request after a fixed time.\n *\n * @param time Time in milliseconds\n * @param controller A custom controller\n */\n setTimeout: (time, controller = fetchController) => {\n setTimeout(() => controller.abort(), time)\n return responseChain\n },\n /**\n * Returns the automatically generated AbortController alongside the current wretch response as a pair.\n */\n controller: () => [ fetchController, responseChain ],\n /**\n * Catches an http response with a specific error code or name and performs a callback.\n */\n error(errorId, cb) {\n catchers.set(errorId, cb)\n return responseChain\n },\n /**\n * Catches a bad request (http code 400) and performs a callback.\n */\n badRequest: cb => responseChain.error(400, cb),\n /**\n * Catches an unauthorized request (http code 401) and performs a callback.\n */\n unauthorized: cb => responseChain.error(401, cb),\n /**\n * Catches a forbidden request (http code 403) and performs a callback.\n */\n forbidden: cb => responseChain.error(403, cb),\n /**\n * Catches a \"not found\" request (http code 404) and performs a callback.\n */\n notFound: cb => responseChain.error(404, cb),\n /**\n * Catches a timeout (http code 408) and performs a callback.\n */\n timeout: cb => responseChain.error(408, cb),\n /**\n * Catches an internal server error (http code 500) and performs a callback.\n */\n internalError: cb => responseChain.error(500, cb),\n /**\n * Catches an AbortError and performs a callback.\n */\n onAbort: cb => responseChain.error(\"AbortError\", cb)\n }\n\n return resolvers.reduce((chain, r) => r(chain, wretcher), responseChain) as (ResponseChain & Promise)\n}\n","import { WretcherOptions } from \"./wretcher\"\nimport { WretcherResponse } from \"./resolver\"\n\nexport type Middleware = (options?: {[key: string]: any}) => ConfiguredMiddleware\nexport type ConfiguredMiddleware = (next: FetchLike) => FetchLike\nexport type FetchLike = (url: string, opts: WretcherOptions) => Promise\n\nexport const middlewareHelper = (middlewares: ConfiguredMiddleware[]) => (fetchFunction: FetchLike): FetchLike => {\n return (\n middlewares.length === 0 ?\n fetchFunction :\n middlewares.length === 1 ?\n middlewares[0](fetchFunction) :\n middlewares.reduceRight((acc, curr, idx): any =>\n (idx === middlewares.length - 2) ? curr(acc(fetchFunction)) : curr(acc as any)\n )\n ) as FetchLike\n}\n","import { Wretcher } from \"./wretcher\"\n\nconst factory = Wretcher.factory\nfactory[\"default\"] = Wretcher.factory\n\n/**\n * Return a fresh Wretcher instance.\n */\nexport default factory\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","mix","one","two","mergeArrays","clone","prop","Array","config","defaults","errorType","polyfills","fetch","FormData","URLSearchParams","performance","PerformanceObserver","AbortController","polyfill","_a","_b","_c","doThrow","_d","instance","_i","args","res","this","self","global","Error","onMatch","entries","name","callback","_performance","getEntriesByName","matches","reverse","clearMeasures","perfs","callbacks","delete","size","observer","disconnect","clearResourceTimings","Map","observe","conf","_observer","forEach","lazyObserver","entryTypes","set","_url","_options","_catchers","_resolvers","_middlewares","_deferredChain","Wretcher","url","options","_e","catchers","_f","resolvers","_g","middlewares","_h","mixin","method","replace","selfFactory","split","qp","appendQueryParams","headerValues","headers","headerValue","Accept","Content-Type","Authorization","errorId","catcher","newMap","controller","tslib_1.__assign","signal","doResolve","clear","deferredChain","body","baseWretcher","json","wretcher","opts","finalOpts","fetchController","req","fetchFunction","reduceRight","acc","curr","idx","middlewareHelper","wrapper","then","response","ok","msg","err","status","doCatch","promise","catch","has","get","wrapTypeParser","funName","cb","_","responseChain","blob","formData","arrayBuffer","text","setTimeout","time","abort","error","badRequest","unauthorized","forbidden","notFound","timeout","internalError","onAbort","reduce","chain","r","resolver","contents","jsObject","content","JSON","stringify","formObject","key","item","append","convertFormData","input","keys","map","value","v","encodeQueryValue","join","queryString","usp","val","toString","encodeURIComponent","factory"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"wretch.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/mix.ts","../../src/config.ts","../../src/perfs.ts","../../src/wretcher.ts","../../src/resolver.ts","../../src/middleware.ts","../../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export const mix = function(one: object, two: object, mergeArrays: boolean = false) {\n if(!one || !two || typeof one !== \"object\" || typeof two !== \"object\")\n return one\n\n const clone = { ...one }\n for(const prop in two) {\n if(two.hasOwnProperty(prop)) {\n if(two[prop] instanceof Array && one[prop] instanceof Array) {\n clone[prop] = mergeArrays ? [ ...one[prop], ...two[prop] ] : two[prop]\n } else if(typeof two[prop] === \"object\" && typeof one[prop] === \"object\") {\n clone[prop] = mix(one[prop], two[prop], mergeArrays)\n } else {\n clone[prop] = two[prop]\n }\n }\n }\n\n return clone\n}\n","declare const global\n\nconst config = {\n // Default options\n defaults: {},\n // Error type\n errorType: null,\n // Polyfills\n polyfills: {\n fetch: null,\n FormData: null,\n URLSearchParams: null,\n performance: null,\n PerformanceObserver: null,\n AbortController: null\n },\n polyfill(p: string, { doThrow = true, instance = false } = {}, ...args) {\n const res = this.polyfills[p] ||\n (typeof self !== \"undefined\" ? self[p] : null) ||\n (typeof global !== \"undefined\" ? global[p] : null)\n if(doThrow && !res) throw new Error(p + \" is not defined\")\n return instance && res ? new res(...args) : res\n }\n}\n\nexport default config\n","import conf from \"./config\"\n\nconst onMatch = (entries, name, callback, _performance) => {\n if(!entries.getEntriesByName)\n return false\n const matches = entries.getEntriesByName(name)\n if(matches && matches.length > 0) {\n callback(matches.reverse()[0])\n if(_performance.clearMeasures)\n _performance.clearMeasures(name)\n perfs.callbacks.delete(name)\n\n if(perfs.callbacks.size < 1) {\n perfs.observer.disconnect()\n if(_performance.clearResourceTimings) {\n _performance.clearResourceTimings()\n }\n }\n return true\n }\n return false\n}\n\nconst lazyObserver = (_performance, _observer) => {\n if(!perfs.observer && _performance && _observer) {\n perfs.observer = new _observer(entries => {\n perfs.callbacks.forEach((callback, name) => {\n onMatch(entries, name, callback, _performance)\n })\n })\n if(_performance.clearResourceTimings)\n _performance.clearResourceTimings()\n }\n return perfs.observer\n}\n\nconst perfs = {\n callbacks: new Map(),\n observer: null,\n observe: (name, callback) => {\n if(!name || !callback)\n return\n\n const _performance = conf.polyfill(\"performance\", { doThrow: false })\n const _observer = conf.polyfill(\"PerformanceObserver\", { doThrow: false })\n\n if(!lazyObserver(_performance, _observer))\n return\n\n if(!onMatch(_performance, name, callback, _performance)) {\n if(perfs.callbacks.size < 1)\n perfs.observer.observe({ entryTypes: [\"resource\", \"measure\"] })\n perfs.callbacks.set(name, callback)\n }\n\n }\n}\n\nexport default perfs\n","import { mix } from \"./mix\"\nimport conf from \"./config\"\nimport { resolver, WretcherError, ResponseChain } from \"./resolver\"\nimport { ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherOptions = RequestInit & {\n [key: string]: any\n}\n\nexport type DeferredCallback = (wretcher: Wretcher, url: string, options: WretcherOptions) => Wretcher\n\n/**\n * The Wretcher class used to perform easy fetch requests.\n *\n * Immutability : almost every method of this class return a fresh Wretcher object.\n */\nexport class Wretcher {\n\n protected constructor(\n public _url: string,\n public _options: WretcherOptions,\n public _catchers: Map void> = new Map(),\n public _resolvers: Array<(resolver: ResponseChain, originalRequest: Wretcher) => any> = [],\n public _middlewares: ConfiguredMiddleware[] = [],\n public _deferredChain: DeferredCallback[] = []) {}\n\n static factory(url = \"\", options: WretcherOptions = {}) { return new Wretcher(url, options) }\n private selfFactory({ url = this._url, options = this._options, catchers = this._catchers,\n resolvers = this._resolvers, middlewares = this._middlewares, deferredChain = this._deferredChain } = {}) {\n return new Wretcher(url, options, catchers, resolvers, middlewares, deferredChain)\n }\n\n /**\n * Sets the default fetch options used for every subsequent fetch call.\n * @param options New default options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n defaults(options: WretcherOptions, mixin = false) {\n conf.defaults = mixin ? mix(conf.defaults, options) : options\n return this\n }\n\n /**\n * Sets the method (text, json ...) used to parse the data contained in the response body in case of an HTTP error.\n *\n * Persists for every subsequent requests.\n *\n * Default is \"text\".\n */\n errorType(method: \"text\" | \"json\") {\n conf.errorType = method\n return this\n }\n\n /**\n * Sets the non-global polyfills which will be used for every subsequent calls.\n *\n * Needed for libraries like [fetch-ponyfill](https://github.com/qubyte/fetch-ponyfill).\n *\n * @param polyfills An object containing the polyfills.\n */\n polyfills(polyfills: Partial) {\n conf.polyfills = { ...conf.polyfills, ...polyfills }\n return this\n }\n\n /**\n * Returns a new Wretcher object with the argument url appended and the same options.\n * @param url String url\n * @param replace Boolean If true, replaces the current url instead of appending\n */\n url(url: string, replace = false) {\n if(replace)\n return this.selfFactory({ url })\n const split = this._url.split(\"?\")\n return this.selfFactory({\n url: split.length > 1 ?\n split[0] + url + \"?\" + split[1] :\n this._url + url\n })\n }\n\n /**\n * Returns a new Wretcher object with the same url and new options.\n * @param options New options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n options(options: WretcherOptions, mixin = true) {\n return this.selfFactory({ options: mixin ? mix(this._options, options) : options })\n }\n\n /**\n * Converts a javascript object to query parameters,\n * then appends this query string to the current url.\n *\n * If given a string, use the string as the query verbatim.\n *\n * ```\n * let w = wretch(\"http://example.com\") // url is http://example.com\n *\n * // Chain query calls\n * w = w.query({ a: 1, b : 2 }) // url is now http://example.com?a=1&b=2\n * w = w.query(\"foo-bar-baz-woz\") // url is now http://example.com?a=1&b=2&foo-bar-baz-woz\n *\n * // Pass true as the second argument to replace existing query parameters\n * w = w.query(\"c=3&d=4\", true) // url is now http://example.com?c=3&d=4\n * ```\n *\n * @param qp An object which will be converted, or a string which will be used verbatim.\n */\n query(qp: object | string, replace: boolean = false) {\n return this.selfFactory({ url: appendQueryParams(this._url, qp, replace) })\n }\n\n /**\n * Set request headers.\n * @param headerValues An object containing header keys and values\n */\n headers(headerValues: { [headerName: string]: any }) {\n return this.selfFactory({ options: mix(this._options, { headers: headerValues }) })\n }\n\n /**\n * Shortcut to set the \"Accept\" header.\n * @param headerValue Header value\n */\n accept(headerValue: string) {\n return this.headers({ Accept : headerValue })\n }\n\n /**\n * Shortcut to set the \"Content-Type\" header.\n * @param headerValue Header value\n */\n content(headerValue: string) {\n return this.headers({ \"Content-Type\" : headerValue })\n }\n\n /**\n * Shortcut to set the \"Authorization\" header.\n * @param headerValue Header value\n */\n auth(headerValue: string) {\n return this.headers({ Authorization: headerValue })\n }\n\n /**\n * Adds a default catcher which will be called on every subsequent request error when the error code matches.\n * @param errorId Error code or name\n * @param catcher: The catcher method\n */\n catcher(errorId: number | string, catcher: (error: WretcherError, originalRequest: Wretcher) => any) {\n const newMap = new Map(this._catchers)\n newMap.set(errorId, catcher)\n return this.selfFactory({ catchers: newMap })\n }\n\n /**\n * Associates a custom signal with the request.\n * @param controller : An AbortController\n */\n signal(controller: any) {\n return this.selfFactory({ options: { ...this._options, signal: controller.signal } as any })\n }\n\n /**\n * Program a resolver to perform response chain tasks automatically.\n * @param doResolve : Resolver callback\n */\n resolve(doResolve: (chain: ResponseChain, originalRequest: Wretcher) => ResponseChain | Promise, clear: boolean = false) {\n return this.selfFactory({ resolvers: clear ? [ doResolve ] : [ ...this._resolvers, doResolve ]})\n }\n\n /**\n * Defer wretcher methods that will be chained and called just before the request is performed.\n */\n defer(callback: DeferredCallback, clear = false) {\n return this.selfFactory({\n deferredChain: clear ? [callback] : [ ...this._deferredChain, callback ]\n })\n }\n\n /**\n * Add middlewares to intercept a request before being sent.\n */\n middlewares(middlewares: ConfiguredMiddleware[], clear = false) {\n return this.selfFactory({\n middlewares: clear ? middlewares : [ ...this._middlewares, ...middlewares ]\n })\n }\n\n private method(method, options = {}, body = null) {\n const baseWretcher =\n !body ? this :\n typeof body === \"object\" ? this.json(body) :\n this.body(body)\n const deferredWretcher = baseWretcher._deferredChain.reduce((acc: Wretcher, curr) => curr(acc, acc._url, acc._options), baseWretcher)\n return resolver(deferredWretcher.options({ ...options, method }))\n }\n\n /**\n * Performs a get request.\n */\n get(options?) {\n return this.method(\"GET\", options)\n }\n /**\n * Performs a delete request.\n */\n delete(options?) {\n return this.method(\"DELETE\", options)\n }\n /**\n * Performs a put request.\n */\n put(body?, options?) {\n return this.method(\"PUT\", options, body)\n }\n /**\n * Performs a post request.\n */\n post(body?, options?) {\n return this.method(\"POST\", options, body)\n }\n /**\n * Performs a patch request.\n */\n patch(body?, options?) {\n return this.method(\"PATCH\", options, body)\n }\n /**\n * Performs a head request.\n */\n head(options?) {\n return this.method(\"HEAD\", options)\n }\n /**\n * Performs an options request\n */\n opts(options?) {\n return this.method(\"OPTIONS\", options)\n }\n\n /**\n * Sets the request body with any content.\n * @param contents The body contents\n */\n body(contents: any) {\n return this.selfFactory({ options: { ...this._options, body: contents }})\n }\n /**\n * Sets the content type header, stringifies an object and sets the request body.\n * @param jsObject An object which will be serialized into a JSON\n */\n json(jsObject: object) {\n return this.content(\"application/json\").body(JSON.stringify(jsObject))\n }\n /**\n * Converts the javascript object to a FormData and sets the request body.\n * @param formObject An object which will be converted to a FormData\n */\n formData(formObject: object) {\n return this.body(convertFormData(formObject))\n }\n /**\n * Converts the input to an url encoded string and sets the content-type header and body.\n * If the input argument is already a string, skips the conversion part.\n *\n * @param input An object to convert into an url encoded string or an already encoded string\n */\n formUrl(input: (object | string)) {\n return this\n .body(typeof input === \"string\" ? input : convertFormUrl(input))\n .content(\"application/x-www-form-urlencoded\")\n }\n}\n\n// Internal helpers\n\nconst appendQueryParams = (url: string, qp: object | string, replace: boolean) => {\n let queryString\n\n if(typeof qp === \"string\") {\n queryString = qp\n } else {\n const usp = conf.polyfill(\"URLSearchParams\", { instance: true })\n for(const key in qp) {\n if(qp[key] instanceof Array) {\n for(const val of qp[key])\n usp.append(key, val)\n } else {\n usp.append(key, qp[key])\n }\n }\n queryString = usp.toString()\n }\n\n const split = url.split(\"?\")\n if(replace || split.length < 2)\n return split[0] + \"?\" + queryString\n\n return url + \"&\" + queryString\n}\n\nfunction convertFormData(formObject: object) {\n const formData = conf.polyfill(\"FormData\", { instance: true })\n for(const key in formObject) {\n if(formObject[key] instanceof Array) {\n for(const item of formObject[key])\n formData.append(key + \"[]\", item)\n } else {\n formData.append(key, formObject[key])\n }\n }\n\n return formData\n}\n\nfunction encodeQueryValue(key: string, value: any) {\n return encodeURIComponent(key) +\n \"=\" +\n encodeURIComponent(\n typeof value === \"object\" ?\n JSON.stringify(value) :\n value\n )\n}\nfunction convertFormUrl(formObject: object) {\n return Object.keys(formObject)\n .map(key => {\n const value = formObject[key]\n if(value instanceof Array) {\n return value.map(v => encodeQueryValue(key, v)).join(\"&\")\n }\n return encodeQueryValue(key, value)\n })\n .join(\"&\")\n}\n","import { Wretcher } from \"./wretcher\"\nimport { mix } from \"./mix\"\nimport conf from \"./config\"\nimport perfs from \"./perfs\"\nimport { middlewareHelper, ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherError = Error & { status: number, response: WretcherResponse, text?: string, json?: any }\nexport type WretcherResponse = Response & { [key: string]: any }\nexport type ResponseChain = {\n // Response types\n res: (cb?: (type: WretcherResponse) => Result) => Promise,\n json: (cb?: (type: {[key: string]: any}) => Result) => Promise,\n blob: (cb?: (type: Blob) => Result) => Promise,\n formData: (cb?: (type: FormData) => Result) => Promise,\n arrayBuffer: (cb?: (type: ArrayBuffer) => Result) => Promise,\n text: (cb?: (type: string) => Result) => Promise,\n // Extras\n perfs: (cb?: (type: any) => void) => ResponseChain,\n setTimeout: (time: number, controller?: any) => ResponseChain,\n controller: () => [any, ResponseChain],\n // Catchers\n error: (code: (number | string), cb: any) => ResponseChain,\n badRequest: (cb: (error: WretcherError, originalRequest: Wretcher) => void) => ResponseChain,\n unauthorized: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n forbidden: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n notFound: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n timeout: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n internalError: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n onAbort: (cb: (error: Error, originalRequest: Wretcher) => any) => ResponseChain\n}\n\nexport const resolver = (wretcher: Wretcher) => {\n const {\n _url: url,\n _catchers: catchers,\n _resolvers: resolvers,\n _middlewares: middlewares,\n _options: opts\n } = wretcher\n\n type TypeParser = (funName: string | null) => (cb?: (type: Type) => Result) => Promise\n\n const finalOpts = mix(conf.defaults, opts)\n const fetchController = conf.polyfill(\"AbortController\", { doThrow: false, instance: true })\n if(!finalOpts[\"signal\"] && fetchController) {\n finalOpts[\"signal\"] = fetchController.signal\n }\n\n const req = middlewareHelper(middlewares)(conf.polyfill(\"fetch\"))(url, finalOpts)\n const wrapper: Promise = req.then(response => {\n if (!response.ok) {\n return response[conf.errorType || \"text\"]().then(msg => {\n const err = new Error(msg)\n err[conf.errorType] = msg\n err[\"status\"] = response.status\n err[\"response\"] = response\n throw err\n })\n }\n return response\n })\n\n const doCatch = (promise: Promise): Promise => {\n return promise.catch(err => {\n if(catchers.has(err.status))\n return catchers.get(err.status)(err, wretcher)\n else if(catchers.has(err.name))\n return catchers.get(err.name)(err, wretcher)\n else\n throw err\n })\n }\n const wrapTypeParser: TypeParser = (funName) => (cb) => funName ?\n doCatch(wrapper.then(_ => _ && _[funName]()).then(_ => _ && cb && cb(_) || _)) :\n doCatch(wrapper.then(_ => _ && cb && cb(_) || _))\n\n const responseChain: ResponseChain = {\n /**\n * Retrieves the raw result as a promise.\n */\n res: wrapTypeParser(null),\n /**\n * Retrieves the result as a parsed JSON object.\n */\n json: wrapTypeParser(\"json\"),\n /**\n * Retrieves the result as a Blob object.\n */\n blob: wrapTypeParser(\"blob\"),\n /**\n * Retrieves the result as a FormData object.\n */\n formData: wrapTypeParser(\"formData\"),\n /**\n * Retrieves the result as an ArrayBuffer object.\n */\n arrayBuffer: wrapTypeParser(\"arrayBuffer\"),\n /**\n * Retrieves the result as a string.\n */\n text: wrapTypeParser(\"text\"),\n /**\n * Performs a callback on the API performance timings of the request.\n *\n * Warning: Still experimental on browsers and node.js\n */\n perfs: cb => {\n req.then(res => perfs.observe(res.url, cb))\n return responseChain\n },\n /**\n * Aborts the request after a fixed time.\n *\n * @param time Time in milliseconds\n * @param controller A custom controller\n */\n setTimeout: (time, controller = fetchController) => {\n setTimeout(() => controller.abort(), time)\n return responseChain\n },\n /**\n * Returns the automatically generated AbortController alongside the current wretch response as a pair.\n */\n controller: () => [ fetchController, responseChain ],\n /**\n * Catches an http response with a specific error code or name and performs a callback.\n */\n error(errorId, cb) {\n catchers.set(errorId, cb)\n return responseChain\n },\n /**\n * Catches a bad request (http code 400) and performs a callback.\n */\n badRequest: cb => responseChain.error(400, cb),\n /**\n * Catches an unauthorized request (http code 401) and performs a callback.\n */\n unauthorized: cb => responseChain.error(401, cb),\n /**\n * Catches a forbidden request (http code 403) and performs a callback.\n */\n forbidden: cb => responseChain.error(403, cb),\n /**\n * Catches a \"not found\" request (http code 404) and performs a callback.\n */\n notFound: cb => responseChain.error(404, cb),\n /**\n * Catches a timeout (http code 408) and performs a callback.\n */\n timeout: cb => responseChain.error(408, cb),\n /**\n * Catches an internal server error (http code 500) and performs a callback.\n */\n internalError: cb => responseChain.error(500, cb),\n /**\n * Catches an AbortError and performs a callback.\n */\n onAbort: cb => responseChain.error(\"AbortError\", cb)\n }\n\n return resolvers.reduce((chain, r) => r(chain, wretcher), responseChain) as (ResponseChain & Promise)\n}\n","import { WretcherOptions } from \"./wretcher\"\nimport { WretcherResponse } from \"./resolver\"\n\nexport type Middleware = (options?: {[key: string]: any}) => ConfiguredMiddleware\nexport type ConfiguredMiddleware = (next: FetchLike) => FetchLike\nexport type FetchLike = (url: string, opts: WretcherOptions) => Promise\n\nexport const middlewareHelper = (middlewares: ConfiguredMiddleware[]) => (fetchFunction: FetchLike): FetchLike => {\n return (\n middlewares.length === 0 ?\n fetchFunction :\n middlewares.length === 1 ?\n middlewares[0](fetchFunction) :\n middlewares.reduceRight((acc, curr, idx): any =>\n (idx === middlewares.length - 2) ? curr(acc(fetchFunction)) : curr(acc as any)\n )\n ) as FetchLike\n}\n","import { Wretcher } from \"./wretcher\"\n\nconst factory = Wretcher.factory\nfactory[\"default\"] = Wretcher.factory\n\n/**\n * Return a fresh Wretcher instance.\n */\nexport default factory\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","mix","one","two","mergeArrays","clone","prop","Array","config","defaults","errorType","polyfills","fetch","FormData","URLSearchParams","performance","PerformanceObserver","AbortController","polyfill","_a","_b","_c","doThrow","_d","instance","_i","args","res","this","self","global","Error","onMatch","entries","name","callback","_performance","getEntriesByName","matches","reverse","clearMeasures","perfs","callbacks","delete","size","observer","disconnect","clearResourceTimings","Map","observe","conf","_observer","forEach","lazyObserver","entryTypes","set","_url","_options","_catchers","_resolvers","_middlewares","_deferredChain","Wretcher","url","options","_e","catchers","_f","resolvers","_g","middlewares","_h","mixin","method","replace","selfFactory","split","qp","appendQueryParams","headerValues","headers","headerValue","Accept","Content-Type","Authorization","errorId","catcher","newMap","controller","tslib_1.__assign","signal","doResolve","clear","deferredChain","body","baseWretcher","json","wretcher","opts","finalOpts","fetchController","req","fetchFunction","reduceRight","acc","curr","idx","middlewareHelper","wrapper","then","response","ok","msg","err","status","doCatch","promise","catch","has","get","wrapTypeParser","funName","cb","_","responseChain","blob","formData","arrayBuffer","text","setTimeout","time","abort","error","badRequest","unauthorized","forbidden","notFound","timeout","internalError","onAbort","reduce","chain","r","resolver","contents","jsObject","content","JSON","stringify","formObject","key","item","append","convertFormData","input","keys","map","value","v","encodeQueryValue","join","queryString","usp","val","toString","encodeURIComponent","factory"],"mappings":"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"} \ No newline at end of file diff --git a/dist/wretcher.js.map b/dist/wretcher.js.map index eb071ba..45b0e78 100644 --- a/dist/wretcher.js.map +++ b/dist/wretcher.js.map @@ -1 +1 @@ -{"version":3,"file":"wretcher.js","sourceRoot":"","sources":["../src/wretcher.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"wretcher.js","sourceRoot":"","sources":["../src/wretcher.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 51a0d86..e3849ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wretch", - "version": "1.3.1", + "version": "1.4.0", "description": "A tiny wrapper built around fetch with an intuitive syntax.", "keywords": [ "wretch", diff --git a/test/browser/src/wretch.min.js b/test/browser/src/wretch.min.js index e93938a..6e15612 100644 --- a/test/browser/src/wretch.min.js +++ b/test/browser/src/wretch.min.js @@ -1,2 +1,2 @@ -!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):t.wretch=r()}(this,function(){"use strict";var t=Object.assign||function(t){for(var r,e=1,o=arguments.length;e0)&&(e(i.reverse()[0]),o.clearMeasures&&o.clearMeasures(r),n.callbacks.delete(r),n.callbacks.size<1&&(n.observer.disconnect(),o.clearResourceTimings&&o.clearResourceTimings()),!0)},n={callbacks:new Map,observer:null,observe:function(t,r){if(t&&r){var i=e.polyfill("performance",{doThrow:!1});(function(t,r){return!n.observer&&t&&r&&(n.observer=new r(function(r){n.callbacks.forEach(function(e,n){o(r,n,e,t)})}),t.clearResourceTimings&&t.clearResourceTimings()),n.observer})(i,e.polyfill("PerformanceObserver",{doThrow:!1}))&&(o(i,t,r,i)||(n.callbacks.size<1&&n.observer.observe({entryTypes:["resource","measure"]}),n.callbacks.set(t,r)))}}},i=function(){function o(t,r,e,o,n,i){void 0===e&&(e=new Map),void 0===o&&(o=[]),void 0===n&&(n=[]),void 0===i&&(i=[]),this._url=t,this._options=r,this._catchers=e,this._resolvers=o,this._middlewares=n,this._deferredChain=i}return o.factory=function(t,r){return void 0===t&&(t=""),void 0===r&&(r={}),new o(t,r)},o.prototype.selfFactory=function(t){var r=void 0===t?{}:t,e=r.url,n=void 0===e?this._url:e,i=r.options,s=void 0===i?this._options:i,u=r.catchers,c=void 0===u?this._catchers:u,a=r.resolvers,f=void 0===a?this._resolvers:a,l=r.middlewares,p=void 0===l?this._middlewares:l,h=r.deferredChain;return new o(n,s,c,f,p,void 0===h?this._deferredChain:h)},o.prototype.defaults=function(t,o){return void 0===o&&(o=!1),e.defaults=o?r(e.defaults,t):t,this},o.prototype.errorType=function(t){return e.errorType=t,this},o.prototype.polyfills=function(r){return e.polyfills=t({},e.polyfills,r),this},o.prototype.url=function(t,r){if(void 0===r&&(r=!1),r)return this.selfFactory({url:t});var e=this._url.split("?");return this.selfFactory({url:e.length>1?e[0]+t+"?"+e[1]:this._url+t})},o.prototype.options=function(t,e){return void 0===e&&(e=!0),this.selfFactory({options:e?r(this._options,t):t})},o.prototype.query=function(t,r){return void 0===r&&(r=!1),this.selfFactory({url:s(this._url,t,r)})},o.prototype.headers=function(t){return this.selfFactory({options:r(this._options,{headers:t})})},o.prototype.accept=function(t){return this.headers({Accept:t})},o.prototype.content=function(t){return this.headers({"Content-Type":t})},o.prototype.auth=function(t){return this.headers({Authorization:t})},o.prototype.catcher=function(t,r){var e=new Map(this._catchers);return e.set(t,r),this.selfFactory({catchers:e})},o.prototype.signal=function(r){return this.selfFactory({options:t({},this._options,{signal:r.signal})})},o.prototype.resolve=function(t,r){return void 0===r&&(r=!1),this.selfFactory({resolvers:r?[t]:this._resolvers.concat([t])})},o.prototype.defer=function(t,r){return void 0===r&&(r=!1),this.selfFactory({deferredChain:r?[t]:this._deferredChain.concat([t])})},o.prototype.middlewares=function(t,r){return void 0===r&&(r=!1),this.selfFactory({middlewares:r?t:this._middlewares.concat(t)})},o.prototype.method=function(o,i,s){void 0===i&&(i={}),void 0===s&&(s=null);var u=s?"object"==typeof s?this.json(s):this.body(s):this;return function(t){var o=t._url,i=t._catchers,s=t._resolvers,u=t._middlewares,c=t._options,a=r(e.defaults,c),f=e.polyfill("AbortController",{doThrow:!1,instance:!0});!a.signal&&f&&(a.signal=f.signal);var l=function(t){return function(r){return 0===t.length?r:1===t.length?t[0](r):t.reduceRight(function(e,o,n){return n===t.length-2?o(e(r)):o(e)})}}(u)(e.polyfill("fetch"))(o,a),p=l.then(function(t){return t.ok?t:t[e.errorType||"text"]().then(function(r){var o=new Error(r);throw o[e.errorType]=r,o.status=t.status,o.response=t,o})}),h=function(r){return r.catch(function(r){if(i.has(r.status))return i.get(r.status)(r,t);if(i.has(r.name))return i.get(r.name)(r,t);throw r})},d=function(t){return function(r){return h(t?p.then(function(r){return r&&r[t]()}).then(function(t){return t&&r&&r(t)||t}):p.then(function(t){return t&&r&&r(t)||t}))}},y={res:d(null),json:d("json"),blob:d("blob"),formData:d("formData"),arrayBuffer:d("arrayBuffer"),text:d("text"),perfs:function(t){return l.then(function(r){return n.observe(r.url,t)}),y},setTimeout:function(t,r){return void 0===r&&(r=f),setTimeout(function(){return r.abort()},t),y},controller:function(){return[f,y]},error:function(t,r){return i.set(t,r),y},badRequest:function(t){return y.error(400,t)},unauthorized:function(t){return y.error(401,t)},forbidden:function(t){return y.error(403,t)},notFound:function(t){return y.error(404,t)},timeout:function(t){return y.error(408,t)},internalError:function(t){return y.error(500,t)},onAbort:function(t){return y.error("AbortError",t)}};return s.reduce(function(r,e){return e(r,t)},y)}(u._deferredChain.reduce(function(t,r){return r(t,t._url,t._options)},u).options(t({},i,{method:o})))},o.prototype.get=function(t){return this.method("GET",t)},o.prototype.delete=function(t){return this.method("DELETE",t)},o.prototype.put=function(t,r){return this.method("PUT",r,t)},o.prototype.post=function(t,r){return this.method("POST",r,t)},o.prototype.patch=function(t,r){return this.method("PATCH",r,t)},o.prototype.head=function(t){return this.method("HEAD",t)},o.prototype.opts=function(t){return this.method("OPTIONS",t)},o.prototype.body=function(r){return this.selfFactory({options:t({},this._options,{body:r})})},o.prototype.json=function(t){return this.content("application/json").body(JSON.stringify(t))},o.prototype.formData=function(t){return this.body(u(t))},o.prototype.formUrl=function(t){return this.body("string"==typeof t?t:c(t)).content("application/x-www-form-urlencoded")},o}(),s=function(t,r,o){var n;if("string"==typeof r)n=r;else{var i=e.polyfill("URLSearchParams",{instance:!0});for(var s in r)if(r[s]instanceof Array)for(var u=0,c=r[s];u0)&&(e(i.reverse()[0]),o.clearMeasures&&o.clearMeasures(r),n.callbacks.delete(r),n.callbacks.size<1&&(n.observer.disconnect(),o.clearResourceTimings&&o.clearResourceTimings()),!0)},n={callbacks:new Map,observer:null,observe:function(t,r){if(t&&r){var i=e.polyfill("performance",{doThrow:!1});(function(t,r){return!n.observer&&t&&r&&(n.observer=new r(function(r){n.callbacks.forEach(function(e,n){o(r,n,e,t)})}),t.clearResourceTimings&&t.clearResourceTimings()),n.observer})(i,e.polyfill("PerformanceObserver",{doThrow:!1}))&&(o(i,t,r,i)||(n.callbacks.size<1&&n.observer.observe({entryTypes:["resource","measure"]}),n.callbacks.set(t,r)))}}},i=function(){function o(t,r,e,o,n,i){void 0===e&&(e=new Map),void 0===o&&(o=[]),void 0===n&&(n=[]),void 0===i&&(i=[]),this._url=t,this._options=r,this._catchers=e,this._resolvers=o,this._middlewares=n,this._deferredChain=i}return o.factory=function(t,r){return void 0===t&&(t=""),void 0===r&&(r={}),new o(t,r)},o.prototype.selfFactory=function(t){var r=void 0===t?{}:t,e=r.url,n=void 0===e?this._url:e,i=r.options,s=void 0===i?this._options:i,u=r.catchers,c=void 0===u?this._catchers:u,a=r.resolvers,f=void 0===a?this._resolvers:a,l=r.middlewares,p=void 0===l?this._middlewares:l,h=r.deferredChain;return new o(n,s,c,f,p,void 0===h?this._deferredChain:h)},o.prototype.defaults=function(t,o){return void 0===o&&(o=!1),e.defaults=o?r(e.defaults,t):t,this},o.prototype.errorType=function(t){return e.errorType=t,this},o.prototype.polyfills=function(r){return e.polyfills=t({},e.polyfills,r),this},o.prototype.url=function(t,r){if(void 0===r&&(r=!1),r)return this.selfFactory({url:t});var e=this._url.split("?");return this.selfFactory({url:e.length>1?e[0]+t+"?"+e[1]:this._url+t})},o.prototype.options=function(t,e){return void 0===e&&(e=!0),this.selfFactory({options:e?r(this._options,t):t})},o.prototype.query=function(t,r){return void 0===r&&(r=!1),this.selfFactory({url:s(this._url,t,r)})},o.prototype.headers=function(t){return this.selfFactory({options:r(this._options,{headers:t})})},o.prototype.accept=function(t){return this.headers({Accept:t})},o.prototype.content=function(t){return this.headers({"Content-Type":t})},o.prototype.auth=function(t){return this.headers({Authorization:t})},o.prototype.catcher=function(t,r){var e=new Map(this._catchers);return e.set(t,r),this.selfFactory({catchers:e})},o.prototype.signal=function(r){return this.selfFactory({options:t({},this._options,{signal:r.signal})})},o.prototype.resolve=function(t,r){return void 0===r&&(r=!1),this.selfFactory({resolvers:r?[t]:this._resolvers.concat([t])})},o.prototype.defer=function(t,r){return void 0===r&&(r=!1),this.selfFactory({deferredChain:r?[t]:this._deferredChain.concat([t])})},o.prototype.middlewares=function(t,r){return void 0===r&&(r=!1),this.selfFactory({middlewares:r?t:this._middlewares.concat(t)})},o.prototype.method=function(o,i,s){void 0===i&&(i={}),void 0===s&&(s=null);var u=s?"object"==typeof s?this.json(s):this.body(s):this;return function(t){var o=t._url,i=t._catchers,s=t._resolvers,u=t._middlewares,c=t._options,a=r(e.defaults,c),f=e.polyfill("AbortController",{doThrow:!1,instance:!0});!a.signal&&f&&(a.signal=f.signal);var l=function(t){return function(r){return 0===t.length?r:1===t.length?t[0](r):t.reduceRight(function(e,o,n){return n===t.length-2?o(e(r)):o(e)})}}(u)(e.polyfill("fetch"))(o,a),p=l.then(function(t){return t.ok?t:t[e.errorType||"text"]().then(function(r){var o=new Error(r);throw o[e.errorType]=r,o.status=t.status,o.response=t,o})}),h=function(r){return r.catch(function(r){if(i.has(r.status))return i.get(r.status)(r,t);if(i.has(r.name))return i.get(r.name)(r,t);throw r})},d=function(t){return function(r){return h(t?p.then(function(r){return r&&r[t]()}).then(function(t){return t&&r&&r(t)||t}):p.then(function(t){return t&&r&&r(t)||t}))}},y={res:d(null),json:d("json"),blob:d("blob"),formData:d("formData"),arrayBuffer:d("arrayBuffer"),text:d("text"),perfs:function(t){return l.then(function(r){return n.observe(r.url,t)}),y},setTimeout:function(t,r){return void 0===r&&(r=f),setTimeout(function(){return r.abort()},t),y},controller:function(){return[f,y]},error:function(t,r){return i.set(t,r),y},badRequest:function(t){return y.error(400,t)},unauthorized:function(t){return y.error(401,t)},forbidden:function(t){return y.error(403,t)},notFound:function(t){return y.error(404,t)},timeout:function(t){return y.error(408,t)},internalError:function(t){return y.error(500,t)},onAbort:function(t){return y.error("AbortError",t)}};return s.reduce(function(r,e){return e(r,t)},y)}(u._deferredChain.reduce(function(t,r){return r(t,t._url,t._options)},u).options(t({},i,{method:o})))},o.prototype.get=function(t){return this.method("GET",t)},o.prototype.delete=function(t){return this.method("DELETE",t)},o.prototype.put=function(t,r){return this.method("PUT",r,t)},o.prototype.post=function(t,r){return this.method("POST",r,t)},o.prototype.patch=function(t,r){return this.method("PATCH",r,t)},o.prototype.head=function(t){return this.method("HEAD",t)},o.prototype.opts=function(t){return this.method("OPTIONS",t)},o.prototype.body=function(r){return this.selfFactory({options:t({},this._options,{body:r})})},o.prototype.json=function(t){return this.content("application/json").body(JSON.stringify(t))},o.prototype.formData=function(t){return this.body(function(t){var r=e.polyfill("FormData",{instance:!0});for(var o in t)if(t[o]instanceof Array)for(var n=0,i=t[o];n= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export const mix = function(one: object, two: object, mergeArrays: boolean = false) {\n if(!one || !two || typeof one !== \"object\" || typeof two !== \"object\")\n return one\n\n const clone = { ...one }\n for(const prop in two) {\n if(two.hasOwnProperty(prop)) {\n if(two[prop] instanceof Array && one[prop] instanceof Array) {\n clone[prop] = mergeArrays ? [ ...one[prop], ...two[prop] ] : two[prop]\n } else if(typeof two[prop] === \"object\" && typeof one[prop] === \"object\") {\n clone[prop] = mix(one[prop], two[prop], mergeArrays)\n } else {\n clone[prop] = two[prop]\n }\n }\n }\n\n return clone\n}\n","declare const global\n\nconst config = {\n // Default options\n defaults: {},\n // Error type\n errorType: null,\n // Polyfills\n polyfills: {\n fetch: null,\n FormData: null,\n URLSearchParams: null,\n performance: null,\n PerformanceObserver: null,\n AbortController: null\n },\n polyfill(p: string, { doThrow = true, instance = false } = {}, ...args) {\n const res = this.polyfills[p] ||\n (typeof self !== \"undefined\" ? self[p] : null) ||\n (typeof global !== \"undefined\" ? global[p] : null)\n if(doThrow && !res) throw new Error(p + \" is not defined\")\n return instance && res ? new res(...args) : res\n }\n}\n\nexport default config\n","import conf from \"./config\"\n\nconst onMatch = (entries, name, callback, _performance) => {\n if(!entries.getEntriesByName)\n return false\n const matches = entries.getEntriesByName(name)\n if(matches && matches.length > 0) {\n callback(matches.reverse()[0])\n if(_performance.clearMeasures)\n _performance.clearMeasures(name)\n perfs.callbacks.delete(name)\n\n if(perfs.callbacks.size < 1) {\n perfs.observer.disconnect()\n if(_performance.clearResourceTimings) {\n _performance.clearResourceTimings()\n }\n }\n return true\n }\n return false\n}\n\nconst lazyObserver = (_performance, _observer) => {\n if(!perfs.observer && _performance && _observer) {\n perfs.observer = new _observer(entries => {\n perfs.callbacks.forEach((callback, name) => {\n onMatch(entries, name, callback, _performance)\n })\n })\n if(_performance.clearResourceTimings)\n _performance.clearResourceTimings()\n }\n return perfs.observer\n}\n\nconst perfs = {\n callbacks: new Map(),\n observer: null,\n observe: (name, callback) => {\n if(!name || !callback)\n return\n\n const _performance = conf.polyfill(\"performance\", { doThrow: false })\n const _observer = conf.polyfill(\"PerformanceObserver\", { doThrow: false })\n\n if(!lazyObserver(_performance, _observer))\n return\n\n if(!onMatch(_performance, name, callback, _performance)) {\n if(perfs.callbacks.size < 1)\n perfs.observer.observe({ entryTypes: [\"resource\", \"measure\"] })\n perfs.callbacks.set(name, callback)\n }\n\n }\n}\n\nexport default perfs\n","import { mix } from \"./mix\"\nimport conf from \"./config\"\nimport { resolver, WretcherError, ResponseChain } from \"./resolver\"\nimport { ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherOptions = RequestInit & {\n [key: string]: any\n}\n\nexport type DeferredCallback = (wretcher: Wretcher, url: string, options: WretcherOptions) => Wretcher\n\n/**\n * The Wretcher class used to perform easy fetch requests.\n *\n * Immutability : almost every method of this class return a fresh Wretcher object.\n */\nexport class Wretcher {\n\n protected constructor(\n public _url: string,\n public _options: WretcherOptions,\n public _catchers: Map void> = new Map(),\n public _resolvers: Array<(resolver: ResponseChain, originalRequest: Wretcher) => any> = [],\n public _middlewares: ConfiguredMiddleware[] = [],\n public _deferredChain: DeferredCallback[] = []) {}\n\n static factory(url = \"\", options: WretcherOptions = {}) { return new Wretcher(url, options) }\n private selfFactory({ url = this._url, options = this._options, catchers = this._catchers,\n resolvers = this._resolvers, middlewares = this._middlewares, deferredChain = this._deferredChain } = {}) {\n return new Wretcher(url, options, catchers, resolvers, middlewares, deferredChain)\n }\n\n /**\n * Sets the default fetch options used for every subsequent fetch call.\n * @param options New default options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n defaults(options: WretcherOptions, mixin = false) {\n conf.defaults = mixin ? mix(conf.defaults, options) : options\n return this\n }\n\n /**\n * Sets the method (text, json ...) used to parse the data contained in the response body in case of an HTTP error.\n *\n * Persists for every subsequent requests.\n *\n * Default is \"text\".\n */\n errorType(method: \"text\" | \"json\") {\n conf.errorType = method\n return this\n }\n\n /**\n * Sets the non-global polyfills which will be used for every subsequent calls.\n *\n * Needed for libraries like [fetch-ponyfill](https://github.com/qubyte/fetch-ponyfill).\n *\n * @param polyfills An object containing the polyfills.\n */\n polyfills(polyfills: Partial) {\n conf.polyfills = { ...conf.polyfills, ...polyfills }\n return this\n }\n\n /**\n * Returns a new Wretcher object with the argument url appended and the same options.\n * @param url String url\n * @param replace Boolean If true, replaces the current url instead of appending\n */\n url(url: string, replace = false) {\n if(replace)\n return this.selfFactory({ url })\n const split = this._url.split(\"?\")\n return this.selfFactory({\n url: split.length > 1 ?\n split[0] + url + \"?\" + split[1] :\n this._url + url\n })\n }\n\n /**\n * Returns a new Wretcher object with the same url and new options.\n * @param options New options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n options(options: WretcherOptions, mixin = true) {\n return this.selfFactory({ options: mixin ? mix(this._options, options) : options })\n }\n\n /**\n * Converts a javascript object to query parameters,\n * then appends this query string to the current url.\n *\n * If given a string, use the string as the query verbatim.\n *\n * ```\n * let w = wretch(\"http://example.com\") // url is http://example.com\n *\n * // Chain query calls\n * w = w.query({ a: 1, b : 2 }) // url is now http://example.com?a=1&b=2\n * w = w.query(\"foo-bar-baz-woz\") // url is now http://example.com?a=1&b=2&foo-bar-baz-woz\n *\n * // Pass true as the second argument to replace existing query parameters\n * w = w.query(\"c=3&d=4\", true) // url is now http://example.com?c=3&d=4\n * ```\n *\n * @param qp An object which will be converted, or a string which will be used verbatim.\n */\n query(qp: object | string, replace: boolean = false) {\n return this.selfFactory({ url: appendQueryParams(this._url, qp, replace) })\n }\n\n /**\n * Set request headers.\n * @param headerValues An object containing header keys and values\n */\n headers(headerValues: { [headerName: string]: any }) {\n return this.selfFactory({ options: mix(this._options, { headers: headerValues }) })\n }\n\n /**\n * Shortcut to set the \"Accept\" header.\n * @param headerValue Header value\n */\n accept(headerValue: string) {\n return this.headers({ Accept : headerValue })\n }\n\n /**\n * Shortcut to set the \"Content-Type\" header.\n * @param headerValue Header value\n */\n content(headerValue: string) {\n return this.headers({ \"Content-Type\" : headerValue })\n }\n\n /**\n * Shortcut to set the \"Authorization\" header.\n * @param headerValue Header value\n */\n auth(headerValue: string) {\n return this.headers({ Authorization: headerValue })\n }\n\n /**\n * Adds a default catcher which will be called on every subsequent request error when the error code matches.\n * @param errorId Error code or name\n * @param catcher: The catcher method\n */\n catcher(errorId: number | string, catcher: (error: WretcherError, originalRequest: Wretcher) => any) {\n const newMap = new Map(this._catchers)\n newMap.set(errorId, catcher)\n return this.selfFactory({ catchers: newMap })\n }\n\n /**\n * Associates a custom signal with the request.\n * @param controller : An AbortController\n */\n signal(controller: any) {\n return this.selfFactory({ options: { ...this._options, signal: controller.signal } as any })\n }\n\n /**\n * Program a resolver to perform response chain tasks automatically.\n * @param doResolve : Resolver callback\n */\n resolve(doResolve: (chain: ResponseChain, originalRequest: Wretcher) => ResponseChain | Promise, clear: boolean = false) {\n return this.selfFactory({ resolvers: clear ? [ doResolve ] : [ ...this._resolvers, doResolve ]})\n }\n\n /**\n * Defer wretcher methods that will be chained and called just before the request is performed.\n */\n defer(callback: DeferredCallback, clear = false) {\n return this.selfFactory({\n deferredChain: clear ? [callback] : [ ...this._deferredChain, callback ]\n })\n }\n\n /**\n * Add middlewares to intercept a request before being sent.\n */\n middlewares(middlewares: ConfiguredMiddleware[], clear = false) {\n return this.selfFactory({\n middlewares: clear ? middlewares : [ ...this._middlewares, ...middlewares ]\n })\n }\n\n private method(method, options = {}, body = null) {\n const baseWretcher =\n !body ? this :\n typeof body === \"object\" ? this.json(body) :\n this.body(body)\n const deferredWretcher = baseWretcher._deferredChain.reduce((acc: Wretcher, curr) => curr(acc, acc._url, acc._options), baseWretcher)\n return resolver(deferredWretcher.options({ ...options, method }))\n }\n\n /**\n * Performs a get request.\n */\n get(options?) {\n return this.method(\"GET\", options)\n }\n /**\n * Performs a delete request.\n */\n delete(options?) {\n return this.method(\"DELETE\", options)\n }\n /**\n * Performs a put request.\n */\n put(body?, options?) {\n return this.method(\"PUT\", options, body)\n }\n /**\n * Performs a post request.\n */\n post(body?, options?) {\n return this.method(\"POST\", options, body)\n }\n /**\n * Performs a patch request.\n */\n patch(body?, options?) {\n return this.method(\"PATCH\", options, body)\n }\n /**\n * Performs a head request.\n */\n head(options?) {\n return this.method(\"HEAD\", options)\n }\n /**\n * Performs an options request\n */\n opts(options?) {\n return this.method(\"OPTIONS\", options)\n }\n\n /**\n * Sets the request body with any content.\n * @param contents The body contents\n */\n body(contents: any) {\n return this.selfFactory({ options: { ...this._options, body: contents }})\n }\n /**\n * Sets the content type header, stringifies an object and sets the request body.\n * @param jsObject An object which will be serialized into a JSON\n */\n json(jsObject: object) {\n return this.content(\"application/json\").body(JSON.stringify(jsObject))\n }\n /**\n * Converts the javascript object to a FormData and sets the request body.\n * @param formObject An object which will be converted to a FormData\n */\n formData(formObject: object) {\n return this.body(convertFormData(formObject))\n }\n /**\n * Converts the input to an url encoded string and sets the content-type header and body.\n * If the input argument is already a string, skips the conversion part.\n *\n * @param input An object to convert into an url encoded string or an already encoded string\n */\n formUrl(input: (object | string)) {\n return this\n .body(typeof input === \"string\" ? input : convertFormUrl(input))\n .content(\"application/x-www-form-urlencoded\")\n }\n}\n\n// Internal helpers\n\nconst appendQueryParams = (url: string, qp: object | string, replace: boolean) => {\n let queryString\n\n if(typeof qp === \"string\") {\n queryString = qp\n } else {\n const usp = conf.polyfill(\"URLSearchParams\", { instance: true })\n for(const key in qp) {\n if(qp[key] instanceof Array) {\n for(const val of qp[key])\n usp.append(key, val)\n } else {\n usp.append(key, qp[key])\n }\n }\n queryString = usp.toString()\n }\n\n const split = url.split(\"?\")\n if(replace || split.length < 2)\n return split[0] + \"?\" + queryString\n\n return url + \"&\" + queryString\n}\n\nconst convertFormData = (formObject: object) => {\n const formData = conf.polyfill(\"FormData\", { instance: true })\n for(const key in formObject) {\n if(formObject[key] instanceof Array) {\n for(const item of formObject[key])\n formData.append(key + \"[]\", item)\n } else {\n formData.append(key, formObject[key])\n }\n }\n\n return formData\n}\n\nconst convertFormUrl = (formObject: object) => {\n return Object.keys(formObject)\n .map(key =>\n encodeURIComponent(key) + \"=\" +\n `${ encodeURIComponent(typeof formObject[key] === \"object\" ? JSON.stringify(formObject[key]) : formObject[key]) }`)\n .join(\"&\")\n}\n","import { Wretcher } from \"./wretcher\"\nimport { mix } from \"./mix\"\nimport conf from \"./config\"\nimport perfs from \"./perfs\"\nimport { middlewareHelper, ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherError = Error & { status: number, response: WretcherResponse, text?: string, json?: any }\nexport type WretcherResponse = Response & { [key: string]: any }\nexport type ResponseChain = {\n // Response types\n res: (cb?: (type: WretcherResponse) => Result) => Promise,\n json: (cb?: (type: {[key: string]: any}) => Result) => Promise,\n blob: (cb?: (type: Blob) => Result) => Promise,\n formData: (cb?: (type: FormData) => Result) => Promise,\n arrayBuffer: (cb?: (type: ArrayBuffer) => Result) => Promise,\n text: (cb?: (type: string) => Result) => Promise,\n // Extras\n perfs: (cb?: (type: any) => void) => ResponseChain,\n setTimeout: (time: number, controller?: any) => ResponseChain,\n controller: () => [any, ResponseChain],\n // Catchers\n error: (code: (number | string), cb: any) => ResponseChain,\n badRequest: (cb: (error: WretcherError, originalRequest: Wretcher) => void) => ResponseChain,\n unauthorized: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n forbidden: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n notFound: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n timeout: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n internalError: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n onAbort: (cb: (error: Error, originalRequest: Wretcher) => any) => ResponseChain\n}\n\nexport const resolver = (wretcher: Wretcher) => {\n const {\n _url: url,\n _catchers: catchers,\n _resolvers: resolvers,\n _middlewares: middlewares,\n _options: opts\n } = wretcher\n\n type TypeParser = (funName: string | null) => (cb?: (type: Type) => Result) => Promise\n\n const finalOpts = mix(conf.defaults, opts)\n const fetchController = conf.polyfill(\"AbortController\", { doThrow: false, instance: true })\n if(!finalOpts[\"signal\"] && fetchController) {\n finalOpts[\"signal\"] = fetchController.signal\n }\n\n const req = middlewareHelper(middlewares)(conf.polyfill(\"fetch\"))(url, finalOpts)\n const wrapper: Promise = req.then(response => {\n if (!response.ok) {\n return response[conf.errorType || \"text\"]().then(_ => {\n const err = new Error(_)\n err[conf.errorType] = _\n err[\"status\"] = response.status\n err[\"response\"] = response\n throw err\n })\n }\n return response\n })\n\n const doCatch = (promise: Promise): Promise => {\n return promise.catch(err => {\n if(catchers.has(err.status))\n return catchers.get(err.status)(err, wretcher)\n else if(catchers.has(err.name))\n return catchers.get(err.name)(err, wretcher)\n else\n throw err\n })\n }\n const wrapTypeParser: TypeParser = (funName) => (cb) => funName ?\n doCatch(wrapper.then(_ => _ && _[funName]()).then(_ => _ && cb && cb(_) || _)) :\n doCatch(wrapper.then(_ => _ && cb && cb(_) || _))\n\n const responseChain: ResponseChain = {\n /**\n * Retrieves the raw result as a promise.\n */\n res: wrapTypeParser(null),\n /**\n * Retrieves the result as a parsed JSON object.\n */\n json: wrapTypeParser(\"json\"),\n /**\n * Retrieves the result as a Blob object.\n */\n blob: wrapTypeParser(\"blob\"),\n /**\n * Retrieves the result as a FormData object.\n */\n formData: wrapTypeParser(\"formData\"),\n /**\n * Retrieves the result as an ArrayBuffer object.\n */\n arrayBuffer: wrapTypeParser(\"arrayBuffer\"),\n /**\n * Retrieves the result as a string.\n */\n text: wrapTypeParser(\"text\"),\n /**\n * Performs a callback on the API performance timings of the request.\n *\n * Warning: Still experimental on browsers and node.js\n */\n perfs: cb => {\n req.then(res => perfs.observe(res.url, cb))\n return responseChain\n },\n /**\n * Aborts the request after a fixed time.\n *\n * @param time Time in milliseconds\n * @param controller A custom controller\n */\n setTimeout: (time, controller = fetchController) => {\n setTimeout(() => controller.abort(), time)\n return responseChain\n },\n /**\n * Returns the automatically generated AbortController alongside the current wretch response as a pair.\n */\n controller: () => [ fetchController, responseChain ],\n /**\n * Catches an http response with a specific error code or name and performs a callback.\n */\n error(errorId, cb) {\n catchers.set(errorId, cb)\n return responseChain\n },\n /**\n * Catches a bad request (http code 400) and performs a callback.\n */\n badRequest: cb => responseChain.error(400, cb),\n /**\n * Catches an unauthorized request (http code 401) and performs a callback.\n */\n unauthorized: cb => responseChain.error(401, cb),\n /**\n * Catches a forbidden request (http code 403) and performs a callback.\n */\n forbidden: cb => responseChain.error(403, cb),\n /**\n * Catches a \"not found\" request (http code 404) and performs a callback.\n */\n notFound: cb => responseChain.error(404, cb),\n /**\n * Catches a timeout (http code 408) and performs a callback.\n */\n timeout: cb => responseChain.error(408, cb),\n /**\n * Catches an internal server error (http code 500) and performs a callback.\n */\n internalError: cb => responseChain.error(500, cb),\n /**\n * Catches an AbortError and performs a callback.\n */\n onAbort: cb => responseChain.error(\"AbortError\", cb)\n }\n\n return resolvers.reduce((chain, r) => r(chain, wretcher), responseChain) as (ResponseChain & Promise)\n}\n","import { WretcherOptions } from \"./wretcher\"\nimport { WretcherResponse } from \"./resolver\"\n\nexport type Middleware = (options?: {[key: string]: any}) => ConfiguredMiddleware\nexport type ConfiguredMiddleware = (next: FetchLike) => FetchLike\nexport type FetchLike = (url: string, opts: WretcherOptions) => Promise\n\nexport const middlewareHelper = (middlewares: ConfiguredMiddleware[]) => (fetchFunction: FetchLike): FetchLike => {\n return (\n middlewares.length === 0 ?\n fetchFunction :\n middlewares.length === 1 ?\n middlewares[0](fetchFunction) :\n middlewares.reduceRight((acc, curr, idx): any =>\n (idx === middlewares.length - 2) ? curr(acc(fetchFunction)) : curr(acc as any)\n )\n ) as FetchLike\n}\n","import { Wretcher } from \"./wretcher\"\n\nconst factory = Wretcher.factory\nfactory[\"default\"] = Wretcher.factory\n\n/**\n * Return a fresh Wretcher instance.\n */\nexport default factory\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","mix","one","two","mergeArrays","clone","prop","Array","config","defaults","errorType","polyfills","fetch","FormData","URLSearchParams","performance","PerformanceObserver","AbortController","polyfill","_a","_b","_c","doThrow","_d","instance","_i","args","res","this","self","global","Error","onMatch","entries","name","callback","_performance","getEntriesByName","matches","reverse","clearMeasures","perfs","callbacks","delete","size","observer","disconnect","clearResourceTimings","Map","observe","conf","_observer","forEach","lazyObserver","entryTypes","set","_url","_options","_catchers","_resolvers","_middlewares","_deferredChain","Wretcher","url","options","_e","catchers","_f","resolvers","_g","middlewares","_h","mixin","method","replace","selfFactory","split","qp","appendQueryParams","headerValues","headers","headerValue","Accept","Content-Type","Authorization","errorId","catcher","newMap","controller","tslib_1.__assign","signal","doResolve","clear","deferredChain","body","baseWretcher","json","wretcher","opts","finalOpts","fetchController","req","fetchFunction","reduceRight","acc","curr","idx","middlewareHelper","wrapper","then","response","ok","_","err","status","doCatch","promise","catch","has","get","wrapTypeParser","funName","cb","responseChain","blob","formData","arrayBuffer","text","setTimeout","time","abort","error","badRequest","unauthorized","forbidden","notFound","timeout","internalError","onAbort","reduce","chain","r","resolver","contents","jsObject","content","JSON","stringify","formObject","convertFormData","input","convertFormUrl","queryString","usp","key","val","append","toString","item","keys","map","encodeURIComponent","join","factory"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"wretch.min.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../src/mix.ts","../../../src/config.ts","../../../src/perfs.ts","../../../src/wretcher.ts","../../../src/resolver.ts","../../../src/middleware.ts","../../../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export const mix = function(one: object, two: object, mergeArrays: boolean = false) {\n if(!one || !two || typeof one !== \"object\" || typeof two !== \"object\")\n return one\n\n const clone = { ...one }\n for(const prop in two) {\n if(two.hasOwnProperty(prop)) {\n if(two[prop] instanceof Array && one[prop] instanceof Array) {\n clone[prop] = mergeArrays ? [ ...one[prop], ...two[prop] ] : two[prop]\n } else if(typeof two[prop] === \"object\" && typeof one[prop] === \"object\") {\n clone[prop] = mix(one[prop], two[prop], mergeArrays)\n } else {\n clone[prop] = two[prop]\n }\n }\n }\n\n return clone\n}\n","declare const global\n\nconst config = {\n // Default options\n defaults: {},\n // Error type\n errorType: null,\n // Polyfills\n polyfills: {\n fetch: null,\n FormData: null,\n URLSearchParams: null,\n performance: null,\n PerformanceObserver: null,\n AbortController: null\n },\n polyfill(p: string, { doThrow = true, instance = false } = {}, ...args) {\n const res = this.polyfills[p] ||\n (typeof self !== \"undefined\" ? self[p] : null) ||\n (typeof global !== \"undefined\" ? global[p] : null)\n if(doThrow && !res) throw new Error(p + \" is not defined\")\n return instance && res ? new res(...args) : res\n }\n}\n\nexport default config\n","import conf from \"./config\"\n\nconst onMatch = (entries, name, callback, _performance) => {\n if(!entries.getEntriesByName)\n return false\n const matches = entries.getEntriesByName(name)\n if(matches && matches.length > 0) {\n callback(matches.reverse()[0])\n if(_performance.clearMeasures)\n _performance.clearMeasures(name)\n perfs.callbacks.delete(name)\n\n if(perfs.callbacks.size < 1) {\n perfs.observer.disconnect()\n if(_performance.clearResourceTimings) {\n _performance.clearResourceTimings()\n }\n }\n return true\n }\n return false\n}\n\nconst lazyObserver = (_performance, _observer) => {\n if(!perfs.observer && _performance && _observer) {\n perfs.observer = new _observer(entries => {\n perfs.callbacks.forEach((callback, name) => {\n onMatch(entries, name, callback, _performance)\n })\n })\n if(_performance.clearResourceTimings)\n _performance.clearResourceTimings()\n }\n return perfs.observer\n}\n\nconst perfs = {\n callbacks: new Map(),\n observer: null,\n observe: (name, callback) => {\n if(!name || !callback)\n return\n\n const _performance = conf.polyfill(\"performance\", { doThrow: false })\n const _observer = conf.polyfill(\"PerformanceObserver\", { doThrow: false })\n\n if(!lazyObserver(_performance, _observer))\n return\n\n if(!onMatch(_performance, name, callback, _performance)) {\n if(perfs.callbacks.size < 1)\n perfs.observer.observe({ entryTypes: [\"resource\", \"measure\"] })\n perfs.callbacks.set(name, callback)\n }\n\n }\n}\n\nexport default perfs\n","import { mix } from \"./mix\"\nimport conf from \"./config\"\nimport { resolver, WretcherError, ResponseChain } from \"./resolver\"\nimport { ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherOptions = RequestInit & {\n [key: string]: any\n}\n\nexport type DeferredCallback = (wretcher: Wretcher, url: string, options: WretcherOptions) => Wretcher\n\n/**\n * The Wretcher class used to perform easy fetch requests.\n *\n * Immutability : almost every method of this class return a fresh Wretcher object.\n */\nexport class Wretcher {\n\n protected constructor(\n public _url: string,\n public _options: WretcherOptions,\n public _catchers: Map void> = new Map(),\n public _resolvers: Array<(resolver: ResponseChain, originalRequest: Wretcher) => any> = [],\n public _middlewares: ConfiguredMiddleware[] = [],\n public _deferredChain: DeferredCallback[] = []) {}\n\n static factory(url = \"\", options: WretcherOptions = {}) { return new Wretcher(url, options) }\n private selfFactory({ url = this._url, options = this._options, catchers = this._catchers,\n resolvers = this._resolvers, middlewares = this._middlewares, deferredChain = this._deferredChain } = {}) {\n return new Wretcher(url, options, catchers, resolvers, middlewares, deferredChain)\n }\n\n /**\n * Sets the default fetch options used for every subsequent fetch call.\n * @param options New default options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n defaults(options: WretcherOptions, mixin = false) {\n conf.defaults = mixin ? mix(conf.defaults, options) : options\n return this\n }\n\n /**\n * Sets the method (text, json ...) used to parse the data contained in the response body in case of an HTTP error.\n *\n * Persists for every subsequent requests.\n *\n * Default is \"text\".\n */\n errorType(method: \"text\" | \"json\") {\n conf.errorType = method\n return this\n }\n\n /**\n * Sets the non-global polyfills which will be used for every subsequent calls.\n *\n * Needed for libraries like [fetch-ponyfill](https://github.com/qubyte/fetch-ponyfill).\n *\n * @param polyfills An object containing the polyfills.\n */\n polyfills(polyfills: Partial) {\n conf.polyfills = { ...conf.polyfills, ...polyfills }\n return this\n }\n\n /**\n * Returns a new Wretcher object with the argument url appended and the same options.\n * @param url String url\n * @param replace Boolean If true, replaces the current url instead of appending\n */\n url(url: string, replace = false) {\n if(replace)\n return this.selfFactory({ url })\n const split = this._url.split(\"?\")\n return this.selfFactory({\n url: split.length > 1 ?\n split[0] + url + \"?\" + split[1] :\n this._url + url\n })\n }\n\n /**\n * Returns a new Wretcher object with the same url and new options.\n * @param options New options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n options(options: WretcherOptions, mixin = true) {\n return this.selfFactory({ options: mixin ? mix(this._options, options) : options })\n }\n\n /**\n * Converts a javascript object to query parameters,\n * then appends this query string to the current url.\n *\n * If given a string, use the string as the query verbatim.\n *\n * ```\n * let w = wretch(\"http://example.com\") // url is http://example.com\n *\n * // Chain query calls\n * w = w.query({ a: 1, b : 2 }) // url is now http://example.com?a=1&b=2\n * w = w.query(\"foo-bar-baz-woz\") // url is now http://example.com?a=1&b=2&foo-bar-baz-woz\n *\n * // Pass true as the second argument to replace existing query parameters\n * w = w.query(\"c=3&d=4\", true) // url is now http://example.com?c=3&d=4\n * ```\n *\n * @param qp An object which will be converted, or a string which will be used verbatim.\n */\n query(qp: object | string, replace: boolean = false) {\n return this.selfFactory({ url: appendQueryParams(this._url, qp, replace) })\n }\n\n /**\n * Set request headers.\n * @param headerValues An object containing header keys and values\n */\n headers(headerValues: { [headerName: string]: any }) {\n return this.selfFactory({ options: mix(this._options, { headers: headerValues }) })\n }\n\n /**\n * Shortcut to set the \"Accept\" header.\n * @param headerValue Header value\n */\n accept(headerValue: string) {\n return this.headers({ Accept : headerValue })\n }\n\n /**\n * Shortcut to set the \"Content-Type\" header.\n * @param headerValue Header value\n */\n content(headerValue: string) {\n return this.headers({ \"Content-Type\" : headerValue })\n }\n\n /**\n * Shortcut to set the \"Authorization\" header.\n * @param headerValue Header value\n */\n auth(headerValue: string) {\n return this.headers({ Authorization: headerValue })\n }\n\n /**\n * Adds a default catcher which will be called on every subsequent request error when the error code matches.\n * @param errorId Error code or name\n * @param catcher: The catcher method\n */\n catcher(errorId: number | string, catcher: (error: WretcherError, originalRequest: Wretcher) => any) {\n const newMap = new Map(this._catchers)\n newMap.set(errorId, catcher)\n return this.selfFactory({ catchers: newMap })\n }\n\n /**\n * Associates a custom signal with the request.\n * @param controller : An AbortController\n */\n signal(controller: any) {\n return this.selfFactory({ options: { ...this._options, signal: controller.signal } as any })\n }\n\n /**\n * Program a resolver to perform response chain tasks automatically.\n * @param doResolve : Resolver callback\n */\n resolve(doResolve: (chain: ResponseChain, originalRequest: Wretcher) => ResponseChain | Promise, clear: boolean = false) {\n return this.selfFactory({ resolvers: clear ? [ doResolve ] : [ ...this._resolvers, doResolve ]})\n }\n\n /**\n * Defer wretcher methods that will be chained and called just before the request is performed.\n */\n defer(callback: DeferredCallback, clear = false) {\n return this.selfFactory({\n deferredChain: clear ? [callback] : [ ...this._deferredChain, callback ]\n })\n }\n\n /**\n * Add middlewares to intercept a request before being sent.\n */\n middlewares(middlewares: ConfiguredMiddleware[], clear = false) {\n return this.selfFactory({\n middlewares: clear ? middlewares : [ ...this._middlewares, ...middlewares ]\n })\n }\n\n private method(method, options = {}, body = null) {\n const baseWretcher =\n !body ? this :\n typeof body === \"object\" ? this.json(body) :\n this.body(body)\n const deferredWretcher = baseWretcher._deferredChain.reduce((acc: Wretcher, curr) => curr(acc, acc._url, acc._options), baseWretcher)\n return resolver(deferredWretcher.options({ ...options, method }))\n }\n\n /**\n * Performs a get request.\n */\n get(options?) {\n return this.method(\"GET\", options)\n }\n /**\n * Performs a delete request.\n */\n delete(options?) {\n return this.method(\"DELETE\", options)\n }\n /**\n * Performs a put request.\n */\n put(body?, options?) {\n return this.method(\"PUT\", options, body)\n }\n /**\n * Performs a post request.\n */\n post(body?, options?) {\n return this.method(\"POST\", options, body)\n }\n /**\n * Performs a patch request.\n */\n patch(body?, options?) {\n return this.method(\"PATCH\", options, body)\n }\n /**\n * Performs a head request.\n */\n head(options?) {\n return this.method(\"HEAD\", options)\n }\n /**\n * Performs an options request\n */\n opts(options?) {\n return this.method(\"OPTIONS\", options)\n }\n\n /**\n * Sets the request body with any content.\n * @param contents The body contents\n */\n body(contents: any) {\n return this.selfFactory({ options: { ...this._options, body: contents }})\n }\n /**\n * Sets the content type header, stringifies an object and sets the request body.\n * @param jsObject An object which will be serialized into a JSON\n */\n json(jsObject: object) {\n return this.content(\"application/json\").body(JSON.stringify(jsObject))\n }\n /**\n * Converts the javascript object to a FormData and sets the request body.\n * @param formObject An object which will be converted to a FormData\n */\n formData(formObject: object) {\n return this.body(convertFormData(formObject))\n }\n /**\n * Converts the input to an url encoded string and sets the content-type header and body.\n * If the input argument is already a string, skips the conversion part.\n *\n * @param input An object to convert into an url encoded string or an already encoded string\n */\n formUrl(input: (object | string)) {\n return this\n .body(typeof input === \"string\" ? input : convertFormUrl(input))\n .content(\"application/x-www-form-urlencoded\")\n }\n}\n\n// Internal helpers\n\nconst appendQueryParams = (url: string, qp: object | string, replace: boolean) => {\n let queryString\n\n if(typeof qp === \"string\") {\n queryString = qp\n } else {\n const usp = conf.polyfill(\"URLSearchParams\", { instance: true })\n for(const key in qp) {\n if(qp[key] instanceof Array) {\n for(const val of qp[key])\n usp.append(key, val)\n } else {\n usp.append(key, qp[key])\n }\n }\n queryString = usp.toString()\n }\n\n const split = url.split(\"?\")\n if(replace || split.length < 2)\n return split[0] + \"?\" + queryString\n\n return url + \"&\" + queryString\n}\n\nfunction convertFormData(formObject: object) {\n const formData = conf.polyfill(\"FormData\", { instance: true })\n for(const key in formObject) {\n if(formObject[key] instanceof Array) {\n for(const item of formObject[key])\n formData.append(key + \"[]\", item)\n } else {\n formData.append(key, formObject[key])\n }\n }\n\n return formData\n}\n\nfunction encodeQueryValue(key: string, value: any) {\n return encodeURIComponent(key) +\n \"=\" +\n encodeURIComponent(\n typeof value === \"object\" ?\n JSON.stringify(value) :\n value\n )\n}\nfunction convertFormUrl(formObject: object) {\n return Object.keys(formObject)\n .map(key => {\n const value = formObject[key]\n if(value instanceof Array) {\n return value.map(v => encodeQueryValue(key, v)).join(\"&\")\n }\n return encodeQueryValue(key, value)\n })\n .join(\"&\")\n}\n","import { Wretcher } from \"./wretcher\"\nimport { mix } from \"./mix\"\nimport conf from \"./config\"\nimport perfs from \"./perfs\"\nimport { middlewareHelper, ConfiguredMiddleware } from \"./middleware\"\n\nexport type WretcherError = Error & { status: number, response: WretcherResponse, text?: string, json?: any }\nexport type WretcherResponse = Response & { [key: string]: any }\nexport type ResponseChain = {\n // Response types\n res: (cb?: (type: WretcherResponse) => Result) => Promise,\n json: (cb?: (type: {[key: string]: any}) => Result) => Promise,\n blob: (cb?: (type: Blob) => Result) => Promise,\n formData: (cb?: (type: FormData) => Result) => Promise,\n arrayBuffer: (cb?: (type: ArrayBuffer) => Result) => Promise,\n text: (cb?: (type: string) => Result) => Promise,\n // Extras\n perfs: (cb?: (type: any) => void) => ResponseChain,\n setTimeout: (time: number, controller?: any) => ResponseChain,\n controller: () => [any, ResponseChain],\n // Catchers\n error: (code: (number | string), cb: any) => ResponseChain,\n badRequest: (cb: (error: WretcherError, originalRequest: Wretcher) => void) => ResponseChain,\n unauthorized: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n forbidden: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n notFound: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n timeout: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n internalError: (cb: (error: WretcherError, originalRequest: Wretcher) => any) => ResponseChain,\n onAbort: (cb: (error: Error, originalRequest: Wretcher) => any) => ResponseChain\n}\n\nexport const resolver = (wretcher: Wretcher) => {\n const {\n _url: url,\n _catchers: catchers,\n _resolvers: resolvers,\n _middlewares: middlewares,\n _options: opts\n } = wretcher\n\n type TypeParser = (funName: string | null) => (cb?: (type: Type) => Result) => Promise\n\n const finalOpts = mix(conf.defaults, opts)\n const fetchController = conf.polyfill(\"AbortController\", { doThrow: false, instance: true })\n if(!finalOpts[\"signal\"] && fetchController) {\n finalOpts[\"signal\"] = fetchController.signal\n }\n\n const req = middlewareHelper(middlewares)(conf.polyfill(\"fetch\"))(url, finalOpts)\n const wrapper: Promise = req.then(response => {\n if (!response.ok) {\n return response[conf.errorType || \"text\"]().then(msg => {\n const err = new Error(msg)\n err[conf.errorType] = msg\n err[\"status\"] = response.status\n err[\"response\"] = response\n throw err\n })\n }\n return response\n })\n\n const doCatch = (promise: Promise): Promise => {\n return promise.catch(err => {\n if(catchers.has(err.status))\n return catchers.get(err.status)(err, wretcher)\n else if(catchers.has(err.name))\n return catchers.get(err.name)(err, wretcher)\n else\n throw err\n })\n }\n const wrapTypeParser: TypeParser = (funName) => (cb) => funName ?\n doCatch(wrapper.then(_ => _ && _[funName]()).then(_ => _ && cb && cb(_) || _)) :\n doCatch(wrapper.then(_ => _ && cb && cb(_) || _))\n\n const responseChain: ResponseChain = {\n /**\n * Retrieves the raw result as a promise.\n */\n res: wrapTypeParser(null),\n /**\n * Retrieves the result as a parsed JSON object.\n */\n json: wrapTypeParser(\"json\"),\n /**\n * Retrieves the result as a Blob object.\n */\n blob: wrapTypeParser(\"blob\"),\n /**\n * Retrieves the result as a FormData object.\n */\n formData: wrapTypeParser(\"formData\"),\n /**\n * Retrieves the result as an ArrayBuffer object.\n */\n arrayBuffer: wrapTypeParser(\"arrayBuffer\"),\n /**\n * Retrieves the result as a string.\n */\n text: wrapTypeParser(\"text\"),\n /**\n * Performs a callback on the API performance timings of the request.\n *\n * Warning: Still experimental on browsers and node.js\n */\n perfs: cb => {\n req.then(res => perfs.observe(res.url, cb))\n return responseChain\n },\n /**\n * Aborts the request after a fixed time.\n *\n * @param time Time in milliseconds\n * @param controller A custom controller\n */\n setTimeout: (time, controller = fetchController) => {\n setTimeout(() => controller.abort(), time)\n return responseChain\n },\n /**\n * Returns the automatically generated AbortController alongside the current wretch response as a pair.\n */\n controller: () => [ fetchController, responseChain ],\n /**\n * Catches an http response with a specific error code or name and performs a callback.\n */\n error(errorId, cb) {\n catchers.set(errorId, cb)\n return responseChain\n },\n /**\n * Catches a bad request (http code 400) and performs a callback.\n */\n badRequest: cb => responseChain.error(400, cb),\n /**\n * Catches an unauthorized request (http code 401) and performs a callback.\n */\n unauthorized: cb => responseChain.error(401, cb),\n /**\n * Catches a forbidden request (http code 403) and performs a callback.\n */\n forbidden: cb => responseChain.error(403, cb),\n /**\n * Catches a \"not found\" request (http code 404) and performs a callback.\n */\n notFound: cb => responseChain.error(404, cb),\n /**\n * Catches a timeout (http code 408) and performs a callback.\n */\n timeout: cb => responseChain.error(408, cb),\n /**\n * Catches an internal server error (http code 500) and performs a callback.\n */\n internalError: cb => responseChain.error(500, cb),\n /**\n * Catches an AbortError and performs a callback.\n */\n onAbort: cb => responseChain.error(\"AbortError\", cb)\n }\n\n return resolvers.reduce((chain, r) => r(chain, wretcher), responseChain) as (ResponseChain & Promise)\n}\n","import { WretcherOptions } from \"./wretcher\"\nimport { WretcherResponse } from \"./resolver\"\n\nexport type Middleware = (options?: {[key: string]: any}) => ConfiguredMiddleware\nexport type ConfiguredMiddleware = (next: FetchLike) => FetchLike\nexport type FetchLike = (url: string, opts: WretcherOptions) => Promise\n\nexport const middlewareHelper = (middlewares: ConfiguredMiddleware[]) => (fetchFunction: FetchLike): FetchLike => {\n return (\n middlewares.length === 0 ?\n fetchFunction :\n middlewares.length === 1 ?\n middlewares[0](fetchFunction) :\n middlewares.reduceRight((acc, curr, idx): any =>\n (idx === middlewares.length - 2) ? curr(acc(fetchFunction)) : curr(acc as any)\n )\n ) as FetchLike\n}\n","import { Wretcher } from \"./wretcher\"\n\nconst factory = Wretcher.factory\nfactory[\"default\"] = Wretcher.factory\n\n/**\n * Return a fresh Wretcher instance.\n */\nexport default factory\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","mix","one","two","mergeArrays","clone","prop","Array","config","defaults","errorType","polyfills","fetch","FormData","URLSearchParams","performance","PerformanceObserver","AbortController","polyfill","_a","_b","_c","doThrow","_d","instance","_i","args","res","this","self","global","Error","onMatch","entries","name","callback","_performance","getEntriesByName","matches","reverse","clearMeasures","perfs","callbacks","delete","size","observer","disconnect","clearResourceTimings","Map","observe","conf","_observer","forEach","lazyObserver","entryTypes","set","_url","_options","_catchers","_resolvers","_middlewares","_deferredChain","Wretcher","url","options","_e","catchers","_f","resolvers","_g","middlewares","_h","mixin","method","replace","selfFactory","split","qp","appendQueryParams","headerValues","headers","headerValue","Accept","Content-Type","Authorization","errorId","catcher","newMap","controller","tslib_1.__assign","signal","doResolve","clear","deferredChain","body","baseWretcher","json","wretcher","opts","finalOpts","fetchController","req","fetchFunction","reduceRight","acc","curr","idx","middlewareHelper","wrapper","then","response","ok","msg","err","status","doCatch","promise","catch","has","get","wrapTypeParser","funName","cb","_","responseChain","blob","formData","arrayBuffer","text","setTimeout","time","abort","error","badRequest","unauthorized","forbidden","notFound","timeout","internalError","onAbort","reduce","chain","r","resolver","contents","jsObject","content","JSON","stringify","formObject","key","item","append","convertFormData","input","keys","map","value","v","encodeQueryValue","join","queryString","usp","val","toString","encodeURIComponent","factory"],"mappings":"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"} \ No newline at end of file