UNPKG

@skele/classic

Version:

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

1 lines 5.55 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.create=create;exports.default=void 0;var _immutable=_interopRequireDefault(require("immutable"));var R=_interopRequireWildcard(require("ramda"));var _core=require("@skele/core");var actions=_interopRequireWildcard(require("./action"));var _redux=require("redux");var SubSystem=_interopRequireWildcard(require("./subsystem"));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 _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_nonIterableSpread();}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance");}function _iterableToArray(iter){if((typeof Symbol==="function"?Symbol.iterator:"@@iterator")in Object(iter)||Object.prototype.toString.call(iter)==="[object Arguments]")return Array.from(iter);}function _arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var Cursor=_core.internal.Cursor;var Kernel=function(){function Kernel(subsystems,init,config){_classCallCheck(this,Kernel);this._config=config;this._init=_immutable.default.fromJS(init||{});var ssMap=R.reduce(function(ss,s){return R.assoc(s.name,s,ss);},{},subsystems);this._subsystems=ssMap;this._subsystemSequence=subsystems;var instantiatedSeq=[];var instantatedMap={};for(var _iterator=subsystems,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:_iterator[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]();;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var _s2=_ref;var instantiated=SubSystem.instantiate(this,instantatedMap,_s2);instantiatedSeq.push(instantiated);instantatedMap[instantiated.name]=instantiated;}this._subsystems=instantatedMap;this._subsystemSequence=instantiatedSeq;var middleware=getMiddleware(this.subsystemSequence);var reducer=buildReducer(this.subsystemSequence);if(R.isEmpty(middleware)){this._store=(0,_redux.createStore)(reducer,this._init);}else{this._store=(0,_redux.createStore)(reducer,this._init,_redux.applyMiddleware.apply(void 0,_toConsumableArray(middleware)));}for(var _iterator2=this.subsystemSequence,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:_iterator2[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]();;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var _s3=_ref2;if(_s3.start)_s3.start();}}_createClass(Kernel,[{key:"subscribe",value:function subscribe(listener){return this._store.subscribe(listener);}},{key:"dispatch",value:function dispatch(action){this._store.dispatch(action);}},{key:"query",value:function query(){var path=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];return Cursor.from(this._store.getState(),path||[]);}},{key:"focusOn",value:function focusOn(path){var self=this;return{dispatch:function dispatch(action){self.dispatch(actions.atCursor(self.query(path),action));},query:function query(subPath){return self.query(_core.data.asList(path).concat(_core.data.asList(subPath)));},focusOn:function focusOn(subPath){return self.focusOn(_core.data.asList(path).concat(_core.data.asList(subPath)));},get config(){return self.config;},get subsystems(){return self.subsystems;},get subsystemSequence(){return self.subsystemSequence;},get elementZipper(){return self.elementZipper;},subscribe:function subscribe(listener){return self.subscribe(listener);}};}},{key:"subsystems",get:function get(){return this._subsystems;}},{key:"subsystemSequence",get:function get(){return this._subsystemSequence;}},{key:"config",get:function get(){return this._config;}},{key:"elementZipper",get:function get(){return _core.zip.elementZipper({defaultChildPositions:getChildPostions(this.config)});}}]);return Kernel;}();function buildReducer(subsystems){var reducers=R.pipe(R.map(SubSystem.reducer),R.reject(R.isNil))(subsystems);return function(state,action){return R.reduce(function(s,r){return r(s,action);},state,reducers);};}var getMiddleware=R.pipe(R.map(SubSystem.middleware),R.reject(R.isNil));var getChildPostions=R.either(R.path(['data','defaultChildPositions']),R.path(['transform','childrenElements']));function create(subsystems,init,config){return new Kernel(subsystems,init,config);}var _default={create:create};exports.default=_default;