Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/plugin-utils/lib/utils/extractPlugins.ts
1029 views
1
import { IPluginClass } from '@secret-agent/interfaces/IPlugin';
2
import IPluginType, { PluginTypes } from '@secret-agent/interfaces/IPluginTypes';
3
4
export default function extractPlugins<T = IPluginClass>(obj: any, pluginType?: IPluginType): T[] {
5
const Plugins: T[] = [];
6
if (!obj) return Plugins;
7
8
if (isPluginMatch(obj, pluginType)) {
9
Plugins.push(obj);
10
return Plugins;
11
}
12
13
const PotentialPlugins: any[] = Array.isArray(obj) ? obj : Object.values(obj);
14
for (const PotentialPlugin of PotentialPlugins) {
15
if (!PotentialPlugin) continue;
16
if (isPluginMatch(PotentialPlugin, pluginType)) {
17
Plugins.push(PotentialPlugin as unknown as T);
18
}
19
}
20
21
return Plugins;
22
}
23
24
function isPluginMatch(PotentialPlugin: any, pluginType?: IPluginType) {
25
if (pluginType) {
26
return PotentialPlugin.type === pluginType;
27
}
28
if (PotentialPlugin.type === PluginTypes.ClientPlugin) return true;
29
if (PotentialPlugin.type === PluginTypes.CorePlugin) return true;
30
if (PotentialPlugin.type === PluginTypes.BrowserEmulator) return true;
31
if (PotentialPlugin.type === PluginTypes.HumanEmulator) return true;
32
return false;
33
}
34
35