UNPKG

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

413 lines (309 loc) 15.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; 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 _bunyan = require('bunyan'); var _bunyan2 = _interopRequireDefault(_bunyan); var _mixinDecorator = require('mixin-decorator'); var _mixinDecorator2 = _interopRequireDefault(_mixinDecorator); var _lodash = require('lodash.merge'); var _lodash2 = _interopRequireDefault(_lodash); var _namedDepCounter = require('named-dep-counter'); var _namedDepCounter2 = _interopRequireDefault(_namedDepCounter); var _types = require('../constants/types'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 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; } var log = _bunyan2.default.createLogger({ name: "buildClass" }); var buildFieldMixins = function buildFieldMixins(_ref, buildMethods) { var classOMat = _ref.classOMat, mixins = _ref.mixins, defaults = _ref.defaults, params = _ref.params; var key = params.key, fieldOMats = params.fieldOMats, paramKeyPrefix = params.paramKeyPrefix, paramObjectKey = params.paramObjectKey, ON_GET = params.ON_GET, ON_SET = params.ON_SET; if (ON_GET !== _types.NONE) { fieldOMats.forEach(function (field) { field._appendEvent(ON_GET, key, 'ON_GET'); }); } if (ON_SET !== _types.NONE) { fieldOMats.forEach(function (field) { return field._appendEvent(ON_SET, key, 'ON_SET'); }); } var ___fields = []; var required = []; fieldOMats.forEach(function (fieldOMat) { var _fieldOMat$_params = fieldOMat._params, key = _fieldOMat$_params.key, _default = _fieldOMat$_params._default, isRequired = _fieldOMat$_params.isRequired; ___fields.push(key); if (isRequired === true) { required.push(key); fieldOMat.onSet(function (self, key, value) { self.___markReady(key); }); } mixins = fieldOMat.addToClassMixins(mixins, paramObjectKey, paramKeyPrefix); defaults[fieldOMat._params.key] = fieldOMat._params._default; }); if (required.length !== 0) { var depCounter = new _namedDepCounter2.default(key + '_required'); depCounter.deps(required); mixins.___required = function () { depCounter.self(this); this.___required = function () { return depCounter; }; return depCounter; }; mixins.___ready = function () { depCounter.self(this); this.___ready = function () { return depCounter.ready(); }; return depCounter.ready(); }; mixins.___markReady = function (key) { depCounter.self(this); this.___markReady = function (key) { return depCounter.mark(key); }; depCounter.mark(key); }; } mixins.___fields = ___fields; return [{ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods]; }; var buildParamObjectAccessor = function buildParamObjectAccessor(_ref2, buildMethods) { var classOMat = _ref2.classOMat, mixins = _ref2.mixins, defaults = _ref2.defaults, params = _ref2.params; var paramObjectKey = params.paramObjectKey; if (paramObjectKey === false) return { classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }; if (paramObjectKey !== false) { mixins[paramObjectKey.slice(1)] = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE; var merge = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _types.NONE; var thisParams = this[paramObjectKey]; if (params === _types.NONE) return thisParams; this[paramObjectKey] = merge === _types.NONE ? params : merge === true ? _extends({}, params, thisParams) : _extends({}, thisParams, params); return this; }; } return [{ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods]; }; var buildNestingAccessors = function buildNestingAccessors(_ref3, buildMethods) { var classOMat = _ref3.classOMat, mixins = _ref3.mixins, defaults = _ref3.defaults, params = _ref3.params; var paramObjectKey = params.paramObjectKey; var getChildren = paramObjectKey === false ? function (self) { return self.___children; } : function (self) { return self[paramObjectKey].___children; }; var setChildren = paramObjectKey === false ? function (self, value) { return self.___children = value; } : function (self, value) { return self[paramObjectKey].___children = value; }; defaults.___children = {}; mixins.___children = function () { return getChildren(this); }; mixins.___child = function () { var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE; var ___children = getChildren(this); if (___children === undefined) return false; if (key === _types.NONE) return ___children; return key in ___children === true ? ___children[key] : false; }; mixins.___deleteChild = function () { var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _types.NONE; var ___children = getChildren(this); if (key === _types.NONE || key in ___children === false) { setChildren(this, {}); return true; } delete ___children[key]; setChildren(this, ___children); return true; }; return [{ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods]; }; var buildKeysAccessor = function buildKeysAccessor(_ref4, buildMethods) { var classOMat = _ref4.classOMat, mixins = _ref4.mixins, defaults = _ref4.defaults, params = _ref4.params; if (params.createKeysAccessor !== true) return { classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }; var keys = params.fieldOMats.map(function (fieldOMat) { return fieldOMat.key(); }); mixins.keys = function () { return keys; }; return [{ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods]; }; var buildConstructorNoParamsObject = function buildConstructorNoParamsObject(_ref5, buildMethods) { var classOmat = _ref5.classOmat, mixins = _ref5.mixins, defaults = _ref5.defaults, params = _ref5.params; var key = params.key, uid = params.uid; mixins.constructor = function () { var _this = this; this.___uid = uid; this.___minionKey = key; var defaultKeys = Object.keys(defaults); defaultKeys.forEach(function (key) { var v = defaults[key]; _this['___' + key] = (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object' ? clonedeep(v) : v; }); }; return [{ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods]; }; var buildConstructorParamsObject = function buildConstructorParamsObject(_ref6, buildMethods) { var classOMat = _ref6.classOMat, mixins = _ref6.mixins, defaults = _ref6.defaults, params = _ref6.params; var key = params.key, paramObjectKey = params.paramObjectKey, uid = params.uid; mixins.constructor = function () { this.___uid = uid; this.___minionKey = key; this[paramObjectKey] = (0, _lodash2.default)({}, defaults, this[paramObjectKey] || {}); }; return [{ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods]; }; var buildConstructor = function buildConstructor(_ref7, buildMethods) { var classOMat = _ref7.classOMat, mixins = _ref7.mixins, defaults = _ref7.defaults, params = _ref7.params; return params.paramObjectKey === false ? buildMethods.buildConstructorNoParamsObject({ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods) : buildMethods.buildConstructorParamsObject({ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods); }; var buildClass = function buildClass(_ref8, buildMethods) { var _dec, _class; var classOMat = _ref8.classOMat, mixins = _ref8.mixins, defaults = _ref8.defaults, params = _ref8.params; var BaseClass = params.BaseClass, key = params.key, paramObjectKey = params.paramObjectKey, uid = params.uid; var workingArguments = void 0; var _buildMethods$buildCo = buildMethods.buildConstructor({ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods); var _buildMethods$buildCo2 = _slicedToArray(_buildMethods$buildCo, 2); workingArguments = _buildMethods$buildCo2[0]; buildMethods = _buildMethods$buildCo2[1]; var _workingArguments$mix = workingArguments.mixins, constructor = _workingArguments$mix.constructor, ___fields = _workingArguments$mix.___fields, workingMixins = _objectWithoutProperties(_workingArguments$mix, ['constructor', '___fields']); var WorkingClass = (_dec = (0, _mixinDecorator2.default)(workingMixins), _dec(_class = function (_BaseClass) { _inherits(WorkingClass, _BaseClass); function WorkingClass() { var _ref9; _classCallCheck(this, WorkingClass); for (var _len = arguments.length, p = Array(_len), _key = 0; _key < _len; _key++) { p[_key] = arguments[_key]; } var _this2 = _possibleConstructorReturn(this, (_ref9 = WorkingClass.__proto__ || Object.getPrototypeOf(WorkingClass)).call.apply(_ref9, [this].concat(p))); _this2.___fields = ___fields; constructor.call.apply(constructor, [_this2].concat(p)); return _this2; } return WorkingClass; }(BaseClass)) || _class); return [WorkingClass, buildMethods]; }; var buildMixins = function buildMixins(_ref10, buildMethods) { var classOMat = _ref10.classOMat, mixins = _ref10.mixins, defaults = _ref10.defaults, params = _ref10.params; var cacheOMats = params.cacheOMats, classOMatGroup = params.classOMatGroup, childOMatInfos = params.childOMatInfos, needsParentAccessor = params.needsParentAccessor, paramObjectKey = params.paramObjectKey, parentKey = params.parentKey; var workingArguments = void 0; mixins.___classGroup = function () { return classGroup; }; if (Object.keys(childOMatInfos).length !== 0) { var _buildMethods$buildNe = buildMethods.buildNestingAccessors({ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods); var _buildMethods$buildNe2 = _slicedToArray(_buildMethods$buildNe, 2); workingArguments = _buildMethods$buildNe2[0]; buildMethods = _buildMethods$buildNe2[1]; } else { workingArguments = { classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }; } if (cacheOMats === true) { workingArguments.mixins.___classOMats = function () { return clasSOMatGroup; }; } var _buildMethods$buildPa = buildMethods.buildParamObjectAccessor(workingArguments, buildMethods); var _buildMethods$buildPa2 = _slicedToArray(_buildMethods$buildPa, 2); workingArguments = _buildMethods$buildPa2[0]; buildMethods = _buildMethods$buildPa2[1]; var _buildMethods$buildKe = buildMethods.buildKeysAccessor(workingArguments, buildMethods); var _buildMethods$buildKe2 = _slicedToArray(_buildMethods$buildKe, 2); workingArguments = _buildMethods$buildKe2[0]; buildMethods = _buildMethods$buildKe2[1]; return [workingArguments, buildMethods]; }; var build = function build(_ref11, buildMethods) { var classOMat = _ref11.classOMat, mixins = _ref11.mixins, defaults = _ref11.defaults, params = _ref11.params; if (params.needsParentAccessor === true || 1 === 1) { classOMat.field(params.parentKey); } var workingArguments = void 0; var _buildMethods$buildFi = buildMethods.buildFieldMixins({ classOMat: classOMat, mixins: mixins, defaults: defaults, params: params }, buildMethods); var _buildMethods$buildFi2 = _slicedToArray(_buildMethods$buildFi, 2); workingArguments = _buildMethods$buildFi2[0]; buildMethods = _buildMethods$buildFi2[1]; var _buildMethods$buildMi = buildMethods.buildMixins(workingArguments, buildMethods); var _buildMethods$buildMi2 = _slicedToArray(_buildMethods$buildMi, 2); workingArguments = _buildMethods$buildMi2[0]; buildMethods = _buildMethods$buildMi2[1]; return buildClass(workingArguments, buildMethods); }; var buildClassMethods = { build: build, buildKeysAccessor: buildKeysAccessor, buildClass: buildClass, buildConstructor: buildConstructor, buildConstructorParamsObject: buildConstructorParamsObject, buildConstructorNoParamsObject: buildConstructorNoParamsObject, buildFieldMixins: buildFieldMixins, buildMixins: buildMixins, buildNestingAccessors: buildNestingAccessors, buildParamObjectAccessor: buildParamObjectAccessor }; exports.default = buildClassMethods; //# sourceMappingURL=build-class.js.map