UNPKG

fetchero

Version:

_A type-safe, proxy-based HTTP & GraphQL client for modern applications._

3 lines (2 loc) 13.3 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=(e=require("axios"))&&"object"==typeof e&&"default"in e?e.default:e;function t(e,r,t,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void t(e)}s.done?r(u):Promise.resolve(u).then(n,o)}function n(e){return function(){var r=this,n=arguments;return new Promise((function(o,i){var a=e.apply(r,n);function s(e){t(a,o,i,s,u,"next",e)}function u(e){t(a,o,i,s,u,"throw",e)}s(void 0)}))}}function o(){return(o=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(null,arguments)}function i(){var e,r,t="function"==typeof Symbol?Symbol:{},n=t.iterator||"@@iterator",o=t.toStringTag||"@@toStringTag";function s(t,n,o,i){var s=Object.create((n&&n.prototype instanceof c?n:c).prototype);return a(s,"_invoke",function(t,n,o){var i,a,s,c=0,l=o||[],f=!1,p={p:0,n:0,v:e,a:h,f:h.bind(e,4),d:function(r,t){return i=r,a=0,s=e,p.n=t,u}};function h(t,n){for(a=t,s=n,r=0;!f&&c&&!o&&r<l.length;r++){var o,i=l[r],h=p.p,d=i[2];t>3?(o=d===n)&&(s=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=e):i[0]<=h&&((o=t<2&&h<i[1])?(a=0,p.v=n,p.n=i[1]):h<d&&(o=t<3||i[0]>n||n>d)&&(i[4]=t,i[5]=n,p.n=d,a=0))}if(o||t>1)return u;throw f=!0,n}return function(o,l,d){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&h(l,d),a=l,s=d;(r=a<2?e:s)||!f;){i||(a?a<3?(a>1&&(p.n=-1),h(a,s)):p.n=s:p.v=s);try{if(c=2,i){if(a||(o="next"),r=i[o]){if(!(r=r.call(i,s)))throw TypeError("iterator result is not an object");if(!r.done)return r;s=r.value,a<2&&(a=0)}else 1===a&&(r=i.return)&&r.call(i),a<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),a=1);i=e}else if((r=(f=p.n<0)?s:t.call(n,p))!==u)break}catch(r){i=e,a=1,s=r}finally{c=1}}return{value:r,done:f}}}(t,o,i),!0),s}var u={};function c(){}function l(){}function f(){}r=Object.getPrototypeOf;var p=[][n]?r(r([][n]())):(a(r={},n,(function(){return this})),r),h=f.prototype=c.prototype=Object.create(p);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,a(e,o,"GeneratorFunction")),e.prototype=Object.create(h),e}return l.prototype=f,a(h,"constructor",f),a(f,"constructor",l),l.displayName="GeneratorFunction",a(f,o,"GeneratorFunction"),a(h),a(h,o,"Generator"),a(h,n,(function(){return this})),a(h,"toString",(function(){return"[object Generator]"})),(i=function(){return{w:s,m:d}})()}function a(e,r,t,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}(a=function(e,r,t,n){if(r)o?o(e,r,{value:t,enumerable:!n,configurable:!n,writable:!n}):e[r]=t;else{function i(r,t){a(e,r,(function(e){return this._invoke(r,t,e)}))}i("next",0),i("throw",1),i("return",2)}})(e,r,t,n)}function s(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof r?r:r+""}var u=function(){function e(){}return e.isNotFound=function(e){var r;return"404"===(null==e||null==(r=e[0])||null==(r=r.extensions)?void 0:r.code)},e.formatErrorCode=function(e){return{message:e.message,extensions:o({code:e.code},e.extensions)}},e.formatErrorMessage=function(e){return{extensions:o({message:e.message},e.extensions)}},e.formatErrorResponse=function(e){var r=e.extensions,t=r.code,n=r.message,o=void 0===n?"":n,i=o;return"422"===t&&"object"==typeof o&&null!==o&&(i=Object.values(o).join(", ")),{extensions:{code:t,message:t?{401:o,404:o,500:o,422:i,BAD_USER_INPUT:"Input is not valid",INTERNAL_SERVER_ERROR:"Internal Server Error"}[t]||"Unknown error":""}}},e.compose=function(e){var r=this;return[this.formatErrorCode,this.formatErrorMessage,this.formatErrorResponse].reduce((function(e,t){return t(t===r.formatErrorCode?{code:e.extensions.code||"",extensions:e.extensions,message:e.extensions.message||""}:e)}),e)},e.makeErrorResponse=function(e){return{message:"Internal Server Error",extensions:{message:e.message,error:!0,code:String(e.code)}}},e}(),c=function(){function e(){}return e.build=function(e,r,t){if(!e||"string"!=typeof e)throw new Error("Base URL must be a non-empty string");try{var n=new URL(r.join("/"),e);return t&&Object.keys(t).length>0&&Object.entries(t).forEach((function(e){var r=e[1];null!=r&&n.searchParams.append(e[0],String(r))})),n.toString()}catch(e){throw new Error("Invalid URL construction: "+(e instanceof Error?e.message:"Unknown error"))}},e}(),l=function(){function e(){}return e.validateUrl=function(e){try{new URL(e)}catch(r){throw new Error("Invalid URL format: "+e)}},e.validateHeaders=function(e){if(!e||"[object Object]"!==Object.prototype.toString.call(e))throw new Error("Headers must be a valid object")},e.validateFields=function(e){if("string"!=typeof e||!e.trim())throw new Error("Field selection must be a non-empty string")},e.validateGraphQLArgs=function(e){if(e&&"[object Object]"!==Object.prototype.toString.call(e))throw new Error("GraphQL arguments must be an object")},e.validateConstructorArgs=function(e){if(!e||"string"!=typeof e)throw new Error('Fetchero: "baseUrl" must be a non-empty string.');try{new URL(e)}catch(e){throw new Error('Fetchero: "baseUrl" must be a valid URL.')}},e}(),f=function(){function e(e,r,t){this.baseUrl=e,this.headers=r,this.interceptors=t}var t=e.prototype;return t.makeRequest=function(){var e=n(i().m((function e(t){var n,o,a,s,c,l,f,p,h,d;return i().w((function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,t.url){e.n=1;break}throw new Error("Request URL is required");case 1:if(null==(n=this.interceptors)||!n.request){e.n=3;break}return e.n=2,this.interceptors.request(t);case 2:h=e.v,e.n=4;break;case 3:h=t;case 4:return(a=h).timeout||(a.timeout=3e4),e.n=5,r(a);case 5:if(p={data:null!=(l=(c=(s=e.v).data||{}).data)?l:null},(f=c.errors)&&Array.isArray(f)&&f.length>0&&(p.errors=f.map((function(e){return u.compose(e)}))),null==(o=this.interceptors)||!o.response){e.n=7;break}return e.n=6,this.interceptors.response(s);case 6:d=e.v,e.n=8;break;case 7:d=p;case 8:return e.a(2,d);case 9:return e.p=9,e.a(2,this.handleRequestError(e.v))}}),e,this,[[0,9]])})));return function(r){return e.apply(this,arguments)}}(),t.handleRequestError=function(e){var r,t,n,o,i,a=null!=(r=null==(t=e.response)?void 0:t.status)?r:"ECONNABORTED"===e.code?408:500;return i=null!=(n=e.response)&&null!=(n=n.data)&&n.message?e.response.data.message:null!=(o=e.response)&&null!=(o=o.data)&&o.error?e.response.data.error:"ECONNABORTED"===e.code?"Request timeout":"ENOTFOUND"===e.code||"ECONNREFUSED"===e.code?"Network connection failed":e.message||"Network request failed",{data:null,errors:[u.makeErrorResponse({code:a,message:i})]}},e}(),p=function(){function e(e,r,t){this.httpClient=e,this.baseUrl=r,this.headers=t}var r=e.prototype;return r.createProxy=function(e,r){var t=this;return void 0===e&&(e=[]),void 0===r&&(r={}),new Proxy((function(){}),{get:function(a,s){if("string"==typeof s){switch(s){case"base":return function(n){return l.validateUrl(n),t.createProxy(e,o({},r,{base:n}))};case"headers":return function(n){return l.validateHeaders(n),t.createProxy(e,o({},r,{headers:o({},r.headers,n)}))}}return t.isHttpMethod(s)?function(){var a=n(i().m((function n(a){var u,l;return i().w((function(n){for(;;)switch(n.n){case 0:return void 0===a&&(a={}),l=c.build(null!=(u=r.base)?u:t.baseUrl,e,a.query),n.a(2,t.httpClient.makeRequest({url:l,method:s.toUpperCase(),data:a.body,transformResponse:function(e){return{data:JSON.parse(e)}},headers:o({},t.headers,r.headers,a.headers)}))}}),n)})));return function(e){return a.apply(this,arguments)}}():t.createProxy([].concat(e,[s]),r)}},apply:function(n,o,i){var a=i.filter((function(e){return null!=e})).map(String);return t.createProxy([].concat(e,a),r)}})},r.isHttpMethod=function(r){return e.HTTP_METHODS.has(r.toLowerCase())},e}();function h(e){return"[object Object]"===Object.prototype.toString.call(e)}p.HTTP_METHODS=new Set(["get","post","put","patch","delete"]);var d=/^(mutation|query)(?:\s+)?{|^(?!mutation|query)\w+(?:\s+)?(?:{|\()/i,y=function(e){return 0===Object.keys(e).length},v=function(e){return e.trim().replace(/\n/g," ").replace(/\s{2,}/g," ")};function b(e){var r=typeof e;if(h(e)){if(e.type)return e.type;r=typeof e.value}return{number:"Int",string:"String",boolean:"Boolean"}[r]}function g(e,r){if(["number","string","boolean"].includes(typeof e))return e;if(h(e)&&e.value)return e.value;throw new Error("The value is not in acceptable format for "+r)}function m(e){var r={},t=[],n=e.map((function(e,n){var o=[];for(var i in e){var a=g(e[i],i),s=b(e[i]),u=i+"_"+n;if(!s)throw new Error("`type` is not defined for `"+i+"` property");r[u]=a,t.push("$"+u+": "+s),o.push(i+": $"+u)}return o.join(", ")}));return{variables:r,argsStrings:n,varString:t.join(", ")}}function w(e,r){var t=e.map((function(e,t){return e+(r[t]||"")})).join(""),n=/^(mutation|query)\s+{/;return n.test(e[0].trim())?t.replace(n,"").replace(/}$/,""):t}var E=function(){function e(e,r,t){this.httpClient=e,this.baseUrl=r,this.headers=t}var r=e.prototype;return r.createProxy=function(e){var r=this;return new Proxy({},{get:function(t,n){if("string"==typeof n){var o=n.toLowerCase();if(!r.isValidGraphQLOperation(o))throw new Error('Invalid GraphQL operation "'+n+'". Valid operations: query, mutation, subscription');try{return r.createOperationProxy(o,e)}catch(e){return console.log({error:e},"abul boom"),e}}}})},r.isValidGraphQLOperation=function(r){return e.GRAPHQL_OPERATIONS.has(r)},r.createOperationProxy=function(e,r){var t=this;return new Proxy((function(){}),{get:function(n,o){if("string"==typeof o)return t.createQueryBuilder(e,o,{},r)}})},r.createQueryBuilder=function(e,r,t,n){var i=this,a=function(n){return void 0===n&&(n=""),i.buildGraphQLOperation(e,r,t,n)},s=a();return new Proxy((function(){}),{get:function(u,c){if("string"==typeof c)switch(c){case"select":return function(e){l.validateFields(e);var r=a(e);return i.executeGraphQLQuery(r.query,r.variables,n)};case"execute":return function(){return i.executeGraphQLQuery(s.query,s.variables,n)};case"then":return function(e,r){return i.executeGraphQLQuery(s.query,s.variables,n).then(e,r)};case"base":return function(a){return l.validateUrl(a),i.createQueryBuilder(e,r,t,o({},n,{base:a}))};case"headers":return function(a){return l.validateHeaders(a),i.createQueryBuilder(e,r,t,o({},n,{headers:o({},n.headers,a)}))};default:throw new Error('Invalid property "'+c+'". Available methods: select(fields), execute(), base(url), headers(obj)')}},apply:function(t,o,a){var s=a[0];return l.validateGraphQLArgs(s),i.createQueryBuilder(e,r,s||{},n)}})},r.buildGraphQLOperation=function(e,r,t,n){try{if(!r||"string"!=typeof r)throw new Error("Field name must be a non-empty string");var o=null==n?void 0:n.trim(),i=t&&Object.keys(t).length>0,a=o?"{ "+o+" }":"",s=function(e){var r=e[0].trim();if(!d.test(r))throw new Error("The query string is not valid");for(var t=/^mutation\s+{/.test(r),n=t?"mutation":"query",o=arguments.length,i=new Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];var s=m(i),u=s.variables,c=s.argsStrings,l=s.varString,f=l?"my_"+n+"("+l+")":"",p=n+" "+f+" {\n "+w(e,c)+"\n }",h={query:v(p)};return y(u)||(h.variables=u),h}(i?[e+" { "+r+" (",") "+a+" }"]:[e+" { "+r+" "," "+a+" }"],t||{});if(!s.query||"string"!=typeof s.query)throw new Error("Failed to generate valid GraphQL query");return s}catch(t){var u=t instanceof Error?t.message:"Unknown error";throw new Error("Failed to build GraphQL "+e+' for field "'+r+'": '+u)}},r.executeGraphQLQuery=function(){var e=n(i().m((function e(r,t,n){var a;return i().w((function(e){for(;;)switch(e.n){case 0:if(r&&"string"==typeof r){e.n=1;break}throw new Error("GraphQL query must be a non-empty string");case 1:return e.a(2,this.httpClient.makeRequest({url:null!=(a=n.base)?a:this.baseUrl,method:"POST",data:{query:r,variables:t||{}},headers:o({"Content-Type":"application/json"},this.headers,n.headers)}))}}),e,this)})));return function(r,t,n){return e.apply(this,arguments)}}(),e}();E.GRAPHQL_OPERATIONS=new Set(["query","mutation","subscription"]);var x=function(){return e=function(e){var r=e.baseUrl,t=e.headers,n=void 0===t?{}:t,i=e.interceptors;l.validateConstructorArgs(r),this.headers=Object.freeze(o({},n)),this.httpClient=new f(r,this.headers,i),this.restProxyFactory=new p(this.httpClient,r,this.headers),this.graphqlProxyFactory=new E(this.httpClient,r,this.headers)},(r=[{key:"rest",get:function(){return this.restProxy||(this.restProxy=this.restProxyFactory.createProxy()),this.restProxy}},{key:"gql",get:function(){return this.gqlProxy||(this.gqlProxy=this.graphqlProxyFactory.createProxy({})),this.gqlProxy}}])&&function(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,s(n.key),n)}}(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r}();exports.ErrorHandler=u,exports.Fetchero=x,exports.URLBuilder=c,exports.Validators=l,exports.createFetchero=function(e){var r=new x(e);return Object.freeze({rest:r.rest,gql:r.gql})},exports.gql=function(e){return new x(e).gql},exports.rest=function(e){return new x(e).rest}; //# sourceMappingURL=fetchero.cjs.production.min.js.map