UNPKG

@girders-elements/core

Version:

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

87 lines (56 loc) 3.13 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true}); var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda); var _invariant=require('invariant');var _invariant2=_interopRequireDefault(_invariant); var _registry=require('../registry'); var _data=require('../data');var data=_interopRequireWildcard(_data); var _subsystem=require('../subsystem');var Subsystem=_interopRequireWildcard(_subsystem); var _impl=require('./impl');var impl=_interopRequireWildcard(_impl);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 _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 effectsRegistryAttribute='@@girders-elements/_effectsRegistry'; var sideEffectsRegistryAttribute='@@girders-elements/_sideEffectsRegistry'; Subsystem.extend(function(){var _effect,_sideEffect; var effectsRegistry=new _registry.ActionRegistry(); var sideEffectsRegistry=new _registry.ActionRegistry(); var register=_ramda2.default.curry(function(registry,kind,action,effect){ (0,_invariant2.default)( data.isElementRef(kind), 'You must provide a valid element reference to register'); (0,_invariant2.default)(typeof action==='string','The action must be a string'); (0,_invariant2.default)(typeof effect==='function','the effect must be a function'); registry.register(_registry.ActionRegistry.keyFor(kind,action),effect); }); var forKind=_ramda2.default.curry(function(registry,kind,registrations){ (0,_invariant2.default)( typeof registrations==='function', 'You must provide a registrations block'); registrations({register:register(registry,kind)}); }); return{ effect:(_effect={},_defineProperty(_effect, effectsRegistryAttribute,effectsRegistry),_defineProperty(_effect,'register', register(effectsRegistry)),_defineProperty(_effect,'forKind', forKind(effectsRegistry)),_effect), sideEffect:(_sideEffect={},_defineProperty(_sideEffect, sideEffectsRegistryAttribute,sideEffectsRegistry),_defineProperty(_sideEffect,'register', register(sideEffectsRegistry)),_defineProperty(_sideEffect,'forKind', forKind(sideEffectsRegistry)),_sideEffect)}; });exports.default= Subsystem.create(function(system){ var config={ effectsRegistry:getCombinedRegistry( ['effect',effectsRegistryAttribute], system.subsystemSequence), sideEffectsRegistry:getCombinedRegistry( ['sideEffect',sideEffectsRegistryAttribute], system.subsystemSequence), kernel:system}; return{ name:'effects', middleware:impl.middleware(config), reducer:impl.reducer(config)}; }); var getRegistry=_ramda2.default.path; var getCombinedRegistry=_ramda2.default.curry(function(path,subsystems){return( data.flow( subsystems, _ramda2.default.map(getRegistry(path)), _ramda2.default.reject(_ramda2.default.isNil),_registry.chainRegistries));});