Path: blob/main/plugin-utils/lib/utils/extractPlugins.ts
1029 views
import { IPluginClass } from '@secret-agent/interfaces/IPlugin';1import IPluginType, { PluginTypes } from '@secret-agent/interfaces/IPluginTypes';23export default function extractPlugins<T = IPluginClass>(obj: any, pluginType?: IPluginType): T[] {4const Plugins: T[] = [];5if (!obj) return Plugins;67if (isPluginMatch(obj, pluginType)) {8Plugins.push(obj);9return Plugins;10}1112const PotentialPlugins: any[] = Array.isArray(obj) ? obj : Object.values(obj);13for (const PotentialPlugin of PotentialPlugins) {14if (!PotentialPlugin) continue;15if (isPluginMatch(PotentialPlugin, pluginType)) {16Plugins.push(PotentialPlugin as unknown as T);17}18}1920return Plugins;21}2223function isPluginMatch(PotentialPlugin: any, pluginType?: IPluginType) {24if (pluginType) {25return PotentialPlugin.type === pluginType;26}27if (PotentialPlugin.type === PluginTypes.ClientPlugin) return true;28if (PotentialPlugin.type === PluginTypes.CorePlugin) return true;29if (PotentialPlugin.type === PluginTypes.BrowserEmulator) return true;30if (PotentialPlugin.type === PluginTypes.HumanEmulator) return true;31return false;32}333435