UNPKG

baqend

Version:

Baqend JavaScript SDK

321 lines 21.3 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ManagedType = void 0; var Type_1 = require("./Type"); var binding_1 = require("../binding"); var intersection_1 = require("../intersection"); var ManagedType = /** @class */ (function (_super) { __extends(ManagedType, _super); /** * @param ref or full class name * @param typeConstructor The type constructor of the managed lass */ function ManagedType(ref, typeConstructor) { var _this = _super.call(this, ref.indexOf('/db/') !== 0 ? "/db/".concat(ref) : ref, typeConstructor) || this; _this.enhancer = null; _this.declaredAttributes = []; _this.schemaAddPermission = new intersection_1.Permission(); _this.schemaReplacePermission = new intersection_1.Permission(); _this.metadata = null; _this.superType = null; _this._validationCode = null; return _this; } Object.defineProperty(ManagedType.prototype, "validationCode", { /** * @type Function */ get: function () { return this._validationCode; }, /** * @param code */ set: function (code) { this._validationCode = code; }, enumerable: false, configurable: true }); Object.defineProperty(ManagedType.prototype, "typeConstructor", { /** * The Managed class */ get: function () { if (!this._typeConstructor) { this.typeConstructor = this.createProxyClass(); } return this._typeConstructor; }, /** * The Managed class constructor * @param typeConstructor The managed class constructor */ set: function (typeConstructor) { if (this._typeConstructor) { throw new Error('Type constructor has already been set.'); } var isEntity = typeConstructor.prototype instanceof binding_1.Entity; if (this.isEntity) { if (!isEntity) { throw new TypeError('Entity classes must extends the Entity class.'); } } else if (!(typeConstructor.prototype instanceof binding_1.Managed) || isEntity) { throw new TypeError('Embeddable classes must extends the Managed class.'); } this.enhancer.enhance(this, typeConstructor); this._typeConstructor = typeConstructor; }, enumerable: false, configurable: true }); /** * Initialize this type * @param enhancer The class enhancer used to instantiate an instance of this managed class */ ManagedType.prototype.init = function (enhancer) { this.enhancer = enhancer; if (this._typeConstructor && !binding_1.Enhancer.getIdentifier(this._typeConstructor)) { binding_1.Enhancer.setIdentifier(this._typeConstructor, this.ref); } }; /** * Creates a new instance of the managed type, without invoking any constructors * * This method is used to create object instances which are loaded form the backend. * * @return The created instance */ ManagedType.prototype.create = function () { var instance = Object.create(this.typeConstructor.prototype); binding_1.Managed.init(instance); return instance; }; /** * An iterator which returns all attributes declared by this type and inherited form all super types * @return */ ManagedType.prototype.attributes = function () { var _a; var iter; var index = 0; var type = this; if (this.superType) { iter = this.superType.attributes(); } return _a = {}, _a[Symbol.iterator] = function () { return this; }, _a.next = function () { if (iter) { var item = iter.next(); if (!item.done) { return item; } iter = null; } if (index < type.declaredAttributes.length) { var value = type.declaredAttributes[index]; index += 1; return { value: value, done: false }; } return { done: true, value: undefined }; }, _a; }; /** * Adds an attribute to this type * @param attr The attribute to add * @param order Position of the attribute * @return */ ManagedType.prototype.addAttribute = function (attr, order) { if (this.getAttribute(attr.name)) { throw new Error("An attribute with the name ".concat(attr.name, " is already declared.")); } var initOrder; if (!attr.order) { initOrder = typeof order === 'undefined' ? this.declaredAttributes.length : order; } else { initOrder = attr.order; } attr.init(this, initOrder); this.declaredAttributes.push(attr); if (this._typeConstructor && this.name !== 'Object') { this.enhancer.enhanceProperty(this._typeConstructor, attr); } }; /** * Removes an attribute from this type * @param name The Name of the attribute which will be removed * @return */ ManagedType.prototype.removeAttribute = function (name) { var length = this.declaredAttributes.length; this.declaredAttributes = this.declaredAttributes.filter(function (val) { return val.name !== name; }); if (length === this.declaredAttributes.length) { throw new Error("An Attribute with the name ".concat(name, " is not declared.")); } }; /** * @param name * @return */ ManagedType.prototype.getAttribute = function (name) { var attr = this.getDeclaredAttribute(name); if (!attr && this.superType) { attr = this.superType.getAttribute(name); } return attr; }; /** * @param val Name or order of the attribute * @return */ ManagedType.prototype.getDeclaredAttribute = function (val) { return this.declaredAttributes.filter(function (attr) { return attr.name === val || attr.order === val; })[0] || null; }; /** * @inheritDoc */ ManagedType.prototype.fromJsonValue = function (state, jsonObject, currentObject, options) { if (!jsonObject || !currentObject) { return null; } var iter = this.attributes(); for (var el = iter.next(); !el.done; el = iter.next()) { var attribute = el.value; if (!options.onlyMetadata || attribute.isMetadata) { attribute.setJsonValue(state, currentObject, jsonObject[attribute.name], options); } } return currentObject; }; /** * @inheritDoc */ ManagedType.prototype.toJsonValue = function (state, object, options) { if (!(object instanceof this.typeConstructor)) { return null; } var value = {}; var iter = this.attributes(); for (var el = iter.next(); !el.done; el = iter.next()) { var attribute = el.value; if (!options.excludeMetadata || !attribute.isMetadata) { value[attribute.name] = attribute.getJsonValue(state, object, options); } } return value; }; /** * Converts ths type schema to json * @return */ ManagedType.prototype.toJSON = function () { var fields = {}; this.declaredAttributes.forEach(function (attribute) { if (!attribute.isMetadata) { fields[attribute.name] = attribute; } }); return __assign(__assign(__assign({ class: this.ref, fields: fields, acl: { schemaAdd: this.schemaAddPermission.toJSON(), schemaReplace: this.schemaReplacePermission.toJSON(), } }, (this.superType && { superClass: this.superType.ref })), (this.isEmbeddable && { embedded: true })), (this.metadata && { metadata: this.metadata })); }; /** * Returns iterator to get all referenced entities * @return */ ManagedType.prototype.references = function () { var _a; var attributes = this.attributes(); var attribute; var embeddedAttributes; return _a = {}, _a[Symbol.iterator] = function () { return this; }, _a.next = function () { for (;;) { if (embeddedAttributes) { var item_1 = embeddedAttributes.next(); if (!item_1.done) { return { value: { path: [attribute.name].concat(item_1.value.path) } }; } embeddedAttributes = null; } var item = attributes.next(); if (item.done) { // currently TS requires a undefined value here https://github.com/microsoft/TypeScript/issues/38479 return { done: true, value: undefined }; } attribute = item.value; var type = attribute.isCollection ? attribute.elementType : attribute.type; if (type.isEntity) { return { value: { path: [attribute.name] } }; } if (type.isEmbeddable) { embeddedAttributes = type.references(); } } }, _a; }; /** * Retrieves whether this type has specific metadata * * @param key * @return */ ManagedType.prototype.hasMetadata = function (key) { return !!this.metadata && !!this.metadata[key]; }; /** * Gets some metadata of this type * * @param key * @return */ ManagedType.prototype.getMetadata = function (key) { if (!this.hasMetadata(key)) { return null; } return this.metadata[key]; }; return ManagedType; }(Type_1.Type)); exports.ManagedType = ManagedType; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuYWdlZFR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvbWV0YW1vZGVsL01hbmFnZWRUeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQThCO0FBRTlCLHNDQUVvQjtBQU9wQixnREFBMkQ7QUFFM0Q7SUFBNkQsK0JBQU87SUE2RGxFOzs7T0FHRztJQUNILHFCQUFZLEdBQVcsRUFBRSxlQUEwQjtRQUFuRCxZQUNFLGtCQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFPLEdBQUcsQ0FBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLFNBQ3ZFO1FBbEVNLGNBQVEsR0FBb0IsSUFBSSxDQUFDO1FBRWpDLHdCQUFrQixHQUFxQixFQUFFLENBQUM7UUFFMUMseUJBQW1CLEdBQWUsSUFBSSx5QkFBVSxFQUFFLENBQUM7UUFFbkQsNkJBQXVCLEdBQWUsSUFBSSx5QkFBVSxFQUFFLENBQUM7UUFFdkQsY0FBUSxHQUFxQyxJQUFJLENBQUM7UUFFbEQsZUFBUyxHQUEyQixJQUFJLENBQUM7UUFFekMscUJBQWUsR0FBb0IsSUFBSSxDQUFDOztJQXNEL0MsQ0FBQztJQWpERCxzQkFBSSx1Q0FBYztRQUhsQjs7V0FFRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlCLENBQUM7UUFFRDs7V0FFRzthQUNILFVBQW1CLElBQXFCO1lBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7OztPQVBBO0lBWUQsc0JBQUksd0NBQWU7UUFIbkI7O1dBRUc7YUFDSDtZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDaEQ7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