@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
116 lines (16 loc) • 2.74 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.instantiate=exports.subsystemFnAttribute=exports.engineMixins=exports.elementMixins=exports.reducer=exports.middleware=exports.name=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;};exports.
extend=extend;exports.
resetExtensions=resetExtensions;exports.
create=create;exports.
fromMiddleware=fromMiddleware;var _invariant=require('invariant');var _invariant2=_interopRequireDefault(_invariant);var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);var _uuid=require('uuid');var _uuid2=_interopRequireDefault(_uuid);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 name=exports.name=_ramda2.default.prop('name');var middleware=exports.middleware=_ramda2.default.prop('middleware');var reducer=exports.reducer=_ramda2.default.prop('reducer');var elementMixins=exports.elementMixins=_ramda2.default.pipe(_ramda2.default.prop('elementMixins'),_ramda2.default.defaultTo([]));var engineMixins=exports.engineMixins=_ramda2.default.pipe(_ramda2.default.prop('engineMixins'),_ramda2.default.defaultTo([]));var subsystemFnAttribute=exports.subsystemFnAttribute='@@girders-elements/subsystemFn';var extensions=[];function extend(extension){(0,_invariant2.default)(typeof extension==='function','You must provide a function subsystem => extension');extensions.push(extension);}function resetExtensions(){extensions=[];}function create(subsystemFn){(0,_invariant2.default)(typeof subsystemFn==='function','You must provide a creator function');return _ramda2.default.reduce(function(subsystem,ext){return _extends({},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,_uuid2.default)();
return create(function(){return{
name:name,
middleware:middleware};});
}
var instantiate=exports.instantiate=_ramda2.default.curry(function(kernel,instantiated,subsystem){
var instance=subsystem[subsystemFnAttribute](kernel,instantiated);
(0,_invariant2.default)(instance.name,'The subsystem must have a name property');
Object.setPrototypeOf(instance,subsystem);
return instance;
});