UNPKG

@skele/classic

Version:

Skele is an architectural framework that assists with building data-driven apps with React or React Native.

1 lines 4.82 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.execute=execute;exports.post=post;exports.options=options;exports.del=del;exports.head=head;exports.put=put;exports.patch=patch;exports.asResponse=asResponse;exports.failedResponse=failedResponse;exports.flow=flow;exports.responseMeta=responseMeta;exports.isResponse=isResponse;exports.isOK=isOK;exports.httpRead=exports.get=void 0;var R=_interopRequireWildcard(require("ramda"));var _immutable=require("immutable");function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):{};if(desc.get||desc.set){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}}newObj.default=obj;return newObj;}}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==='function'){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable;}));}ownKeys.forEach(function(key){_defineProperty(target,key,source[key]);});}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function execute(url,options){var defaults={revalidate:false,method:'GET'};var opts;if(typeof options==='boolean'){opts=_objectSpread({},defaults,{revalidate:options});}else{opts=_objectSpread({},defaults,options);}var headers=new Headers();if(opts.revalidate){headers.append('Cache-Control','max-age=0');}if(opts.headers){R.forEachObjIndexed(function(v,h){return headers.append(h,v);},opts.headers);}var fetchOptions=_objectSpread({},R.omit(['revalidate','headers'],opts),{headers:headers});return fetch(url,fetchOptions).then(processFetchResponse).catch(errorResponseForUrl(url));}function post(url,json,options){var opts=_objectSpread({},options,jsonBody(json,options),{method:'POST'});return execute(url,opts);}var get=execute;exports.get=get;var httpRead=get;exports.httpRead=httpRead;function options(uri,opts){return execute(uri,_objectSpread({},opts,{method:'OPTIONS'}));}function del(uri,opts){return execute(uri,_objectSpread({},opts,{method:'DELETE'}));}function head(uri,opts){return execute(uri,_objectSpread({},opts,{method:'HEAD'}));}function put(uri,json,options){var opts=_objectSpread({},options,jsonBody(json,options),{method:'PUT'});return execute(uri,opts);}function patch(uri,json,options){var opts=_objectSpread({},options,jsonBody(json,options),{method:'PATCH'});return execute(uri,opts);}function jsonBody(json,options){return{body:JSON.stringify(json),headers:_objectSpread({},R.defaultTo({},R.prop('headers',options)),{'Content-Type':'application/json'})};}function processFetchResponse(resp){if(resp.ok){return resp.json().then(function(json){return{value:(0,_immutable.fromJS)(json),meta:responseMeta(resp)};}).catch(errorResponseForUrl(resp.url));}else{return{meta:responseMeta(resp)};}}function errorResponseForUrl(url){return function(error){return{meta:{url:url,uri:url,status:998,message:error!=null?error.message:undefined,error:error}};};}function asResponse(value){var from=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;return _objectSpread({value:value},from!=null?{meta:{status:200,uri:from,url:from,message:'OK'}}:{});}function failedResponse(message){var object=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;var from=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;if(from==null){from=object;object=undefined;}return _objectSpread({},object!=null?{value:object}:{},{meta:_objectSpread({},from!=null?{uri:from,url:from}:{},{status:999,message:message})});}var unwrap=R.prop('value');var wrap=function wrap(resp,v){return isResponse(v)?v:_objectSpread({},resp,{value:v});};function flow(resp){for(var _len=arguments.length,fns=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){fns[_key-1]=arguments[_key];}return R.reduce(function(v,fn){return isOK(v)?wrap(v,fn(unwrap(v))):R.reduced(v);},resp,fns);}function responseMeta(resp){var message=resp.statusText;if(!message){message=resp.ok||isOK(resp)?'OK':'Failure';}var uri=resp.uri||resp.url;return{url:uri,uri:uri,status:resp.status?resp.status:200,message:message};}function isResponse(response){return response!=null&&(response.value!=null||R.path(['meta','status'],response)!=null);}function isOK(response){var status=R.path(['meta','status'],response);return response.value!=null&&status==null||response.value!=null&&status>=200&&status<300;}