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