abxbus 2.4.31 → 2.5.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.
Files changed (56) hide show
  1. package/README.md +74 -51
  2. package/dist/cjs/BaseEvent.d.ts +45 -55
  3. package/dist/cjs/BaseEvent.js +350 -169
  4. package/dist/cjs/BaseEvent.js.map +3 -3
  5. package/dist/cjs/EventBus.d.ts +8 -1
  6. package/dist/cjs/EventBus.js +153 -85
  7. package/dist/cjs/EventBus.js.map +2 -2
  8. package/dist/cjs/EventHandler.d.ts +3 -3
  9. package/dist/cjs/EventHandler.js.map +1 -1
  10. package/dist/cjs/EventResult.js +16 -22
  11. package/dist/cjs/EventResult.js.map +2 -2
  12. package/dist/cjs/LockManager.d.ts +1 -0
  13. package/dist/cjs/LockManager.js +4 -1
  14. package/dist/cjs/LockManager.js.map +2 -2
  15. package/dist/cjs/base_event.d.ts +2 -2
  16. package/dist/cjs/bridge_ipc.d.ts +45 -0
  17. package/dist/cjs/event_handler.d.ts +1 -0
  18. package/dist/cjs/events_suck.js +1 -1
  19. package/dist/cjs/events_suck.js.map +2 -2
  20. package/dist/cjs/index.d.ts +1 -0
  21. package/dist/cjs/index.js.map +2 -2
  22. package/dist/cjs/middleware_otel_tracing.d.ts +49 -0
  23. package/dist/cjs/timing.js +1 -1
  24. package/dist/cjs/timing.js.map +2 -2
  25. package/dist/esm/BaseEvent.js +351 -170
  26. package/dist/esm/BaseEvent.js.map +3 -3
  27. package/dist/esm/EventBus.js +153 -85
  28. package/dist/esm/EventBus.js.map +2 -2
  29. package/dist/esm/EventHandler.js.map +1 -1
  30. package/dist/esm/EventResult.js +16 -22
  31. package/dist/esm/EventResult.js.map +2 -2
  32. package/dist/esm/LockManager.js +4 -1
  33. package/dist/esm/LockManager.js.map +2 -2
  34. package/dist/esm/events_suck.js +1 -1
  35. package/dist/esm/events_suck.js.map +2 -2
  36. package/dist/esm/index.js.map +2 -2
  37. package/dist/esm/timing.js +1 -1
  38. package/dist/esm/timing.js.map +2 -2
  39. package/dist/types/BaseEvent.d.ts +45 -55
  40. package/dist/types/EventBus.d.ts +8 -1
  41. package/dist/types/EventHandler.d.ts +3 -3
  42. package/dist/types/LockManager.d.ts +1 -0
  43. package/dist/types/base_event.d.ts +2 -2
  44. package/dist/types/bridge_ipc.d.ts +45 -0
  45. package/dist/types/event_handler.d.ts +1 -0
  46. package/dist/types/index.d.ts +1 -0
  47. package/dist/types/middleware_otel_tracing.d.ts +49 -0
  48. package/package.json +4 -3
  49. package/src/BaseEvent.ts +452 -219
  50. package/src/EventBus.ts +186 -99
  51. package/src/EventHandler.ts +3 -3
  52. package/src/EventResult.ts +18 -22
  53. package/src/LockManager.ts +5 -1
  54. package/src/events_suck.ts +1 -1
  55. package/src/index.ts +1 -0
  56. package/src/timing.ts +1 -1
@@ -27,7 +27,7 @@ export declare const BaseEventSchema: z.ZodObject<{
27
27
  }>>;
28
28
  event_started_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
29
29
  event_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
- event_results: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
30
+ event_results: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
31
31
  event_concurrency: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
32
32
  "global-serial": "global-serial";
33
33
  "bus-serial": "bus-serial";
@@ -133,7 +133,7 @@ export declare class BaseEvent {
133
133
  }>>;
134
134
  event_started_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
135
135
  event_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
136
- event_results: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
136
+ event_results: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
137
137
  event_concurrency: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
138
138
  "global-serial": "global-serial";
139
139
  "bus-serial": "bus-serial";
@@ -0,0 +1,45 @@
1
+ import { BaseEvent } from './base_event.js';
2
+ import { EventBus } from './event_bus.js';
3
+ import type { EventClass, EventHandlerCallable, UntypedEventHandlerFunction } from './types.js';
4
+ type EndpointScheme = 'unix' | 'http' | 'https';
5
+ type ParsedEndpoint = {
6
+ raw: string;
7
+ scheme: EndpointScheme;
8
+ host?: string;
9
+ port?: number;
10
+ path?: string;
11
+ };
12
+ export type HTTPEventBridgeOptions = {
13
+ send_to?: string | null;
14
+ listen_on?: string | null;
15
+ name?: string;
16
+ };
17
+ export declare class EventBridge {
18
+ readonly send_to: ParsedEndpoint | null;
19
+ readonly listen_on: ParsedEndpoint | null;
20
+ readonly name: string;
21
+ protected readonly inbound_bus: EventBus;
22
+ private start_promise;
23
+ private node_server;
24
+ constructor(send_to?: string | null, listen_on?: string | null, name?: string);
25
+ on<T extends BaseEvent>(event_pattern: EventClass<T>, handler: EventHandlerCallable<T>): void;
26
+ on<T extends BaseEvent>(event_pattern: string | '*', handler: UntypedEventHandlerFunction<T>): void;
27
+ emit<T extends BaseEvent>(event: T): Promise<void>;
28
+ dispatch<T extends BaseEvent>(event: T): Promise<void>;
29
+ start(): Promise<void>;
30
+ close(): Promise<void>;
31
+ private ensureListenerStarted;
32
+ private handleIncomingPayload;
33
+ private sendHttp;
34
+ private sendUnix;
35
+ private startHttpListener;
36
+ private startUnixListener;
37
+ }
38
+ export declare class HTTPEventBridge extends EventBridge {
39
+ constructor(send_to?: string | null, listen_on?: string | null, name?: string);
40
+ constructor(options?: HTTPEventBridgeOptions);
41
+ }
42
+ export declare class SocketEventBridge extends EventBridge {
43
+ constructor(path?: string | null, name?: string);
44
+ }
45
+ export {};
@@ -61,6 +61,7 @@ export declare class EventHandler {
61
61
  eventbus_id: string;
62
62
  });
63
63
  get _handler_async(): EventHandlerCallable;
64
+ static handlerNameFromCallable(handler: EventHandlerCallable): string;
64
65
  static computeHandlerId(params: {
65
66
  eventbus_id: string;
66
67
  handler_name: string;
@@ -1,4 +1,5 @@
1
1
  export { BaseEvent, BaseEventSchema } from './BaseEvent.js';
2
+ export type { EventResultInclude, EventResultOptions, EventWaitOptions, EventWaitPromise } from './BaseEvent.js';
2
3
  export { EventHistory } from './EventHistory.js';
3
4
  export type { EventHistoryFilterOptions, EventHistoryFindOptions, EventHistoryTrimOptions } from './EventHistory.js';
4
5
  export { EventResult } from './EventResult.js';
@@ -0,0 +1,49 @@
1
+ import { trace, type Span, type SpanAttributes, type SpanContext, type TimeInput, type Tracer } from '@opentelemetry/api';
2
+ import type { BaseEvent } from './base_event.js';
3
+ import type { EventBus } from './event_bus.js';
4
+ import type { EventResult } from './event_result.js';
5
+ import type { EventBusMiddleware } from './middlewares.js';
6
+ import type { EventStatus } from './types.js';
7
+ type OpenTelemetryTraceApi = Pick<typeof trace, 'getTracer' | 'setSpan'> & Partial<Pick<typeof trace, 'setSpanContext'>>;
8
+ export type OtelTracingSpanFactoryInput = {
9
+ name: string;
10
+ span_context: SpanContext;
11
+ parent_span_context?: SpanContext;
12
+ attributes: SpanAttributes;
13
+ start_time?: TimeInput;
14
+ };
15
+ export type OtelTracingSpanFactory = (input: OtelTracingSpanFactoryInput) => Span;
16
+ export type OtelTracingSpanProvider = object;
17
+ export type OtelTracingMiddlewareOptions = {
18
+ tracer?: Tracer;
19
+ trace_api?: OpenTelemetryTraceApi;
20
+ span_provider?: OtelTracingSpanProvider;
21
+ span_factory?: OtelTracingSpanFactory;
22
+ otlp_endpoint?: string;
23
+ service_name?: string;
24
+ instrumentation_name?: string;
25
+ root_span_attributes?: SpanAttributes | ((eventbus: EventBus, event: BaseEvent) => SpanAttributes);
26
+ };
27
+ export declare class OtelTracingMiddleware implements EventBusMiddleware {
28
+ private readonly tracer;
29
+ private readonly trace_api;
30
+ private readonly span_factory?;
31
+ private readonly span_provider?;
32
+ private readonly root_span_attributes;
33
+ private readonly event_spans;
34
+ private readonly event_contexts;
35
+ private readonly handler_spans;
36
+ private readonly handler_contexts;
37
+ constructor(options?: OtelTracingMiddlewareOptions);
38
+ onEventChange(eventbus: EventBus, event: BaseEvent, status: EventStatus): void;
39
+ onEventResultChange(eventbus: EventBus, event: BaseEvent, event_result: EventResult, status: EventStatus): void;
40
+ private startEventSpan;
41
+ private completeEventSpan;
42
+ private startHandlerSpan;
43
+ private completeHandlerSpan;
44
+ private parentContextForEvent;
45
+ private completeEventSpanWithFactory;
46
+ private exportEventTreeWithFactory;
47
+ private exportHandlerSpanWithFactory;
48
+ }
49
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abxbus",
3
- "version": "2.4.31",
3
+ "version": "2.5.0",
4
4
  "description": "Event bus library for browsers and ESM Node.js",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -128,8 +128,9 @@
128
128
  "prettier": "prettier --write .",
129
129
  "eslint": "eslint .",
130
130
  "lint": "pnpm run prettier && pnpm run eslint && pnpm run typecheck",
131
- "test": "NODE_OPTIONS='--expose-gc' node --expose-gc --test --import tsx \"tests/**/*.test.ts\"",
132
- "perf": "pnpm run perf:node && pnpm run perf:bun && pnpm run perf:deno && pnpm run perf:browser",
131
+ "test": "NODE_OPTIONS='--expose-gc' node --expose-gc --test --import tsx $(find tests -type f -name '*.test.ts' ! -name 'EventBus_performance.test.ts' | sort)",
132
+ "perf": "pnpm run perf:test && pnpm run perf:node && pnpm run perf:bun && pnpm run perf:deno && pnpm run perf:browser",
133
+ "perf:test": "NODE_OPTIONS='--expose-gc' node --expose-gc --test --import tsx tests/EventBus_performance.test.ts",
133
134
  "debug:node": "NODE_OPTIONS='--expose-gc' node --expose-gc --import tsx",
134
135
  "debug:bun": "bun --expose-gc run",
135
136
  "debug:deno": "deno run --sloppy-imports --v8-flags=--expose-gc",