@autometa/events 0.3.2 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -2
- package/dist/bus.d.ts +10 -0
- package/dist/dispatcher.d.ts +31 -0
- package/dist/emitter.d.ts +97 -0
- package/dist/hooks.d.ts +41 -0
- package/dist/index.cjs +424 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +7 -886
- package/dist/index.js +392 -308
- package/dist/index.js.map +1 -1
- package/dist/listener.d.ts +26 -0
- package/dist/status.d.ts +14 -0
- package/dist/types.d.ts +102 -0
- package/package.json +27 -39
- package/.eslintignore +0 -2
- package/.eslintrc.cjs +0 -4
- package/.turbo/turbo-build.log +0 -21
- package/.turbo/turbo-build:dts.log +0 -31
- package/.turbo/turbo-build:dts:tsc.log +0 -11
- package/.turbo/turbo-clean.log +0 -4
- package/.turbo/turbo-lint$colon$fix.log +0 -4
- package/.turbo/turbo-lint.log +0 -4
- package/.turbo/turbo-lint:fix.log +0 -4
- package/.turbo/turbo-prettify.log +0 -0
- package/.turbo/turbo-test.log +0 -12
- package/CHANGELOG.md +0 -342
- package/dist/esm/index.js +0 -265
- package/dist/esm/index.js.map +0 -1
- package/dist/index.d.cts +0 -886
- package/tsup.config.ts +0 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dispatcher.ts","../src/emitter.ts","../src/bus.ts","../src/hooks.ts","../src/listener.ts","../src/status.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Event dispatcher for Autometa lifecycle events.\n */\nimport {\n createContainer,\n createToken,\n Scope,\n type IContainer,\n} from \"@autometa/injection\";\nimport type { EventEnvelope, EventSubscriber, TestEvent } from \"./types.js\";\n\nexport interface EventDispatcherOptions {\n /**\n * Optional container to use for resolving subscribers. If omitted a\n * standalone container is created per dispatcher instance.\n */\n container?: IContainer;\n}\n\nexport const EventDispatcherToken = createToken<EventDispatcher>(\n \"@autometa/events/dispatcher\"\n);\n\nexport class EventDispatcher {\n private readonly subscribers = new Map<string, Set<EventSubscriber>>();\n private sequence = 0;\n\n constructor(private readonly container: IContainer = createContainer()) {}\n\n static create(options: EventDispatcherOptions = {}): EventDispatcher {\n const container = options.container ?? createContainer();\n if (!container.isRegistered(EventDispatcherToken)) {\n container.registerValue(\n EventDispatcherToken,\n new EventDispatcher(container),\n { scope: Scope.SINGLETON }\n );\n }\n return container.resolve(EventDispatcherToken);\n }\n\n /**\n * Subscribe to events of a particular type.\n */\n subscribe<T extends TestEvent>(\n type: T[\"type\"],\n subscriber: EventSubscriber<T>\n ): () => void {\n const set = this.subscribers.get(type) ?? new Set();\n set.add(subscriber as EventSubscriber);\n this.subscribers.set(type, set);\n\n return () => {\n set.delete(subscriber as EventSubscriber);\n if (set.size === 0) {\n this.subscribers.delete(type);\n }\n };\n }\n\n /**\n * Publish an event to all registered subscribers. Subscribers are awaited in\n * series to preserve ordering guarantees; callers can fork when concurrency is\n * desired.\n */\n async dispatch<T extends TestEvent>(event: T): Promise<void> {\n const envelope: EventEnvelope<T> = {\n sequence: ++this.sequence,\n event,\n };\n\n const listeners = this.subscribers.get(event.type);\n if (!listeners || listeners.size === 0) {\n return;\n }\n\n for (const listener of listeners) {\n await listener(envelope);\n }\n }\n\n clear(): void {\n this.subscribers.clear();\n this.sequence = 0;\n }\n}\n","import type {\n SimpleExampleGroup,\n SimplePickle,\n SimplePickleFeatureRef,\n SimplePickleRuleRef,\n SimplePickleScenarioRef,\n SimplePickleStep,\n SimpleScenario,\n SimpleScenarioOutline,\n} from \"@autometa/gherkin\";\nimport { EventDispatcher } from \"./dispatcher.js\";\nimport type { HookDescriptor } from \"./hooks.js\";\nimport type {\n BackgroundLifecycleEvent,\n ErrorEvent,\n ExampleLifecycleEvent,\n FeatureLifecycleEvent,\n HookEvent,\n RuleLifecycleEvent,\n ScenarioLifecycleEvent,\n ScenarioOutlineLifecycleEvent,\n StatusEvent,\n StepEvent,\n} from \"./types.js\";\nimport type { TestStatus } from \"./status.js\";\n\nconst defaultIdFactory = (): string => {\n const crypto = (\n globalThis as typeof globalThis & {\n crypto?: { randomUUID?: () => string };\n }\n ).crypto;\n if (crypto && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n};\n\nexport interface EventEmitterOptions {\n createId?: () => string;\n now?: () => number;\n}\n\ninterface BaseEmitOptions {\n id?: string;\n timestamp?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface FeatureLifecycleOptions extends BaseEmitOptions {\n feature: SimplePickleFeatureRef;\n}\n\nexport interface RuleLifecycleOptions extends FeatureLifecycleOptions {\n rule: SimplePickleRuleRef;\n}\n\nexport interface ScenarioLifecycleOptions extends BaseEmitOptions {\n feature: SimplePickleFeatureRef;\n scenario: SimplePickleScenarioRef;\n pickle: SimplePickle;\n rule?: SimplePickleRuleRef;\n}\n\nexport interface ScenarioOutlineLifecycleOptions extends BaseEmitOptions {\n feature: SimplePickleFeatureRef;\n scenarioOutline: SimpleScenarioOutline;\n rule?: SimplePickleRuleRef;\n}\n\nexport interface ExampleLifecycleOptions extends BaseEmitOptions {\n feature: SimplePickleFeatureRef;\n scenarioOutline: SimpleScenarioOutline;\n example: SimpleExampleGroup;\n pickle: SimplePickle;\n rule?: SimplePickleRuleRef;\n}\n\nexport interface BackgroundLifecycleOptions extends BaseEmitOptions {\n feature: SimplePickleFeatureRef;\n background: SimpleScenario;\n pickle: SimplePickle;\n rule?: SimplePickleRuleRef;\n}\n\nexport interface StepLifecycleOptions extends ScenarioLifecycleOptions {\n step: SimplePickleStep;\n}\n\nexport interface HookEmitOptions extends BaseEmitOptions {\n hook: HookDescriptor;\n}\n\nexport interface StatusEmitOptions extends BaseEmitOptions {\n status: TestStatus;\n previousStatus?: TestStatus;\n feature?: SimplePickleFeatureRef;\n rule?: SimplePickleRuleRef;\n scenario?: SimplePickleScenarioRef;\n scenarioOutline?: SimpleScenarioOutline;\n example?: SimpleExampleGroup;\n pickle?: SimplePickle;\n}\n\nexport interface ErrorEmitOptions extends BaseEmitOptions {\n error: unknown;\n phase: ErrorEvent[\"phase\"];\n feature?: SimplePickleFeatureRef;\n rule?: SimplePickleRuleRef;\n scenario?: SimplePickleScenarioRef;\n scenarioOutline?: SimpleScenarioOutline;\n example?: SimpleExampleGroup;\n background?: SimpleScenario;\n pickle?: SimplePickle;\n}\n\nexport class EventEmitter {\n private readonly createId: () => string;\n private readonly now: () => number;\n\n constructor(\n private readonly dispatcher: EventDispatcher,\n options: EventEmitterOptions = {}\n ) {\n this.createId = options.createId ?? defaultIdFactory;\n this.now = options.now ?? Date.now;\n }\n\n async featureStarted(options: FeatureLifecycleOptions): Promise<void> {\n const event: FeatureLifecycleEvent = {\n type: \"feature.started\",\n feature: options.feature,\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async featureCompleted(options: FeatureLifecycleOptions): Promise<void> {\n const event: FeatureLifecycleEvent = {\n type: \"feature.completed\",\n feature: options.feature,\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async ruleStarted(options: RuleLifecycleOptions): Promise<void> {\n const event: RuleLifecycleEvent = {\n type: \"rule.started\",\n feature: options.feature,\n rule: options.rule,\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async ruleCompleted(options: RuleLifecycleOptions): Promise<void> {\n const event: RuleLifecycleEvent = {\n type: \"rule.completed\",\n feature: options.feature,\n rule: options.rule,\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async scenarioStarted(options: ScenarioLifecycleOptions): Promise<void> {\n const event: ScenarioLifecycleEvent = {\n type: \"scenario.started\",\n feature: options.feature,\n scenario: options.scenario,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async scenarioCompleted(options: ScenarioLifecycleOptions): Promise<void> {\n const event: ScenarioLifecycleEvent = {\n type: \"scenario.completed\",\n feature: options.feature,\n scenario: options.scenario,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async scenarioOutlineStarted(\n options: ScenarioOutlineLifecycleOptions\n ): Promise<void> {\n const event: ScenarioOutlineLifecycleEvent = {\n type: \"scenarioOutline.started\",\n feature: options.feature,\n scenarioOutline: options.scenarioOutline,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async scenarioOutlineCompleted(\n options: ScenarioOutlineLifecycleOptions\n ): Promise<void> {\n const event: ScenarioOutlineLifecycleEvent = {\n type: \"scenarioOutline.completed\",\n feature: options.feature,\n scenarioOutline: options.scenarioOutline,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async exampleStarted(options: ExampleLifecycleOptions): Promise<void> {\n const event: ExampleLifecycleEvent = {\n type: \"example.started\",\n feature: options.feature,\n scenarioOutline: options.scenarioOutline,\n example: options.example,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async exampleCompleted(options: ExampleLifecycleOptions): Promise<void> {\n const event: ExampleLifecycleEvent = {\n type: \"example.completed\",\n feature: options.feature,\n scenarioOutline: options.scenarioOutline,\n example: options.example,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async backgroundStarted(options: BackgroundLifecycleOptions): Promise<void> {\n const event: BackgroundLifecycleEvent = {\n type: \"background.started\",\n feature: options.feature,\n background: options.background,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async backgroundCompleted(\n options: BackgroundLifecycleOptions\n ): Promise<void> {\n const event: BackgroundLifecycleEvent = {\n type: \"background.completed\",\n feature: options.feature,\n background: options.background,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async stepStarted(options: StepLifecycleOptions): Promise<void> {\n const event: StepEvent = {\n type: \"step.started\",\n feature: options.feature,\n scenario: options.scenario,\n step: options.step,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async stepCompleted(options: StepLifecycleOptions): Promise<void> {\n const event: StepEvent = {\n type: \"step.completed\",\n feature: options.feature,\n scenario: options.scenario,\n step: options.step,\n pickle: options.pickle,\n ...(options.rule ? { rule: options.rule } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async hookStarted(options: HookEmitOptions): Promise<void> {\n const event: HookEvent = {\n type: \"hook.started\",\n hook: options.hook,\n ...(options.hook.feature ? { feature: options.hook.feature } : {}),\n ...(options.hook.rule ? { rule: options.hook.rule } : {}),\n ...(options.hook.scenario ? { scenario: options.hook.scenario } : {}),\n ...(options.hook.scenarioOutline\n ? { scenarioOutline: options.hook.scenarioOutline }\n : {}),\n ...(options.hook.example ? { example: options.hook.example } : {}),\n ...(options.hook.background ? { background: options.hook.background } : {}),\n ...(options.hook.step ? { step: options.hook.step } : {}),\n ...(options.hook.pickle ? { pickle: options.hook.pickle } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async hookCompleted(options: HookEmitOptions): Promise<void> {\n const event: HookEvent = {\n type: \"hook.completed\",\n hook: options.hook,\n ...(options.hook.feature ? { feature: options.hook.feature } : {}),\n ...(options.hook.rule ? { rule: options.hook.rule } : {}),\n ...(options.hook.scenario ? { scenario: options.hook.scenario } : {}),\n ...(options.hook.scenarioOutline\n ? { scenarioOutline: options.hook.scenarioOutline }\n : {}),\n ...(options.hook.example ? { example: options.hook.example } : {}),\n ...(options.hook.background ? { background: options.hook.background } : {}),\n ...(options.hook.step ? { step: options.hook.step } : {}),\n ...(options.hook.pickle ? { pickle: options.hook.pickle } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async statusChanged(options: StatusEmitOptions): Promise<void> {\n const event: StatusEvent = {\n type: \"status.changed\",\n status: options.status,\n ...(options.previousStatus ? { previousStatus: options.previousStatus } : {}),\n ...(options.feature ? { feature: options.feature } : {}),\n ...(options.rule ? { rule: options.rule } : {}),\n ...(options.scenario ? { scenario: options.scenario } : {}),\n ...(options.scenarioOutline\n ? { scenarioOutline: options.scenarioOutline }\n : {}),\n ...(options.example ? { example: options.example } : {}),\n ...(options.pickle ? { pickle: options.pickle } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n async errorRaised(options: ErrorEmitOptions): Promise<void> {\n const event: ErrorEvent = {\n type: \"error\",\n error: options.error,\n phase: options.phase,\n ...(options.feature ? { feature: options.feature } : {}),\n ...(options.rule ? { rule: options.rule } : {}),\n ...(options.scenario ? { scenario: options.scenario } : {}),\n ...(options.scenarioOutline\n ? { scenarioOutline: options.scenarioOutline }\n : {}),\n ...(options.example ? { example: options.example } : {}),\n ...(options.background ? { background: options.background } : {}),\n ...(options.pickle ? { pickle: options.pickle } : {}),\n ...this.base(options),\n };\n await this.dispatcher.dispatch(event);\n }\n\n private base(options: BaseEmitOptions): {\n id: string;\n timestamp: number;\n metadata?: Record<string, unknown>;\n } {\n const base = {\n id: options.id ?? this.createId(),\n timestamp: options.timestamp ?? this.now(),\n } as {\n id: string;\n timestamp: number;\n metadata?: Record<string, unknown>;\n };\n\n if (options.metadata !== undefined) {\n base.metadata = options.metadata;\n }\n\n return base;\n }\n}\n","import { EventDispatcher } from \"./dispatcher.js\";\nimport { EventEmitter } from \"./emitter.js\";\n\nexport interface EventBus {\n readonly dispatcher: EventDispatcher;\n readonly emitter: EventEmitter;\n}\n\nconst BUS_KEY = Symbol.for(\"@autometa/events/bus\");\n\nexport function getEventBus(): EventBus {\n const store = globalThis as unknown as Record<symbol, EventBus | undefined>;\n const existing = store[BUS_KEY];\n if (existing) {\n return existing;\n }\n\n const dispatcher = EventDispatcher.create();\n const emitter = new EventEmitter(dispatcher);\n const bus = { dispatcher, emitter } satisfies EventBus;\n store[BUS_KEY] = bus;\n return bus;\n}\n\nexport function getEventDispatcher(): EventDispatcher {\n return getEventBus().dispatcher;\n}\n\nexport function getEventEmitter(): EventEmitter {\n return getEventBus().emitter;\n}\n\nexport function resetEventBus(): void {\n const store = globalThis as unknown as Record<symbol, EventBus | undefined>;\n const existing = store[BUS_KEY];\n if (existing) {\n existing.dispatcher.clear();\n }\n // Avoid relying on `delete` semantics on globalThis in all runtimes/test environments.\n store[BUS_KEY] = undefined;\n}\n","import {\n SimplePickle,\n SimplePickleFeatureRef,\n SimplePickleRuleRef,\n SimplePickleScenarioRef,\n SimplePickleStep,\n SimpleScenarioOutline,\n SimpleExampleGroup,\n SimpleScenario,\n} from \"@autometa/gherkin\";\n\n/** Canonical hook kinds recognised by the Autometa runner. */\nexport const HookKind = {\n BEFORE_FEATURE: \"beforeFeature\",\n AFTER_FEATURE: \"afterFeature\",\n BEFORE_RULE: \"beforeRule\",\n AFTER_RULE: \"afterRule\",\n BEFORE_SCENARIO: \"beforeScenario\",\n AFTER_SCENARIO: \"afterScenario\",\n BEFORE_SCENARIO_OUTLINE: \"beforeScenarioOutline\",\n AFTER_SCENARIO_OUTLINE: \"afterScenarioOutline\",\n BEFORE_EXAMPLE: \"beforeExample\",\n AFTER_EXAMPLE: \"afterExample\",\n BEFORE_BACKGROUND: \"beforeBackground\",\n AFTER_BACKGROUND: \"afterBackground\",\n BEFORE_STEP: \"beforeStep\",\n AFTER_STEP: \"afterStep\",\n SETUP: \"setup\",\n TEARDOWN: \"teardown\",\n CUSTOM: \"custom\",\n} as const;\n\nexport type HookKind = (typeof HookKind)[keyof typeof HookKind];\n\nexport interface HookDescriptor {\n /** Categorises when the hook is executed. */\n kind: HookKind;\n /** Optional human friendly name for diagnostics. */\n name?: string;\n /** Path or identifier that produced the hook for richer reporting. */\n source?: string;\n /** Stage-specific context for the hook, when available. */\n feature?: SimplePickleFeatureRef;\n rule?: SimplePickleRuleRef;\n scenario?: SimplePickleScenarioRef;\n scenarioOutline?: SimpleScenarioOutline;\n example?: SimpleExampleGroup;\n background?: SimpleScenario;\n step?: SimplePickleStep;\n pickle?: SimplePickle;\n /** Arbitrary metadata emitted by the hook author. */\n metadata?: Record<string, unknown>;\n}\n","import type { EventDispatcher } from \"./dispatcher.js\";\nimport { getEventDispatcher } from \"./bus.js\";\nimport type {\n BackgroundLifecycleEvent,\n ErrorEvent,\n EventEnvelope,\n ExampleLifecycleEvent,\n FeatureLifecycleEvent,\n HookEvent,\n RuleLifecycleEvent,\n ScenarioLifecycleEvent,\n ScenarioOutlineLifecycleEvent,\n StatusEvent,\n StepEvent,\n TestEvent,\n} from \"./types.js\";\n\nexport interface TestListener {\n onEvent?(envelope: EventEnvelope<TestEvent>): void | Promise<void>;\n onFeatureStarted?(envelope: EventEnvelope<FeatureLifecycleEvent>): void | Promise<void>;\n onFeatureCompleted?(envelope: EventEnvelope<FeatureLifecycleEvent>): void | Promise<void>;\n onRuleStarted?(envelope: EventEnvelope<RuleLifecycleEvent>): void | Promise<void>;\n onRuleCompleted?(envelope: EventEnvelope<RuleLifecycleEvent>): void | Promise<void>;\n onScenarioStarted?(envelope: EventEnvelope<ScenarioLifecycleEvent>): void | Promise<void>;\n onScenarioCompleted?(envelope: EventEnvelope<ScenarioLifecycleEvent>): void | Promise<void>;\n onScenarioOutlineStarted?(\n envelope: EventEnvelope<ScenarioOutlineLifecycleEvent>\n ): void | Promise<void>;\n onScenarioOutlineCompleted?(\n envelope: EventEnvelope<ScenarioOutlineLifecycleEvent>\n ): void | Promise<void>;\n onExampleStarted?(envelope: EventEnvelope<ExampleLifecycleEvent>): void | Promise<void>;\n onExampleCompleted?(envelope: EventEnvelope<ExampleLifecycleEvent>): void | Promise<void>;\n onBackgroundStarted?(envelope: EventEnvelope<BackgroundLifecycleEvent>): void | Promise<void>;\n onBackgroundCompleted?(envelope: EventEnvelope<BackgroundLifecycleEvent>): void | Promise<void>;\n onStepStarted?(envelope: EventEnvelope<StepEvent>): void | Promise<void>;\n onStepCompleted?(envelope: EventEnvelope<StepEvent>): void | Promise<void>;\n onHookStarted?(envelope: EventEnvelope<HookEvent>): void | Promise<void>;\n onHookCompleted?(envelope: EventEnvelope<HookEvent>): void | Promise<void>;\n onStatusChanged?(envelope: EventEnvelope<StatusEvent>): void | Promise<void>;\n onError?(envelope: EventEnvelope<ErrorEvent>): void | Promise<void>;\n}\n\nexport function registerTestListener(\n listener: TestListener,\n options: { dispatcher?: EventDispatcher } = {}\n): () => void {\n const dispatcher = options.dispatcher ?? getEventDispatcher();\n const unsubscribers: Array<() => void> = [];\n\n const subscribe = <T extends TestEvent>(\n type: T[\"type\"],\n handler?: (envelope: EventEnvelope<T>) => void | Promise<void>\n ) => {\n if (!handler && !listener.onEvent) {\n return;\n }\n\n unsubscribers.push(\n dispatcher.subscribe(type, async (envelope) => {\n if (listener.onEvent) {\n await listener.onEvent(envelope as EventEnvelope<TestEvent>);\n }\n if (handler) {\n await handler(envelope);\n }\n })\n );\n };\n\n subscribe<FeatureLifecycleEvent>(\"feature.started\", listener.onFeatureStarted);\n subscribe<FeatureLifecycleEvent>(\"feature.completed\", listener.onFeatureCompleted);\n subscribe<RuleLifecycleEvent>(\"rule.started\", listener.onRuleStarted);\n subscribe<RuleLifecycleEvent>(\"rule.completed\", listener.onRuleCompleted);\n subscribe<ScenarioLifecycleEvent>(\"scenario.started\", listener.onScenarioStarted);\n subscribe<ScenarioLifecycleEvent>(\"scenario.completed\", listener.onScenarioCompleted);\n subscribe<ScenarioOutlineLifecycleEvent>(\n \"scenarioOutline.started\",\n listener.onScenarioOutlineStarted\n );\n subscribe<ScenarioOutlineLifecycleEvent>(\n \"scenarioOutline.completed\",\n listener.onScenarioOutlineCompleted\n );\n subscribe<ExampleLifecycleEvent>(\"example.started\", listener.onExampleStarted);\n subscribe<ExampleLifecycleEvent>(\"example.completed\", listener.onExampleCompleted);\n subscribe<BackgroundLifecycleEvent>(\"background.started\", listener.onBackgroundStarted);\n subscribe<BackgroundLifecycleEvent>(\"background.completed\", listener.onBackgroundCompleted);\n subscribe<StepEvent>(\"step.started\", listener.onStepStarted);\n subscribe<StepEvent>(\"step.completed\", listener.onStepCompleted);\n subscribe<HookEvent>(\"hook.started\", listener.onHookStarted);\n subscribe<HookEvent>(\"hook.completed\", listener.onHookCompleted);\n subscribe<StatusEvent>(\"status.changed\", listener.onStatusChanged);\n subscribe<ErrorEvent>(\"error\", listener.onError);\n\n return () => {\n for (const unsubscribe of unsubscribers) {\n unsubscribe();\n }\n };\n}\n","/**\n * Standardised execution statuses for Autometa test lifecycle events.\n */\nexport const TestStatus = {\n IDLE: \"idle\",\n RUNNING: \"running\",\n PASSED: \"passed\",\n FAILED: \"failed\",\n SKIPPED: \"skipped\",\n BROKEN: \"broken\",\n} as const;\n\nexport type TestStatus = (typeof TestStatus)[keyof typeof TestStatus];\n\n/** True when the status represents the end of a lifecycle transition. */\nexport function isTerminalStatus(status: TestStatus): boolean {\n return (\n status === TestStatus.PASSED ||\n status === TestStatus.FAILED ||\n status === TestStatus.SKIPPED ||\n status === TestStatus.BROKEN\n );\n}\n"]}
|