@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
JavaScript
;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));});