import { interfaces } from './interfaces' import { METADATA_KEY } from './constants' function getPlugins() { return [...getPluginMetadatas().values()].map((target) => target.target); } function getPlugin(name: string) { return getPluginMetadatas().get(name); } function getPluginMetadatas() { let pluginMetadatas: Map = Reflect.getMetadata( METADATA_KEY.plugin, Reflect ) || new Map(); return pluginMetadatas; } function getPluginMetadata(target: any) { let pluginMetadata: interfaces.PluginMetadata = Reflect.getMetadata( METADATA_KEY.plugin, target.constructor ) || {}; return pluginMetadata; } function getPluginCommandMetadata(target: any) { let commandMetadata: Map = Reflect.getMetadata( METADATA_KEY.cmd, target.constructor ) || new Map(); return commandMetadata; } function getPluginTabCompleterMetadata(target: any) { let tabcompleterMetadata: Map = Reflect.getMetadata( METADATA_KEY.tab, target.constructor ) || new Map(); return tabcompleterMetadata; } function getPluginListenerMetadata(target: any) { let listnerMetadata: interfaces.ListenerMetadata[] = Reflect.getMetadata( METADATA_KEY.listener, target.constructor ) || []; return listnerMetadata; } function getPluginConfigMetadata(target: any) { let configMetadata: Map = Reflect.getMetadata( METADATA_KEY.config, target.constructor ) || new Map(); return configMetadata; } export { getPlugin, getPlugins, getPluginMetadatas, getPluginMetadata, getPluginCommandMetadata, getPluginTabCompleterMetadata, getPluginListenerMetadata, getPluginConfigMetadata }