UNPKG

baqend

Version:

Baqend JavaScript SDK

240 lines 12.6 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 __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.Metadata = exports.MetadataState = void 0; var Acl_1 = require("../Acl"); var util_1 = require("../util"); var error_1 = require("../error"); var MetadataState; (function (MetadataState) { MetadataState[MetadataState["UNAVAILABLE"] = -1] = "UNAVAILABLE"; MetadataState[MetadataState["PERSISTENT"] = 0] = "PERSISTENT"; MetadataState[MetadataState["DIRTY"] = 1] = "DIRTY"; })(MetadataState = exports.MetadataState || (exports.MetadataState = {})); /** * The Metadata instance tracks the state of an object and checks if the object state was changed since last * load/update. The metadata keeps therefore the state of: * - in which state the object currently is * - which db managed the instance * - the metadata of the object (id, version, bucket) * - which is the owning object (root object) of an embedded object * * {@link Metadata#get(object)} can be used on any managed object to retrieve the metadata of the root object */ var Metadata = /** @class */ (function (_super) { __extends(Metadata, _super); /** * @param type */ function Metadata(type) { var _this = _super.call(this) || this; _this.entityManager = null; _this.decodedKey = null; _this.id = null; _this.state = MetadataState.DIRTY; _this.enabled = true; _this.id = null; _this.version = null; _this.type = type; _this.acl = new Acl_1.Acl(); return _this; } Metadata.create = function (type, db) { if (type.isEntity) { return new Metadata(type); } if (type.isEmbeddable) { return { type: type, db: db, setDirty: function () { } }; } throw new Error("Illegal type ".concat(type)); }; /** * Returns the metadata of the managed object * @param managed * @return */ Metadata.get = function (managed) { // eslint-disable-next-line no-underscore-dangle return managed._metadata; }; Object.defineProperty(Metadata.prototype, "db", { /** * @type EntityManager */ get: function () { if (this.entityManager) { return this.entityManager; } this.entityManager = require('../baqend').db; // eslint-disable-line global-require return this.entityManager; }, /** * @param db */ set: function (db) { if (!this.entityManager) { this.entityManager = db; } else { throw new Error('DB has already been set.'); } }, enumerable: false, configurable: true }); Object.defineProperty(Metadata.prototype, "bucket", { /** * @type string * @readonly */ get: function () { return this.type.name; }, enumerable: false, configurable: true }); Object.defineProperty(Metadata.prototype, "key", { /** * @type string * @readonly */ get: function () { if (!this.decodedKey && this.id) { var index = this.id.lastIndexOf('/'); this.decodedKey = decodeURIComponent(this.id.substring(index + 1)); } return this.decodedKey; }, /** * @param value */ set: function (value) { var val = "".concat(value); if (this.id) { throw new Error('The id can\'t be set twice.'); } this.id = "/db/".concat(this.bucket, "/").concat(encodeURIComponent(val)); this.decodedKey = val; }, enumerable: false, configurable: true }); Object.defineProperty(Metadata.prototype, "isAttached", { /** * Indicates if this object already belongs to an db * <code>true</code> if this object belongs already to an db otherwise <code>false</code> * @type boolean * @readonly */ get: function () { return !!this.entityManager; }, enumerable: false, configurable: true }); Object.defineProperty(Metadata.prototype, "isAvailable", { /** * Indicates if this object is represents a db object, but was not loaded up to now * @type boolean * @readonly */ get: function () { return this.state > MetadataState.UNAVAILABLE; }, enumerable: false, configurable: true }); Object.defineProperty(Metadata.prototype, "isPersistent", { /** * Indicates if this object represents the state of the db and was not modified in any manner * @type boolean * @readonly */ get: function () { return this.state === MetadataState.PERSISTENT; }, enumerable: false, configurable: true }); Object.defineProperty(Metadata.prototype, "isDirty", { /** * Indicates that this object was modified and the object was not written back to the db * @type boolean * @readonly */ get: function () { return this.state === MetadataState.DIRTY; }, enumerable: false, configurable: true }); /** * Enable/Disable state change tracking of this object * @param newStateTrackingState The new change tracking state * @return */ Metadata.prototype.enable = function (newStateTrackingState) { this.enabled = newStateTrackingState; }; /** * Throws the corresponding error if a property is accessed before the owning object is loaded * @throws an exception if the object properties aren't available and the object is enabled */ Metadata.prototype.throwUnloadedPropertyAccess = function (property) { if (this.enabled && !this.isAvailable) { throw new error_1.PersistentError("Illegal property access on ".concat(this.id, "#").concat(property, " , ensure that this reference is loaded before it's properties are accessed.")); } }; /** * Indicates that the associated object isn't available * @return */ Metadata.prototype.setUnavailable = function () { this.state = MetadataState.UNAVAILABLE; }; /** * Indicates that the associated object is not stale * * An object is stale if it correlates the database state and is not modified by the user. * * @return */ Metadata.prototype.setPersistent = function () { this.state = MetadataState.PERSISTENT; }; /** * Indicates the the object is modified by the user * @return */ Metadata.prototype.setDirty = function () { this.state = MetadataState.DIRTY; }; /** * Indicates the the object is removed * @return */ Metadata.prototype.setRemoved = function () { // mark the object only as dirty if it was already available if (this.isAvailable) { this.setDirty(); this.version = null; } }; return Metadata; }(util_1.Lockable)); exports.Metadata = Metadata; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvaW50ZXJzZWN0aW9uL01ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhCQUE2QjtBQUM3QixnQ0FBbUM7QUFHbkMsa0NBQTJDO0FBYzNDLElBQVksYUFJWDtBQUpELFdBQVksYUFBYTtJQUN2QixnRUFBZ0IsQ0FBQTtJQUNoQiw2REFBYyxDQUFBO0lBQ2QsbURBQVMsQ0FBQTtBQUNYLENBQUMsRUFKVyxhQUFhLEdBQWIscUJBQWEsS0FBYixxQkFBYSxRQUl4QjtBQUVEOzs7Ozs7Ozs7R0FTRztBQUNIO0lBQThCLDRCQUFRO0lBc0pwQzs7T0FFRztJQUNILGtCQUFZLElBQXFCO1FBQWpDLFlBQ0UsaUJBQU8sU0FRUjtRQWpLRCxtQkFBYSxHQUF5QixJQUFJLENBQUM7UUFJM0MsZ0JBQVUsR0FBa0IsSUFBSSxDQUFDO1FBRWpDLFFBQUUsR0FBa0IsSUFBSSxDQUFDO1FBcUp2QixLQUFJLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDakMsS0FBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsS0FBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDZixLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixLQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixLQUFJLENBQUMsR0FBRyxHQUFHLElBQUksU0FBRyxFQUFFLENBQUM7O0lBQ3ZCLENBQUM7SUEvSE0sZUFBTSxHQUFiLFVBQWdDLElBQW9CLEVBQUUsRUFBa0I7UUFDdEUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBcUIsQ0FBQyxDQUFDO1NBQzVDO1FBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLE1B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