UNPKG

2.53 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ClassSerializerInterceptor = void 0;
4const tslib_1 = require("tslib");
5const operators_1 = require("rxjs/operators");
6const core_1 = require("../decorators/core");
7const load_package_util_1 = require("../utils/load-package.util");
8const shared_utils_1 = require("../utils/shared.utils");
9const class_serializer_constants_1 = require("./class-serializer.constants");
10let classTransformer = {};
11// NOTE (external)
12// We need to deduplicate them here due to the circular dependency
13// between core and common packages
14const REFLECTOR = 'Reflector';
15let ClassSerializerInterceptor = class ClassSerializerInterceptor {
16 constructor(reflector, defaultOptions = {}) {
17 this.reflector = reflector;
18 this.defaultOptions = defaultOptions;
19 classTransformer = load_package_util_1.loadPackage('class-transformer', 'ClassSerializerInterceptor', () => require('class-transformer'));
20 require('class-transformer');
21 }
22 intercept(context, next) {
23 const contextOptions = this.getContextOptions(context);
24 const options = Object.assign(Object.assign({}, this.defaultOptions), contextOptions);
25 return next
26 .handle()
27 .pipe(operators_1.map((res) => this.serialize(res, options)));
28 }
29 serialize(response, options) {
30 const isArray = Array.isArray(response);
31 if (!shared_utils_1.isObject(response) && !isArray) {
32 return response;
33 }
34 return isArray
35 ? response.map(item => this.transformToPlain(item, options))
36 : this.transformToPlain(response, options);
37 }
38 transformToPlain(plainOrClass, options) {
39 return plainOrClass && plainOrClass.constructor !== Object
40 ? classTransformer.classToPlain(plainOrClass, options)
41 : plainOrClass;
42 }
43 getContextOptions(context) {
44 return (this.reflectSerializeMetadata(context.getHandler()) ||
45 this.reflectSerializeMetadata(context.getClass()));
46 }
47 reflectSerializeMetadata(obj) {
48 return this.reflector.get(class_serializer_constants_1.CLASS_SERIALIZER_OPTIONS, obj);
49 }
50};
51ClassSerializerInterceptor = tslib_1.__decorate([
52 core_1.Injectable(),
53 tslib_1.__param(0, core_1.Inject(REFLECTOR)),
54 tslib_1.__param(1, core_1.Optional()),
55 tslib_1.__metadata("design:paramtypes", [Object, Object])
56], ClassSerializerInterceptor);
57exports.ClassSerializerInterceptor = ClassSerializerInterceptor;