import { OperatorFunction } from 'rxjs'; import { Ctor, SbContext, SbInterceptor } from '@pebula/attribus'; import { SERVICE_BUS_INTERCEPTORS_METADATA } from '../../constants'; export type SbInterceptorMetadataForTarget = Map>>; export function SbNestIntercept(...interceptors: Array>) { return >, K extends string>(target: T, key: K): void => { const ctrlInterceptors: SbInterceptorMetadataForTarget = Reflect.getMetadata(SERVICE_BUS_INTERCEPTORS_METADATA, target) || new Map>>(); if (ctrlInterceptors.size === 0) { Reflect.defineMetadata(SERVICE_BUS_INTERCEPTORS_METADATA, ctrlInterceptors, target); } if (!ctrlInterceptors.has(key)) { ctrlInterceptors.set(key, []); } ctrlInterceptors.get(key).push(...interceptors); }; }