@cucumber/cucumber
Version:
The official JavaScript implementation of Cucumber.
70 lines • 2.17 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.PluginManager = void 0;
class PluginManager {
environment;
handlers = {
message: [],
'paths:resolve': [],
'pickles:filter': [],
'pickles:order': [],
};
cleanupFns = [];
constructor(environment) {
this.environment = environment;
}
async register(event, handler) {
this.handlers[event]?.push(handler);
}
async initFormatter(plugin, options, stream, write, directory) {
const cleanupFn = await plugin.formatter({
on: (key, handler) => this.register(key, handler),
options: plugin.optionsKey
? (options[plugin.optionsKey] ?? {})
: options,
logger: this.environment.logger,
stream,
write,
directory,
});
if (typeof cleanupFn === 'function') {
this.cleanupFns.push(cleanupFn);
}
}
async initCoordinator(operation, plugin, options) {
const cleanupFn = await plugin.coordinator({
operation,
on: this.register.bind(this),
options,
logger: this.environment.logger,
environment: {
cwd: this.environment.cwd,
stderr: this.environment.stderr,
env: { ...this.environment.env },
},
});
if (typeof cleanupFn === 'function') {
this.cleanupFns.push(cleanupFn);
}
}
emit(event, value) {
this.handlers[event].forEach((handler) => handler(value));
}
async transform(event, value) {
let transformed = value;
for (const handler of this.handlers[event]) {
const returned = await handler(transformed);
if (typeof returned !== 'undefined') {
transformed = returned;
}
}
return transformed;
}
async cleanup() {
for (const cleanupFn of this.cleanupFns) {
await cleanupFn();
}
}
}
exports.PluginManager = PluginManager;
//# sourceMappingURL=plugin_manager.js.map
;