UNPKG

10.6 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var TransformOperationExecutor_1 = require("../TransformOperationExecutor");
4/**
5 * Storage all library metadata.
6 */
7var MetadataStorage = /** @class */ (function () {
8 function MetadataStorage() {
9 // -------------------------------------------------------------------------
10 // Properties
11 // -------------------------------------------------------------------------
12 this._typeMetadatas = new Map();
13 this._transformMetadatas = new Map();
14 this._exposeMetadatas = new Map();
15 this._excludeMetadatas = new Map();
16 this._ancestorsMap = new Map();
17 }
18 // -------------------------------------------------------------------------
19 // Adder Methods
20 // -------------------------------------------------------------------------
21 MetadataStorage.prototype.addTypeMetadata = function (metadata) {
22 if (!this._typeMetadatas.has(metadata.target)) {
23 this._typeMetadatas.set(metadata.target, new Map());
24 }
25 this._typeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);
26 };
27 MetadataStorage.prototype.addTransformMetadata = function (metadata) {
28 if (!this._transformMetadatas.has(metadata.target)) {
29 this._transformMetadatas.set(metadata.target, new Map());
30 }
31 if (!this._transformMetadatas.get(metadata.target).has(metadata.propertyName)) {
32 this._transformMetadatas.get(metadata.target).set(metadata.propertyName, []);
33 }
34 this._transformMetadatas.get(metadata.target).get(metadata.propertyName).push(metadata);
35 };
36 MetadataStorage.prototype.addExposeMetadata = function (metadata) {
37 if (!this._exposeMetadatas.has(metadata.target)) {
38 this._exposeMetadatas.set(metadata.target, new Map());
39 }
40 this._exposeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);
41 };
42 MetadataStorage.prototype.addExcludeMetadata = function (metadata) {
43 if (!this._excludeMetadatas.has(metadata.target)) {
44 this._excludeMetadatas.set(metadata.target, new Map());
45 }
46 this._excludeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);
47 };
48 // -------------------------------------------------------------------------
49 // Public Methods
50 // -------------------------------------------------------------------------
51 MetadataStorage.prototype.findTransformMetadatas = function (target, propertyName, transformationType) {
52 return this.findMetadatas(this._transformMetadatas, target, propertyName)
53 .filter(function (metadata) {
54 if (!metadata.options)
55 return true;
56 if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)
57 return true;
58 if (metadata.options.toClassOnly === true) {
59 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_CLASS || transformationType === TransformOperationExecutor_1.TransformationType.PLAIN_TO_CLASS;
60 }
61 if (metadata.options.toPlainOnly === true) {
62 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_PLAIN;
63 }
64 return true;
65 });
66 };
67 MetadataStorage.prototype.findExcludeMetadata = function (target, propertyName) {
68 return this.findMetadata(this._excludeMetadatas, target, propertyName);
69 };
70 MetadataStorage.prototype.findExposeMetadata = function (target, propertyName) {
71 return this.findMetadata(this._exposeMetadatas, target, propertyName);
72 };
73 MetadataStorage.prototype.findExposeMetadataByCustomName = function (target, name) {
74 return this.getExposedMetadatas(target).find(function (metadata) {
75 return metadata.options && metadata.options.name === name;
76 });
77 };
78 MetadataStorage.prototype.findTypeMetadata = function (target, propertyName) {
79 return this.findMetadata(this._typeMetadatas, target, propertyName);
80 };
81 MetadataStorage.prototype.getStrategy = function (target) {
82 var excludeMap = this._excludeMetadatas.get(target);
83 var exclude = excludeMap && excludeMap.get(undefined);
84 var exposeMap = this._exposeMetadatas.get(target);
85 var expose = exposeMap && exposeMap.get(undefined);
86 if ((exclude && expose) || (!exclude && !expose))
87 return "none";
88 return exclude ? "excludeAll" : "exposeAll";
89 };
90 MetadataStorage.prototype.getExposedMetadatas = function (target) {
91 return this.getMetadata(this._exposeMetadatas, target);
92 };
93 MetadataStorage.prototype.getExcludedMetadatas = function (target) {
94 return this.getMetadata(this._excludeMetadatas, target);
95 };
96 MetadataStorage.prototype.getExposedProperties = function (target, transformationType) {
97 return this.getExposedMetadatas(target)
98 .filter(function (metadata) {
99 if (!metadata.options)
100 return true;
101 if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)
102 return true;
103 if (metadata.options.toClassOnly === true) {
104 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_CLASS || transformationType === TransformOperationExecutor_1.TransformationType.PLAIN_TO_CLASS;
105 }
106 if (metadata.options.toPlainOnly === true) {
107 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_PLAIN;
108 }
109 return true;
110 })
111 .map(function (metadata) { return metadata.propertyName; });
112 };
113 MetadataStorage.prototype.getExcludedProperties = function (target, transformationType) {
114 return this.getExcludedMetadatas(target)
115 .filter(function (metadata) {
116 if (!metadata.options)
117 return true;
118 if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)
119 return true;
120 if (metadata.options.toClassOnly === true) {
121 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_CLASS || transformationType === TransformOperationExecutor_1.TransformationType.PLAIN_TO_CLASS;
122 }
123 if (metadata.options.toPlainOnly === true) {
124 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_PLAIN;
125 }
126 return true;
127 })
128 .map(function (metadata) { return metadata.propertyName; });
129 };
130 MetadataStorage.prototype.clear = function () {
131 this._typeMetadatas.clear();
132 this._exposeMetadatas.clear();
133 this._excludeMetadatas.clear();
134 this._ancestorsMap.clear();
135 };
136 // -------------------------------------------------------------------------
137 // Private Methods
138 // -------------------------------------------------------------------------
139 MetadataStorage.prototype.getMetadata = function (metadatas, target) {
140 var metadataFromTargetMap = metadatas.get(target);
141 var metadataFromTarget;
142 if (metadataFromTargetMap) {
143 metadataFromTarget = Array.from(metadataFromTargetMap.values()).filter(function (meta) { return meta.propertyName !== undefined; });
144 }
145 var metadataFromAncestors = [];
146 for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {
147 var ancestor = _a[_i];
148 var ancestorMetadataMap = metadatas.get(ancestor);
149 if (ancestorMetadataMap) {
150 var metadataFromAncestor = Array.from(ancestorMetadataMap.values()).filter(function (meta) { return meta.propertyName !== undefined; });
151 metadataFromAncestors.push.apply(metadataFromAncestors, metadataFromAncestor);
152 }
153 }
154 return metadataFromAncestors.concat(metadataFromTarget || []);
155 };
156 MetadataStorage.prototype.findMetadata = function (metadatas, target, propertyName) {
157 var metadataFromTargetMap = metadatas.get(target);
158 if (metadataFromTargetMap) {
159 var metadataFromTarget = metadataFromTargetMap.get(propertyName);
160 if (metadataFromTarget) {
161 return metadataFromTarget;
162 }
163 }
164 for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {
165 var ancestor = _a[_i];
166 var ancestorMetadataMap = metadatas.get(ancestor);
167 if (ancestorMetadataMap) {
168 var ancestorResult = ancestorMetadataMap.get(propertyName);
169 if (ancestorResult) {
170 return ancestorResult;
171 }
172 }
173 }
174 return undefined;
175 };
176 MetadataStorage.prototype.findMetadatas = function (metadatas, target, propertyName) {
177 var metadataFromTargetMap = metadatas.get(target);
178 var metadataFromTarget;
179 if (metadataFromTargetMap) {
180 metadataFromTarget = metadataFromTargetMap.get(propertyName);
181 }
182 var metadataFromAncestorsTarget = [];
183 for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {
184 var ancestor = _a[_i];
185 var ancestorMetadataMap = metadatas.get(ancestor);
186 if (ancestorMetadataMap) {
187 if (ancestorMetadataMap.has(propertyName)) {
188 metadataFromAncestorsTarget.push.apply(metadataFromAncestorsTarget, ancestorMetadataMap.get(propertyName));
189 }
190 }
191 }
192 return (metadataFromAncestorsTarget).reverse().concat((metadataFromTarget || []).reverse());
193 };
194 MetadataStorage.prototype.getAncestors = function (target) {
195 if (!target)
196 return [];
197 if (!this._ancestorsMap.has(target)) {
198 var ancestors = [];
199 for (var baseClass = Object.getPrototypeOf(target.prototype.constructor); typeof baseClass.prototype !== "undefined"; baseClass = Object.getPrototypeOf(baseClass.prototype.constructor)) {
200 ancestors.push(baseClass);
201 }
202 this._ancestorsMap.set(target, ancestors);
203 }
204 return this._ancestorsMap.get(target);
205 };
206 return MetadataStorage;
207}());
208exports.MetadataStorage = MetadataStorage;
209
210//# sourceMappingURL=MetadataStorage.js.map