@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
JavaScript
'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;