ai-props 2.3.0 → 2.4.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/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +9 -0
- package/dist/ai.d.ts +125 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +199 -0
- package/dist/ai.js.map +1 -0
- package/dist/cache.d.ts +66 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +183 -0
- package/dist/cache.js.map +1 -0
- package/dist/cascade.d.ts +329 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +522 -0
- package/dist/cascade.js.map +1 -0
- package/dist/client.d.ts +233 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +191 -0
- package/dist/client.js.map +1 -0
- package/dist/durable-cascade.d.ts +280 -0
- package/dist/durable-cascade.d.ts.map +1 -0
- package/dist/durable-cascade.js +469 -0
- package/dist/durable-cascade.js.map +1 -0
- package/dist/event-bridge.d.ts +257 -0
- package/dist/event-bridge.d.ts.map +1 -0
- package/dist/event-bridge.js +317 -0
- package/dist/event-bridge.js.map +1 -0
- package/dist/generate.d.ts +69 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +227 -0
- package/dist/generate.js.map +1 -0
- package/dist/hoc.d.ts +164 -0
- package/dist/hoc.d.ts.map +1 -0
- package/dist/hoc.js +236 -0
- package/dist/hoc.js.map +1 -0
- package/dist/hono-jsx.d.ts +208 -0
- package/dist/hono-jsx.d.ts.map +1 -0
- package/dist/hono-jsx.js +459 -0
- package/dist/hono-jsx.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/mdx-types.d.ts +152 -0
- package/dist/mdx-types.d.ts.map +1 -0
- package/dist/mdx-types.js +9 -0
- package/dist/mdx-types.js.map +1 -0
- package/dist/mdx-utils.d.ts +106 -0
- package/dist/mdx-utils.d.ts.map +1 -0
- package/dist/mdx-utils.js +384 -0
- package/dist/mdx-utils.js.map +1 -0
- package/dist/mdx.d.ts +230 -0
- package/dist/mdx.d.ts.map +1 -0
- package/dist/mdx.js +820 -0
- package/dist/mdx.js.map +1 -0
- package/dist/rpc.d.ts +313 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +359 -0
- package/dist/rpc.js.map +1 -0
- package/dist/streaming.d.ts +199 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +402 -0
- package/dist/streaming.js.map +1 -0
- package/dist/types.d.ts +152 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +58 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +251 -0
- package/dist/validate.js.map +1 -0
- package/dist/worker.d.ts +270 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +405 -0
- package/dist/worker.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventBridge - Event system with Cloudflare Queues support
|
|
3
|
+
*
|
|
4
|
+
* Provides both sync event handling and Queue-based async event delivery.
|
|
5
|
+
* Supports dead letter queues, event validation, and retry strategies.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Create an EventBridge with a queue
|
|
10
|
+
* const bridge = new EventBridge(env.MY_QUEUE)
|
|
11
|
+
*
|
|
12
|
+
* // Register event handlers
|
|
13
|
+
* bridge.on('user.created', async (data) => {
|
|
14
|
+
* console.log('New user:', data.id)
|
|
15
|
+
* })
|
|
16
|
+
*
|
|
17
|
+
* // Emit events (sent to queue for reliable delivery)
|
|
18
|
+
* await bridge.emit('user.created', { id: '123', name: 'John' })
|
|
19
|
+
*
|
|
20
|
+
* // In worker's queue handler:
|
|
21
|
+
* export default {
|
|
22
|
+
* async queue(batch, env) {
|
|
23
|
+
* const handler = createQueueHandler(bridge)
|
|
24
|
+
* await handler.queue(batch, env)
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @packageDocumentation
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Queued event structure
|
|
33
|
+
*/
|
|
34
|
+
export interface QueuedEvent<T = unknown> {
|
|
35
|
+
/** Event type identifier */
|
|
36
|
+
type: string;
|
|
37
|
+
/** Event payload data */
|
|
38
|
+
data: T;
|
|
39
|
+
/** Event creation timestamp */
|
|
40
|
+
timestamp: number;
|
|
41
|
+
/** Unique event ID */
|
|
42
|
+
id: string;
|
|
43
|
+
/** Optional metadata */
|
|
44
|
+
metadata?: Record<string, unknown> | undefined;
|
|
45
|
+
/** Number of retry attempts */
|
|
46
|
+
attempts?: number | undefined;
|
|
47
|
+
/** Error message (for DLQ events) */
|
|
48
|
+
error?: string | undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* EventBridge configuration options
|
|
52
|
+
*/
|
|
53
|
+
export interface EventBridgeConfig {
|
|
54
|
+
/** Maximum retry attempts before sending to DLQ */
|
|
55
|
+
maxRetries?: number | undefined;
|
|
56
|
+
/** Dead letter queue for failed events */
|
|
57
|
+
deadLetterQueue?: Queue | undefined;
|
|
58
|
+
/** Event schema validation function */
|
|
59
|
+
validator?: ((event: QueuedEvent) => boolean | Promise<boolean>) | undefined;
|
|
60
|
+
/** Custom serializer for event data */
|
|
61
|
+
serializer?: (<T>(data: T) => unknown) | undefined;
|
|
62
|
+
/** Custom deserializer for event data */
|
|
63
|
+
deserializer?: (<T>(data: unknown) => T) | undefined;
|
|
64
|
+
/** Enable debug logging */
|
|
65
|
+
debug?: boolean | undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Event handler function type
|
|
69
|
+
*/
|
|
70
|
+
export type EventHandler<T = unknown> = (data: T, event: QueuedEvent<T>) => void | Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Queue message interface (Cloudflare Queues)
|
|
73
|
+
*/
|
|
74
|
+
export interface QueueMessage<T = unknown> {
|
|
75
|
+
readonly id: string;
|
|
76
|
+
readonly timestamp: Date;
|
|
77
|
+
readonly body: T;
|
|
78
|
+
ack(): void;
|
|
79
|
+
retry(options?: {
|
|
80
|
+
delaySeconds?: number | undefined;
|
|
81
|
+
}): void;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Message batch interface (Cloudflare Queues)
|
|
85
|
+
*/
|
|
86
|
+
export interface MessageBatch<T = unknown> {
|
|
87
|
+
readonly queue: string;
|
|
88
|
+
readonly messages: readonly QueueMessage<T>[];
|
|
89
|
+
ackAll(): void;
|
|
90
|
+
retryAll(options?: {
|
|
91
|
+
delaySeconds?: number | undefined;
|
|
92
|
+
}): void;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Queue interface (Cloudflare Queues)
|
|
96
|
+
*/
|
|
97
|
+
export interface Queue<T = unknown> {
|
|
98
|
+
send(message: T, options?: {
|
|
99
|
+
contentType?: string | undefined;
|
|
100
|
+
delaySeconds?: number | undefined;
|
|
101
|
+
}): Promise<void>;
|
|
102
|
+
sendBatch(messages: Iterable<{
|
|
103
|
+
body: T;
|
|
104
|
+
contentType?: string | undefined;
|
|
105
|
+
delaySeconds?: number | undefined;
|
|
106
|
+
}>): Promise<void>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Emit options for customizing event delivery
|
|
110
|
+
*/
|
|
111
|
+
export interface EmitOptions {
|
|
112
|
+
/** Delay before the event is processed (in seconds) */
|
|
113
|
+
delaySeconds?: number | undefined;
|
|
114
|
+
/** Additional metadata to attach to the event */
|
|
115
|
+
metadata?: Record<string, unknown> | undefined;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* EventBridge - Unified event system with Queue support
|
|
119
|
+
*
|
|
120
|
+
* Provides reliable event delivery via Cloudflare Queues with
|
|
121
|
+
* support for multiple handlers, dead letter queues, and retries.
|
|
122
|
+
*/
|
|
123
|
+
export declare class EventBridge {
|
|
124
|
+
private queue?;
|
|
125
|
+
private handlers;
|
|
126
|
+
private wildcardHandlers;
|
|
127
|
+
private config;
|
|
128
|
+
/**
|
|
129
|
+
* Create a new EventBridge
|
|
130
|
+
*
|
|
131
|
+
* @param queue - Cloudflare Queue for event delivery
|
|
132
|
+
* @param config - Optional configuration
|
|
133
|
+
*/
|
|
134
|
+
constructor(queue?: Queue | undefined, config?: EventBridgeConfig);
|
|
135
|
+
/**
|
|
136
|
+
* Emit an event
|
|
137
|
+
*
|
|
138
|
+
* If a queue is configured, the event will be sent to the queue for
|
|
139
|
+
* reliable delivery. Otherwise, handlers are invoked synchronously.
|
|
140
|
+
*
|
|
141
|
+
* @param event - Event type identifier
|
|
142
|
+
* @param data - Event payload data
|
|
143
|
+
* @param options - Optional emit options
|
|
144
|
+
*/
|
|
145
|
+
emit<T = unknown>(event: string, data: T, options?: EmitOptions): Promise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Emit multiple events in a batch
|
|
148
|
+
*
|
|
149
|
+
* @param events - Array of events to emit
|
|
150
|
+
*/
|
|
151
|
+
emitBatch<T = unknown>(events: Array<{
|
|
152
|
+
type: string;
|
|
153
|
+
data: T;
|
|
154
|
+
options?: EmitOptions;
|
|
155
|
+
}>): Promise<void>;
|
|
156
|
+
/**
|
|
157
|
+
* Register an event handler
|
|
158
|
+
*
|
|
159
|
+
* @param event - Event type to handle (use '*' for all events)
|
|
160
|
+
* @param handler - Handler function
|
|
161
|
+
*/
|
|
162
|
+
on<T = unknown>(event: string, handler: EventHandler<T>): void;
|
|
163
|
+
/**
|
|
164
|
+
* Remove an event handler
|
|
165
|
+
*
|
|
166
|
+
* @param event - Event type
|
|
167
|
+
* @param handler - Handler to remove
|
|
168
|
+
*/
|
|
169
|
+
off<T = unknown>(event: string, handler: EventHandler<T>): void;
|
|
170
|
+
/**
|
|
171
|
+
* Register a one-time event handler
|
|
172
|
+
*
|
|
173
|
+
* @param event - Event type to handle
|
|
174
|
+
* @param handler - Handler function (called once then removed)
|
|
175
|
+
*/
|
|
176
|
+
once<T = unknown>(event: string, handler: EventHandler<T>): void;
|
|
177
|
+
/**
|
|
178
|
+
* Handle a message from the queue
|
|
179
|
+
*
|
|
180
|
+
* This method should be called from your worker's queue handler.
|
|
181
|
+
*
|
|
182
|
+
* @param message - Queue message to process
|
|
183
|
+
*/
|
|
184
|
+
handleMessage<T = unknown>(message: QueueMessage<QueuedEvent<T>>): Promise<void>;
|
|
185
|
+
/**
|
|
186
|
+
* Handle a batch of messages from the queue
|
|
187
|
+
*
|
|
188
|
+
* @param batch - Message batch to process
|
|
189
|
+
*/
|
|
190
|
+
handleBatch<T = unknown>(batch: MessageBatch<QueuedEvent<T>>): Promise<void>;
|
|
191
|
+
/**
|
|
192
|
+
* Get all registered event types
|
|
193
|
+
*/
|
|
194
|
+
getEventTypes(): string[];
|
|
195
|
+
/**
|
|
196
|
+
* Check if there are handlers for an event type
|
|
197
|
+
*/
|
|
198
|
+
hasHandlers(event: string): boolean;
|
|
199
|
+
/**
|
|
200
|
+
* Clear all handlers
|
|
201
|
+
*/
|
|
202
|
+
clearHandlers(): void;
|
|
203
|
+
/**
|
|
204
|
+
* Invoke handlers for an event
|
|
205
|
+
*/
|
|
206
|
+
private invokeHandlers;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Create a queue handler for use in a Cloudflare Worker
|
|
210
|
+
*
|
|
211
|
+
* @param bridge - EventBridge instance to handle events
|
|
212
|
+
* @returns Queue handler object with queue method
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* const bridge = new EventBridge(env.MY_QUEUE)
|
|
217
|
+
* const handler = createQueueHandler(bridge)
|
|
218
|
+
*
|
|
219
|
+
* export default {
|
|
220
|
+
* async queue(batch, env, ctx) {
|
|
221
|
+
* await handler.queue(batch, env, ctx)
|
|
222
|
+
* }
|
|
223
|
+
* }
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
export declare function createQueueHandler(bridge: EventBridge): {
|
|
227
|
+
queue: <T>(batch: MessageBatch<QueuedEvent<T>>, env?: unknown, ctx?: unknown) => Promise<void>;
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Create an EventBridge with standard configuration
|
|
231
|
+
*
|
|
232
|
+
* @param queue - Optional queue for async delivery
|
|
233
|
+
* @param dlq - Optional dead letter queue
|
|
234
|
+
* @returns Configured EventBridge instance
|
|
235
|
+
*/
|
|
236
|
+
export declare function createEventBridge(queue?: Queue, dlq?: Queue): EventBridge;
|
|
237
|
+
/**
|
|
238
|
+
* Type helper for strongly-typed event maps
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```typescript
|
|
242
|
+
* type MyEvents = {
|
|
243
|
+
* 'user.created': { id: string; name: string }
|
|
244
|
+
* 'user.deleted': { id: string }
|
|
245
|
+
* }
|
|
246
|
+
*
|
|
247
|
+
* const bridge = new EventBridge(queue) as TypedEventBridge<MyEvents>
|
|
248
|
+
* bridge.emit('user.created', { id: '1', name: 'John' }) // type-safe!
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
export interface TypedEventBridge<TEvents extends Record<string, unknown>> {
|
|
252
|
+
emit<K extends keyof TEvents & string>(event: K, data: TEvents[K], options?: EmitOptions): Promise<void>;
|
|
253
|
+
on<K extends keyof TEvents & string>(event: K, handler: EventHandler<TEvents[K]>): void;
|
|
254
|
+
off<K extends keyof TEvents & string>(event: K, handler: EventHandler<TEvents[K]>): void;
|
|
255
|
+
once<K extends keyof TEvents & string>(event: K, handler: EventHandler<TEvents[K]>): void;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=event-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bridge.d.ts","sourceRoot":"","sources":["../src/event-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventBridge - Event system with Cloudflare Queues support
|
|
3
|
+
*
|
|
4
|
+
* Provides both sync event handling and Queue-based async event delivery.
|
|
5
|
+
* Supports dead letter queues, event validation, and retry strategies.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Create an EventBridge with a queue
|
|
10
|
+
* const bridge = new EventBridge(env.MY_QUEUE)
|
|
11
|
+
*
|
|
12
|
+
* // Register event handlers
|
|
13
|
+
* bridge.on('user.created', async (data) => {
|
|
14
|
+
* console.log('New user:', data.id)
|
|
15
|
+
* })
|
|
16
|
+
*
|
|
17
|
+
* // Emit events (sent to queue for reliable delivery)
|
|
18
|
+
* await bridge.emit('user.created', { id: '123', name: 'John' })
|
|
19
|
+
*
|
|
20
|
+
* // In worker's queue handler:
|
|
21
|
+
* export default {
|
|
22
|
+
* async queue(batch, env) {
|
|
23
|
+
* const handler = createQueueHandler(bridge)
|
|
24
|
+
* await handler.queue(batch, env)
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @packageDocumentation
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* EventBridge - Unified event system with Queue support
|
|
33
|
+
*
|
|
34
|
+
* Provides reliable event delivery via Cloudflare Queues with
|
|
35
|
+
* support for multiple handlers, dead letter queues, and retries.
|
|
36
|
+
*/
|
|
37
|
+
export class EventBridge {
|
|
38
|
+
queue;
|
|
39
|
+
handlers = new Map();
|
|
40
|
+
wildcardHandlers = [];
|
|
41
|
+
config;
|
|
42
|
+
/**
|
|
43
|
+
* Create a new EventBridge
|
|
44
|
+
*
|
|
45
|
+
* @param queue - Cloudflare Queue for event delivery
|
|
46
|
+
* @param config - Optional configuration
|
|
47
|
+
*/
|
|
48
|
+
constructor(queue, config = {}) {
|
|
49
|
+
this.queue = queue;
|
|
50
|
+
this.config = {
|
|
51
|
+
maxRetries: config.maxRetries ?? 3,
|
|
52
|
+
deadLetterQueue: config.deadLetterQueue,
|
|
53
|
+
validator: config.validator,
|
|
54
|
+
serializer: config.serializer ?? ((data) => data),
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
deserializer: config.deserializer ?? ((data) => data),
|
|
57
|
+
debug: config.debug ?? false,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Emit an event
|
|
62
|
+
*
|
|
63
|
+
* If a queue is configured, the event will be sent to the queue for
|
|
64
|
+
* reliable delivery. Otherwise, handlers are invoked synchronously.
|
|
65
|
+
*
|
|
66
|
+
* @param event - Event type identifier
|
|
67
|
+
* @param data - Event payload data
|
|
68
|
+
* @param options - Optional emit options
|
|
69
|
+
*/
|
|
70
|
+
async emit(event, data, options) {
|
|
71
|
+
const queuedEvent = {
|
|
72
|
+
type: event,
|
|
73
|
+
data: this.config.serializer(data),
|
|
74
|
+
timestamp: Date.now(),
|
|
75
|
+
id: crypto.randomUUID(),
|
|
76
|
+
metadata: options?.metadata,
|
|
77
|
+
attempts: 0,
|
|
78
|
+
};
|
|
79
|
+
if (this.config.debug) {
|
|
80
|
+
console.log(`[EventBridge] Emitting event: ${event}`, queuedEvent.id);
|
|
81
|
+
}
|
|
82
|
+
// Validate event if validator is configured
|
|
83
|
+
if (this.config.validator) {
|
|
84
|
+
const isValid = await this.config.validator(queuedEvent);
|
|
85
|
+
if (!isValid) {
|
|
86
|
+
throw new Error(`Event validation failed for type: ${event}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (this.queue) {
|
|
90
|
+
// Send to queue for reliable delivery
|
|
91
|
+
const sendOptions = {};
|
|
92
|
+
if (options?.delaySeconds !== undefined) {
|
|
93
|
+
sendOptions.delaySeconds = options.delaySeconds;
|
|
94
|
+
}
|
|
95
|
+
await this.queue.send(queuedEvent, sendOptions);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// No queue - invoke handlers synchronously
|
|
99
|
+
await this.invokeHandlers(queuedEvent);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Emit multiple events in a batch
|
|
104
|
+
*
|
|
105
|
+
* @param events - Array of events to emit
|
|
106
|
+
*/
|
|
107
|
+
async emitBatch(events) {
|
|
108
|
+
if (!this.queue) {
|
|
109
|
+
// No queue - invoke handlers for each event synchronously
|
|
110
|
+
for (const { type, data, options } of events) {
|
|
111
|
+
await this.emit(type, data, options);
|
|
112
|
+
}
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const messages = events.map(({ type, data, options }) => {
|
|
116
|
+
const msg = {
|
|
117
|
+
body: {
|
|
118
|
+
type,
|
|
119
|
+
data: this.config.serializer(data),
|
|
120
|
+
timestamp: Date.now(),
|
|
121
|
+
id: crypto.randomUUID(),
|
|
122
|
+
metadata: options?.metadata,
|
|
123
|
+
attempts: 0,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
if (options?.delaySeconds !== undefined) {
|
|
127
|
+
msg.delaySeconds = options.delaySeconds;
|
|
128
|
+
}
|
|
129
|
+
return msg;
|
|
130
|
+
});
|
|
131
|
+
await this.queue.sendBatch(messages);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Register an event handler
|
|
135
|
+
*
|
|
136
|
+
* @param event - Event type to handle (use '*' for all events)
|
|
137
|
+
* @param handler - Handler function
|
|
138
|
+
*/
|
|
139
|
+
on(event, handler) {
|
|
140
|
+
if (event === '*') {
|
|
141
|
+
this.wildcardHandlers.push(handler);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const handlers = this.handlers.get(event) ?? [];
|
|
145
|
+
handlers.push(handler);
|
|
146
|
+
this.handlers.set(event, handlers);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Remove an event handler
|
|
150
|
+
*
|
|
151
|
+
* @param event - Event type
|
|
152
|
+
* @param handler - Handler to remove
|
|
153
|
+
*/
|
|
154
|
+
off(event, handler) {
|
|
155
|
+
if (event === '*') {
|
|
156
|
+
const index = this.wildcardHandlers.indexOf(handler);
|
|
157
|
+
if (index !== -1) {
|
|
158
|
+
this.wildcardHandlers.splice(index, 1);
|
|
159
|
+
}
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const handlers = this.handlers.get(event);
|
|
163
|
+
if (handlers) {
|
|
164
|
+
const index = handlers.indexOf(handler);
|
|
165
|
+
if (index !== -1) {
|
|
166
|
+
handlers.splice(index, 1);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Register a one-time event handler
|
|
172
|
+
*
|
|
173
|
+
* @param event - Event type to handle
|
|
174
|
+
* @param handler - Handler function (called once then removed)
|
|
175
|
+
*/
|
|
176
|
+
once(event, handler) {
|
|
177
|
+
const wrapper = async (data, queuedEvent) => {
|
|
178
|
+
this.off(event, wrapper);
|
|
179
|
+
await handler(data, queuedEvent);
|
|
180
|
+
};
|
|
181
|
+
this.on(event, wrapper);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Handle a message from the queue
|
|
185
|
+
*
|
|
186
|
+
* This method should be called from your worker's queue handler.
|
|
187
|
+
*
|
|
188
|
+
* @param message - Queue message to process
|
|
189
|
+
*/
|
|
190
|
+
async handleMessage(message) {
|
|
191
|
+
const event = message.body;
|
|
192
|
+
const attempts = (event.attempts ?? 0) + 1;
|
|
193
|
+
const deserializedEvent = {
|
|
194
|
+
...event,
|
|
195
|
+
data: this.config.deserializer(event.data),
|
|
196
|
+
attempts,
|
|
197
|
+
};
|
|
198
|
+
if (this.config.debug) {
|
|
199
|
+
console.log(`[EventBridge] Processing event: ${event.type}`, event.id, `attempt: ${attempts}`);
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await this.invokeHandlers(deserializedEvent);
|
|
203
|
+
message.ack();
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (this.config.debug) {
|
|
207
|
+
console.error(`[EventBridge] Error processing event: ${event.type}`, error);
|
|
208
|
+
}
|
|
209
|
+
// Check if we should send to DLQ
|
|
210
|
+
if (attempts >= this.config.maxRetries) {
|
|
211
|
+
if (this.config.deadLetterQueue) {
|
|
212
|
+
await this.config.deadLetterQueue.send({
|
|
213
|
+
...deserializedEvent,
|
|
214
|
+
error: error instanceof Error ? error.message : String(error),
|
|
215
|
+
});
|
|
216
|
+
message.ack(); // Ack after sending to DLQ
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// No DLQ - let it fail (will be dropped after max retries)
|
|
220
|
+
message.ack();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// Retry with exponential backoff
|
|
225
|
+
const delaySeconds = Math.min(60, Math.pow(2, attempts));
|
|
226
|
+
message.retry({ delaySeconds });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Handle a batch of messages from the queue
|
|
232
|
+
*
|
|
233
|
+
* @param batch - Message batch to process
|
|
234
|
+
*/
|
|
235
|
+
async handleBatch(batch) {
|
|
236
|
+
// Process messages in parallel
|
|
237
|
+
await Promise.all(batch.messages.map((message) => this.handleMessage(message)));
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get all registered event types
|
|
241
|
+
*/
|
|
242
|
+
getEventTypes() {
|
|
243
|
+
return Array.from(this.handlers.keys());
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Check if there are handlers for an event type
|
|
247
|
+
*/
|
|
248
|
+
hasHandlers(event) {
|
|
249
|
+
const handlers = this.handlers.get(event);
|
|
250
|
+
return (handlers && handlers.length > 0) || this.wildcardHandlers.length > 0;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Clear all handlers
|
|
254
|
+
*/
|
|
255
|
+
clearHandlers() {
|
|
256
|
+
this.handlers.clear();
|
|
257
|
+
this.wildcardHandlers = [];
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Invoke handlers for an event
|
|
261
|
+
*/
|
|
262
|
+
async invokeHandlers(event) {
|
|
263
|
+
const handlers = this.handlers.get(event.type) ?? [];
|
|
264
|
+
const allHandlers = [...handlers, ...this.wildcardHandlers];
|
|
265
|
+
if (allHandlers.length === 0) {
|
|
266
|
+
if (this.config.debug) {
|
|
267
|
+
console.log(`[EventBridge] No handlers for event: ${event.type}`);
|
|
268
|
+
}
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
// Fan-out to all handlers
|
|
272
|
+
await Promise.all(allHandlers.map((handler) => handler(event.data, event)));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Create a queue handler for use in a Cloudflare Worker
|
|
277
|
+
*
|
|
278
|
+
* @param bridge - EventBridge instance to handle events
|
|
279
|
+
* @returns Queue handler object with queue method
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* ```typescript
|
|
283
|
+
* const bridge = new EventBridge(env.MY_QUEUE)
|
|
284
|
+
* const handler = createQueueHandler(bridge)
|
|
285
|
+
*
|
|
286
|
+
* export default {
|
|
287
|
+
* async queue(batch, env, ctx) {
|
|
288
|
+
* await handler.queue(batch, env, ctx)
|
|
289
|
+
* }
|
|
290
|
+
* }
|
|
291
|
+
* ```
|
|
292
|
+
*/
|
|
293
|
+
export function createQueueHandler(bridge) {
|
|
294
|
+
return {
|
|
295
|
+
async queue(batch, _env, _ctx) {
|
|
296
|
+
await bridge.handleBatch(batch);
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Create an EventBridge with standard configuration
|
|
302
|
+
*
|
|
303
|
+
* @param queue - Optional queue for async delivery
|
|
304
|
+
* @param dlq - Optional dead letter queue
|
|
305
|
+
* @returns Configured EventBridge instance
|
|
306
|
+
*/
|
|
307
|
+
export function createEventBridge(queue, dlq) {
|
|
308
|
+
const config = {
|
|
309
|
+
maxRetries: 3,
|
|
310
|
+
debug: false,
|
|
311
|
+
};
|
|
312
|
+
if (dlq) {
|
|
313
|
+
config.deadLetterQueue = dlq;
|
|
314
|
+
}
|
|
315
|
+
return new EventBridge(queue, config);
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=event-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bridge.js","sourceRoot":"","sources":["../src/event-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Props generation for ai-props
|
|
3
|
+
*
|
|
4
|
+
* Core functionality for generating component props using AI.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import type { PropSchema, GeneratePropsOptions, GeneratePropsResult, AIPropsConfig } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Configure global AI props settings
|
|
11
|
+
*/
|
|
12
|
+
export declare function configureAIProps(config: Partial<AIPropsConfig>): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get current configuration
|
|
15
|
+
*/
|
|
16
|
+
export declare function getConfig(): AIPropsConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Reset configuration to defaults
|
|
19
|
+
*/
|
|
20
|
+
export declare function resetConfig(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Generate props using AI
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const result = await generateProps({
|
|
27
|
+
* schema: {
|
|
28
|
+
* title: 'A compelling page title',
|
|
29
|
+
* description: 'A brief description',
|
|
30
|
+
* keywords: ['Relevant SEO keywords'],
|
|
31
|
+
* },
|
|
32
|
+
* context: { topic: 'AI-powered applications' },
|
|
33
|
+
* })
|
|
34
|
+
*
|
|
35
|
+
* console.log(result.props)
|
|
36
|
+
* // { title: '...', description: '...', keywords: [...] }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function generateProps<T = Record<string, unknown>>(options: GeneratePropsOptions): Promise<GeneratePropsResult<T>>;
|
|
40
|
+
/**
|
|
41
|
+
* Generate props synchronously from cache or throw
|
|
42
|
+
*
|
|
43
|
+
* Useful for SSR scenarios where async isn't available.
|
|
44
|
+
* Throws if props aren't in cache.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getPropsSync<T = Record<string, unknown>>(schema: PropSchema, context?: Record<string, unknown>): T;
|
|
47
|
+
/**
|
|
48
|
+
* Pre-generate props for warming the cache
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* await prefetchProps([
|
|
53
|
+
* { schema: userProfileSchema, context: { userId: '123' } },
|
|
54
|
+
* { schema: productSchema, context: { category: 'electronics' } },
|
|
55
|
+
* ])
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function prefetchProps(requests: GeneratePropsOptions[]): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Generate multiple prop sets in parallel
|
|
61
|
+
*/
|
|
62
|
+
export declare function generatePropsMany<T = Record<string, unknown>>(requests: GeneratePropsOptions[]): Promise<GeneratePropsResult<T>[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Merge partial props with generated props
|
|
65
|
+
*
|
|
66
|
+
* Generates only the missing props, keeping provided ones.
|
|
67
|
+
*/
|
|
68
|
+
export declare function mergeWithGenerated<T extends Record<string, unknown>>(schema: PropSchema, partialProps: Partial<T>, options?: Omit<GeneratePropsOptions, 'schema' | 'context'>): Promise<T>;
|
|
69
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAA;AAkBnB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,aAAa,CAEzC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAiDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAuEjC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,CAAC,CAUH;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,QAAQ,EAAE,oBAAoB,EAAE,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAEnC;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,SAAS,CAAC,GACzD,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
|