diff --git a/README.md b/README.md index f808b75..117e0e1 100644 --- a/README.md +++ b/README.md @@ -105,15 +105,14 @@ fetch("endpoint", { // With wretch, you have shorthands at your disposal wretch("endpoint") - .json({ "hello": "world" }) - .post() + .post({ "hello": "world" }) .res(response => /* ... */) ``` #### Because configuration should not rhyme with repetition. ```javascript -// Wretch is immutable which means that you can configure, store and reuse wretch instances +// Wretch object is immutable which means that you can configure, store and reuse instances // Cross origin authenticated requests on an external API const externalApi = wretch() @@ -136,8 +135,7 @@ externalApi // Post a resource externalApi .url("/resource") - .json({ "Shiny new": "resource object" }) - .post() + .post({ "Shiny new": "resource object" }) .json(handleNewResourceResult) ``` @@ -277,7 +275,7 @@ wretch().url("...").get().json(/* ... */) const blogs = wretch("http://mywebsite.org/api/blogs") // Perfect for CRUD apis -const id = await blogs.json({ name: "my blog" }).post().json(_ => _.id) +const id = await blogs.post({ name: "my blog" }).json(_ => _.id) const blog = await blogs.url(`/${id}`).get().json() console.log(blog.name) @@ -361,8 +359,7 @@ Sets the request headers. ```js wretch("...") .headers({ "Content-Type": "text/plain", Accept: "application/json" }) - .body("my text") - .post() + .post("my text") .json() ``` @@ -551,6 +548,8 @@ Sets the request body with any content. ```js wretch("...").body("hello").put() +// Note that calling an 'http verb' method with the body as an argument is equivalent: +wretch("...").put("hello") ``` #### json(jsObject: Object) @@ -560,6 +559,9 @@ Sets the content type header, stringifies an object and sets the request body. ```js const jsonObject = { a: 1, b: 2, c: 3 } wretch("...").json(jsonObject).post() +// Note that calling an 'http verb' method with the object body as an argument is equivalent: +wretch("...").post(jsonObject) + ``` #### formData(formObject: Object) @@ -574,7 +576,7 @@ const form = { wretch("...").formData(form).post() ``` -#### formUrl(input : Object | string) +#### formUrl(input: Object | string) Converts the input parameter to an url encoded string and sets the content-type header and body. If the input argument is already a string, skips the conversion part. @@ -592,64 +594,71 @@ wretch("...").formUrl(alreadyEncodedForm).post() **Required** -*You can pass the fetch options here if you prefer.* +*You can pass optional fetch options and body arguments to these methods as a shorthand.* -| [get](#getopts--) | [delete](#deleteopts--) | [put](#putopts--) | [patch](#patchopts--) | [post](#postopts--) | [head](#headopts--) | [opts](#optsopts--) | +```js +// This shorthand: +wretch().post({ json: 'body' }, { credentials: "same-origin" }) +// Is equivalent to: +wretch().json({ json: 'body'}).options({ credentials: "same-origin" }).post() +``` + +| [get](#getopts) | [delete](#deleteopts) | [put](#putbody-opts) | [patch](#patchbody-opts) | [post](#postbody-opts) | [head](#headopts) | [opts](#optsopts) | |-----|-----|-----|-----|-----|-----|-----| -#### get(opts = {}) +#### get(options) Performs a get request. ```js -wretch("...").get({ credentials: "same-origin" }) +wretch("...").get() ``` -#### delete(opts = {}) +#### delete(options) Performs a delete request. ```js -wretch("...").delete({ credentials: "same-origin" }) +wretch("...").delete() ``` -#### put(opts = {}) +#### put(body, options) Performs a put request. ```js -wretch("...").json({...}).put({ credentials: "same-origin" }) +wretch("...").json({...}).put() ``` -#### patch(opts = {}) +#### patch(body, options) Performs a patch request. ```js -wretch("...").json({...}).patch({ credentials: "same-origin" }) +wretch("...").json({...}).patch() ``` -#### post(opts = {}) +#### post(body, options) Performs a post request. ```js -wretch("...").json({...}).post({ credentials: "same-origin" }) +wretch("...").json({...}).post() ``` -#### head(opts = {}) +#### head(options) Performs a head request. ```js -wretch("...").head({ credentials: "same-origin" }) +wretch("...").head() ``` -#### opts(opts = {}) +#### opts(options) Performs an options request. ```js -wretch("...").opts({ credentials: "same-origin" }) +wretch("...").opts() ``` ## Catchers @@ -1060,7 +1069,6 @@ for(let i = 0; i < 10; i++) { printResource(resourceUrl, 500) printResource(resourceUrl, 1500) } - ``` # License diff --git a/dist/bundle/wretch.js b/dist/bundle/wretch.js index bd0c3cb..9c38ac1 100644 --- a/dist/bundle/wretch.js +++ b/dist/bundle/wretch.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,d=r.deferredChain;return new o(n,s,c,f,p,void 0===d?this._deferredChain:d)},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){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})}),d=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})},h=function(t){return function(r){return d(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:h(null),json:h("json"),blob:h("blob"),formData:h("formData"),arrayBuffer:h("arrayBuffer"),text:h("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)}(this._deferredChain.reduce(function(t,r){return r(t,t._url,t._options)},this).options(t({},i,{method:o})))},o.prototype.get=function(t){return void 0===t&&(t={}),this.method("GET",t)},o.prototype.delete=function(t){return void 0===t&&(t={}),this.method("DELETE",t)},o.prototype.put=function(t){return void 0===t&&(t={}),this.method("PUT",t)},o.prototype.post=function(t){return void 0===t&&(t={}),this.method("POST",t)},o.prototype.patch=function(t){return void 0===t&&(t={}),this.method("PATCH",t)},o.prototype.head=function(t){return void 0===t&&(t={}),this.method("HEAD",t)},o.prototype.opts=function(t){return void 0===t&&(t={}),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(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];u= 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 = \"\", opts: WretcherOptions = {}) { return new Wretcher(url, opts) }\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 opts New default options\n * @param mixin If true, mixes in instead of replacing the existing options\n */\n defaults(opts: WretcherOptions, mixin = false) {\n conf.defaults = mixin ? mix(conf.defaults, opts) : opts\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, opts) {\n const deferredWretcher = this._deferredChain.reduce((acc: Wretcher, curr) => curr(acc, acc._url, acc._options), this)\n return resolver(deferredWretcher.options({ ...opts, method }))\n }\n\n /**\n * Performs a get request.\n */\n get(opts = {}) {\n return this.method(\"GET\", opts)\n }\n /**\n * Performs a delete request.\n */\n delete(opts = {}) {\n return this.method(\"DELETE\", opts)\n }\n /**\n * Performs a put request.\n */\n put(opts = {}) {\n return this.method(\"PUT\", opts)\n }\n /**\n * Performs a post request.\n */\n post(opts = {}) {\n return this.method(\"POST\", opts)\n }\n /**\n * Performs a patch request.\n */\n patch(opts = {}) {\n return this.method(\"PATCH\", opts)\n }\n /**\n * Performs a head request.\n */\n head(opts = {}) {\n return this.method(\"HEAD\", opts)\n }\n /**\n * Performs an options request\n */\n opts(opts = {}) {\n return this.method(\"OPTIONS\", opts)\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","opts","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","wretcher","finalOpts","fetchController","req","fetchFunction","reduceRight","acc","curr","idx","middlewareHelper","wrapper","then","response","ok","_","err","status","doCatch","promise","catch","has","get","wrapTypeParser","funName","cb","responseChain","json","blob","formData","arrayBuffer","text","setTimeout","time","abort","error","badRequest","unauthorized","forbidden","notFound","timeout","internalError","onAbort","reduce","chain","r","resolver","contents","body","jsObject","content","JSON","stringify","formObject","convertFormData","input","convertFormUrl","queryString","usp","key","val","append","toString","item","keys","map","encodeURIComponent","join","factory"],"mappings":"kLA0BO,IAAIA,EAAWC,OAAOC,QAAU,SAAkBC,GACrD,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAII,KADTL,EAAIG,UAAUF,GACOJ,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,IAE9E,OAAON,GC/BEU,EAAM,SAASC,EAAaC,EAAaC,GAClD,gBADkDA,OAC9CF,IAAQC,GAAsB,iBAARD,GAAmC,iBAARC,EACjD,OAAOD,EAEX,IAAMG,OAAaH,GACnB,IAAI,IAAMI,KAAQH,EACXA,EAAIJ,eAAeO,KACfH,EAAIG,aAAiBC,OAASL,EAAII,aAAiBC,MAClDF,EAAMC,GAAQF,EAAmBF,EAAII,UAAUH,EAAIG,IAAUH,EAAIG,GACtC,iBAAdH,EAAIG,IAA2C,iBAAdJ,EAAII,GAClDD,EAAMC,GAAQL,EAAIC,EAAII,GAAOH,EAAIG,GAAOF,GAExCC,EAAMC,GAAQH,EAAIG,IAK9B,OAAOD,GCfLG,GAEFC,YAEAC,UAAW,KAEXC,WACIC,MAAO,KACPC,SAAU,KACVC,gBAAiB,KACjBC,YAAa,KACbC,oBAAqB,KACrBC,gBAAiB,MAErBC,kBAASrB,EAAWsB,WAAAC,kBAAEC,YAAAC,gBAAgBC,aAAAC,yBAAyBC,mBAAAA,IAAAC,oBAC3D,IAAMC,EAAMC,KAAKjB,UAAUd,KACN,oBAATgC,KAAuBA,KAAKhC,GAAK,QACtB,oBAAXiC,OAAyBA,OAAOjC,GAAK,MACjD,GAAGyB,IAAYK,EAAK,MAAM,IAAII,MAAMlC,EAAI,mBACxC,OAAO2B,GAAYG,MAAUA,aAAAA,kBAAOD,KAAQC,ICnB9CK,EAAU,SAACC,EAASC,EAAMC,EAAUC,GACtC,IAAIH,EAAQI,iBACR,OAAO,EACX,IAAMC,EAAUL,EAAQI,iBAAiBH,GACzC,SAAGI,GAAWA,EAAQ1C,OAAS,KAC3BuC,EAASG,EAAQC,UAAU,IACxBH,EAAaI,eACZJ,EAAaI,cAAcN,GAC/BO,EAAMC,UAAUC,OAAOT,GAEpBO,EAAMC,UAAUE,KAAO,IACtBH,EAAMI,SAASC,aACZV,EAAaW,sBACZX,EAAaW,yBAGd,IAkBTN,GACFC,UAAW,IAAIM,IACfH,SAAU,KACVI,QAAS,SAACf,EAAMC,GACZ,GAAID,GAASC,EAAb,CAGA,IAAMC,EAAec,EAAKhC,SAAS,eAAiBI,SAAS,KApBhD,SAACc,EAAce,GAUhC,OATIV,EAAMI,UAAYT,GAAgBe,IAClCV,EAAMI,SAAW,IAAIM,EAAU,SAAAlB,GAC3BQ,EAAMC,UAAUU,QAAQ,SAACjB,EAAUD,GAC/BF,EAAQC,EAASC,EAAMC,EAAUC,OAGtCA,EAAaW,sBACZX,EAAaW,wBAEdN,EAAMI,UAaLQ,CAAajB,EAFEc,EAAKhC,SAAS,uBAAyBI,SAAS,OAK/DU,EAAQI,EAAcF,EAAMC,EAAUC,KACnCK,EAAMC,UAAUE,KAAO,GACtBH,EAAMI,SAASI,SAAUK,YAAa,WAAY,aACtDb,EAAMC,UAAUa,IAAIrB,EAAMC,qBClClC,WACWqB,EACAC,EACAC,EACAC,EACAC,EACAC,gBAHAH,MAAiGV,kBACjGW,mBACAC,mBACAC,MALAjC,UAAA4B,EACA5B,cAAA6B,EACA7B,eAAA8B,EACA9B,gBAAA+B,EACA/B,kBAAAgC,EACAhC,oBAAAiC,EAuPf,OArPWC,UAAP,SAAeC,EAAUC,GAA8B,oBAAxCD,mBAAUC,MAAqC,IAAIF,EAASC,EAAKC,IACxEF,wBAAR,SAAoB3C,OAAAC,kBAAEC,QAAA0C,yBAAiBxC,YAAA0C,6BAAyBC,aAAAC,8BACpDC,cAAAC,+BAA6BC,gBAAAC,iCAAiCC,kBACtE,OAAO,IAAIV,EAASC,EAAKE,EAASE,EAAUE,EAAWE,qCAQ3DT,qBAAA,SAASE,EAAuBS,GAE5B,oBAF4BA,MAC5BvB,EAAKzC,SAAWgE,EAAQxE,EAAIiD,EAAKzC,SAAUuD,GAAQA,EAC5CpC,MAUXkC,sBAAA,SAAUY,GAEN,OADAxB,EAAKxC,UAAYgE,EACV9C,MAUXkC,sBAAA,SAAUnD,GAEN,OADAuC,EAAKvC,eAAiBuC,EAAKvC,UAAcA,GAClCiB,MAQXkC,gBAAA,SAAIC,EAAaY,GACb,gBADaA,MACVA,EACC,OAAO/C,KAAKgD,aAAcb,QAC9B,IAAMc,EAAQjD,KAAK4B,KAAKqB,MAAM,KAC9B,OAAOjD,KAAKgD,aACRb,IAAKc,EAAMjF,OAAS,EAChBiF,EAAM,GAAKd,EAAM,IAAMc,EAAM,GAC7BjD,KAAK4B,KAAOO,KASxBD,oBAAA,SAAQG,EAA0BQ,GAC9B,oBAD8BA,MACvB7C,KAAKgD,aAAcX,QAASQ,EAAQxE,EAAI2B,KAAK6B,SAAUQ,GAAWA,KAsB7EH,kBAAA,SAAMgB,EAAqBH,GACvB,oBADuBA,MAChB/C,KAAKgD,aAAcb,IAAKgB,EAAkBnD,KAAK4B,KAAMsB,EAAIH,MAOpEb,oBAAA,SAAQkB,GACJ,OAAOpD,KAAKgD,aAAcX,QAAShE,EAAI2B,KAAK6B,UAAYwB,QAASD,OAOrElB,mBAAA,SAAOoB,GACH,OAAOtD,KAAKqD,SAAUE,OAASD,KAOnCpB,oBAAA,SAAQoB,GACJ,OAAOtD,KAAKqD,SAAUG,eAAiBF,KAO3CpB,iBAAA,SAAKoB,GACD,OAAOtD,KAAKqD,SAAUI,cAAeH,KAQzCpB,oBAAA,SAAQwB,EAA0BC,GAC9B,IAAMC,EAAS,IAAIxC,IAAIpB,KAAK8B,WAE5B,OADA8B,EAAOjC,IAAI+B,EAASC,GACb3D,KAAKgD,aAAcT,SAAUqB,KAOxC1B,mBAAA,SAAO2B,GACH,OAAO7D,KAAKgD,aAAcX,QAASyB,KAAK9D,KAAK6B,UAAUkC,OAAQF,EAAWE,YAO9E7B,oBAAA,SAAQ8B,EAA8FC,GAClG,oBADkGA,MAC3FjE,KAAKgD,aAAcP,UAAWwB,GAAUD,GAAmBhE,KAAK+B,mBAAYiC,OAMvF9B,kBAAA,SAAM3B,EAA4B0D,GAC9B,oBAD8BA,MACvBjE,KAAKgD,aACRkB,cAAeD,GAAS1D,GAAiBP,KAAKiC,uBAAgB1B,OAOtE2B,wBAAA,SAAYS,EAAqCsB,GAC7C,oBAD6CA,MACtCjE,KAAKgD,aACRL,YAAasB,EAAQtB,EAAmB3C,KAAKgC,oBAAiBW,MAI9DT,mBAAR,SAAeY,EAAQV,GAEnB,OClKgB,SAAC+B,GAEjB,IAAAhC,SACAI,cACAE,eACAE,iBACAP,aAKEgC,EAAY/F,EAAIiD,EAAKzC,SAAUuD,GAC/BiC,EAAkB/C,EAAKhC,SAAS,mBAAqBI,SAAS,EAAOE,UAAU,KACjFwE,EAAkB,QAAKC,IACvBD,EAAkB,OAAIC,EAAgBN,QAG1C,IAAMO,ECzCsB,SAAC3B,GAAwC,OAAA,SAAC4B,GACtE,OAC2B,IAAvB5B,EAAY3E,OACTuG,EACoB,IAAvB5B,EAAY3E,OACR2E,EAAY,GAAG4B,GACnB5B,EAAY6B,YAAY,SAACC,EAAKC,EAAMC,GAChC,OAACA,IAAQhC,EAAY3E,OAAS,EAAK0G,EAAKD,EAAIF,IAAkBG,EAAKD,MDkC/DG,CAAiBjC,EAAjBiC,CAA8BtD,EAAKhC,SAAS,SAA5CsF,CAAsDzC,EAAKiC,GACjES,EAA4CP,EAAIQ,KAAK,SAAAC,GACvD,OAAKA,EAASC,GASPD,EARIA,EAASzD,EAAKxC,WAAa,UAAUgG,KAAK,SAAAG,GAC7C,IAAMC,EAAM,IAAI/E,MAAM8E,GAItB,MAHAC,EAAI5D,EAAKxC,WAAamG,EACtBC,EAAY,OAAIH,EAASI,OACzBD,EAAc,SAAIH,EACZG,MAMZE,EAAU,SAAIC,GAChB,OAAOA,EAAQC,MAAM,SAAAJ,GACjB,GAAG3C,EAASgD,IAAIL,EAAIC,QAChB,OAAO5C,EAASiD,IAAIN,EAAIC,OAAjB5C,CAAyB2C,EAAKf,GACpC,GAAG5B,EAASgD,IAAIL,EAAI5E,MACrB,OAAOiC,EAASiD,IAAIN,EAAI5E,KAAjBiC,CAAuB2C,EAAKf,GAEnC,MAAMe,KAGZO,EAA6B,SAAIC,GAAY,OAAA,SAAIC,GAAO,OAC1DP,EAD0DM,EAClDb,EAAQC,KAAK,SAAAG,GAAK,OAAAA,GAAKA,EAAES,OAAYZ,KAAK,SAAAG,GAAK,OAAAA,GAAKU,GAAMA,EAAGV,IAAMA,IACnEJ,EAAQC,KAAK,SAAAG,GAAK,OAAAA,GAAKU,GAAMA,EAAGV,IAAMA,OAE5CW,GAIF7F,IAAK0F,EAAiC,MAItCI,KAAMJ,EAAoB,QAI1BK,KAAML,EAAqB,QAI3BM,SAAUN,EAAyB,YAInCO,YAAaP,EAA4B,eAIzCQ,KAAMR,EAAuB,QAM7B5E,MAAO,SAAA8E,GAEH,OADArB,EAAIQ,KAAK,SAAA/E,GAAO,OAAAc,EAAMQ,QAAQtB,EAAIoC,IAAKwD,KAChCC,GAQXM,WAAY,SAACC,EAAMtC,GAEf,oBAFeA,KACfqC,WAAW,WAAM,OAAArC,EAAWuC,SAASD,GAC9BP,GAKX/B,WAAY,WAAM,OAAEQ,EAAiBuB,IAIrCS,eAAM3C,EAASiC,GAEX,OADApD,EAASZ,IAAI+B,EAASiC,GACfC,GAKXU,WAAY,SAAAX,GAAM,OAAAC,EAAcS,MAAM,IAAKV,IAI3CY,aAAc,SAAAZ,GAAM,OAAAC,EAAcS,MAAM,IAAKV,IAI7Ca,UAAW,SAAAb,GAAM,OAAAC,EAAcS,MAAM,IAAKV,IAI1Cc,SAAU,SAAAd,GAAM,OAAAC,EAAcS,MAAM,IAAKV,IAIzCe,QAAS,SAAAf,GAAM,OAAAC,EAAcS,MAAM,IAAKV,IAIxCgB,cAAe,SAAAhB,GAAM,OAAAC,EAAcS,MAAM,IAAKV,IAI9CiB,QAAS,SAAAjB,GAAM,OAAAC,EAAcS,MAAM,aAAcV,KAGrD,OAAOlD,EAAUoE,OAAO,SAACC,EAAOC,GAAM,OAAAA,EAAED,EAAO3C,IAAWyB,GDgC/CoB,CADkBhH,KAAKiC,eAAe4E,OAAO,SAACpC,EAAeC,GAAS,OAAAA,EAAKD,EAAKA,EAAI7C,KAAM6C,EAAI5C,WAAW7B,MAC/EqC,aAAaD,GAAMU,cAMxDZ,gBAAA,SAAIE,GACA,oBADAA,MACOpC,KAAK8C,OAAO,MAAOV,IAK9BF,mBAAA,SAAOE,GACH,oBADGA,MACIpC,KAAK8C,OAAO,SAAUV,IAKjCF,gBAAA,SAAIE,GACA,oBADAA,MACOpC,KAAK8C,OAAO,MAAOV,IAK9BF,iBAAA,SAAKE,GACD,oBADCA,MACMpC,KAAK8C,OAAO,OAAQV,IAK/BF,kBAAA,SAAME,GACF,oBADEA,MACKpC,KAAK8C,OAAO,QAASV,IAKhCF,iBAAA,SAAKE,GACD,oBADCA,MACMpC,KAAK8C,OAAO,OAAQV,IAK/BF,iBAAA,SAAKE,GACD,oBADCA,MACMpC,KAAK8C,OAAO,UAAWV,IAOlCF,iBAAA,SAAK+E,GACD,OAAOjH,KAAKgD,aAAcX,aAAcrC,KAAK6B,UAAUqF,KAAMD,OAMjE/E,iBAAA,SAAKiF,GACD,OAAOnH,KAAKoH,QAAQ,oBAAoBF,KAAKG,KAAKC,UAAUH,KAMhEjF,qBAAA,SAASqF,GACL,OAAOvH,KAAKkH,KAAKM,EAAgBD,KAQrCrF,oBAAA,SAAQuF,GACJ,OAAOzH,KACFkH,KAAsB,iBAAVO,EAAqBA,EAAQC,EAAeD,IACxDL,QAAQ,2CAMfjE,EAAoB,SAAChB,EAAae,EAAqBH,GACzD,IAAI4E,EAEJ,GAAiB,iBAAPzE,EACNyE,EAAczE,MACX,CACH,IAAM0E,EAAMtG,EAAKhC,SAAS,mBAAqBM,UAAU,IACzD,IAAI,IAAMiI,KAAO3E,EACb,GAAGA,EAAG2E,aAAgBlJ,MAClB,IAAiB,QAAAY,EAAA2D,EAAG2E,GAAHhI,WAAAA,KAAb,IAAMiI,OACNF,EAAIG,OAAOF,EAAKC,QAEpBF,EAAIG,OAAOF,EAAK3E,EAAG2E,IAG3BF,EAAcC,EAAII,WAGtB,IAAM/E,EAAQd,EAAIc,MAAM,KACxB,OAAGF,GAAWE,EAAMjF,OAAS,EAClBiF,EAAM,GAAK,IAAM0E,EAErBxF,EAAM,IAAMwF,GAGjBH,EAAkB,SAACD,GACrB,IAAMxB,EAAWzE,EAAKhC,SAAS,YAAcM,UAAU,IACvD,IAAI,IAAMiI,KAAON,EACb,GAAGA,EAAWM,aAAgBlJ,MAC1B,IAAkB,QAAAY,EAAAgI,EAAWM,GAAXhI,WAAAA,KAAd,IAAMoI,OACNlC,EAASgC,OAAOF,EAAM,KAAMI,QAEhClC,EAASgC,OAAOF,EAAKN,EAAWM,IAIxC,OAAO9B,GAGL2B,EAAiB,SAACH,GACpB,OAAO9J,OAAOyK,KAAKX,GACdY,IAAI,SAAAN,GACD,OAAAO,mBAAmBP,GAAO,IACtBO,mBAA8C,iBAApBb,EAAWM,GAAoBR,KAAKC,UAAUC,EAAWM,IAAQN,EAAWM,MAC7GQ,KAAK,MG7TRC,EAAUpG,EAASoG,eACzBA,EAAiB,QAAIpG,EAASoG"} \ 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\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 diff --git a/dist/wretcher.d.ts b/dist/wretcher.d.ts index 48c3615..334c3a8 100644 --- a/dist/wretcher.d.ts +++ b/dist/wretcher.d.ts @@ -18,14 +18,14 @@ export declare class Wretcher { _middlewares: ConfiguredMiddleware[]; _deferredChain: DeferredCallback[]; protected constructor(_url: string, _options: WretcherOptions, _catchers?: Map void>, _resolvers?: Array<(resolver: ResponseChain, originalRequest: Wretcher) => any>, _middlewares?: ConfiguredMiddleware[], _deferredChain?: DeferredCallback[]); - static factory(url?: string, opts?: WretcherOptions): Wretcher; + static factory(url?: string, options?: WretcherOptions): Wretcher; private selfFactory({url, options, catchers, resolvers, middlewares, deferredChain}?); /** * Sets the default fetch options used for every subsequent fetch call. - * @param opts New default options + * @param options New default options * @param mixin If true, mixes in instead of replacing the existing options */ - defaults(opts: WretcherOptions, mixin?: boolean): this; + defaults(options: WretcherOptions, mixin?: boolean): this; /** * Sets the method (text, json ...) used to parse the data contained in the response body in case of an HTTP error. * @@ -120,35 +120,35 @@ export declare class Wretcher { * Add middlewares to intercept a request before being sent. */ middlewares(middlewares: ConfiguredMiddleware[], clear?: boolean): Wretcher; - private method(method, opts); + private method(method, options?, body?); /** * Performs a get request. */ - get(opts?: {}): ResponseChain & Promise; + get(options?: any): ResponseChain & Promise; /** * Performs a delete request. */ - delete(opts?: {}): ResponseChain & Promise; + delete(options?: any): ResponseChain & Promise; /** * Performs a put request. */ - put(opts?: {}): ResponseChain & Promise; + put(body?: any, options?: any): ResponseChain & Promise; /** * Performs a post request. */ - post(opts?: {}): ResponseChain & Promise; + post(body?: any, options?: any): ResponseChain & Promise; /** * Performs a patch request. */ - patch(opts?: {}): ResponseChain & Promise; + patch(body?: any, options?: any): ResponseChain & Promise; /** * Performs a head request. */ - head(opts?: {}): ResponseChain & Promise; + head(options?: any): ResponseChain & Promise; /** * Performs an options request */ - opts(opts?: {}): ResponseChain & Promise; + opts(options?: any): ResponseChain & Promise; /** * Sets the request body with any content. * @param contents The body contents diff --git a/dist/wretcher.js b/dist/wretcher.js index 537e1f1..111b97b 100644 --- a/dist/wretcher.js +++ b/dist/wretcher.js @@ -27,10 +27,10 @@ var Wretcher = /** @class */ (function () { this._middlewares = _middlewares; this._deferredChain = _deferredChain; } - Wretcher.factory = function (url, opts) { + Wretcher.factory = function (url, options) { if (url === void 0) { url = ""; } - if (opts === void 0) { opts = {}; } - return new Wretcher(url, opts); + if (options === void 0) { options = {}; } + return new Wretcher(url, options); }; Wretcher.prototype.selfFactory = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.url, url = _c === void 0 ? this._url : _c, _d = _b.options, options = _d === void 0 ? this._options : _d, _e = _b.catchers, catchers = _e === void 0 ? this._catchers : _e, _f = _b.resolvers, resolvers = _f === void 0 ? this._resolvers : _f, _g = _b.middlewares, middlewares = _g === void 0 ? this._middlewares : _g, _h = _b.deferredChain, deferredChain = _h === void 0 ? this._deferredChain : _h; @@ -38,12 +38,12 @@ var Wretcher = /** @class */ (function () { }; /** * Sets the default fetch options used for every subsequent fetch call. - * @param opts New default options + * @param options New default options * @param mixin If true, mixes in instead of replacing the existing options */ - Wretcher.prototype.defaults = function (opts, mixin) { + Wretcher.prototype.defaults = function (options, mixin) { if (mixin === void 0) { mixin = false; } - conf.defaults = mixin ? mix(conf.defaults, opts) : opts; + conf.defaults = mixin ? mix(conf.defaults, options) : options; return this; }; /** @@ -187,58 +187,56 @@ var Wretcher = /** @class */ (function () { middlewares: clear ? middlewares : this._middlewares.concat(middlewares) }); }; - Wretcher.prototype.method = function (method, opts) { - var deferredWretcher = this._deferredChain.reduce(function (acc, curr) { return curr(acc, acc._url, acc._options); }, this); - return resolver(deferredWretcher.options(__assign({}, opts, { method: method }))); + Wretcher.prototype.method = function (method, options, body) { + if (options === void 0) { options = {}; } + if (body === void 0) { body = null; } + var baseWretcher = !body ? this : + typeof body === "object" ? this.json(body) : + this.body(body); + var deferredWretcher = baseWretcher._deferredChain.reduce(function (acc, curr) { return curr(acc, acc._url, acc._options); }, baseWretcher); + return resolver(deferredWretcher.options(__assign({}, options, { method: method }))); }; /** * Performs a get request. */ - Wretcher.prototype.get = function (opts) { - if (opts === void 0) { opts = {}; } - return this.method("GET", opts); + Wretcher.prototype.get = function (options) { + return this.method("GET", options); }; /** * Performs a delete request. */ - Wretcher.prototype.delete = function (opts) { - if (opts === void 0) { opts = {}; } - return this.method("DELETE", opts); + Wretcher.prototype.delete = function (options) { + return this.method("DELETE", options); }; /** * Performs a put request. */ - Wretcher.prototype.put = function (opts) { - if (opts === void 0) { opts = {}; } - return this.method("PUT", opts); + Wretcher.prototype.put = function (body, options) { + return this.method("PUT", options, body); }; /** * Performs a post request. */ - Wretcher.prototype.post = function (opts) { - if (opts === void 0) { opts = {}; } - return this.method("POST", opts); + Wretcher.prototype.post = function (body, options) { + return this.method("POST", options, body); }; /** * Performs a patch request. */ - Wretcher.prototype.patch = function (opts) { - if (opts === void 0) { opts = {}; } - return this.method("PATCH", opts); + Wretcher.prototype.patch = function (body, options) { + return this.method("PATCH", options, body); }; /** * Performs a head request. */ - Wretcher.prototype.head = function (opts) { - if (opts === void 0) { opts = {}; } - return this.method("HEAD", opts); + Wretcher.prototype.head = function (options) { + return this.method("HEAD", options); }; /** * Performs an options request */ - Wretcher.prototype.opts = function (opts) { - if (opts === void 0) { opts = {}; } - return this.method("OPTIONS", opts); + Wretcher.prototype.opts = function (options) { + return this.method("OPTIONS", options); }; /** * Sets the request body with any content. diff --git a/dist/wretcher.js.map b/dist/wretcher.js.map index cdd94fd..cfa5732 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":";;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,IAAI,MAAM,UAAU,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAgC,MAAM,YAAY,CAAA;AASnE;;;;GAIG;AACH;IAEI,kBACW,IAAY,EACZ,QAAyB,EACzB,SAAsG,EACtG,UAAmF,EACnF,YAAyC,EACzC,cAAuC;QAHvC,0BAAA,EAAA,gBAAiG,GAAG,EAAE;QACtG,2BAAA,EAAA,eAAmF;QACnF,6BAAA,EAAA,iBAAyC;QACzC,+BAAA,EAAA,mBAAuC;QALvC,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAA6F;QACtG,eAAU,GAAV,UAAU,CAAyE;QACnF,iBAAY,GAAZ,YAAY,CAA6B;QACzC,mBAAc,GAAd,cAAc,CAAyB;IAAG,CAAC;IAE/C,gBAAO,GAAd,UAAe,GAAQ,EAAE,IAA0B;QAApC,oBAAA,EAAA,QAAQ;QAAE,qBAAA,EAAA,SAA0B;QAAI,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAAC,CAAC;IAC/E,8BAAW,GAAnB,UAAoB,EACgG;YADhG,4BACgG,EAD9F,WAAe,EAAf,oCAAe,EAAE,eAAuB,EAAvB,4CAAuB,EAAE,gBAAyB,EAAzB,8CAAyB,EAC7E,iBAA2B,EAA3B,gDAA2B,EAAE,mBAA+B,EAA/B,oDAA+B,EAAE,qBAAmC,EAAnC,wDAAmC;QACzG,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;IACtF,CAAC;IAED;;;;OAIG;IACH,2BAAQ,GAAR,UAAS,IAAqB,EAAE,KAAa;QAAb,sBAAA,EAAA,aAAa;QACzC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACvD,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;;OAMG;IACH,4BAAS,GAAT,UAAU,MAAuB;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAA;QACvB,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;;OAMG;IACH,4BAAS,GAAT,UAAU,SAAyC;QAC/C,IAAI,CAAC,SAAS,gBAAQ,IAAI,CAAC,SAAS,EAAK,SAAS,CAAE,CAAA;QACpD,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,sBAAG,GAAH,UAAI,GAAW,EAAE,OAAe;QAAf,wBAAA,EAAA,eAAe;QAC5B,IAAG,OAAO;YACN,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,KAAA,EAAE,CAAC,CAAA;QACpC,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC;YACpB,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnB,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,GAAG,GAAG;SACtB,CAAC,CAAA;IACN,CAAC;IAED;;;;OAIG;IACH,0BAAO,GAAP,UAAQ,OAAwB,EAAE,KAAY;QAAZ,sBAAA,EAAA,YAAY;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACvF,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,wBAAK,GAAL,UAAM,EAAmB,EAAE,OAAwB;QAAxB,wBAAA,EAAA,eAAwB;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED;;;OAGG;IACH,0BAAO,GAAP,UAAQ,YAA2C;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAA;IACvF,CAAC;IAED;;;OAGG;IACH,yBAAM,GAAN,UAAO,WAAmB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAG,WAAW,EAAE,CAAC,CAAA;IACjD,CAAC;IAED;;;OAGG;IACH,0BAAO,GAAP,UAAQ,WAAmB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAG,WAAW,EAAE,CAAC,CAAA;IACzD,CAAC;IAED;;;OAGG;IACH,uBAAI,GAAJ,UAAK,WAAmB;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAA;IACvD,CAAC;IAED;;;;OAIG;IACH,0BAAO,GAAP,UAAQ,OAAwB,EAAE,OAAiE;QAC/F,IAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACjD,CAAC;IAED;;;OAGG;IACH,yBAAM,GAAN,UAAO,UAAe;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,aAAK,IAAI,CAAC,QAAQ,IAAE,MAAM,EAAE,UAAU,CAAC,MAAM,GAAS,EAAE,CAAC,CAAA;IAChG,CAAC;IAED;;;OAGG;IACH,0BAAO,GAAP,UAAQ,SAA4F,EAAE,KAAsB;QAAtB,sBAAA,EAAA,aAAsB;QACxH,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAE,SAAS,CAAE,CAAC,CAAC,CAAM,IAAI,CAAC,UAAU,SAAE,SAAS,EAAE,EAAC,CAAC,CAAA;IACpG,CAAC;IAED;;OAEG;IACH,wBAAK,GAAL,UAAM,QAA0B,EAAE,KAAa;QAAb,sBAAA,EAAA,aAAa;QAC3C,OAAO,IAAI,CAAC,WAAW,CAAC;YACpB,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAM,IAAI,CAAC,cAAc,SAAE,QAAQ,EAAE;SAC3E,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,8BAAW,GAAX,UAAY,WAAmC,EAAE,KAAa;QAAb,sBAAA,EAAA,aAAa;QAC1D,OAAO,IAAI,CAAC,WAAW,CAAC;YACpB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAM,IAAI,CAAC,YAAY,QAAK,WAAW,CAAE;SAC9E,CAAC,CAAA;IACN,CAAC;IAEO,yBAAM,GAAd,UAAe,MAAM,EAAE,IAAI;QACvB,IAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAC,GAAa,EAAE,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAjC,CAAiC,EAAE,IAAI,CAAC,CAAA;QACrH,OAAO,QAAQ,CAAC,gBAAgB,CAAC,OAAO,cAAM,IAAI,IAAE,MAAM,QAAA,IAAG,CAAC,CAAA;IAClE,CAAC;IAED;;OAEG;IACH,sBAAG,GAAH,UAAI,IAAS;QAAT,qBAAA,EAAA,SAAS;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IACD;;OAEG;IACH,yBAAM,GAAN,UAAO,IAAS;QAAT,qBAAA,EAAA,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IACD;;OAEG;IACH,sBAAG,GAAH,UAAI,IAAS;QAAT,qBAAA,EAAA,SAAS;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IACD;;OAEG;IACH,uBAAI,GAAJ,UAAK,IAAS;QAAT,qBAAA,EAAA,SAAS;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACpC,CAAC;IACD;;OAEG;IACH,wBAAK,GAAL,UAAM,IAAS;QAAT,qBAAA,EAAA,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IACD;;OAEG;IACH,uBAAI,GAAJ,UAAK,IAAS;QAAT,qBAAA,EAAA,SAAS;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACpC,CAAC;IACD;;OAEG;IACH,uBAAI,GAAJ,UAAK,IAAS;QAAT,qBAAA,EAAA,SAAS;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAED;;;OAGG;IACH,uBAAI,GAAJ,UAAK,QAAa;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,eAAO,IAAI,CAAC,QAAQ,IAAE,IAAI,EAAE,QAAQ,GAAE,EAAC,CAAC,CAAA;IAC7E,CAAC;IACD;;;OAGG;IACH,uBAAI,GAAJ,UAAK,QAAgB;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC1E,CAAC;IACD;;;OAGG;IACH,2BAAQ,GAAR,UAAS,UAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;IACD;;;;;OAKG;IACH,0BAAO,GAAP,UAAQ,KAAwB;QAC5B,OAAO,IAAI;aACN,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aAC/D,OAAO,CAAC,mCAAmC,CAAC,CAAA;IACrD,CAAC;IACL,eAAC;AAAD,CAAC,AA/PD,IA+PC;;AAED,mBAAmB;AAEnB,IAAM,iBAAiB,GAAG,UAAC,GAAW,EAAE,EAAmB,EAAE,OAAgB;IACzE,IAAI,WAAW,CAAA;IAEf,IAAG,OAAO,EAAE,KAAK,QAAQ,EAAE;QACvB,WAAW,GAAG,EAAE,CAAA;KACnB;SAAM;QACH,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAChE,KAAI,IAAM,GAAG,IAAI,EAAE,EAAE;YACjB,IAAG,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE;gBACzB,KAAiB,UAAO,EAAP,KAAA,EAAE,CAAC,GAAG,CAAC,EAAP,cAAO,EAAP,IAAO;oBAApB,IAAM,GAAG,SAAA;oBACT,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;iBAAA;aAC3B;iBAAM;gBACH,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;aAC3B;SACJ;QACD,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;KAC/B;IAED,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAG,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAA;IAEvC,OAAO,GAAG,GAAG,GAAG,GAAG,WAAW,CAAA;AAClC,CAAC,CAAA;AAED,IAAM,eAAe,GAAG,UAAC,UAAkB;IACvC,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9D,KAAI,IAAM,GAAG,IAAI,UAAU,EAAE;QACzB,IAAG,UAAU,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE;YACjC,KAAkB,UAAe,EAAf,KAAA,UAAU,CAAC,GAAG,CAAC,EAAf,cAAe,EAAf,IAAe;gBAA7B,IAAM,IAAI,SAAA;gBACV,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,CAAA;aAAA;SACxC;aAAM;YACH,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;SACxC;KACJ;IAED,OAAO,QAAQ,CAAA;AACnB,CAAC,CAAA;AAED,IAAM,cAAc,GAAG,UAAC,UAAkB;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SACzB,GAAG,CAAC,UAAA,GAAG;QACJ,OAAA,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG;aAC7B,KAAI,kBAAkB,CAAC,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAI,CAAA;IADlH,CACkH,CAAC;SACtH,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"wretcher.js","sourceRoot":"","sources":["../src/wretcher.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,IAAI,MAAM,UAAU,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAgC,MAAM,YAAY,CAAA;AASnE;;;;GAIG;AACH;IAEI,kBACW,IAAY,EACZ,QAAyB,EACzB,SAAsG,EACtG,UAAmF,EACnF,YAAyC,EACzC,cAAuC;QAHvC,0BAAA,EAAA,gBAAiG,GAAG,EAAE;QACtG,2BAAA,EAAA,eAAmF;QACnF,6BAAA,EAAA,iBAAyC;QACzC,+BAAA,EAAA,mBAAuC;QALvC,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAA6F;QACtG,eAAU,GAAV,UAAU,CAAyE;QACnF,iBAAY,GAAZ,YAAY,CAA6B;QACzC,mBAAc,GAAd,cAAc,CAAyB;IAAG,CAAC;IAE/C,gBAAO,GAAd,UAAe,GAAQ,EAAE,OAA6B;QAAvC,oBAAA,EAAA,QAAQ;QAAE,wBAAA,EAAA,YAA6B;QAAI,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAAC,CAAC;IACrF,8BAAW,GAAnB,UAAoB,EACgG;YADhG,4BACgG,EAD9F,WAAe,EAAf,oCAAe,EAAE,eAAuB,EAAvB,4CAAuB,EAAE,gBAAyB,EAAzB,8CAAyB,EAC7E,iBAA2B,EAA3B,gDAA2B,EAAE,mBAA+B,EAA/B,oDAA+B,EAAE,qBAAmC,EAAnC,wDAAmC;QACzG,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;IACtF,CAAC;IAED;;;;OAIG;IACH,2BAAQ,GAAR,UAAS,OAAwB,EAAE,KAAa;QAAb,sBAAA,EAAA,aAAa;QAC5C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QAC7D,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;;OAMG;IACH,4BAAS,GAAT,UAAU,MAAuB;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAA;QACvB,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;;OAMG;IACH,4BAAS,GAAT,UAAU,SAAyC;QAC/C,IAAI,CAAC,SAAS,gBAAQ,IAAI,CAAC,SAAS,EAAK,SAAS,CAAE,CAAA;QACpD,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,sBAAG,GAAH,UAAI,GAAW,EAAE,OAAe;QAAf,wBAAA,EAAA,eAAe;QAC5B,IAAG,OAAO;YACN,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,KAAA,EAAE,CAAC,CAAA;QACpC,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC;YACpB,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnB,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,GAAG,GAAG;SACtB,CAAC,CAAA;IACN,CAAC;IAED;;;;OAIG;IACH,0BAAO,GAAP,UAAQ,OAAwB,EAAE,KAAY;QAAZ,sBAAA,EAAA,YAAY;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACvF,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,wBAAK,GAAL,UAAM,EAAmB,EAAE,OAAwB;QAAxB,wBAAA,EAAA,eAAwB;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED;;;OAGG;IACH,0BAAO,GAAP,UAAQ,YAA2C;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAA;IACvF,CAAC;IAED;;;OAGG;IACH,yBAAM,GAAN,UAAO,WAAmB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAG,WAAW,EAAE,CAAC,CAAA;IACjD,CAAC;IAED;;;OAGG;IACH,0BAAO,GAAP,UAAQ,WAAmB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAG,WAAW,EAAE,CAAC,CAAA;IACzD,CAAC;IAED;;;OAGG;IACH,uBAAI,GAAJ,UAAK,WAAmB;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAA;IACvD,CAAC;IAED;;;;OAIG;IACH,0BAAO,GAAP,UAAQ,OAAwB,EAAE,OAAiE;QAC/F,IAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACjD,CAAC;IAED;;;OAGG;IACH,yBAAM,GAAN,UAAO,UAAe;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,aAAK,IAAI,CAAC,QAAQ,IAAE,MAAM,EAAE,UAAU,CAAC,MAAM,GAAS,EAAE,CAAC,CAAA;IAChG,CAAC;IAED;;;OAGG;IACH,0BAAO,GAAP,UAAQ,SAA4F,EAAE,KAAsB;QAAtB,sBAAA,EAAA,aAAsB;QACxH,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAE,SAAS,CAAE,CAAC,CAAC,CAAM,IAAI,CAAC,UAAU,SAAE,SAAS,EAAE,EAAC,CAAC,CAAA;IACpG,CAAC;IAED;;OAEG;IACH,wBAAK,GAAL,UAAM,QAA0B,EAAE,KAAa;QAAb,sBAAA,EAAA,aAAa;QAC3C,OAAO,IAAI,CAAC,WAAW,CAAC;YACpB,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAM,IAAI,CAAC,cAAc,SAAE,QAAQ,EAAE;SAC3E,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,8BAAW,GAAX,UAAY,WAAmC,EAAE,KAAa;QAAb,sBAAA,EAAA,aAAa;QAC1D,OAAO,IAAI,CAAC,WAAW,CAAC;YACpB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAM,IAAI,CAAC,YAAY,QAAK,WAAW,CAAE;SAC9E,CAAC,CAAA;IACN,CAAC;IAEO,yBAAM,GAAd,UAAe,MAAM,EAAE,OAAY,EAAE,IAAW;QAAzB,wBAAA,EAAA,YAAY;QAAE,qBAAA,EAAA,WAAW;QAC5C,IAAM,YAAY,GACd,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,IAAM,gBAAgB,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,UAAC,GAAa,EAAE,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAjC,CAAiC,EAAE,YAAY,CAAC,CAAA;QACrI,OAAO,QAAQ,CAAC,gBAAgB,CAAC,OAAO,cAAM,OAAO,IAAE,MAAM,QAAA,IAAG,CAAC,CAAA;IACrE,CAAC;IAED;;OAEG;IACH,sBAAG,GAAH,UAAI,OAAQ;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACtC,CAAC;IACD;;OAEG;IACH,yBAAM,GAAN,UAAO,OAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IACD;;OAEG;IACH,sBAAG,GAAH,UAAI,IAAK,EAAE,OAAQ;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC5C,CAAC;IACD;;OAEG;IACH,uBAAI,GAAJ,UAAK,IAAK,EAAE,OAAQ;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IACD;;OAEG;IACH,wBAAK,GAAL,UAAM,IAAK,EAAE,OAAQ;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9C,CAAC;IACD;;OAEG;IACH,uBAAI,GAAJ,UAAK,OAAQ;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;IACD;;OAEG;IACH,uBAAI,GAAJ,UAAK,OAAQ;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED;;;OAGG;IACH,uBAAI,GAAJ,UAAK,QAAa;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,eAAO,IAAI,CAAC,QAAQ,IAAE,IAAI,EAAE,QAAQ,GAAE,EAAC,CAAC,CAAA;IAC7E,CAAC;IACD;;;OAGG;IACH,uBAAI,GAAJ,UAAK,QAAgB;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC1E,CAAC;IACD;;;OAGG;IACH,2BAAQ,GAAR,UAAS,UAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;IACD;;;;;OAKG;IACH,0BAAO,GAAP,UAAQ,KAAwB;QAC5B,OAAO,IAAI;aACN,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aAC/D,OAAO,CAAC,mCAAmC,CAAC,CAAA;IACrD,CAAC;IACL,eAAC;AAAD,CAAC,AAnQD,IAmQC;;AAED,mBAAmB;AAEnB,IAAM,iBAAiB,GAAG,UAAC,GAAW,EAAE,EAAmB,EAAE,OAAgB;IACzE,IAAI,WAAW,CAAA;IAEf,IAAG,OAAO,EAAE,KAAK,QAAQ,EAAE;QACvB,WAAW,GAAG,EAAE,CAAA;KACnB;SAAM;QACH,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAChE,KAAI,IAAM,GAAG,IAAI,EAAE,EAAE;YACjB,IAAG,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE;gBACzB,KAAiB,UAAO,EAAP,KAAA,EAAE,CAAC,GAAG,CAAC,EAAP,cAAO,EAAP,IAAO;oBAApB,IAAM,GAAG,SAAA;oBACT,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;iBAAA;aAC3B;iBAAM;gBACH,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;aAC3B;SACJ;QACD,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;KAC/B;IAED,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAG,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAA;IAEvC,OAAO,GAAG,GAAG,GAAG,GAAG,WAAW,CAAA;AAClC,CAAC,CAAA;AAED,IAAM,eAAe,GAAG,UAAC,UAAkB;IACvC,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9D,KAAI,IAAM,GAAG,IAAI,UAAU,EAAE;QACzB,IAAG,UAAU,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE;YACjC,KAAkB,UAAe,EAAf,KAAA,UAAU,CAAC,GAAG,CAAC,EAAf,cAAe,EAAf,IAAe;gBAA7B,IAAM,IAAI,SAAA;gBACV,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,CAAA;aAAA;SACxC;aAAM;YACH,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;SACxC;KACJ;IAED,OAAO,QAAQ,CAAA;AACnB,CAAC,CAAA;AAED,IAAM,cAAc,GAAG,UAAC,UAAkB;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SACzB,GAAG,CAAC,UAAA,GAAG;QACJ,OAAA,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG;aAC7B,KAAI,kBAAkB,CAAC,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAI,CAAA;IADlH,CACkH,CAAC;SACtH,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC,CAAA"} \ No newline at end of file diff --git a/src/wretcher.ts b/src/wretcher.ts index 95452d8..01a0687 100644 --- a/src/wretcher.ts +++ b/src/wretcher.ts @@ -24,7 +24,7 @@ export class Wretcher { public _middlewares: ConfiguredMiddleware[] = [], public _deferredChain: DeferredCallback[] = []) {} - static factory(url = "", opts: WretcherOptions = {}) { return new Wretcher(url, opts) } + static factory(url = "", options: WretcherOptions = {}) { return new Wretcher(url, options) } private selfFactory({ url = this._url, options = this._options, catchers = this._catchers, resolvers = this._resolvers, middlewares = this._middlewares, deferredChain = this._deferredChain } = {}) { return new Wretcher(url, options, catchers, resolvers, middlewares, deferredChain) @@ -32,11 +32,11 @@ export class Wretcher { /** * Sets the default fetch options used for every subsequent fetch call. - * @param opts New default options + * @param options New default options * @param mixin If true, mixes in instead of replacing the existing options */ - defaults(opts: WretcherOptions, mixin = false) { - conf.defaults = mixin ? mix(conf.defaults, opts) : opts + defaults(options: WretcherOptions, mixin = false) { + conf.defaults = mixin ? mix(conf.defaults, options) : options return this } @@ -189,52 +189,56 @@ export class Wretcher { }) } - private method(method, opts) { - const deferredWretcher = this._deferredChain.reduce((acc: Wretcher, curr) => curr(acc, acc._url, acc._options), this) - return resolver(deferredWretcher.options({ ...opts, method })) + private method(method, options = {}, body = null) { + const baseWretcher = + !body ? this : + typeof body === "object" ? this.json(body) : + this.body(body) + const deferredWretcher = baseWretcher._deferredChain.reduce((acc: Wretcher, curr) => curr(acc, acc._url, acc._options), baseWretcher) + return resolver(deferredWretcher.options({ ...options, method })) } /** * Performs a get request. */ - get(opts = {}) { - return this.method("GET", opts) + get(options?) { + return this.method("GET", options) } /** * Performs a delete request. */ - delete(opts = {}) { - return this.method("DELETE", opts) + delete(options?) { + return this.method("DELETE", options) } /** * Performs a put request. */ - put(opts = {}) { - return this.method("PUT", opts) + put(body?, options?) { + return this.method("PUT", options, body) } /** * Performs a post request. */ - post(opts = {}) { - return this.method("POST", opts) + post(body?, options?) { + return this.method("POST", options, body) } /** * Performs a patch request. */ - patch(opts = {}) { - return this.method("PATCH", opts) + patch(body?, options?) { + return this.method("PATCH", options, body) } /** * Performs a head request. */ - head(opts = {}) { - return this.method("HEAD", opts) + head(options?) { + return this.method("HEAD", options) } /** * Performs an options request */ - opts(opts = {}) { - return this.method("OPTIONS", opts) + opts(options?) { + return this.method("OPTIONS", options) } /** diff --git a/test/mock.js b/test/mock.js index 3721888..56d811e 100644 --- a/test/mock.js +++ b/test/mock.js @@ -42,24 +42,39 @@ const mockServer = { setupErrors(server) server.post("/text/roundTrip", (req,res) => { - if(req.header("content-type") === "text/plain") - res.sendRaw(req.body) - else + try { + if(req.header("content-type") === "text/plain") + res.sendRaw(req.body) + else + res.send(400) + } catch(error) { + console.error(error) res.send(400) + } }) server.post("/json/roundTrip", (req, res) => { - if(req.header("content-type") === "application/json") - res.json(req.body) - else + try { + if(req.header("content-type") === "application/json") + res.json(req.body) + else + res.send(400) + } catch(error) { + console.error(error) res.send(400) + } }) server.post("/urlencoded/roundTrip", (req, res) => { - if(req.header("content-type") === "application/x-www-form-urlencoded") - res.sendRaw(req.body) - else + try { + if(req.header("content-type") === "application/x-www-form-urlencoded") + res.sendRaw(req.body) + else + res.send(400) + } catch(error) { + console.error(error) res.send(400) + } }) server.post("/formData/decode", (req, res) => { diff --git a/test/wretch.spec.ts b/test/wretch.spec.ts index 1d0d9e0..c3a9e41 100644 --- a/test/wretch.spec.ts +++ b/test/wretch.spec.ts @@ -15,11 +15,11 @@ const mockServer = require("./mock") const _PORT = 9876 const _URL = `http://localhost:${_PORT}` -const allRoutes = (obj, type, action, opts?) => Promise.all([ +const allRoutes = (obj, type, action, opts?, body?) => Promise.all([ obj.get(opts)[type](_ => _).then(action), - obj.put(opts)[type](action), - obj.patch(opts)[type](action), - obj.post(opts)[type](action), + obj.put(body, opts)[type](action), + obj.patch(body, opts)[type](action), + obj.post(body, opts)[type](action), obj.delete(opts)[type](action), ]) @@ -81,21 +81,21 @@ describe("Wretch", function() { const init = wretch(`${_URL}/text`) const test = _ => expect(_).toBe("A text string") await allRoutes(init, "text", test) - await allRoutes(init, "text", test, {}) + await allRoutes(init, "text", test, {}, {}) }) it("should perform crud requests and parse a json response", async function() { const test = _ => expect(_).toEqual({ a: "json", object: "which", is: "stringified" }) const init = wretch(`${_URL}/json`) await allRoutes(init, "json", test) - await allRoutes(init, "json", test, {}) + await allRoutes(init, "json", test, {}, {}) }) it("should perform crud requests and parse a blob response", async function() { const test = _ => expect(_.size).toBe(duckImage.length) const init = wretch(`${_URL}/blob`) await allRoutes(init, "blob", test) - await allRoutes(init, "blob", test, {}) + await allRoutes(init, "blob", test, {}, {}) }) it("should perform crud requests and parse an arrayBuffer response", async function() { @@ -116,12 +116,18 @@ describe("Wretch", function() { const text = "hello, server !" const roundTrip = await wretch(`${_URL}/text/roundTrip`).content("text/plain").body(text).post().text() expect(roundTrip).toBe(text) + // Using shorthand + const roundTrip2 = await wretch(`${_URL}/text/roundTrip`).content("text/plain").post(text).text() + expect(roundTrip2).toBe(text) }) it("should perform a json round trip", async function() { const jsonObject = { a: 1, b: 2, c: 3 } const roundTrip = await wretch(`${_URL}/json/roundTrip`).json(jsonObject).post().json() expect(roundTrip).toEqual(jsonObject) + // Using shorthand + const roundTrip2 = await wretch(`${_URL}/json/roundTrip`).post(jsonObject).json() + expect(roundTrip2).toEqual(jsonObject) }) it("should perform an url encoded form data round trip", async function() {