@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
297 lines (47 loc) • 10.6 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.fallback=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;};var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[typeof Symbol==='function'?Symbol.iterator:'@@iterator'](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"])_i["return"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if((typeof Symbol==='function'?Symbol.iterator:'@@iterator')in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}();exports.
setLoading=setLoading;exports.
setRefreshing=setRefreshing;exports.
setRefreshMetadata=setRefreshMetadata;exports.
applyRead=applyRead;exports.
fail=fail;exports.
performRead=performRead;exports.
read=read;exports.
readRefresh=readRefresh;var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);var _invariant=require('invariant');var _invariant2=_interopRequireDefault(_invariant);var _immutable=require('immutable');var _uuid=require('uuid');var _uuid2=_interopRequireDefault(_uuid);var _log=require('../impl/log');var _util=require('../impl/util');var _data=require('../data');var _actions=require('./actions');var readActions=_interopRequireWildcard(_actions);var _propNames=require('../propNames');var propNames=_interopRequireWildcard(_propNames);var _http=require('./http');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))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}else{return Array.from(arr);}}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;}var fallback=exports.fallback='@@girders-elements/defaultRead';var updateKind=_ramda2.default.curry(function(update,element){return element.update('kind',_ramda2.default.pipe(_data.canonical,update));});var setReadId=_ramda2.default.curry(function(id,el){return el.setIn([propNames.metadata,'readId'],id);});var getReadId=function getReadId(el){return el.getIn([propNames.metadata,'readId']);};var setMeta=_ramda2.default.curry(function(meta,el){return el.set(propNames.metadata,meta);});var setRefreshingAttr=_ramda2.default.curry(function(value,el){return el.setIn([propNames.metadata,'refreshing'],value);});var setRefreshMeta=_ramda2.default.curry(function(meta,el){return el.setIn([propNames.metadata,'failedRefresh'],meta).deleteIn([propNames.metadata,'refreshing']);});function setLoading(element,action){var readId=action.readId;return(0,_data.flow)(element,updateKind(function(k){return k.set(0,'__loading');}),setReadId(readId));}function setRefreshing(element,action){var readId=action.readId,refreshing=action.refreshing;if(refreshing==null)refreshing=true;return(0,_data.flow)(element,setReadId(readId),setRefreshingAttr(refreshing));}function setRefreshMetadata(element,action){var metadata=action.metadata,readId=action.readId;return(0,_data.flow)(element,_ramda2.default.unless(function(el){return el==null||readId!==getReadId(el);},setRefreshMeta(metadata)));}function applyRead(element,action){var readId=action.readId,readValue=action.readValue;if(element==null||readId!==getReadId(element))return element;return(0,_data.flow)(readValue,setReadId(readId));}function fail(element,action){var readId=action.readId,response=action.response;if(element==null||readId!==getReadId(element))return element;return(0,_data.flow)(element,updateKind(function(k){return k.set(0,'__error');}),setMeta((0,_immutable.fromJS)(response.meta)));}function performRead(context,readParams){var _context$subsystems$r,registry,enrichment,enhancement,transformation,kernel,uri,opts,reader,enhanceContext,_ref,_ref2,readResponse,readIndependentEnhancements,readValue,readDependentEnhancements,enhancedResponse,enrichContext,enrichedResponse,transformContext,transformedResponse;return regeneratorRuntime.async(function performRead$(_context){while(1){switch(_context.prev=_context.next){case 0:_context$subsystems$r=context.subsystems.read.context,registry=_context$subsystems$r.registry,enrichment=_context$subsystems$r.enrichment,enhancement=_context$subsystems$r.enhancement,transformation=_context$subsystems$r.transformation;kernel=context;uri=readParams.uri,opts=readParams.opts;reader=registry.get(uri)||registry.get(fallback);if(!(reader!=null)){_context.next=33;break;}enhanceContext={config:kernel.config,subsystems:kernel.subsystems,subsystemSequence:kernel.subsystemSequence,elementZipper:kernel.elementZipper,uri:uri,opts:opts};_context.next=8;return regeneratorRuntime.awrap((0,_util.time)('TIME-reader-plus-enhancement-('+uri+')',Promise.all.bind(Promise))([(0,_util.time)('TIME-reader-('+uri+')',reader)(uri,opts,_ramda2.default.pick(['config','subsystems','subsystemSequence'],context)),(0,_util.time)('TIME-enhancement-run-independent-('+uri+')',enhancement.runEnhancers)(null,enhanceContext,enhancement.readIndependentEnhancers())]));case 8:_ref=_context.sent;_ref2=_slicedToArray(_ref,2);readResponse=_ref2[0];readIndependentEnhancements=_ref2[1];if((0,_http.isResponse)(readResponse)){_context.next=14;break;}throw new Error('The read fn acting on '+uri+' has returned an invalid response: '+readResponse);case 14:if(!(0,_http.isOK)(readResponse)){_context.next=30;break;}readValue=(0,_immutable.fromJS)(readResponse.value).merge(_defineProperty({},propNames.metadata,(0,_immutable.fromJS)(readResponse.meta||defaultMeta(uri))));enhanceContext=_extends({},enhanceContext,{readValue:readValue});_context.next=19;return regeneratorRuntime.awrap((0,_util.time)('TIME-enhancement-run-read-dependent-('+uri+')',enhancement.runEnhancers)(readValue,enhanceContext,enhancement.readDependentEnhancers((0,_data.kindOf)(readValue))));case 19:readDependentEnhancements=_context.sent;enhancedResponse=(0,_util.timeSync)('TIME-enhancement-aply-('+uri+')',enhancement.applyEnhancements)(readValue,enhanceContext,[].concat(_toConsumableArray(readIndependentEnhancements),_toConsumableArray(readDependentEnhancements)));enrichContext=_extends({},enhanceContext,{readValue:enhancedResponse});_context.next=24;return regeneratorRuntime.awrap((0,_util.time)('TIME-enrichment-('+uri+')',enrichment)(enhancedResponse,enrichContext));case 24:enrichedResponse=_context.sent;transformContext=_extends({},enrichContext,{readValue:enrichedResponse});transformedResponse=(0,_util.timeSync)('TIME-transformation-('+uri+')',transformation)(enrichedResponse,transformContext);return _context.abrupt('return',_extends({},readResponse,{value:transformedResponse}));case 30:return _context.abrupt('return',readResponse);case 31:_context.next=34;break;case 33:return _context.abrupt('return',{meta:{url:uri,uri:uri,status:999,message:'There\'s no reader defined for '+pattern+'. Did you forget to register a fallback reader?'}});case 34:case'end':return _context.stop();}}},null,this);}function defaultMeta(uri){return{status:200,uri:uri,url:uri};}function read(context,action){var dispatch,readId,readResponse;return regeneratorRuntime.async(function read$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:dispatch=context.dispatch;readId=(0,_uuid2.default)();dispatch(_extends({},action,{readId:readId,type:readActions.types.setLoading}));_context2.prev=3;_context2.next=6;return regeneratorRuntime.awrap((0,_util.time)('TIME-performRead-('+action.uri+')',performRead)(context,{uri:action.uri,opts:_ramda2.default.pick(['revalidate'],action)}));case 6:readResponse=_context2.sent;if((0,_http.isOK)(readResponse)){dispatch(_extends({},action,{type:readActions.types.apply,readId:readId,response:readResponse,readValue:readResponse.value}));}else{dispatch(_extends({},action,{readId:readId,type:readActions.types.fail,response:readResponse}));}_context2.next=13;break;case 10:_context2.prev=10;_context2.t0=_context2['catch'](3);dispatch(_extends({},action,{readId:readId,type:readActions.types.fail,response:{meta:{status:999,message:_context2.t0.toString(),error:_context2.t0}}}));case 13:case'end':return _context2.stop();}}},null,this,[[3,10]]);}function readRefresh(context,action){var dispatch,element,uri,readId,response;return regeneratorRuntime.async(function readRefresh$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:
dispatch=context.dispatch;
element=context.query();
uri=action.uri||element.getIn([propNames.metadata,'uri']);
readId=(0,_uuid2.default)();
(0,_invariant2.default)(
uri!=null,
'The element you are refreshing must have been loaded via a read');
context.dispatch(_extends({},
action,{
readId:readId,
type:readActions.types.setRefreshing}));_context3.prev=6;_context3.next=9;return regeneratorRuntime.awrap(
performRead(context,{
uri:uri,
opts:_extends({revalidate:true},_ramda2.default.pick(['revalidate'],action))}));case 9:response=_context3.sent;
if((0,_http.isOK)(response)){
dispatch(_extends({},
action,{
readId:readId,
type:readActions.types.apply,
response:response,
readValue:response.value}));
}else{
(0,_log.info)('Unsuccessful refreshing (read) '+uri+' ',response);
dispatch(_extends({},
action,{
readId:readId,
metadata:(0,_immutable.fromJS)(response.meta),
type:readActions.types.setRefreshMetadata}));
}_context3.next=17;break;case 13:_context3.prev=13;_context3.t0=_context3['catch'](6);
(0,_log.error)('Error while refreshing (read) '+uri+' ',_context3.t0);
dispatch(_extends({},
action,{
readId:readId,
metadata:(0,_immutable.fromJS)({
status:999,
message:_context3.t0.toString(),
error:_context3.t0}),
type:readActions.types.setRefreshMetadata}));case 17:case'end':return _context3.stop();}}},null,this,[[6,13]]);}