1 | import { tokens, commonTokens, } from '@stryker-mutator/api/plugin';
|
2 | import { coreTokens } from './index.js';
|
3 | export 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 | }
|
36 | PluginCreator.inject = tokens(coreTokens.pluginsByKind, commonTokens.injector);
|
37 | function isFactoryPlugin(plugin) {
|
38 | return !!plugin.factory;
|
39 | }
|
40 | function isClassPlugin(plugin) {
|
41 | return !!plugin.injectableClass;
|
42 | }
|
43 |
|
\ | No newline at end of file |