UNPKG

@girders-elements/core

Version:

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

148 lines (14 loc) 3.69 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.httpRead=exports.get=undefined;var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};exports. execute=execute;exports. post=post;exports. asResponse=asResponse;exports. failedResponse=failedResponse;exports. flow=flow;exports. responseMeta=responseMeta;exports. isResponse=isResponse;exports. isOK=isOK;var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);var _immutable=require('immutable');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function execute(url,options){var defaults={revalidate:false,method:'GET'};var opts=void 0;if(typeof options==='boolean'){opts=_extends({},defaults,{revalidate:options});}else{opts=_extends({},defaults,options);}var headers=new Headers();if(opts.revalidate){headers.append('Cache-Control','max-age=0');}if(opts.headers){_ramda2.default.forEachObjIndexed(function(v,h){return headers.append(h,v);},opts.headers);}var fetchOptions=_extends({},_ramda2.default.omit(['revalidate','headers'],opts),{headers:headers});return fetch(url,fetchOptions).then(processFetchResponse).catch(errorResponseForUrl(url));}function post(url,json,options){var opts=_extends({},options,{method:'POST',body:JSON.stringify(json),headers:_extends({},_ramda2.default.defaultTo({},_ramda2.default.prop('headers',options)),{'Content-Type':'application/json'})});return execute(url,_extends({},opts,{method:'POST'}));}var get=exports.get=execute;var httpRead=exports.httpRead=get;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 _extends({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 _extends({},object!=null?{value:object}:{},{meta:_extends({},from!=null?{uri:from,url:from}:{},{status:999,message:message})});}var unwrap=_ramda2.default.prop('value');var wrap=function wrap(resp,v){return isResponse(v)?v:_extends({},resp,{value:v});};function flow(resp){for(var _len=arguments.length,fns=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){fns[_key-1]=arguments[_key];}return _ramda2.default.reduce(function(v,fn){return isOK(v)?wrap(v,fn(unwrap(v))):_ramda2.default.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||_ramda2.default.path(['meta','status'],response)!=null);}function isOK(response){ var status=_ramda2.default.path(['meta','status'],response); return( response.value!=null&&status==null|| response.value!=null&&status>=200&&status<300); }