UNPKG

@nestjs/microservices

Version:

Nest - modern, fast, powerful node.js web framework (@microservices)

50 lines (49 loc) 2.15 kB
import { CLIENT_CONFIGURATION_METADATA, CLIENT_METADATA, PATTERN_EXTRAS_METADATA, PATTERN_HANDLER_METADATA, PATTERN_METADATA, TRANSPORT_METADATA, } from './constants.js'; import { PatternHandler } from './enums/pattern-handler.enum.js'; import { isFunction, isUndefined, } from '@nestjs/common/internal'; export class ListenerMetadataExplorer { metadataScanner; constructor(metadataScanner) { this.metadataScanner = metadataScanner; } explore(instance) { const instancePrototype = Object.getPrototypeOf(instance); return this.metadataScanner .getAllMethodNames(instancePrototype) .map(method => this.exploreMethodMetadata(instance, instancePrototype, method)) .filter(metadata => metadata); } exploreMethodMetadata(instance, instancePrototype, methodKey) { const prototypeCallback = instancePrototype[methodKey]; const handlerType = Reflect.getMetadata(PATTERN_HANDLER_METADATA, prototypeCallback); if (isUndefined(handlerType)) { return; } const patterns = Reflect.getMetadata(PATTERN_METADATA, prototypeCallback); const transport = Reflect.getMetadata(TRANSPORT_METADATA, prototypeCallback); const extras = Reflect.getMetadata(PATTERN_EXTRAS_METADATA, prototypeCallback); const targetCallback = instance[methodKey]; return { methodKey, targetCallback, patterns, transport, extras, isEventHandler: handlerType === PatternHandler.EVENT, }; } *scanForClientHooks(instance) { for (const propertyKey in instance) { if (isFunction(instance[propertyKey])) { continue; } const property = String(propertyKey); const isClient = Reflect.getMetadata(CLIENT_METADATA, instance, property); if (isUndefined(isClient)) { continue; } const metadata = Reflect.getMetadata(CLIENT_CONFIGURATION_METADATA, instance, property); yield { property, metadata }; } } }