UNPKG

2.36 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
4/**
5 * Helper class providing Nest reflection capabilities.
6 *
7 * @see [Reflection](https://docs.nestjs.com/guards#putting-it-all-together)
8 *
9 * @publicApi
10 */
11class Reflector {
12 /**
13 * Retrieve metadata for a specified key for a specified target.
14 *
15 * @example
16 * `const roles = this.reflector.get<string[]>('roles', context.getHandler());`
17 *
18 * @param metadataKey lookup key for metadata to retrieve
19 * @param target context (decorated object) to retrieve metadata from
20 *
21 */
22 get(metadataKey, target) {
23 return Reflect.getMetadata(metadataKey, target);
24 }
25 /**
26 * Retrieve metadata for a specified key for a specified set of targets.
27 *
28 * @param metadataKey lookup key for metadata to retrieve
29 * @param targets context (decorated objects) to retrieve metadata from
30 *
31 */
32 getAll(metadataKey, targets) {
33 return (targets || []).map(target => Reflect.getMetadata(metadataKey, target));
34 }
35 /**
36 * Retrieve metadata for a specified key for a specified set of targets and merge results.
37 *
38 * @param metadataKey lookup key for metadata to retrieve
39 * @param targets context (decorated objects) to retrieve metadata from
40 *
41 */
42 getAllAndMerge(metadataKey, targets) {
43 const metadataCollection = this.getAll(metadataKey, targets);
44 return metadataCollection.reduce((a, b) => {
45 if (Array.isArray(a)) {
46 return a.concat(b);
47 }
48 if (shared_utils_1.isObject(a) && shared_utils_1.isObject(b)) {
49 return Object.assign(Object.assign({}, a), b);
50 }
51 return [a, b];
52 });
53 }
54 /**
55 * Retrieve metadata for a specified key for a specified set of targets and return a first not undefined value.
56 *
57 * @param metadataKey lookup key for metadata to retrieve
58 * @param targets context (decorated objects) to retrieve metadata from
59 *
60 */
61 getAllAndOverride(metadataKey, targets) {
62 const metadataCollection = this.getAll(metadataKey, targets).filter(item => item !== undefined);
63 return metadataCollection[0];
64 }
65}
66exports.Reflector = Reflector;