UNPKG

1.68 kBJavaScriptView Raw
1import { tokens, commonTokens, } from '@stryker-mutator/api/plugin';
2import { coreTokens } from './index.js';
3export class PluginCreator {
4 constructor(pluginsByKind, injector) {
5 this.pluginsByKind = pluginsByKind;
6 this.injector = injector;
7 }
8 create(kind, name) {
9 const plugin = this.findPlugin(kind, name);
10 if (isFactoryPlugin(plugin)) {
11 return this.injector.injectFunction(plugin.factory);
12 }
13 else if (isClassPlugin(plugin)) {
14 return this.injector.injectClass(plugin.injectableClass);
15 }
16 else {
17 throw new Error(`Plugin "${kind}:${name}" could not be created, missing "factory" or "injectableClass" property.`);
18 }
19 }
20 findPlugin(kind, name) {
21 const plugins = this.pluginsByKind.get(kind);
22 if (plugins) {
23 const pluginFound = plugins.find((plugin) => plugin.name.toLowerCase() === name.toLowerCase());
24 if (pluginFound) {
25 return pluginFound;
26 }
27 else {
28 throw new Error(`Cannot find ${kind} plugin "${name}". Did you forget to install it? Loaded ${kind} plugins were: ${plugins.map((p) => p.name).join(', ')}`);
29 }
30 }
31 else {
32 throw new Error(`Cannot find ${kind} plugin "${name}". In fact, no ${kind} plugins were loaded. Did you forget to install it?`);
33 }
34 }
35}
36PluginCreator.inject = tokens(coreTokens.pluginsByKind, commonTokens.injector);
37function isFactoryPlugin(plugin) {
38 return !!plugin.factory;
39}
40function isClassPlugin(plugin) {
41 return !!plugin.injectableClass;
42}
43//# sourceMappingURL=plugin-creator.js.map
\No newline at end of file