import { OperatorFunction } from 'rxjs'; import { SbQueueSubscriptionMetadataOptions, SbSubscriptionMetadataOptions, SbInterceptor } from '../../interfaces'; import { SbContext } from '../../sb-context'; import { globalMetadataStore } from '../metadata-store'; export type PropOrMethodDecorator = TVar extends TTrue ? MethodDecorator : >, K extends string>(target: T, key: K) => void ; /** * Subscribes to incoming events from a queue */ export function Queue(metadata: SbQueueSubscriptionMetadataOptions): PropOrMethodDecorator { return ((target: object, key: string | symbol, descriptor?: PropertyDescriptor) => { globalMetadataStore.getCreate(target.constructor).addQueue(metadata, key, descriptor); }) as any; } /** * Subscribes to incoming events from a topic */ export function Subscription(metadata: SbSubscriptionMetadataOptions): PropOrMethodDecorator { return ((target: object, key: string | symbol, descriptor?: PropertyDescriptor) => { globalMetadataStore.getCreate(target.constructor).addSubscription(metadata, key, descriptor); }) as any; } export function SbIntercept(...interceptors: Array) { return >, K extends string>(target: T, key: K): void => { globalMetadataStore.getCreate(target.constructor).addInterceptor(interceptors, key); }; }