/* * © Copyright 2022 HP Development Company, L.P. * SPDX-License-Identifier: MIT */ import { decorate, DecoratorId } from '@davinci/reflector'; import { Interceptor, InterceptorDecoratorMeta } from './types'; export function interceptor( handler: I, meta?: Parameters[1] extends { meta: unknown } ? Parameters[1]['meta'] : unknown ) { const options: InterceptorDecoratorMeta = { [DecoratorId]: 'interceptor', handler }; if (meta) { options.meta = meta; } return decorate(options, ['Class', 'Method'], { allowMultiple: true }); }