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

231 lines (189 loc) 6.25 kB
'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;