UNPKG

@linaframework/arango-orm

Version:

> Please check out https://github.com/awesome-graphql-space/lina and https://github.com/oknoah/final/packages/arangolize for similar projects that MAY be more up to date

171 lines (137 loc) 4.86 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _symbol = require('babel-runtime/core-js/symbol'); var _symbol2 = _interopRequireDefault(_symbol); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _get2 = require('babel-runtime/helpers/get'); var _get3 = _interopRequireDefault(_get2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _fieldModel = require('./field-model'); var _fieldModel2 = _interopRequireDefault(_fieldModel); var _model = require('../models/model'); var _model2 = _interopRequireDefault(_model); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var FieldModels = function (_FieldModel) { (0, _inherits3.default)(FieldModels, _FieldModel); function FieldModels(basePath, path, Model, options) { var internal = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; (0, _classCallCheck3.default)(this, FieldModels); var _this = (0, _possibleConstructorReturn3.default)(this, (FieldModels.__proto__ || (0, _getPrototypeOf2.default)(FieldModels)).call(this, basePath, path, Model, options, internal)); _this.arraySymbol = (0, _symbol2.default)(); return _this; } (0, _createClass3.default)(FieldModels, [{ key: 'validate', value: function validate(data, basePath) { if (this.internal) return; if (data instanceof _model2.default) { var array = this.getBySymbol(data, this.arraySymbol); if (!array) return; } else { array = this.getByPath(data); } this.validateRealArray(array, basePath); } }, { key: 'validateRealArray', value: function validateRealArray(array, basePath) { var _this2 = this; if (!array && this.options.optional) { return; } if (!Array.isArray(array)) { this.typeError(Array, array, basePath); } array.forEach(function (value, index) { if (!_this2.validateValue(value)) { _this2.typeError(_this2.Model, value, basePath, [index]); } }); } }, { key: 'documentToModel', value: function documentToModel(model, document) { var arrayIds = this.getByPath(document); this.setBySymbol(model, this.symbol, arrayIds); this.setAccessorByPath(model); } }, { key: 'modelToDocument', value: function modelToDocument(model, document) { if (this.internal) return; if (model instanceof _model2.default) { var arrayIds = this.getActualIds(model); this.setByPath(document, arrayIds); } else { var array = this.getByPath(model); if (!array && this.options.optional) { array = []; } var _arrayIds = array.map(function (subModel) { return subModel._id; }); this.setByPath(document, _arrayIds); } } }, { key: 'getActualIds', value: function getActualIds(model) { var realArray = this.getBySymbol(model, this.arraySymbol); if (realArray) { return realArray.map(function (subModel) { return subModel._id; }); } else { return this.getBySymbol(model, this.symbol); } } }, { key: 'setAccessorByPath', value: function setAccessorByPath(model) { this.setBySymbol(model, this.arraySymbol, null); (0, _get3.default)(FieldModels.prototype.__proto__ || (0, _getPrototypeOf2.default)(FieldModels.prototype), 'setAccessorByPath', this).call(this, model); } }, { key: 'fieldGetter', value: async function fieldGetter(model) { var realArray = this.getBySymbol(model, this.arraySymbol); if (realArray) return realArray; var arrayIds = this.getBySymbol(model, this.symbol); realArray = this.getRealModels(arrayIds); this.setBySymbol(model, this.arraySymbol, realArray); return realArray; } }, { key: 'getRealModels', value: async function getRealModels(arrayIds) { var resultModels = await this.Model.getArr(arrayIds); var subModels = {}; resultModels.forEach(function (subModel) { subModels[subModel._id] = subModel; }); return arrayIds.map(function (id) { return subModels[id]; }); } }, { key: 'fieldSetter', value: function fieldSetter(model, realArray) { this.validateRealArray(realArray); this.setBySymbol(model, this.arraySymbol, realArray); } }]); return FieldModels; }(_fieldModel2.default); exports.default = FieldModels;