@beignet/core 0.0.1 → 0.0.3
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/CHANGELOG.md +27 -0
- package/README.md +202 -8
- package/dist/application/index.d.ts +93 -9
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +11 -11
- package/dist/application/index.js.map +1 -1
- package/dist/client/client.d.ts +73 -12
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +37 -12
- package/dist/client/client.js.map +1 -1
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/types.d.ts +69 -8
- package/dist/client/types.d.ts.map +1 -1
- package/dist/config/index.d.ts +84 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +36 -0
- package/dist/config/index.js.map +1 -1
- package/dist/contracts/contract-builder.d.ts +49 -22
- package/dist/contracts/contract-builder.d.ts.map +1 -1
- package/dist/contracts/contract-builder.js +48 -21
- package/dist/contracts/contract-builder.js.map +1 -1
- package/dist/contracts/contract-group.d.ts +35 -19
- package/dist/contracts/contract-group.d.ts.map +1 -1
- package/dist/contracts/contract-group.js +35 -19
- package/dist/contracts/contract-group.js.map +1 -1
- package/dist/contracts/contract-like.d.ts +4 -4
- package/dist/contracts/contract-like.d.ts.map +1 -1
- package/dist/contracts/contract-like.js +2 -1
- package/dist/contracts/contract-like.js.map +1 -1
- package/dist/contracts/index.d.ts +28 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +12 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/openapi-meta.d.ts +8 -8
- package/dist/contracts/openapi-meta.d.ts.map +1 -1
- package/dist/contracts/path-template.d.ts +27 -0
- package/dist/contracts/path-template.d.ts.map +1 -1
- package/dist/contracts/path-template.js +6 -0
- package/dist/contracts/path-template.js.map +1 -1
- package/dist/contracts/types.d.ts +104 -10
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js +15 -0
- package/dist/contracts/types.js.map +1 -1
- package/dist/contracts/utils.d.ts +6 -0
- package/dist/contracts/utils.d.ts.map +1 -1
- package/dist/contracts/utils.js +6 -0
- package/dist/contracts/utils.js.map +1 -1
- package/dist/domain/entity.d.ts +22 -11
- package/dist/domain/entity.d.ts.map +1 -1
- package/dist/domain/entity.js +5 -1
- package/dist/domain/entity.js.map +1 -1
- package/dist/domain/events.d.ts +5 -2
- package/dist/domain/events.d.ts.map +1 -1
- package/dist/domain/events.js +4 -1
- package/dist/domain/events.js.map +1 -1
- package/dist/domain/value-object.d.ts +19 -9
- package/dist/domain/value-object.d.ts.map +1 -1
- package/dist/domain/value-object.js +5 -1
- package/dist/domain/value-object.js.map +1 -1
- package/dist/errors/catalog.d.ts +40 -16
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +18 -7
- package/dist/errors/catalog.js.map +1 -1
- package/dist/errors/response.d.ts +16 -4
- package/dist/errors/response.d.ts.map +1 -1
- package/dist/errors/response.js +3 -3
- package/dist/errors/response.js.map +1 -1
- package/dist/errors/validation.d.ts +10 -1
- package/dist/errors/validation.d.ts.map +1 -1
- package/dist/errors/validation.js +3 -0
- package/dist/errors/validation.js.map +1 -1
- package/dist/events/index.d.ts +133 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +30 -0
- package/dist/events/index.js.map +1 -1
- package/dist/idempotency/index.d.ts +355 -0
- package/dist/idempotency/index.d.ts.map +1 -0
- package/dist/idempotency/index.js +360 -0
- package/dist/idempotency/index.js.map +1 -0
- package/dist/jobs/index.d.ts +248 -4
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +183 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/mail/index.d.ts +149 -0
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +30 -0
- package/dist/mail/index.js.map +1 -1
- package/dist/notifications/index.d.ts +369 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +310 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/openapi/index.d.ts +132 -16
- package/dist/openapi/index.d.ts.map +1 -1
- package/dist/openapi/index.js +1 -1
- package/dist/openapi/index.js.map +1 -1
- package/dist/outbox/index.d.ts +474 -0
- package/dist/outbox/index.d.ts.map +1 -0
- package/dist/outbox/index.js +538 -0
- package/dist/outbox/index.js.map +1 -0
- package/dist/pagination/index.d.ts +166 -0
- package/dist/pagination/index.d.ts.map +1 -0
- package/dist/pagination/index.js +96 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/ports/audit.d.ts +271 -0
- package/dist/ports/audit.d.ts.map +1 -1
- package/dist/ports/audit.js +128 -0
- package/dist/ports/audit.js.map +1 -1
- package/dist/ports/auth.d.ts +70 -0
- package/dist/ports/auth.d.ts.map +1 -1
- package/dist/ports/auth.js +30 -0
- package/dist/ports/auth.js.map +1 -1
- package/dist/ports/cache.d.ts +41 -0
- package/dist/ports/cache.d.ts.map +1 -1
- package/dist/ports/cache.js +10 -0
- package/dist/ports/cache.js.map +1 -1
- package/dist/ports/clock.d.ts +38 -0
- package/dist/ports/clock.d.ts.map +1 -1
- package/dist/ports/clock.js +20 -0
- package/dist/ports/clock.js.map +1 -1
- package/dist/ports/id-generator.d.ts +37 -0
- package/dist/ports/id-generator.d.ts.map +1 -1
- package/dist/ports/id-generator.js +22 -0
- package/dist/ports/id-generator.js.map +1 -1
- package/dist/ports/index.d.ts +83 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +41 -5
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/logger.d.ts +56 -0
- package/dist/ports/logger.d.ts.map +1 -1
- package/dist/ports/logger.js +17 -0
- package/dist/ports/logger.js.map +1 -1
- package/dist/ports/policy.d.ts +132 -0
- package/dist/ports/policy.d.ts.map +1 -1
- package/dist/ports/policy.js +45 -0
- package/dist/ports/policy.js.map +1 -1
- package/dist/ports/rate-limit.d.ts +25 -0
- package/dist/ports/rate-limit.d.ts.map +1 -1
- package/dist/ports/rate-limit.js +10 -0
- package/dist/ports/rate-limit.js.map +1 -1
- package/dist/ports/redaction.d.ts +101 -0
- package/dist/ports/redaction.d.ts.map +1 -1
- package/dist/ports/redaction.js +59 -0
- package/dist/ports/redaction.js.map +1 -1
- package/dist/ports/storage.d.ts +100 -0
- package/dist/ports/storage.d.ts.map +1 -1
- package/dist/ports/storage.js +10 -0
- package/dist/ports/storage.js.map +1 -1
- package/dist/ports/testing.d.ts +47 -0
- package/dist/ports/testing.d.ts.map +1 -1
- package/dist/ports/testing.js +23 -0
- package/dist/ports/testing.js.map +1 -1
- package/dist/ports/unit-of-work.d.ts +60 -3
- package/dist/ports/unit-of-work.d.ts.map +1 -1
- package/dist/ports/unit-of-work.js +11 -2
- package/dist/ports/unit-of-work.js.map +1 -1
- package/dist/providers/instrumentation.d.ts +205 -1
- package/dist/providers/instrumentation.d.ts.map +1 -1
- package/dist/providers/instrumentation.js +14 -0
- package/dist/providers/instrumentation.js.map +1 -1
- package/dist/providers/provider.d.ts +14 -1
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/provider.js.map +1 -1
- package/dist/schedules/index.d.ts +246 -0
- package/dist/schedules/index.d.ts.map +1 -1
- package/dist/schedules/index.js +27 -0
- package/dist/schedules/index.js.map +1 -1
- package/dist/server/health.d.ts +14 -5
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/health.js +5 -2
- package/dist/server/health.js.map +1 -1
- package/dist/server/hooks/auth.d.ts +68 -26
- package/dist/server/hooks/auth.d.ts.map +1 -1
- package/dist/server/hooks/auth.js +44 -55
- package/dist/server/hooks/auth.js.map +1 -1
- package/dist/server/hooks/cors.d.ts +27 -0
- package/dist/server/hooks/cors.d.ts.map +1 -1
- package/dist/server/hooks/cors.js +12 -0
- package/dist/server/hooks/cors.js.map +1 -1
- package/dist/server/hooks/errors.d.ts +15 -6
- package/dist/server/hooks/errors.d.ts.map +1 -1
- package/dist/server/hooks/errors.js.map +1 -1
- package/dist/server/hooks/index.d.ts +4 -1
- package/dist/server/hooks/index.d.ts.map +1 -1
- package/dist/server/hooks/index.js +3 -0
- package/dist/server/hooks/index.js.map +1 -1
- package/dist/server/hooks/logging.d.ts +36 -0
- package/dist/server/hooks/logging.d.ts.map +1 -1
- package/dist/server/hooks/logging.js +6 -0
- package/dist/server/hooks/logging.js.map +1 -1
- package/dist/server/hooks/rate-limit.d.ts +33 -0
- package/dist/server/hooks/rate-limit.d.ts.map +1 -1
- package/dist/server/hooks/rate-limit.js +11 -0
- package/dist/server/hooks/rate-limit.js.map +1 -1
- package/dist/server/http.d.ts +222 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +20 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/index.d.ts +19 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/openapi.d.ts +5 -3
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/openapi.js +4 -2
- package/dist/server/openapi.js.map +1 -1
- package/dist/server/providers/loadProviderConfig.d.ts +9 -0
- package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
- package/dist/server/providers/loadProviderConfig.js +9 -0
- package/dist/server/providers/loadProviderConfig.js.map +1 -1
- package/dist/server/server.d.ts +159 -19
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +72 -31
- package/dist/server/server.js.map +1 -1
- package/dist/testing/index.d.ts +171 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +127 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/uploads/client.d.ts +278 -0
- package/dist/uploads/client.d.ts.map +1 -0
- package/dist/uploads/client.js +428 -0
- package/dist/uploads/client.js.map +1 -0
- package/dist/uploads/index.d.ts +361 -0
- package/dist/uploads/index.d.ts.map +1 -0
- package/dist/uploads/index.js +543 -0
- package/dist/uploads/index.js.map +1 -0
- package/package.json +31 -2
- package/src/application/index.ts +85 -22
- package/src/client/client.ts +73 -12
- package/src/client/index.ts +12 -0
- package/src/client/types.ts +70 -9
- package/src/config/index.ts +86 -0
- package/src/contracts/contract-builder.ts +49 -22
- package/src/contracts/contract-group.ts +35 -19
- package/src/contracts/contract-like.ts +4 -4
- package/src/contracts/index.ts +28 -1
- package/src/contracts/openapi-meta.ts +8 -8
- package/src/contracts/path-template.ts +27 -0
- package/src/contracts/types.ts +111 -10
- package/src/contracts/utils.ts +6 -0
- package/src/domain/entity.ts +22 -11
- package/src/domain/events.ts +5 -2
- package/src/domain/value-object.ts +19 -9
- package/src/errors/catalog.ts +40 -16
- package/src/errors/response.ts +16 -4
- package/src/errors/validation.ts +10 -1
- package/src/events/index.ts +134 -0
- package/src/idempotency/index.ts +767 -0
- package/src/jobs/index.ts +437 -5
- package/src/mail/index.ts +149 -0
- package/src/notifications/index.ts +771 -0
- package/src/openapi/index.ts +133 -16
- package/src/outbox/index.ts +1104 -0
- package/src/pagination/index.ts +278 -0
- package/src/ports/audit.ts +271 -0
- package/src/ports/auth.ts +70 -0
- package/src/ports/cache.ts +41 -0
- package/src/ports/clock.ts +38 -0
- package/src/ports/id-generator.ts +37 -0
- package/src/ports/index.ts +106 -11
- package/src/ports/logger.ts +56 -0
- package/src/ports/policy.ts +133 -0
- package/src/ports/rate-limit.ts +25 -0
- package/src/ports/redaction.ts +101 -0
- package/src/ports/storage.ts +100 -0
- package/src/ports/testing.ts +47 -0
- package/src/ports/unit-of-work.ts +60 -3
- package/src/providers/instrumentation.ts +211 -1
- package/src/providers/provider.ts +14 -1
- package/src/schedules/index.ts +247 -0
- package/src/server/health.ts +14 -5
- package/src/server/hooks/auth.ts +105 -120
- package/src/server/hooks/cors.ts +27 -0
- package/src/server/hooks/errors.ts +15 -6
- package/src/server/hooks/index.ts +4 -5
- package/src/server/hooks/logging.ts +36 -0
- package/src/server/hooks/rate-limit.ts +33 -0
- package/src/server/http.ts +249 -1
- package/src/server/index.ts +19 -1
- package/src/server/openapi.ts +5 -3
- package/src/server/providers/loadProviderConfig.ts +9 -0
- package/src/server/server.ts +296 -30
- package/src/testing/index.ts +348 -0
- package/src/uploads/client.ts +861 -0
- package/src/uploads/index.ts +1067 -0
package/src/events/index.ts
CHANGED
|
@@ -1,83 +1,187 @@
|
|
|
1
1
|
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Any Standard Schema compatible validator.
|
|
5
|
+
*/
|
|
3
6
|
export type StandardSchema = StandardSchemaV1<unknown, unknown>;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Value or promise of that value.
|
|
10
|
+
*/
|
|
4
11
|
export type MaybePromise<T> = T | Promise<T>;
|
|
5
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Infer the parsed output type from a Standard Schema.
|
|
15
|
+
*/
|
|
6
16
|
export type InferSchemaOutput<T extends StandardSchemaV1> =
|
|
7
17
|
StandardSchemaV1.InferOutput<T>;
|
|
8
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Minimal event definition shape accepted by event bus helpers.
|
|
21
|
+
*/
|
|
9
22
|
export interface EventPayloadDef<
|
|
10
23
|
Name extends string = string,
|
|
11
24
|
Payload extends StandardSchema = StandardSchema,
|
|
12
25
|
> {
|
|
26
|
+
/**
|
|
27
|
+
* Stable event name.
|
|
28
|
+
*/
|
|
13
29
|
readonly name: Name;
|
|
30
|
+
/**
|
|
31
|
+
* Standard Schema payload validator.
|
|
32
|
+
*/
|
|
14
33
|
readonly payload: Payload;
|
|
34
|
+
/**
|
|
35
|
+
* Optional human-readable description for docs and tooling.
|
|
36
|
+
*/
|
|
15
37
|
readonly description?: string;
|
|
16
38
|
}
|
|
17
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Event definition created by `defineEvent(...)`.
|
|
42
|
+
*/
|
|
18
43
|
export interface EventDef<
|
|
19
44
|
Name extends string = string,
|
|
20
45
|
Payload extends StandardSchema = StandardSchema,
|
|
21
46
|
> extends EventPayloadDef<Name, Payload> {
|
|
47
|
+
/**
|
|
48
|
+
* Discriminator for event definitions.
|
|
49
|
+
*/
|
|
22
50
|
readonly kind: "event";
|
|
23
51
|
}
|
|
24
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Infer the parsed payload type for an event definition.
|
|
55
|
+
*/
|
|
25
56
|
export type InferEventPayload<E extends EventPayloadDef> =
|
|
26
57
|
E["payload"] extends StandardSchemaV1<unknown, infer Output> ? Output : never;
|
|
27
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Options for `defineEvent(...)`.
|
|
61
|
+
*/
|
|
28
62
|
export interface DefineEventOptions<Payload extends StandardSchema> {
|
|
63
|
+
/**
|
|
64
|
+
* Standard Schema payload validator.
|
|
65
|
+
*/
|
|
29
66
|
payload: Payload;
|
|
67
|
+
/**
|
|
68
|
+
* Optional human-readable description for docs and tooling.
|
|
69
|
+
*/
|
|
30
70
|
description?: string;
|
|
31
71
|
}
|
|
32
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Arguments passed to a listener handler.
|
|
75
|
+
*/
|
|
33
76
|
export interface ListenerHandleArgs<E extends EventDef, Ctx> {
|
|
77
|
+
/**
|
|
78
|
+
* Event definition being handled.
|
|
79
|
+
*/
|
|
34
80
|
event: E;
|
|
81
|
+
/**
|
|
82
|
+
* Parsed event payload.
|
|
83
|
+
*/
|
|
35
84
|
payload: InferEventPayload<E>;
|
|
85
|
+
/**
|
|
86
|
+
* Listener context.
|
|
87
|
+
*/
|
|
36
88
|
ctx: Ctx;
|
|
37
89
|
}
|
|
38
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Listener definition created by `defineListener(...)`.
|
|
93
|
+
*/
|
|
39
94
|
export interface ListenerDef<
|
|
40
95
|
E extends EventDef = EventDef,
|
|
41
96
|
Ctx = unknown,
|
|
42
97
|
Name extends string = string,
|
|
43
98
|
> {
|
|
99
|
+
/**
|
|
100
|
+
* Discriminator for listener definitions.
|
|
101
|
+
*/
|
|
44
102
|
readonly kind: "listener";
|
|
103
|
+
/**
|
|
104
|
+
* Stable listener name.
|
|
105
|
+
*/
|
|
45
106
|
readonly name: Name;
|
|
107
|
+
/**
|
|
108
|
+
* Event this listener handles.
|
|
109
|
+
*/
|
|
46
110
|
readonly event: E;
|
|
111
|
+
/**
|
|
112
|
+
* Handle a parsed event payload.
|
|
113
|
+
*/
|
|
47
114
|
handle(args: ListenerHandleArgs<E, Ctx>): MaybePromise<void>;
|
|
48
115
|
}
|
|
49
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Options for `defineListener(...)`.
|
|
119
|
+
*/
|
|
50
120
|
export interface DefineListenerOptions<
|
|
51
121
|
E extends EventDef,
|
|
52
122
|
Ctx,
|
|
53
123
|
Name extends string,
|
|
54
124
|
> {
|
|
125
|
+
/**
|
|
126
|
+
* Stable listener name.
|
|
127
|
+
*/
|
|
55
128
|
name: Name;
|
|
129
|
+
/**
|
|
130
|
+
* Handle a parsed event payload.
|
|
131
|
+
*/
|
|
56
132
|
handle(args: ListenerHandleArgs<E, Ctx>): MaybePromise<void>;
|
|
57
133
|
}
|
|
58
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Event bus shape required by Beignet listener registration helpers.
|
|
137
|
+
*/
|
|
59
138
|
export interface EventBusLike {
|
|
139
|
+
/**
|
|
140
|
+
* Publish an event payload.
|
|
141
|
+
*/
|
|
60
142
|
publish<E extends EventPayloadDef>(
|
|
61
143
|
event: E,
|
|
62
144
|
payload: InferEventPayload<E>,
|
|
63
145
|
): MaybePromise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Subscribe to an event and return an unsubscribe function.
|
|
148
|
+
*/
|
|
64
149
|
subscribe<E extends EventPayloadDef>(
|
|
65
150
|
event: E,
|
|
66
151
|
handler: (payload: InferEventPayload<E>) => MaybePromise<void>,
|
|
67
152
|
): () => void;
|
|
68
153
|
}
|
|
69
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Options for `registerListeners(...)`.
|
|
157
|
+
*/
|
|
70
158
|
export interface RegisterListenersOptions<Ctx> {
|
|
159
|
+
/**
|
|
160
|
+
* Static listener context or factory evaluated for each delivered event.
|
|
161
|
+
*/
|
|
71
162
|
ctx?: Ctx | (() => MaybePromise<Ctx>);
|
|
163
|
+
/**
|
|
164
|
+
* Called when a listener fails. When omitted, listener errors are rethrown to
|
|
165
|
+
* the event bus subscription callback.
|
|
166
|
+
*/
|
|
72
167
|
onError?: (error: unknown, listener: ListenerDef<EventDef, Ctx>) => void;
|
|
73
168
|
}
|
|
74
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Context-bound event helper factory.
|
|
172
|
+
*/
|
|
75
173
|
export interface EventHandlers<Ctx> {
|
|
174
|
+
/**
|
|
175
|
+
* Define a listener with the bound context type.
|
|
176
|
+
*/
|
|
76
177
|
defineListener<E extends EventDef, Name extends string = string>(
|
|
77
178
|
event: E,
|
|
78
179
|
options: DefineListenerOptions<E, Ctx, Name>,
|
|
79
180
|
): ListenerDef<E, Ctx, Name>;
|
|
80
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Register listeners with an event bus.
|
|
184
|
+
*/
|
|
81
185
|
registerListeners(
|
|
82
186
|
eventBus: EventBusLike,
|
|
83
187
|
listeners: readonly ListenerDef<EventDef, Ctx>[],
|
|
@@ -85,7 +189,13 @@ export interface EventHandlers<Ctx> {
|
|
|
85
189
|
): () => void;
|
|
86
190
|
}
|
|
87
191
|
|
|
192
|
+
/**
|
|
193
|
+
* Error thrown when event payload validation fails.
|
|
194
|
+
*/
|
|
88
195
|
export class EventValidationError extends Error {
|
|
196
|
+
/**
|
|
197
|
+
* Raw Standard Schema validation issues.
|
|
198
|
+
*/
|
|
89
199
|
readonly issues: readonly StandardSchemaV1.Issue[];
|
|
90
200
|
|
|
91
201
|
constructor(args: {
|
|
@@ -152,6 +262,12 @@ async function resolveCtx<Ctx>(
|
|
|
152
262
|
return ctx as Ctx;
|
|
153
263
|
}
|
|
154
264
|
|
|
265
|
+
/**
|
|
266
|
+
* Define a typed event.
|
|
267
|
+
*
|
|
268
|
+
* Event payloads are validated before publishing through `publishEvent(...)`
|
|
269
|
+
* and before registered listeners run.
|
|
270
|
+
*/
|
|
155
271
|
export function defineEvent<
|
|
156
272
|
Name extends string,
|
|
157
273
|
Payload extends StandardSchema,
|
|
@@ -164,6 +280,9 @@ export function defineEvent<
|
|
|
164
280
|
};
|
|
165
281
|
}
|
|
166
282
|
|
|
283
|
+
/**
|
|
284
|
+
* Define a listener for one event.
|
|
285
|
+
*/
|
|
167
286
|
export function defineListener<
|
|
168
287
|
E extends EventDef,
|
|
169
288
|
Ctx = unknown,
|
|
@@ -180,6 +299,9 @@ export function defineListener<
|
|
|
180
299
|
};
|
|
181
300
|
}
|
|
182
301
|
|
|
302
|
+
/**
|
|
303
|
+
* Validate and parse an event payload with the event's Standard Schema.
|
|
304
|
+
*/
|
|
183
305
|
export async function parseEventPayload<E extends EventPayloadDef>(
|
|
184
306
|
event: E,
|
|
185
307
|
payload: unknown,
|
|
@@ -189,6 +311,9 @@ export async function parseEventPayload<E extends EventPayloadDef>(
|
|
|
189
311
|
})) as InferEventPayload<E>;
|
|
190
312
|
}
|
|
191
313
|
|
|
314
|
+
/**
|
|
315
|
+
* Validate an event payload and publish it through an event bus.
|
|
316
|
+
*/
|
|
192
317
|
export async function publishEvent<E extends EventPayloadDef>(
|
|
193
318
|
eventBus: EventBusLike,
|
|
194
319
|
event: E,
|
|
@@ -198,6 +323,12 @@ export async function publishEvent<E extends EventPayloadDef>(
|
|
|
198
323
|
await eventBus.publish(event, parsed);
|
|
199
324
|
}
|
|
200
325
|
|
|
326
|
+
/**
|
|
327
|
+
* Register listeners against an event bus and return an unsubscribe function.
|
|
328
|
+
*
|
|
329
|
+
* Payloads are validated before listener handlers run. Listener context is
|
|
330
|
+
* resolved per delivery when `options.ctx` is a factory.
|
|
331
|
+
*/
|
|
201
332
|
export function registerListeners<Ctx>(
|
|
202
333
|
eventBus: EventBusLike,
|
|
203
334
|
listeners: readonly ListenerDef<EventDef, Ctx>[],
|
|
@@ -226,6 +357,9 @@ export function registerListeners<Ctx>(
|
|
|
226
357
|
};
|
|
227
358
|
}
|
|
228
359
|
|
|
360
|
+
/**
|
|
361
|
+
* Create event helper methods bound to an application context type.
|
|
362
|
+
*/
|
|
229
363
|
export function createEventHandlers<Ctx>(): EventHandlers<Ctx> {
|
|
230
364
|
return {
|
|
231
365
|
defineListener<E extends EventDef, Name extends string = string>(
|