UNPKG

2.65 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3/**
4 * This metadata contains all information about entity's listeners.
5 */
6var EntityListenerMetadata = /** @class */ (function () {
7 // ---------------------------------------------------------------------
8 // Constructor
9 // ---------------------------------------------------------------------
10 function EntityListenerMetadata(options) {
11 this.entityMetadata = options.entityMetadata;
12 this.embeddedMetadata = options.embeddedMetadata;
13 this.target = options.args.target;
14 this.propertyName = options.args.propertyName;
15 this.type = options.args.type;
16 }
17 // ---------------------------------------------------------------------
18 // Public Methods
19 // ---------------------------------------------------------------------
20 /**
21 * Checks if entity listener is allowed to be executed on the given entity.
22 */
23 EntityListenerMetadata.prototype.isAllowed = function (entity) {
24 return this.entityMetadata.target === entity.constructor || // todo: .constructor won't work for entity schemas, but there are no entity listeners in schemas since there are no objects, right?
25 (this.entityMetadata.target instanceof Function && entity.constructor.prototype instanceof this.entityMetadata.target); // todo: also need to implement entity schema inheritance
26 };
27 /**
28 * Executes listener method of the given entity.
29 */
30 EntityListenerMetadata.prototype.execute = function (entity) {
31 if (!this.embeddedMetadata)
32 return entity[this.propertyName]();
33 this.callEntityEmbeddedMethod(entity, this.embeddedMetadata.propertyPath.split("."));
34 };
35 // ---------------------------------------------------------------------
36 // Protected Methods
37 // ---------------------------------------------------------------------
38 /**
39 * Calls embedded entity listener method no matter how nested it is.
40 */
41 EntityListenerMetadata.prototype.callEntityEmbeddedMethod = function (entity, propertyPaths) {
42 var propertyPath = propertyPaths.shift();
43 if (!propertyPath || !entity[propertyPath])
44 return;
45 if (propertyPaths.length === 0) {
46 entity[propertyPath][this.propertyName]();
47 }
48 else {
49 if (entity[propertyPath])
50 this.callEntityEmbeddedMethod(entity[propertyPath], propertyPaths);
51 }
52 };
53 return EntityListenerMetadata;
54}());
55exports.EntityListenerMetadata = EntityListenerMetadata;
56
57//# sourceMappingURL=EntityListenerMetadata.js.map