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

152 lines (118 loc) 5.01 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _iterator = require('babel-runtime/core-js/symbol/iterator'); var _iterator2 = _interopRequireDefault(_iterator); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _model = require('../models/model'); var _model2 = _interopRequireDefault(_model); var _fieldType = require('../fields/field-type'); var _fieldType2 = _interopRequireDefault(_fieldType); var _fieldTypes = require('../fields/field-types'); var _fieldTypes2 = _interopRequireDefault(_fieldTypes); var _fieldModel = require('../fields/field-model'); var _fieldModel2 = _interopRequireDefault(_fieldModel); var _fieldModels = require('../fields/field-models'); var _fieldModels2 = _interopRequireDefault(_fieldModels); var _fieldSchemas = require('../fields/field-schemas'); var _fieldSchemas2 = _interopRequireDefault(_fieldSchemas); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Schema = function () { function Schema() { var userSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var basePath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var isRootSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; (0, _classCallCheck3.default)(this, Schema); this.basePath = basePath; this.fields = this.parseUserSchema(userSchema); if (isRootSchema) { this.fields.push(new _fieldType2.default(basePath, ['_id'], String, null, true)); this.fields.push(new _fieldType2.default(basePath, ['_key'], String, null, true)); this.fields.push(new _fieldType2.default(basePath, ['_rev'], String, null, true)); this.fields.push(new _fieldType2.default(basePath, ['_removed'], Boolean, null, true)); this.fields.push(new _fieldType2.default(basePath, ['createdAt'], String, null, true)); this.fields.push(new _fieldType2.default(basePath, ['updatedAt'], String, null, true)); } } (0, _createClass3.default)(Schema, [{ key: 'parseUserSchema', value: function parseUserSchema(userSchema) { var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var basePath = this.basePath; var fields = []; for (var key in userSchema) { if (userSchema.hasOwnProperty(key)) { var path = [].concat((0, _toConsumableArray3.default)(parentPath), [key]); var value = userSchema[key]; if ('$type' in value) { var options = value; value = value.$type; } else { options = {}; } if (typeof value === 'function') { if (value.prototype instanceof _model2.default) { fields.push(new _fieldModel2.default(basePath, path, value, options)); } else { fields.push(new _fieldType2.default(basePath, path, value, options)); } } else if (Array.isArray(value)) { var firstItem = value[0]; if (typeof firstItem === 'function') { if (firstItem.prototype instanceof _model2.default) { fields.push(new _fieldModels2.default(basePath, path, firstItem, options)); } else { fields.push(new _fieldTypes2.default(basePath, path, firstItem, options)); } } else { fields.push(new _fieldSchemas2.default(basePath, path, firstItem, options)); } } else { var subFields = this.parseUserSchema(value, path); fields.push.apply(fields, (0, _toConsumableArray3.default)(subFields)); } } } return fields; } }, { key: 'validate', value: function validate(data) { var basePath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; this.fields.forEach(function (field) { return field.validate(data, basePath); }); } }, { key: 'documentToModel', value: function documentToModel(model, document) { this.fields.forEach(function (field) { field.documentToModel(model, document); }); return model; } }, { key: 'modelToDocument', value: function modelToDocument(model, document) { this.fields.forEach(function (field) { field.modelToDocument(model, document); }); return document; } }, { key: _iterator2.default, value: function value() { return this.fields.values(); } }]); return Schema; }(); exports.default = Schema;