@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
51 lines • 1.91 kB
JavaScript
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