class-o-mat
Version:
ALPHA VERSION ONLY: class-o-mats will help to create getter-setter functionality with validations that can be attached to a container class for easier coding. Some basic validations are included. class-o-mats also has the ability to store params as bloc
921 lines (726 loc) • 31.1 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
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; };
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _dec, _class, _class2, _temp;
var _bunyan = require('bunyan');
var _bunyan2 = _interopRequireDefault(_bunyan);
var _mixinDecorator = require('mixin-decorator');
var _mixinDecorator2 = _interopRequireDefault(_mixinDecorator);
var _lodash = require('lodash.clonedeep');
var _lodash2 = _interopRequireDefault(_lodash);
var _v = require('uuid/v4');
var _v2 = _interopRequireDefault(_v);
var _eventMethodsOMat = require('./_event-methods-o-mat');
var _eventMethodsOMat2 = _interopRequireDefault(_eventMethodsOMat);
var _apiMethodsOMat = require('./_api-methods-o-mat');
var _apiMethodsOMat2 = _interopRequireDefault(_apiMethodsOMat);
var _classOMatFieldFunctions = require('./class-o-mat-field-functions');
var _fieldFunctions = require('../methods/field-functions');
var _types = require('../constants/types');
var _classOMatGroup = require('./class-o-mat-group');
var _classOMatGroup2 = _interopRequireDefault(_classOMatGroup);
var _fieldOMat = require('./field-o-mat');
var _fieldOMat2 = _interopRequireDefault(_fieldOMat);
var _apiFieldOMat = require('./api-field-o-mat');
var _apiFieldOMat2 = _interopRequireDefault(_apiFieldOMat);
var _apiMethodOMat = require('./api-method-o-mat');
var _apiMethodOMat2 = _interopRequireDefault(_apiMethodOMat);
var _childOMatAdder = require('./child-o-mat-adder');
var _childOMatAdder2 = _interopRequireDefault(_childOMatAdder);
var _radioOMat = require('./radio-o-mat');
var _radioOMat2 = _interopRequireDefault(_radioOMat);
var _buildClass = require('../methods/build-class');
var _buildClass2 = _interopRequireDefault(_buildClass);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
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; }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var log = _bunyan2.default.createLogger({ name: "ClassOMat" });
var ClassOMat = (_dec = (0, _mixinDecorator2.default)(_eventMethodsOMat2.default, _apiMethodsOMat2.default), _dec(_class = (_temp = _class2 = function () {
function ClassOMat() {
var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'classOMat that needs a key';
var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _types.NONE;
_classCallCheck(this, ClassOMat);
this.TYPE = _types.CLASS_O_MAT;
this.VERSION = '0.6.1';
var group = parent === _types.NONE ? new _classOMatGroup2.default() : parent.group();
var ClassOMatDefaultBaseClass = function ClassOMatDefaultBaseClass() {
_classCallCheck(this, ClassOMatDefaultBaseClass);
};
;
this._params = {
key: key,
id: _types.NONE,
uid: (0, _v2.default)(),
pluginKeys: [],
cacheOMats: false,
accessorGetter: _fieldFunctions.getterSetter,
FieldOMat: _fieldOMat2.default,
fieldOMats: [],
fieldOMatsIndex: {},
apiFields: [],
paramObjectKey: '_params',
paramKeyPrefix: '___',
createParamsAccessor: true,
createKeysAccessor: true,
group: group,
childOMats: {},
childOMatInfos: {},
copyToChildFields: [],
parentKey: '___parent',
needsParentAccessor: false,
parentId: parent === _types.NONE ? _types.NONE : parent.id(),
BaseClass: ClassOMatDefaultBaseClass,
BuiltClass: _types.NONE,
defaults: { ___pending: [] },
mixins: {
___isClassOMat: function ___isClassOMat() {
return true;
}
},
buildMethods: _buildClass2.default,
ON_GET: _types.NONE,
ON_SET: _types.NONE,
ON_DELETE: _types.NONE
};
var _group$add = group.add(this),
_group$add2 = _slicedToArray(_group$add, 2),
isNew = _group$add2[0],
id = _group$add2[1];
this._params = _extends({}, this._params, {
id: id,
group: group
});
}
// API TO BUILD THE CLASS TO BE GENERATED
/**
* builds the class for this param and all the
* child params .. returns all as an object.
* @return {[type]} [description]
*/
_createClass(ClassOMat, [{
key: '$',
value: function $() {
var classGroup = this._params.group.$();
var Class = classGroup.get(this.id());
var test = new Class();
return classGroup.get(this.id());
}
/**
* Build the class with the FieldSets in the ClassOMat
* This should be used by Group but it available in case.
* @param {Class} BaseClass The base class to have the methods added.
* @return {Class} The base class with the methods added.
*/
}, {
key: 'buildClass',
value: function buildClass() {
var classGroup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
var classOMatGroup = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _types.NONE;
var _params = this._params;
var buildMethods = _params.buildMethods,
defaults = _params.defaults,
mixins = _params.mixins;
var workingArguments = { classOMat: this, mixins: mixins, defaults: defaults, params: _params };
var WorkingClass = void 0;
var _buildMethods$build = buildMethods.build(workingArguments, buildMethods);
var _buildMethods$build2 = _slicedToArray(_buildMethods$build, 2);
WorkingClass = _buildMethods$build2[0];
buildMethods = _buildMethods$build2[1];
var BuiltClass = WorkingClass;
this.BuiltClass(BuiltClass);
return BuiltClass;
}
// API FOR DEFINING THIS CLASS_O_MAT
/**
* getter setter for id
* @param {number} id
* @return {number|ClassOMat}
key,
*/
}, {
key: 'id',
value: function id() {
for (var _len = arguments.length, p = Array(_len), _key = 0; _key < _len; _key++) {
p[_key] = arguments[_key];
}
return _classOMatFieldFunctions.getterSetter.apply(undefined, [this, 'id'].concat(p));
}
}, {
key: 'uid',
value: function uid() {
for (var _len2 = arguments.length, p = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
p[_key2] = arguments[_key2];
}
return _classOMatFieldFunctions.getterSetter.apply(undefined, [this, 'uid'].concat(p));
}
}, {
key: 'cacheOMats',
/**
* If true, this class will have a reference
* to the ClassOMatGroup that this ClassOMat belongs to.
* This is needed to modify
* @param {[type]} cacheChildOMats [description]
* @return {[type]} [description]
*/
value: function cacheOMats() {
var _cacheOMats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
if (_cacheOMats === _types.NONE) return this._params.cacheOMats;
this._params.cacheOMats = _cacheOMats === true ? true : false;
return this;
}
// API TO SPECIFY THE CLASS TO BE GENERATED
/**
* Set the BaseClass for this ClassOMat
* @param {Class} BaseClass
*/
}, {
key: 'BaseClass',
value: function BaseClass() {
var _BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
return (0, _classOMatFieldFunctions.getterSetter)(this, 'BaseClass', _BaseClass);
}
/**
* Set the BuiltClass for this ClassOMat
* @param {Class} BuiltClass
*/
}, {
key: 'BuiltClass',
value: function BuiltClass() {
var _BuiltClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
return (0, _classOMatFieldFunctions.getterSetter)(this, 'BuiltClass', _BuiltClass);
}
}, {
key: 'defaultAccessor',
value: function defaultAccessor(accessorGetter) {
return (0, _classOMatFieldFunctions.getterSetter)(this, 'accessor', accessorGetter);
}
/**
* toggler for createParamsAccessor
* This will create a parameters accessor in the BuiltClass
* default = true
* under the function name __params
* @return {object|ClassOMat}
*/
}, {
key: 'createParamsAccessor',
value: function createParamsAccessor() {
return (0, _classOMatFieldFunctions.toggler)(this, 'createParamsAccessor');
}
}, {
key: 'createKeyAccesor',
/**
* toggler for createKeyAccesor
* This will create a parameter keys accessor in the BuiltClass
* defalut = true
* @return {object|ClassOMat}
*/
value: function createKeyAccesor() {
return (0, _classOMatFieldFunctions.toggler)(this, 'createKeyAccesor');
}
}, {
key: 'apiField',
/**
* Lets you attach a field to a Minion instance
* AFTER it is created. It otherwise works
* just like classOMat.field
* @param {[type]} key [description]
* @return {[type]} [description]
*/
value: function apiField(key) {
var apiFieldOMat = new _apiFieldOMat2.default(this, key);
this._params.fieldOMats.push(apiFieldOMat);
return apiFieldOMat;
}
/**
* lets you attach a method to the classOMat
* that will add that method to the minion class api.
* @return {ApiMethod} [description]
*/
}, {
key: 'apiMethod',
value: function apiMethod(method) {
var apiMethodOMat = new _apiMethodOMat2.default(this, method);
this._params.fields.push(apiMethodOMat);
return apiMethodOMat;
}
}, {
key: 'deleteField',
value: function deleteField(key) {
var _params2 = this._params,
fieldsIndex = _params2.fieldsIndex,
fields = _params2.fields;
if (key in fieldsIndex === false) {
throw new Error('Tried to delete non-existent field ' + key + ' from classOMat ' + this._params.key + '.');
}
var fieldIndex = fieldsIndex[key];
fields.splice(fieldIndex, 1);
delete fieldIndex[key];
this._params.fieldsIndex = fieldsIndex;
this._params.fields = fields;
return this;
}
/**
* Get a FieldOMat.
* @param {string} key the key for this field.
* This will be the function name of the class instance.
* @return {FieldOMat} The field param builder
*/
}, {
key: 'field',
value: function field(key) {
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _types.NONE;
if (this._params.fieldOMatsIndex[key]) {
return this._params.fieldOMats[this._params.fieldOMatsIndex[key]];
}
var field = new this._params.FieldOMat().init(this, key);
if (params !== _types.NONE) {
var parent = params.parent,
transferParams = _objectWithoutProperties(params, ['parent']);
field.params(transferParams, true);
}
this._params.fieldOMats.push(field);
this._params.fieldOMatsIndex[key] = this._params.fieldOMats.length - 1;
return field;
}
/**
* get or set all the fields to be defined in this classOMat
* @param {Array} fields
* @return {Array} fields
*/
}, {
key: 'fields',
value: function fields() {
var fieldOMats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
if (fieldOMats === _types.NONE) return this._params.fieldOMats;
this._params.fieldOMats = fieldOMats;
return this;
}
}, {
key: 'fieldNames',
value: function fieldNames() {
return this._params.fieldOMats.map(function (f) {
return f.key();
});
}
/**
* getter setter for group
* @param {Group} group
* @return {Group|ClassOMat}
*/
}, {
key: 'group',
value: function group() {
for (var _len3 = arguments.length, p = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
p[_key3] = arguments[_key3];
}
return _classOMatFieldFunctions.getterSetter.apply(undefined, [this, 'group'].concat(p));
}
}, {
key: 'parentKey',
value: function parentKey() {
for (var _len4 = arguments.length, p = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
p[_key4] = arguments[_key4];
}
return _classOMatFieldFunctions.getterSetter.apply(undefined, [this, 'parentKey'].concat(p));
}
}, {
key: 'pluginKeys',
value: function pluginKeys() {
return this._params.pluginKeys;
}
/**
* getter setter for paramObjectKey
* @param {object} p
* @return {object|ClassOMat}
*/
}, {
key: 'paramObjectKey',
value: function paramObjectKey() {
var _paramObjectKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
if (_paramObjectKey === false) return (0, _classOMatFieldFunctions.getterSetter)(this, 'paramObjectKey', _paramObjectKey);
if (_paramObjectKey !== _types.NONE) {
if (typeof _paramObjectKey !== 'string') {
throw new Error('ClassOMat: Invalid paramObjectKey');
}
if (_paramObjectKey.slice(0, 1) !== '_') {
_paramObjectKey = '_' + _paramObjectKey;
}
}
return (0, _classOMatFieldFunctions.getterSetter)(this, 'paramObjectKey', _paramObjectKey);
}
}, {
key: 'radio',
value: function radio(key) {
return new _radioOMat2.default(this, key);
}
// FOR NEW CLASS-O-MATS.
/**
* create a copy of this paramset but with the new key
* @param {string} key
* @return {ClassOMat} the cloned set.
*/
}, {
key: 'clone',
value: function clone() {
var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.key();
var clone = new ClassOMat(key, this);
var cloneParams = (0, _lodash2.default)(this.params());
clone.params(cloneParams);
clone.key(key);
clone.uid((0, _v2.default)());
return clone;
}
}, {
key: 'subOMat',
value: function subOMat(key) {
var subOMat = new ClassOMat(key);
var subOMatParams = (0, _lodash2.default)(this._params);
delete subOMatParams.group;
delete subOMatParams.key;
delete subOMatParams.uid;
delete subOMatParams.childOMats;
delete subOMatParams.childInfoOMats;
subOMat.params(subOMatParams, true);
var _params3 = this._params,
childOMats = _params3.childOMats,
childOMatInfos = _params3.childOMatInfos;
var childOMatInfoKeys = Object.keys(childOMatInfos);
childOMatInfoKeys.forEach(function (childInfoKey) {
var childOMatInfo = childOMatInfos[childInfoKey];
var childOMatKey = childOMatInfo.childOMatKey,
childOMatInfoToAdder = _objectWithoutProperties(childOMatInfo, ['childOMatKey']);
var childOMat = childOMats[childOMatInfo.childOMatUid];
subOMat._addChildFromAdder(_extends({ childOMat: childOMat }, childOMatInfoToAdder));
});
return subOMat;
}
// API FOR NESTING SETS and NAVIGATING SAME
/**
* add a set as a child of this one.
* @param {ClassOMat} set default is NONE which means "self"
* @return {ClassOMat} this;
*/
}, {
key: 'addChild',
value: function addChild() {
var childOMat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
return new _childOMatAdder2.default().init(this, childOMat);
}
/**
* getterSetter for all the childOMats of this classOMat
* @param {Object|NONE} p
* @return {Object|ClassOMat} the Object of childOMats or this
*/
}, {
key: 'childOMats',
value: function childOMats() {
for (var _len5 = arguments.length, p = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
p[_key5] = arguments[_key5];
}
return _classOMatFieldFunctions.getterSetter.apply(undefined, [this, 'childOMats'].concat(p));
}
}, {
key: 'getChild',
/**
* get a classOMat nested within this one.
* @param {string} key
* @return {ClassOMat} the child set
*/
value: function getChild(key) {
var _params4 = this._params,
childOMats = _params4.childOMats,
childOMatInfos = _params4.childOMatInfos;
if (key in childOMatInfos === false) {
throw new Error('Invalid Set Name: ' + key);
}
return childOMats[childOMatInfos[key].childOMatUid];
}
/**
* If this ClassOMat is nested within a parent, get that parent
* or set it.. this is a getter/setter function
* get the parent.
*
* adding a parent forces adding the parent accessor to the child class
* if one is needed.
* @param {ClassOMat|NONE} parent
* @return {ClassOMat}
*/
}, {
key: 'parent',
value: function parent() {
var _parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE;
if (_parent === _types.NONE) return this._params.parent;
this._params.parent = _parent;
return this;
}
}, {
key: 'needsParentAccessor',
value: function needsParentAccessor() {
this._params.needsParentAccessor = true;
return this;
}
}, {
key: 'reGroupChildren',
value: function reGroupChildren() {
var _params5 = this._params,
childOMats = _params5.childOMats,
childOMatInfos = _params5.childOMatInfos,
group = _params5.group;
var childKeys = Object.keys(childOMatInfos);
if (childKeys.length === 0) return;
childKeys.forEach(function (childKey) {
var childOMatInfo = childOMatInfos[childKey];
var childOMatUid = childOMatInfo.childOMatUid;
var childOMat = childOMats[childOMatUid];
var childOMatGroup = childOMat.group();
if (childOMatGroup.uid() === group.uid()) return;
var _group$add3 = group.add(childOMat),
_group$add4 = _slicedToArray(_group$add3, 2),
isNew = _group$add4[0],
id = _group$add4[1];
if (isNew === false) return;
childOMat.id(id);
childOMat.reGroupChildren();
});
}
}, {
key: 'addChildAccessors',
value: function addChildAccessors(classGroup) {
var _this = this,
_dec2,
_class3;
var _params6 = this._params,
childOMats = _params6.childOMats,
childOMatInfos = _params6.childOMatInfos,
BuiltClass = _params6.BuiltClass;
var childKeys = Object.keys(childOMatInfos);
if (childKeys.length === 0) return BuiltClass;
var childAccessorsMixins = {};
childKeys.forEach(function (childKey) {
var childOMatInfo = childOMatInfos[childKey];
var childOMat = childOMats[childOMatInfo.childOMatUid];
var childClassId = childOMat.id();
var ChildClass = classGroup.get(childClassId);
childAccessorsMixins[childKey] = _this._childAccessorFunction(_extends({
childKey: childKey,
classGroup: classGroup,
childClassId: childClassId
}, childOMatInfo));
var accessChildAs = childOMatInfo.accessChildAs,
namedChildren = childOMatInfo.namedChildren,
singleton = childOMatInfo.singleton;
var _defaultChild = singleton === true ? _types.NONE : namedChildren === true ? {} : [];
if (accessChildAs !== _types.NONE) {
childAccessorsMixins[accessChildAs] = function () {
return this.___child(childKey) || _defaultChild;
};
childAccessorsMixins['delete_' + accessChildAs] = function () {
return this.___deleteChild(childKey);
};
}
});
var WorkingClass = (_dec2 = (0, _mixinDecorator2.default)(childAccessorsMixins), _dec2(_class3 = function (_BuiltClass2) {
_inherits(WorkingClass, _BuiltClass2);
function WorkingClass() {
_classCallCheck(this, WorkingClass);
return _possibleConstructorReturn(this, (WorkingClass.__proto__ || Object.getPrototypeOf(WorkingClass)).apply(this, arguments));
}
return WorkingClass;
}(BuiltClass)) || _class3);
;
this.BuiltClass(WorkingClass);
return WorkingClass;
}
}, {
key: '_childAccessorFunction',
value: function _childAccessorFunction(_ref) {
var accessChildAs = _ref.accessChildAs,
cacheChild = _ref.cacheChild,
classGroup = _ref.classGroup,
childClassId = _ref.childClassId,
childUid = _ref.childUid,
copyToChildFields = _ref.copyToChildFields,
initializer = _ref.initializer,
internalKey = _ref.internalKey,
childKey = _ref.childKey,
namedChildren = _ref.namedChildren,
parentKey = _ref.parentKey,
singleton = _ref.singleton;
var _params7 = this._params,
fields = _params7.fields,
paramObjectKey = _params7.paramObjectKey;
var getStoredChildObject = namedChildren === false ? function (___children, childKey, childInstance) {
var storedChild = ___children[childKey];
if (storedChild === undefined) return childInstance;
if (Array.isArray(storedChild) === true) return storedChild.concat([childInstance]);
return [storedChild, childInstance];
} : function (___children, childKey, childInstance, instanceKey) {
var storedChild = ___children[childKey];
if (storedChild === undefined) return _defineProperty({}, instanceKey, childInstance);
return _extends({}, storedChild, _defineProperty({}, instanceKey, childInstance));
};
var nonInitializerWrapper = function nonInitializerWrapper(childInstance, self) {
for (var _len6 = arguments.length, p = Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {
p[_key6 - 2] = arguments[_key6];
}
return childInstance[parentKey].apply(childInstance, [self].concat(p));
};
var initializerWrapper = function initializerWrapper(childInstance, self) {
for (var _len7 = arguments.length, p = Array(_len7 > 2 ? _len7 - 2 : 0), _key7 = 2; _key7 < _len7; _key7++) {
p[_key7 - 2] = arguments[_key7];
}
var minion = childInstance[parentKey].apply(childInstance, [self].concat(p));
initializer.apply(undefined, [minion, self].concat(p));
return minion;
};
var copyFieldsWrapper = function copyFieldsWrapper(childInstance, self) {
var parentParams = self.params();
var childParams = childInstance.params();
copyToChildFields.forEach(function (_ref3) {
var key = _ref3.key,
as = _ref3.as;
childParams[as] = parentParams[key];
});
return childInstance;
};
var copyToChildFieldsCount = copyToChildFields.length;
var initWrapper = void 0;
if (initializer === _types.NONE) {
if (copyToChildFieldsCount === 0) {
initWrapper = nonInitializerWrapper;
} else {
initWrapper = copyFieldsWrapper;
}
} else {
if (copyToChildFieldsCount === 0) {
initWrapper = initializerWrapper;
} else {
initWrapper = function initWrapper(childInstance, self) {
for (var _len8 = arguments.length, p = Array(_len8 > 2 ? _len8 - 2 : 0), _key8 = 2; _key8 < _len8; _key8++) {
p[_key8 - 2] = arguments[_key8];
}
childInstance = copyFieldsWrapper(childInstance, self);
return initializerWrapper.apply(undefined, [childInstance, self].concat(p));
};
}
}
if (cacheChild === false) {
return function () {
for (var _len9 = arguments.length, p = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
p[_key9] = arguments[_key9];
}
return initWrapper.apply(undefined, [new (classGroup.get(childClassId))()[parentKey](this), this].concat(p));
};
}
var getChildren = paramObjectKey === false ? function (self) {
return self.___children;
} : function (self) {
return self[paramObjectKey].___children;
};
if (singleton === true) {
var workingInitWrapper = initWrapper;
initWrapper = function initWrapper(childInstance, self) {
for (var _len10 = arguments.length, p = Array(_len10 > 2 ? _len10 - 2 : 0), _key10 = 2; _key10 < _len10; _key10++) {
p[_key10 - 2] = arguments[_key10];
}
var result = workingInitWrapper.apply(undefined, [childInstance, self].concat(p));
self[childKey] = function () {
return childInstance;
};
return childInstance;
};
}
if (namedChildren === false) {
return function () {
var childInstance = new (classGroup.get(childClassId))()[parentKey](this);
var ___children = getChildren(this);
___children[childKey] = getStoredChildObject(___children, childKey, childInstance);
for (var _len11 = arguments.length, p = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
p[_key11] = arguments[_key11];
}
return initWrapper.apply(undefined, [childInstance, this].concat(p));
};
}
return function () {
for (var _len12 = arguments.length, p = Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
p[_key12] = arguments[_key12];
}
var instanceKey = p[0],
params = p.slice(1);
var childInstance = new (classGroup.get(childClassId))()[parentKey](this);
var ___children = getChildren(this);
___children[childKey] = getStoredChildObject(___children, childKey, childInstance, instanceKey);
return initWrapper.apply(undefined, [childInstance, this].concat(_toConsumableArray(params)));
};
}
// INTERNAL COMMANDS FOR ADDING CHILDREN AND THEIR FEATURES
}, {
key: '_addChildFromAdder',
value: function _addChildFromAdder(adderParams) {
var _params8 = this._params,
childOMats = _params8.childOMats,
group = _params8.group;
var accessChildAs = adderParams.accessChildAs,
cacheChild = adderParams.cacheChild,
childOMat = adderParams.childOMat,
childIsSelf = adderParams.childIsSelf,
copyToChildFields = adderParams.copyToChildFields,
internalKey = adderParams.internalKey,
initializer = adderParams.initializer,
childKey = adderParams.childKey,
namedChildren = adderParams.namedChildren,
parentKey = adderParams.parentKey,
singleton = adderParams.singleton;
var newChildOMat = childIsSelf === true ? this : childOMat;
newChildOMat.needsParentAccessor();
newChildOMat.parent(this);
newChildOMat.parentKey(parentKey);
var childOMatUid = newChildOMat.uid();
this._params.childOMats[childOMatUid] = newChildOMat;
this._params.childOMatInfos[childKey] = {
accessChildAs: accessChildAs,
cacheChild: cacheChild,
childOMatUid: childOMatUid,
childIsSelf: childIsSelf,
copyToChildFields: copyToChildFields,
internalKey: internalKey,
initializer: initializer,
childKey: childKey,
namedChildren: namedChildren,
parentKey: parentKey,
singleton: singleton
};
if (childIsSelf === true) {
newChildOMat.childOMats(this.childOMats());
this.field(parentKey);
}
this.reGroupChildren();
newChildOMat.needsParentAccessor();
return this;
}
}, {
key: '_addFieldCopier',
value: function _addFieldCopier(copy) {
var _copy$_params = copy._params,
key = _copy$_params.key,
as = _copy$_params.as;
this._params.copyToChildFields.push([key, as]);
}
}, {
key: '_acceptFieldOMat',
value: function _acceptFieldOMat(fieldOMat) {
this._params.fieldOMats.push(fieldOMat);
}
}]);
return ClassOMat;
}(), _class2.TYPE = _types.CLASS_O_MAT, _class2.VERSION = '0.6.1', _temp)) || _class);
exports.default = ClassOMat;
//# sourceMappingURL=class-o-mat.js.map