UNPKG

@cucumber/cucumber

Version:

The official JavaScript implementation of Cucumber.

70 lines 2.17 kB
"use strict"; 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