UNPKG

51.4 kBJavaScriptView Raw
1define("class-transformer/ClassTransformOptions", ["require", "exports"], function (require, exports) {
2 Object.defineProperty(exports, "__esModule", { value: true });
3});
4define("class-transformer/metadata/ExposeExcludeOptions", ["require", "exports"], function (require, exports) {
5 Object.defineProperty(exports, "__esModule", { value: true });
6});
7define("class-transformer/metadata/TypeMetadata", ["require", "exports"], function (require, exports) {
8 Object.defineProperty(exports, "__esModule", { value: true });
9 var TypeMetadata = /** @class */ (function () {
10 function TypeMetadata(target, propertyName, reflectedType, typeFunction, options) {
11 this.target = target;
12 this.propertyName = propertyName;
13 this.reflectedType = reflectedType;
14 this.typeFunction = typeFunction;
15 this.options = options;
16 }
17 return TypeMetadata;
18 }());
19 exports.TypeMetadata = TypeMetadata;
20});
21define("class-transformer/metadata/ExposeMetadata", ["require", "exports"], function (require, exports) {
22 Object.defineProperty(exports, "__esModule", { value: true });
23 var ExposeMetadata = /** @class */ (function () {
24 function ExposeMetadata(target, propertyName, options) {
25 this.target = target;
26 this.propertyName = propertyName;
27 this.options = options;
28 }
29 return ExposeMetadata;
30 }());
31 exports.ExposeMetadata = ExposeMetadata;
32});
33define("class-transformer/metadata/ExcludeMetadata", ["require", "exports"], function (require, exports) {
34 Object.defineProperty(exports, "__esModule", { value: true });
35 var ExcludeMetadata = /** @class */ (function () {
36 function ExcludeMetadata(target, propertyName, options) {
37 this.target = target;
38 this.propertyName = propertyName;
39 this.options = options;
40 }
41 return ExcludeMetadata;
42 }());
43 exports.ExcludeMetadata = ExcludeMetadata;
44});
45define("class-transformer/metadata/TransformMetadata", ["require", "exports"], function (require, exports) {
46 Object.defineProperty(exports, "__esModule", { value: true });
47 var TransformMetadata = /** @class */ (function () {
48 function TransformMetadata(target, propertyName, transformFn, options) {
49 this.target = target;
50 this.propertyName = propertyName;
51 this.transformFn = transformFn;
52 this.options = options;
53 }
54 return TransformMetadata;
55 }());
56 exports.TransformMetadata = TransformMetadata;
57});
58define("class-transformer/metadata/MetadataStorage", ["require", "exports", "class-transformer/TransformOperationExecutor"], function (require, exports, TransformOperationExecutor_1) {
59 Object.defineProperty(exports, "__esModule", { value: true });
60 /**
61 * Storage all library metadata.
62 */
63 var MetadataStorage = /** @class */ (function () {
64 function MetadataStorage() {
65 // -------------------------------------------------------------------------
66 // Properties
67 // -------------------------------------------------------------------------
68 this._typeMetadatas = new Map();
69 this._transformMetadatas = new Map();
70 this._exposeMetadatas = new Map();
71 this._excludeMetadatas = new Map();
72 this._ancestorsMap = new Map();
73 }
74 // -------------------------------------------------------------------------
75 // Adder Methods
76 // -------------------------------------------------------------------------
77 MetadataStorage.prototype.addTypeMetadata = function (metadata) {
78 if (!this._typeMetadatas.has(metadata.target)) {
79 this._typeMetadatas.set(metadata.target, new Map());
80 }
81 this._typeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);
82 };
83 MetadataStorage.prototype.addTransformMetadata = function (metadata) {
84 if (!this._transformMetadatas.has(metadata.target)) {
85 this._transformMetadatas.set(metadata.target, new Map());
86 }
87 if (!this._transformMetadatas.get(metadata.target).has(metadata.propertyName)) {
88 this._transformMetadatas.get(metadata.target).set(metadata.propertyName, []);
89 }
90 this._transformMetadatas.get(metadata.target).get(metadata.propertyName).push(metadata);
91 };
92 MetadataStorage.prototype.addExposeMetadata = function (metadata) {
93 if (!this._exposeMetadatas.has(metadata.target)) {
94 this._exposeMetadatas.set(metadata.target, new Map());
95 }
96 this._exposeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);
97 };
98 MetadataStorage.prototype.addExcludeMetadata = function (metadata) {
99 if (!this._excludeMetadatas.has(metadata.target)) {
100 this._excludeMetadatas.set(metadata.target, new Map());
101 }
102 this._excludeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);
103 };
104 // -------------------------------------------------------------------------
105 // Public Methods
106 // -------------------------------------------------------------------------
107 MetadataStorage.prototype.findTransformMetadatas = function (target, propertyName, transformationType) {
108 return this.findMetadatas(this._transformMetadatas, target, propertyName)
109 .filter(function (metadata) {
110 if (!metadata.options)
111 return true;
112 if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)
113 return true;
114 if (metadata.options.toClassOnly === true) {
115 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_CLASS || transformationType === TransformOperationExecutor_1.TransformationType.PLAIN_TO_CLASS;
116 }
117 if (metadata.options.toPlainOnly === true) {
118 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_PLAIN;
119 }
120 return true;
121 });
122 };
123 MetadataStorage.prototype.findExcludeMetadata = function (target, propertyName) {
124 return this.findMetadata(this._excludeMetadatas, target, propertyName);
125 };
126 MetadataStorage.prototype.findExposeMetadata = function (target, propertyName) {
127 return this.findMetadata(this._exposeMetadatas, target, propertyName);
128 };
129 MetadataStorage.prototype.findExposeMetadataByCustomName = function (target, name) {
130 return this.getExposedMetadatas(target).find(function (metadata) {
131 return metadata.options && metadata.options.name === name;
132 });
133 };
134 MetadataStorage.prototype.findTypeMetadata = function (target, propertyName) {
135 return this.findMetadata(this._typeMetadatas, target, propertyName);
136 };
137 MetadataStorage.prototype.getStrategy = function (target) {
138 var excludeMap = this._excludeMetadatas.get(target);
139 var exclude = excludeMap && excludeMap.get(undefined);
140 var exposeMap = this._exposeMetadatas.get(target);
141 var expose = exposeMap && exposeMap.get(undefined);
142 if ((exclude && expose) || (!exclude && !expose))
143 return "none";
144 return exclude ? "excludeAll" : "exposeAll";
145 };
146 MetadataStorage.prototype.getExposedMetadatas = function (target) {
147 return this.getMetadata(this._exposeMetadatas, target);
148 };
149 MetadataStorage.prototype.getExcludedMetadatas = function (target) {
150 return this.getMetadata(this._excludeMetadatas, target);
151 };
152 MetadataStorage.prototype.getExposedProperties = function (target, transformationType) {
153 return this.getExposedMetadatas(target)
154 .filter(function (metadata) {
155 if (!metadata.options)
156 return true;
157 if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)
158 return true;
159 if (metadata.options.toClassOnly === true) {
160 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_CLASS || transformationType === TransformOperationExecutor_1.TransformationType.PLAIN_TO_CLASS;
161 }
162 if (metadata.options.toPlainOnly === true) {
163 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_PLAIN;
164 }
165 return true;
166 })
167 .map(function (metadata) { return metadata.propertyName; });
168 };
169 MetadataStorage.prototype.getExcludedProperties = function (target, transformationType) {
170 return this.getExcludedMetadatas(target)
171 .filter(function (metadata) {
172 if (!metadata.options)
173 return true;
174 if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)
175 return true;
176 if (metadata.options.toClassOnly === true) {
177 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_CLASS || transformationType === TransformOperationExecutor_1.TransformationType.PLAIN_TO_CLASS;
178 }
179 if (metadata.options.toPlainOnly === true) {
180 return transformationType === TransformOperationExecutor_1.TransformationType.CLASS_TO_PLAIN;
181 }
182 return true;
183 })
184 .map(function (metadata) { return metadata.propertyName; });
185 };
186 MetadataStorage.prototype.clear = function () {
187 this._typeMetadatas.clear();
188 this._exposeMetadatas.clear();
189 this._excludeMetadatas.clear();
190 this._ancestorsMap.clear();
191 };
192 // -------------------------------------------------------------------------
193 // Private Methods
194 // -------------------------------------------------------------------------
195 MetadataStorage.prototype.getMetadata = function (metadatas, target) {
196 var metadataFromTargetMap = metadatas.get(target);
197 var metadataFromTarget;
198 if (metadataFromTargetMap) {
199 metadataFromTarget = Array.from(metadataFromTargetMap.values()).filter(function (meta) { return meta.propertyName !== undefined; });
200 }
201 var metadataFromAncestors = [];
202 for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {
203 var ancestor = _a[_i];
204 var ancestorMetadataMap = metadatas.get(ancestor);
205 if (ancestorMetadataMap) {
206 var metadataFromAncestor = Array.from(ancestorMetadataMap.values()).filter(function (meta) { return meta.propertyName !== undefined; });
207 metadataFromAncestors.push.apply(metadataFromAncestors, metadataFromAncestor);
208 }
209 }
210 return metadataFromAncestors.concat(metadataFromTarget || []);
211 };
212 MetadataStorage.prototype.findMetadata = function (metadatas, target, propertyName) {
213 var metadataFromTargetMap = metadatas.get(target);
214 if (metadataFromTargetMap) {
215 var metadataFromTarget = metadataFromTargetMap.get(propertyName);
216 if (metadataFromTarget) {
217 return metadataFromTarget;
218 }
219 }
220 for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {
221 var ancestor = _a[_i];
222 var ancestorMetadataMap = metadatas.get(ancestor);
223 if (ancestorMetadataMap) {
224 var ancestorResult = ancestorMetadataMap.get(propertyName);
225 if (ancestorResult) {
226 return ancestorResult;
227 }
228 }
229 }
230 return undefined;
231 };
232 MetadataStorage.prototype.findMetadatas = function (metadatas, target, propertyName) {
233 var metadataFromTargetMap = metadatas.get(target);
234 var metadataFromTarget;
235 if (metadataFromTargetMap) {
236 metadataFromTarget = metadataFromTargetMap.get(propertyName);
237 }
238 var metadataFromAncestorsTarget = [];
239 for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {
240 var ancestor = _a[_i];
241 var ancestorMetadataMap = metadatas.get(ancestor);
242 if (ancestorMetadataMap) {
243 if (ancestorMetadataMap.has(propertyName)) {
244 metadataFromAncestorsTarget.push.apply(metadataFromAncestorsTarget, ancestorMetadataMap.get(propertyName));
245 }
246 }
247 }
248 return (metadataFromAncestorsTarget).reverse().concat((metadataFromTarget || []).reverse());
249 };
250 MetadataStorage.prototype.getAncestors = function (target) {
251 if (!target)
252 return [];
253 if (!this._ancestorsMap.has(target)) {
254 var ancestors = [];
255 for (var baseClass = Object.getPrototypeOf(target.prototype.constructor); typeof baseClass.prototype !== "undefined"; baseClass = Object.getPrototypeOf(baseClass.prototype.constructor)) {
256 ancestors.push(baseClass);
257 }
258 this._ancestorsMap.set(target, ancestors);
259 }
260 return this._ancestorsMap.get(target);
261 };
262 return MetadataStorage;
263 }());
264 exports.MetadataStorage = MetadataStorage;
265});
266define("class-transformer/storage", ["require", "exports", "class-transformer/metadata/MetadataStorage"], function (require, exports, MetadataStorage_1) {
267 Object.defineProperty(exports, "__esModule", { value: true });
268 /**
269 * Default metadata storage is used as singleton and can be used to storage all metadatas.
270 */
271 exports.defaultMetadataStorage = new MetadataStorage_1.MetadataStorage();
272});
273define("class-transformer/TransformOperationExecutor", ["require", "exports", "class-transformer/storage"], function (require, exports, storage_1) {
274 Object.defineProperty(exports, "__esModule", { value: true });
275 var TransformationType;
276 (function (TransformationType) {
277 TransformationType[TransformationType["PLAIN_TO_CLASS"] = 0] = "PLAIN_TO_CLASS";
278 TransformationType[TransformationType["CLASS_TO_PLAIN"] = 1] = "CLASS_TO_PLAIN";
279 TransformationType[TransformationType["CLASS_TO_CLASS"] = 2] = "CLASS_TO_CLASS";
280 })(TransformationType = exports.TransformationType || (exports.TransformationType = {}));
281 var TransformOperationExecutor = /** @class */ (function () {
282 // -------------------------------------------------------------------------
283 // Constructor
284 // -------------------------------------------------------------------------
285 function TransformOperationExecutor(transformationType, options) {
286 this.transformationType = transformationType;
287 this.options = options;
288 // -------------------------------------------------------------------------
289 // Private Properties
290 // -------------------------------------------------------------------------
291 this.recursionStack = new Set();
292 }
293 // -------------------------------------------------------------------------
294 // Public Methods
295 // -------------------------------------------------------------------------
296 TransformOperationExecutor.prototype.transform = function (source, value, targetType, arrayType, isMap, level) {
297 var _this = this;
298 if (level === void 0) { level = 0; }
299 if (Array.isArray(value) || value instanceof Set) {
300 var newValue_1 = arrayType && this.transformationType === TransformationType.PLAIN_TO_CLASS ? instantiateArrayType(arrayType) : [];
301 value.forEach(function (subValue, index) {
302 var subSource = source ? source[index] : undefined;
303 if (!_this.options.enableCircularCheck || !_this.isCircular(subValue)) {
304 var realTargetType = void 0;
305 if (typeof targetType !== "function" && targetType && targetType.options && targetType.options.discriminator && targetType.options.discriminator.property && targetType.options.discriminator.subTypes) {
306 if (_this.transformationType === TransformationType.PLAIN_TO_CLASS) {
307 realTargetType = targetType.options.discriminator.subTypes.find(function (subType) { return subType.name === subValue[targetType.options.discriminator.property]; });
308 var options = { newObject: newValue_1, object: subValue, property: undefined };
309 var newType = targetType.typeFunction(options);
310 realTargetType === undefined ? realTargetType = newType : realTargetType = realTargetType.value;
311 if (!targetType.options.keepDiscriminatorProperty)
312 delete subValue[targetType.options.discriminator.property];
313 }
314 if (_this.transformationType === TransformationType.CLASS_TO_CLASS) {
315 realTargetType = subValue.constructor;
316 }
317 if (_this.transformationType === TransformationType.CLASS_TO_PLAIN) {
318 subValue[targetType.options.discriminator.property] = targetType.options.discriminator.subTypes.find(function (subType) { return subType.value === subValue.constructor; }).name;
319 }
320 }
321 else {
322 realTargetType = targetType;
323 }
324 var value_1 = _this.transform(subSource, subValue, realTargetType, undefined, subValue instanceof Map, level + 1);
325 if (newValue_1 instanceof Set) {
326 newValue_1.add(value_1);
327 }
328 else {
329 newValue_1.push(value_1);
330 }
331 }
332 else if (_this.transformationType === TransformationType.CLASS_TO_CLASS) {
333 if (newValue_1 instanceof Set) {
334 newValue_1.add(subValue);
335 }
336 else {
337 newValue_1.push(subValue);
338 }
339 }
340 });
341 return newValue_1;
342 }
343 else if (targetType === String && !isMap) {
344 if (value === null || value === undefined)
345 return value;
346 return String(value);
347 }
348 else if (targetType === Number && !isMap) {
349 if (value === null || value === undefined)
350 return value;
351 return Number(value);
352 }
353 else if (targetType === Boolean && !isMap) {
354 if (value === null || value === undefined)
355 return value;
356 return Boolean(value);
357 }
358 else if ((targetType === Date || value instanceof Date) && !isMap) {
359 if (value instanceof Date) {
360 return new Date(value.valueOf());
361 }
362 if (value === null || value === undefined)
363 return value;
364 return new Date(value);
365 }
366 else if (testForBuffer() && (targetType === Buffer || value instanceof Buffer) && !isMap) {
367 if (value === null || value === undefined)
368 return value;
369 return Buffer.from(value);
370 }
371 else if (typeof value === "object" && value !== null) {
372 // try to guess the type
373 if (!targetType && value.constructor !== Object /* && TransformationType === TransformationType.CLASS_TO_PLAIN*/)
374 targetType = value.constructor;
375 if (!targetType && source)
376 targetType = source.constructor;
377 if (this.options.enableCircularCheck) {
378 // add transformed type to prevent circular references
379 this.recursionStack.add(value);
380 }
381 var keys = this.getKeys(targetType, value);
382 var newValue = source ? source : {};
383 if (!source && (this.transformationType === TransformationType.PLAIN_TO_CLASS || this.transformationType === TransformationType.CLASS_TO_CLASS)) {
384 if (isMap) {
385 newValue = new Map();
386 }
387 else if (targetType) {
388 newValue = new targetType();
389 }
390 else {
391 newValue = {};
392 }
393 }
394 var _loop_1 = function (key) {
395 var valueKey = key, newValueKey = key, propertyName = key;
396 if (!this_1.options.ignoreDecorators && targetType) {
397 if (this_1.transformationType === TransformationType.PLAIN_TO_CLASS) {
398 var exposeMetadata = storage_1.defaultMetadataStorage.findExposeMetadataByCustomName(targetType, key);
399 if (exposeMetadata) {
400 propertyName = exposeMetadata.propertyName;
401 newValueKey = exposeMetadata.propertyName;
402 }
403 }
404 else if (this_1.transformationType === TransformationType.CLASS_TO_PLAIN || this_1.transformationType === TransformationType.CLASS_TO_CLASS) {
405 var exposeMetadata = storage_1.defaultMetadataStorage.findExposeMetadata(targetType, key);
406 if (exposeMetadata && exposeMetadata.options && exposeMetadata.options.name) {
407 newValueKey = exposeMetadata.options.name;
408 }
409 }
410 }
411 // get a subvalue
412 var subValue = undefined;
413 if (value instanceof Map) {
414 subValue = value.get(valueKey);
415 }
416 else if (value[valueKey] instanceof Function) {
417 subValue = value[valueKey]();
418 }
419 else {
420 subValue = value[valueKey];
421 }
422 // determine a type
423 var type = undefined, isSubValueMap = subValue instanceof Map;
424 if (targetType && isMap) {
425 type = targetType;
426 }
427 else if (targetType) {
428 var metadata_1 = storage_1.defaultMetadataStorage.findTypeMetadata(targetType, propertyName);
429 if (metadata_1) {
430 var options = { newObject: newValue, object: value, property: propertyName };
431 var newType = metadata_1.typeFunction ? metadata_1.typeFunction(options) : metadata_1.reflectedType;
432 if (metadata_1.options && metadata_1.options.discriminator && metadata_1.options.discriminator.property && metadata_1.options.discriminator.subTypes) {
433 if (!(value[valueKey] instanceof Array)) {
434 if (this_1.transformationType === TransformationType.PLAIN_TO_CLASS) {
435 type = metadata_1.options.discriminator.subTypes.find(function (subType) {
436 if (subValue && metadata_1.options.discriminator.property in subValue) {
437 return subType.name === subValue[metadata_1.options.discriminator.property];
438 }
439 });
440 type === undefined ? type = newType : type = type.value;
441 if (!metadata_1.options.keepDiscriminatorProperty) {
442 if (subValue && metadata_1.options.discriminator.property in subValue) {
443 delete subValue[metadata_1.options.discriminator.property];
444 }
445 }
446 }
447 if (this_1.transformationType === TransformationType.CLASS_TO_CLASS) {
448 type = subValue.constructor;
449 }
450 if (this_1.transformationType === TransformationType.CLASS_TO_PLAIN) {
451 subValue[metadata_1.options.discriminator.property] = metadata_1.options.discriminator.subTypes.find(function (subType) { return subType.value === subValue.constructor; }).name;
452 }
453 }
454 else {
455 type = metadata_1;
456 }
457 }
458 else {
459 type = newType;
460 }
461 isSubValueMap = isSubValueMap || metadata_1.reflectedType === Map;
462 }
463 else if (this_1.options.targetMaps) { // try to find a type in target maps
464 this_1.options.targetMaps
465 .filter(function (map) { return map.target === targetType && !!map.properties[propertyName]; })
466 .forEach(function (map) { return type = map.properties[propertyName]; });
467 }
468 else if (this_1.transformationType === TransformationType.PLAIN_TO_CLASS) {
469 // if we have no registererd type via the @Type() decorator then we check if we have any
470 // type declarations in reflect-metadata (type declaration is emited only if some decorator is added to the property.)
471 var reflectedType = Reflect.getMetadata("design:type", targetType.prototype, propertyName);
472 if (reflectedType) {
473 type = reflectedType;
474 }
475 }
476 }
477 // if value is an array try to get its custom array type
478 var arrayType_1 = Array.isArray(value[valueKey]) ? this_1.getReflectedType(targetType, propertyName) : undefined;
479 // const subValueKey = TransformationType === TransformationType.PLAIN_TO_CLASS && newKeyName ? newKeyName : key;
480 var subSource = source ? source[valueKey] : undefined;
481 // if its deserialization then type if required
482 // if we uncomment this types like string[] will not work
483 // if (this.transformationType === TransformationType.PLAIN_TO_CLASS && !type && subValue instanceof Object && !(subValue instanceof Date))
484 // throw new Error(`Cannot determine type for ${(targetType as any).name }.${propertyName}, did you forget to specify a @Type?`);
485 // if newValue is a source object that has method that match newKeyName then skip it
486 if (newValue.constructor.prototype) {
487 var descriptor = Object.getOwnPropertyDescriptor(newValue.constructor.prototype, newValueKey);
488 if ((this_1.transformationType === TransformationType.PLAIN_TO_CLASS || this_1.transformationType === TransformationType.CLASS_TO_CLASS)
489 && ((descriptor && !descriptor.writable) || newValue[newValueKey] instanceof Function)) // || TransformationType === TransformationType.CLASS_TO_CLASS
490 return "continue";
491 }
492 if (!this_1.options.enableCircularCheck || !this_1.isCircular(subValue)) {
493 var transformKey = this_1.transformationType === TransformationType.PLAIN_TO_CLASS ? newValueKey : key;
494 var finalValue = void 0;
495 if (this_1.transformationType === TransformationType.CLASS_TO_PLAIN) {
496 // Get original value
497 finalValue = value[transformKey];
498 // Apply custom transformation
499 finalValue = this_1.applyCustomTransformations(finalValue, targetType, transformKey, value, this_1.transformationType);
500 // If nothing change, it means no custom transformation was applied, so use the subValue.
501 finalValue = (value[transformKey] === finalValue) ? subValue : finalValue;
502 // Apply the default transformation
503 finalValue = this_1.transform(subSource, finalValue, type, arrayType_1, isSubValueMap, level + 1);
504 }
505 else {
506 finalValue = this_1.transform(subSource, subValue, type, arrayType_1, isSubValueMap, level + 1);
507 finalValue = this_1.applyCustomTransformations(finalValue, targetType, transformKey, value, this_1.transformationType);
508 }
509 if (newValue instanceof Map) {
510 newValue.set(newValueKey, finalValue);
511 }
512 else {
513 newValue[newValueKey] = finalValue;
514 }
515 }
516 else if (this_1.transformationType === TransformationType.CLASS_TO_CLASS) {
517 var finalValue = subValue;
518 finalValue = this_1.applyCustomTransformations(finalValue, targetType, key, value, this_1.transformationType);
519 if (newValue instanceof Map) {
520 newValue.set(newValueKey, finalValue);
521 }
522 else {
523 newValue[newValueKey] = finalValue;
524 }
525 }
526 };
527 var this_1 = this;
528 // traverse over keys
529 for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
530 var key = keys_1[_i];
531 _loop_1(key);
532 }
533 if (this.options.enableCircularCheck) {
534 this.recursionStack.delete(value);
535 }
536 return newValue;
537 }
538 else {
539 return value;
540 }
541 };
542 TransformOperationExecutor.prototype.applyCustomTransformations = function (value, target, key, obj, transformationType) {
543 var _this = this;
544 var metadatas = storage_1.defaultMetadataStorage.findTransformMetadatas(target, key, this.transformationType);
545 // apply versioning options
546 if (this.options.version !== undefined) {
547 metadatas = metadatas.filter(function (metadata) {
548 if (!metadata.options)
549 return true;
550 return _this.checkVersion(metadata.options.since, metadata.options.until);
551 });
552 }
553 // apply grouping options
554 if (this.options.groups && this.options.groups.length) {
555 metadatas = metadatas.filter(function (metadata) {
556 if (!metadata.options)
557 return true;
558 return _this.checkGroups(metadata.options.groups);
559 });
560 }
561 else {
562 metadatas = metadatas.filter(function (metadata) {
563 return !metadata.options || !metadata.options.groups || !metadata.options.groups.length;
564 });
565 }
566 metadatas.forEach(function (metadata) {
567 value = metadata.transformFn(value, obj, transformationType);
568 });
569 return value;
570 };
571 // preventing circular references
572 TransformOperationExecutor.prototype.isCircular = function (object) {
573 return this.recursionStack.has(object);
574 };
575 TransformOperationExecutor.prototype.getReflectedType = function (target, propertyName) {
576 if (!target)
577 return undefined;
578 var meta = storage_1.defaultMetadataStorage.findTypeMetadata(target, propertyName);
579 return meta ? meta.reflectedType : undefined;
580 };
581 TransformOperationExecutor.prototype.getKeys = function (target, object) {
582 var _this = this;
583 // determine exclusion strategy
584 var strategy = storage_1.defaultMetadataStorage.getStrategy(target);
585 if (strategy === "none")
586 strategy = this.options.strategy || "exposeAll"; // exposeAll is default strategy
587 // get all keys that need to expose
588 var keys = [];
589 if (strategy === "exposeAll") {
590 if (object instanceof Map) {
591 keys = Array.from(object.keys());
592 }
593 else {
594 keys = Object.keys(object);
595 }
596 }
597 if (!this.options.ignoreDecorators && target) {
598 // add all exposed to list of keys
599 var exposedProperties = storage_1.defaultMetadataStorage.getExposedProperties(target, this.transformationType);
600 if (this.transformationType === TransformationType.PLAIN_TO_CLASS) {
601 exposedProperties = exposedProperties.map(function (key) {
602 var exposeMetadata = storage_1.defaultMetadataStorage.findExposeMetadata(target, key);
603 if (exposeMetadata && exposeMetadata.options && exposeMetadata.options.name) {
604 return exposeMetadata.options.name;
605 }
606 return key;
607 });
608 }
609 if (this.options.excludeExtraneousValues) {
610 keys = exposedProperties;
611 }
612 else {
613 keys = keys.concat(exposedProperties);
614 }
615 // exclude excluded properties
616 var excludedProperties_1 = storage_1.defaultMetadataStorage.getExcludedProperties(target, this.transformationType);
617 if (excludedProperties_1.length > 0) {
618 keys = keys.filter(function (key) {
619 return excludedProperties_1.indexOf(key) === -1;
620 });
621 }
622 // apply versioning options
623 if (this.options.version !== undefined) {
624 keys = keys.filter(function (key) {
625 var exposeMetadata = storage_1.defaultMetadataStorage.findExposeMetadata(target, key);
626 if (!exposeMetadata || !exposeMetadata.options)
627 return true;
628 return _this.checkVersion(exposeMetadata.options.since, exposeMetadata.options.until);
629 });
630 }
631 // apply grouping options
632 if (this.options.groups && this.options.groups.length) {
633 keys = keys.filter(function (key) {
634 var exposeMetadata = storage_1.defaultMetadataStorage.findExposeMetadata(target, key);
635 if (!exposeMetadata || !exposeMetadata.options)
636 return true;
637 return _this.checkGroups(exposeMetadata.options.groups);
638 });
639 }
640 else {
641 keys = keys.filter(function (key) {
642 var exposeMetadata = storage_1.defaultMetadataStorage.findExposeMetadata(target, key);
643 return !exposeMetadata || !exposeMetadata.options || !exposeMetadata.options.groups || !exposeMetadata.options.groups.length;
644 });
645 }
646 }
647 // exclude prefixed properties
648 if (this.options.excludePrefixes && this.options.excludePrefixes.length) {
649 keys = keys.filter(function (key) { return _this.options.excludePrefixes.every(function (prefix) {
650 return key.substr(0, prefix.length) !== prefix;
651 }); });
652 }
653 // make sure we have unique keys
654 keys = keys.filter(function (key, index, self) {
655 return self.indexOf(key) === index;
656 });
657 return keys;
658 };
659 TransformOperationExecutor.prototype.checkVersion = function (since, until) {
660 var decision = true;
661 if (decision && since)
662 decision = this.options.version >= since;
663 if (decision && until)
664 decision = this.options.version < until;
665 return decision;
666 };
667 TransformOperationExecutor.prototype.checkGroups = function (groups) {
668 if (!groups)
669 return true;
670 return this.options.groups.some(function (optionGroup) { return groups.indexOf(optionGroup) !== -1; });
671 };
672 return TransformOperationExecutor;
673 }());
674 exports.TransformOperationExecutor = TransformOperationExecutor;
675 function instantiateArrayType(arrayType) {
676 var array = new arrayType();
677 if (!(array instanceof Set) && !("push" in array)) {
678 return [];
679 }
680 return array;
681 }
682 function testForBuffer() {
683 try {
684 Buffer;
685 return true;
686 }
687 catch (_a) { }
688 return false;
689 }
690 exports.testForBuffer = testForBuffer;
691});
692define("class-transformer/ClassTransformer", ["require", "exports", "class-transformer/TransformOperationExecutor"], function (require, exports, TransformOperationExecutor_2) {
693 Object.defineProperty(exports, "__esModule", { value: true });
694 var ClassTransformer = /** @class */ (function () {
695 function ClassTransformer() {
696 }
697 ClassTransformer.prototype.classToPlain = function (object, options) {
698 var executor = new TransformOperationExecutor_2.TransformOperationExecutor(TransformOperationExecutor_2.TransformationType.CLASS_TO_PLAIN, options || {});
699 return executor.transform(undefined, object, undefined, undefined, undefined, undefined);
700 };
701 ClassTransformer.prototype.classToPlainFromExist = function (object, plainObject, options) {
702 var executor = new TransformOperationExecutor_2.TransformOperationExecutor(TransformOperationExecutor_2.TransformationType.CLASS_TO_PLAIN, options || {});
703 return executor.transform(plainObject, object, undefined, undefined, undefined, undefined);
704 };
705 ClassTransformer.prototype.plainToClass = function (cls, plain, options) {
706 var executor = new TransformOperationExecutor_2.TransformOperationExecutor(TransformOperationExecutor_2.TransformationType.PLAIN_TO_CLASS, options || {});
707 return executor.transform(undefined, plain, cls, undefined, undefined, undefined);
708 };
709 ClassTransformer.prototype.plainToClassFromExist = function (clsObject, plain, options) {
710 var executor = new TransformOperationExecutor_2.TransformOperationExecutor(TransformOperationExecutor_2.TransformationType.PLAIN_TO_CLASS, options || {});
711 return executor.transform(clsObject, plain, undefined, undefined, undefined, undefined);
712 };
713 ClassTransformer.prototype.classToClass = function (object, options) {
714 var executor = new TransformOperationExecutor_2.TransformOperationExecutor(TransformOperationExecutor_2.TransformationType.CLASS_TO_CLASS, options || {});
715 return executor.transform(undefined, object, undefined, undefined, undefined, undefined);
716 };
717 ClassTransformer.prototype.classToClassFromExist = function (object, fromObject, options) {
718 var executor = new TransformOperationExecutor_2.TransformOperationExecutor(TransformOperationExecutor_2.TransformationType.CLASS_TO_CLASS, options || {});
719 return executor.transform(fromObject, object, undefined, undefined, undefined, undefined);
720 };
721 ClassTransformer.prototype.serialize = function (object, options) {
722 return JSON.stringify(this.classToPlain(object, options));
723 };
724 /**
725 * Deserializes given JSON string to a object of the given class.
726 */
727 ClassTransformer.prototype.deserialize = function (cls, json, options) {
728 var jsonObject = JSON.parse(json);
729 return this.plainToClass(cls, jsonObject, options);
730 };
731 /**
732 * Deserializes given JSON string to an array of objects of the given class.
733 */
734 ClassTransformer.prototype.deserializeArray = function (cls, json, options) {
735 var jsonObject = JSON.parse(json);
736 return this.plainToClass(cls, jsonObject, options);
737 };
738 return ClassTransformer;
739 }());
740 exports.ClassTransformer = ClassTransformer;
741});
742define("class-transformer/decorators", ["require", "exports", "class-transformer/ClassTransformer", "class-transformer/storage", "class-transformer/metadata/TypeMetadata", "class-transformer/metadata/ExposeMetadata", "class-transformer/metadata/ExcludeMetadata", "class-transformer/metadata/TransformMetadata"], function (require, exports, ClassTransformer_1, storage_2, TypeMetadata_1, ExposeMetadata_1, ExcludeMetadata_1, TransformMetadata_1) {
743 Object.defineProperty(exports, "__esModule", { value: true });
744 /**
745 * Defines a custom logic for value transformation.
746 */
747 function Transform(transformFn, options) {
748 return function (target, key) {
749 var metadata = new TransformMetadata_1.TransformMetadata(target.constructor, key, transformFn, options);
750 storage_2.defaultMetadataStorage.addTransformMetadata(metadata);
751 };
752 }
753 exports.Transform = Transform;
754 /**
755 * Specifies a type of the property.
756 * The given TypeFunction can return a constructor. A discriminator can be given in the options.
757 */
758 function Type(typeFunction, options) {
759 return function (target, key) {
760 var type = Reflect.getMetadata("design:type", target, key);
761 var metadata = new TypeMetadata_1.TypeMetadata(target.constructor, key, type, typeFunction, options);
762 storage_2.defaultMetadataStorage.addTypeMetadata(metadata);
763 };
764 }
765 exports.Type = Type;
766 /**
767 * Marks property as included in the process of transformation. By default it includes the property for both
768 * constructorToPlain and plainToConstructor transformations, however you can specify on which of transformation types
769 * you want to skip this property.
770 */
771 function Expose(options) {
772 return function (object, propertyName) {
773 var metadata = new ExposeMetadata_1.ExposeMetadata(object instanceof Function ? object : object.constructor, propertyName, options || {});
774 storage_2.defaultMetadataStorage.addExposeMetadata(metadata);
775 };
776 }
777 exports.Expose = Expose;
778 /**
779 * Marks property as excluded from the process of transformation. By default it excludes the property for both
780 * constructorToPlain and plainToConstructor transformations, however you can specify on which of transformation types
781 * you want to skip this property.
782 */
783 function Exclude(options) {
784 return function (object, propertyName) {
785 var metadata = new ExcludeMetadata_1.ExcludeMetadata(object instanceof Function ? object : object.constructor, propertyName, options || {});
786 storage_2.defaultMetadataStorage.addExcludeMetadata(metadata);
787 };
788 }
789 exports.Exclude = Exclude;
790 /**
791 * Transform the object from class to plain object and return only with the exposed properties.
792 */
793 function TransformClassToPlain(params) {
794 return function (target, propertyKey, descriptor) {
795 var classTransformer = new ClassTransformer_1.ClassTransformer();
796 var originalMethod = descriptor.value;
797 descriptor.value = function () {
798 var args = [];
799 for (var _i = 0; _i < arguments.length; _i++) {
800 args[_i] = arguments[_i];
801 }
802 var result = originalMethod.apply(this, args);
803 var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function";
804 return isPromise ? result.then(function (data) { return classTransformer.classToPlain(data, params); }) : classTransformer.classToPlain(result, params);
805 };
806 };
807 }
808 exports.TransformClassToPlain = TransformClassToPlain;
809 /**
810 * Return the class instance only with the exposed properties.
811 */
812 function TransformClassToClass(params) {
813 return function (target, propertyKey, descriptor) {
814 var classTransformer = new ClassTransformer_1.ClassTransformer();
815 var originalMethod = descriptor.value;
816 descriptor.value = function () {
817 var args = [];
818 for (var _i = 0; _i < arguments.length; _i++) {
819 args[_i] = arguments[_i];
820 }
821 var result = originalMethod.apply(this, args);
822 var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function";
823 return isPromise ? result.then(function (data) { return classTransformer.classToClass(data, params); }) : classTransformer.classToClass(result, params);
824 };
825 };
826 }
827 exports.TransformClassToClass = TransformClassToClass;
828 /**
829 * Return the class instance only with the exposed properties.
830 */
831 function TransformPlainToClass(classType, params) {
832 return function (target, propertyKey, descriptor) {
833 var classTransformer = new ClassTransformer_1.ClassTransformer();
834 var originalMethod = descriptor.value;
835 descriptor.value = function () {
836 var args = [];
837 for (var _i = 0; _i < arguments.length; _i++) {
838 args[_i] = arguments[_i];
839 }
840 var result = originalMethod.apply(this, args);
841 var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function";
842 return isPromise ? result.then(function (data) { return classTransformer.plainToClass(classType, data, params); }) : classTransformer.plainToClass(classType, result, params);
843 };
844 };
845 }
846 exports.TransformPlainToClass = TransformPlainToClass;
847});
848define("class-transformer/index", ["require", "exports", "class-transformer/ClassTransformer", "class-transformer/ClassTransformer", "class-transformer/decorators"], function (require, exports, ClassTransformer_2, ClassTransformer_3, decorators_1) {
849 function __export(m) {
850 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
851 }
852 Object.defineProperty(exports, "__esModule", { value: true });
853 exports.ClassTransformer = ClassTransformer_3.ClassTransformer;
854 __export(decorators_1);
855 var classTransformer = new ClassTransformer_2.ClassTransformer();
856 function classToPlain(object, options) {
857 return classTransformer.classToPlain(object, options);
858 }
859 exports.classToPlain = classToPlain;
860 function classToPlainFromExist(object, plainObject, options) {
861 return classTransformer.classToPlainFromExist(object, plainObject, options);
862 }
863 exports.classToPlainFromExist = classToPlainFromExist;
864 function plainToClass(cls, plain, options) {
865 return classTransformer.plainToClass(cls, plain, options);
866 }
867 exports.plainToClass = plainToClass;
868 function plainToClassFromExist(clsObject, plain, options) {
869 return classTransformer.plainToClassFromExist(clsObject, plain, options);
870 }
871 exports.plainToClassFromExist = plainToClassFromExist;
872 function classToClass(object, options) {
873 return classTransformer.classToClass(object, options);
874 }
875 exports.classToClass = classToClass;
876 function classToClassFromExist(object, fromObject, options) {
877 return classTransformer.classToClassFromExist(object, fromObject, options);
878 }
879 exports.classToClassFromExist = classToClassFromExist;
880 function serialize(object, options) {
881 return classTransformer.serialize(object, options);
882 }
883 exports.serialize = serialize;
884 /**
885 * Deserializes given JSON string to a object of the given class.
886 */
887 function deserialize(cls, json, options) {
888 return classTransformer.deserialize(cls, json, options);
889 }
890 exports.deserialize = deserialize;
891 /**
892 * Deserializes given JSON string to an array of objects of the given class.
893 */
894 function deserializeArray(cls, json, options) {
895 return classTransformer.deserializeArray(cls, json, options);
896 }
897 exports.deserializeArray = deserializeArray;
898 /**
899 * Enum representing the different transformation types.
900 */
901 var TransformationType;
902 (function (TransformationType) {
903 TransformationType[TransformationType["PLAIN_TO_CLASS"] = 0] = "PLAIN_TO_CLASS";
904 TransformationType[TransformationType["CLASS_TO_PLAIN"] = 1] = "CLASS_TO_PLAIN";
905 TransformationType[TransformationType["CLASS_TO_CLASS"] = 2] = "CLASS_TO_CLASS";
906 })(TransformationType = exports.TransformationType || (exports.TransformationType = {}));
907});
908define("class-transformer", ["require", "exports", "class-transformer/index"], function (require, exports, index_1) {
909 function __export(m) {
910 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
911 }
912 Object.defineProperty(exports, "__esModule", { value: true });
913 __export(index_1);
914});