import { IPluginClass } from '@secret-agent/interfaces/IPlugin';
import IPluginType from '@secret-agent/interfaces/IPluginTypes';
import extractPlugins from './extractPlugins';
import filterPlugins from './filterPlugins';
const byPath: { [path: string]: any[] } = {};
export default function requirePlugins<T = IPluginClass>(
path: string,
pluginType?: IPluginType,
): T[] {
if (!byPath[path]) {
byPath[path] = [];
byPath[path] = extractPlugins<T>(require(path));
}
return (pluginType ? filterPlugins(byPath[path], pluginType) : byPath[path]) as T[];
}