@skele/classic
Version:
Skele is an architectural framework that assists with building data-driven apps with React or React Native.
1 lines • 3.1 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.extend=extend;exports.resetExtensions=resetExtensions;exports.create=create;exports.fromMiddleware=fromMiddleware;exports.instantiate=exports.subsystemFnAttribute=exports.engineMixins=exports.elementMixins=exports.reducer=exports.middleware=exports.name=void 0;var _invariant=_interopRequireDefault(require("invariant"));var R=_interopRequireWildcard(require("ramda"));var _uuid=_interopRequireDefault(require("uuid"));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 _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==='function'){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable;}));}ownKeys.forEach(function(key){_defineProperty(target,key,source[key]);});}return target;}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 name=R.prop('name');exports.name=name;var middleware=R.prop('middleware');exports.middleware=middleware;var reducer=R.prop('reducer');exports.reducer=reducer;var elementMixins=R.pipe(R.prop('elementMixins'),R.defaultTo([]));exports.elementMixins=elementMixins;var engineMixins=R.pipe(R.prop('engineMixins'),R.defaultTo([]));exports.engineMixins=engineMixins;var subsystemFnAttribute='@@skele/subsystemFn';exports.subsystemFnAttribute=subsystemFnAttribute;var extensions=[];function extend(extension){(0,_invariant.default)(typeof extension==='function','You must provide a function subsystem => extension');extensions.push(extension);}function resetExtensions(){extensions=[];}function create(subsystemFn){(0,_invariant.default)(typeof subsystemFn==='function','You must provide a creator function');return R.reduce(function(subsystem,ext){return _objectSpread({},subsystem,ext(subsystem));},_defineProperty({},subsystemFnAttribute,subsystemFn),extensions);}function fromMiddleware(middleware){var name=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;if(name==null)name=(0,_uuid.default)();return create(function(){return{name:name,middleware:middleware};});}var instantiate=R.curry(function(kernel,instantiated,subsystem){var instance=subsystem[subsystemFnAttribute](kernel,instantiated);(0,_invariant.default)(instance.name,'The subsystem must have a name property');Object.setPrototypeOf(instance,subsystem);return instance;});exports.instantiate=instantiate;