/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2020-11-06 08:52:55 * @modify date 2020-11-12 13:55:43 * @desc [description] */ import { getSingleton } from "../helpers/singletonMethod"; import { IFunctionOptions } from "../types/nope/nopeModule.interface"; export interface IExportFunctionToDispatcherParameters extends IFunctionOptions { // id: string } const container = getSingleton('nopeBackendDispatcher.container', () => { return new Map Promise, options: IExportFunctionToDispatcherParameters }>() }); /** * Defintion of a Functon. */ export type callable = { (...args): T } /** * Decorator, that will export the Function to a Dispatcher * @param func The Function * @param options The Options. */ export function exportFunctionToDispatcher(func: T, options: IExportFunctionToDispatcherParameters) { // Only add the element if it doesnt exists. if (!container.instance.has(options.id)) { container.instance.set(options.id, { callback: async (...args) => await ((func as any)(...args)), options, uri: options.id || (func as any).name }); } return func; }