@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
231 lines (189 loc) • 6.25 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _defineProperty = require('babel-runtime/core-js/object/define-property');
var _defineProperty2 = _interopRequireDefault(_defineProperty);
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 _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _field = require('./field');
var _field2 = _interopRequireDefault(_field);
var _model = require('../models/model');
var _model2 = _interopRequireDefault(_model);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
var FieldModel = function (_Field) {
(0, _inherits3.default)(FieldModel, _Field);
function FieldModel(basePath, path, Model, options) {
var internal = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
(0, _classCallCheck3.default)(this, FieldModel);
var _this = (0, _possibleConstructorReturn3.default)(this, (FieldModel.__proto__ || (0, _getPrototypeOf2.default)(FieldModel)).call(this, basePath, path, options, internal));
_this.Model = Model;
_this.symbol = (0, _symbol2.default)();
return _this;
}
(0, _createClass3.default)(FieldModel, [{
key: 'validate',
value: function validate(data, basePath) {
if (this.internal) return;
if (data instanceof _model2.default) return;
var subModel = this.getByPath(data);
if (!this.validateValue(subModel)) {
this.typeError(this.Model, subModel, basePath);
}
}
}, {
key: 'validateValue',
value: function validateValue(value) {
return value instanceof this.Model;
}
}, {
key: 'documentToModel',
value: function documentToModel(model, document) {
var id = this.getByPath(document);
this.setBySymbol(model, this.symbol, id);
this.setAccessorByPath(model);
}
}, {
key: 'modelToDocument',
value: function modelToDocument(model, document) {
if (this.internal) return;
if (model instanceof _model2.default) {
var id = this.getBySymbol(model, this.symbol);
this.setByPath(document, id);
} else {
var subModel = this.getByPath(model);
var _id = subModel._id;
this.setByPath(document, _id);
}
}
}, {
key: 'setAccessorByPath',
value: function setAccessorByPath(model) {
var _this2 = this;
var path = this.path.slice();
var lastProp = path.pop();
var context = model;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(path), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var prop = _step.value;
if (!context[prop]) context[prop] = {};
context = context[prop];
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
(0, _defineProperty2.default)(context, lastProp, {
// enumerable: true,
configurable: true,
get: function get() {
return _this2.fieldGetter(model);
},
set: function set(value) {
return _this2.fieldSetter(model, value);
}
});
}
}, {
key: 'fieldGetter',
value: function fieldGetter(model) {
var id = this.getBySymbol(model, this.symbol);
return this.Model.get(id);
}
}, {
key: 'fieldSetter',
value: function fieldSetter(model, value) {
if (!this.validateValue(value)) {
this.typeError(this.Model, value);
}
var id = value._id;
this.setBySymbol(model, this.symbol, id);
}
}, {
key: 'getBySymbol',
value: function getBySymbol(context, symbol) {
var path = this.path.slice(0, -1);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = (0, _getIterator3.default)(path), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var prop = _step2.value;
context = context[prop];
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return context[symbol];
}
}, {
key: 'setBySymbol',
value: function setBySymbol(context, symbol, value) {
var path = this.path.slice(0, -1);
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = (0, _getIterator3.default)(path), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var prop = _step3.value;
if (!context[prop]) context[prop] = {};
context = context[prop];
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return context[symbol] = value;
}
}]);
return FieldModel;
}(_field2.default);
exports.default = FieldModel;