UNPKG

@stryker-mutator/core

Version:

The extendable JavaScript mutation testing framework

49 lines 1.86 kB
import { tokens, commonTokens, } from '@stryker-mutator/api/plugin'; import { coreTokens } from './index.js'; export class PluginCreator { pluginsByKind; injector; static inject = tokens(coreTokens.pluginsByKind, commonTokens.injector); constructor(pluginsByKind, injector) { this.pluginsByKind = pluginsByKind; this.injector = injector; } create(kind, name) { const plugin = this.findPlugin(kind, name); if (isFactoryPlugin(plugin)) { return this.injector.injectFunction(plugin.factory); } else if (isClassPlugin(plugin)) { return this.injector.injectClass(plugin.injectableClass); } else if (isValuePlugin(plugin)) { return plugin.value; } throw new Error(`Plugin "${kind}:${name}" could not be created, missing "factory", "injectableClass" or "value" property.`); } findPlugin(kind, name) { const plugins = this.pluginsByKind.get(kind); if (plugins) { const pluginFound = plugins.find((plugin) => plugin.name.toLowerCase() === name.toLowerCase()); if (pluginFound) { return pluginFound; } else { throw new Error(`Cannot find ${kind} plugin "${name}". Did you forget to install it? Loaded ${kind} plugins were: ${plugins.map((p) => p.name).join(', ')}`); } } else { throw new Error(`Cannot find ${kind} plugin "${name}". In fact, no ${kind} plugins were loaded. Did you forget to install it?`); } } } function isFactoryPlugin(plugin) { return Boolean(plugin.factory); } function isClassPlugin(plugin) { return Boolean(plugin.injectableClass); } function isValuePlugin(plugin) { return Boolean(plugin.value); } //# sourceMappingURL=plugin-creator.js.map