UNPKG

@stryker-mutator/core

Version:

The extendable JavaScript mutation testing framework

51 lines 1.91 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: ${new Intl.ListFormat('en').format(plugins.map((p) => `"${p.name}"`))}`); } } 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