1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
4 | const iterare_1 = require("iterare");
|
5 | class MetadataScanner {
|
6 | scanFromPrototype(instance, prototype, callback) {
|
7 | const methodNames = new Set(this.getAllFilteredMethodNames(prototype));
|
8 | return iterare_1.default(methodNames)
|
9 | .map(callback)
|
10 | .filter(metadata => !shared_utils_1.isNil(metadata))
|
11 | .toArray();
|
12 | }
|
13 | *getAllFilteredMethodNames(prototype) {
|
14 | const isMethod = (prop) => {
|
15 | const descriptor = Object.getOwnPropertyDescriptor(prototype, prop);
|
16 | if (descriptor.set || descriptor.get) {
|
17 | return false;
|
18 | }
|
19 | return !shared_utils_1.isConstructor(prop) && shared_utils_1.isFunction(prototype[prop]);
|
20 | };
|
21 | do {
|
22 | yield* iterare_1.default(Object.getOwnPropertyNames(prototype))
|
23 | .filter(isMethod)
|
24 | .toArray();
|
25 | } while (
|
26 |
|
27 | (prototype = Reflect.getPrototypeOf(prototype)) &&
|
28 | prototype !== Object.prototype);
|
29 | }
|
30 | }
|
31 | exports.MetadataScanner = MetadataScanner;
|