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.
Files changed (75) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +9 -0
  3. package/dist/ai.d.ts +125 -0
  4. package/dist/ai.d.ts.map +1 -0
  5. package/dist/ai.js +199 -0
  6. package/dist/ai.js.map +1 -0
  7. package/dist/cache.d.ts +66 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +183 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/cascade.d.ts +329 -0
  12. package/dist/cascade.d.ts.map +1 -0
  13. package/dist/cascade.js +522 -0
  14. package/dist/cascade.js.map +1 -0
  15. package/dist/client.d.ts +233 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +191 -0
  18. package/dist/client.js.map +1 -0
  19. package/dist/durable-cascade.d.ts +280 -0
  20. package/dist/durable-cascade.d.ts.map +1 -0
  21. package/dist/durable-cascade.js +469 -0
  22. package/dist/durable-cascade.js.map +1 -0
  23. package/dist/event-bridge.d.ts +257 -0
  24. package/dist/event-bridge.d.ts.map +1 -0
  25. package/dist/event-bridge.js +317 -0
  26. package/dist/event-bridge.js.map +1 -0
  27. package/dist/generate.d.ts +69 -0
  28. package/dist/generate.d.ts.map +1 -0
  29. package/dist/generate.js +227 -0
  30. package/dist/generate.js.map +1 -0
  31. package/dist/hoc.d.ts +164 -0
  32. package/dist/hoc.d.ts.map +1 -0
  33. package/dist/hoc.js +236 -0
  34. package/dist/hoc.js.map +1 -0
  35. package/dist/hono-jsx.d.ts +208 -0
  36. package/dist/hono-jsx.d.ts.map +1 -0
  37. package/dist/hono-jsx.js +459 -0
  38. package/dist/hono-jsx.js.map +1 -0
  39. package/dist/index.d.ts +16 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +23 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mdx-types.d.ts +152 -0
  44. package/dist/mdx-types.d.ts.map +1 -0
  45. package/dist/mdx-types.js +9 -0
  46. package/dist/mdx-types.js.map +1 -0
  47. package/dist/mdx-utils.d.ts +106 -0
  48. package/dist/mdx-utils.d.ts.map +1 -0
  49. package/dist/mdx-utils.js +384 -0
  50. package/dist/mdx-utils.js.map +1 -0
  51. package/dist/mdx.d.ts +230 -0
  52. package/dist/mdx.d.ts.map +1 -0
  53. package/dist/mdx.js +820 -0
  54. package/dist/mdx.js.map +1 -0
  55. package/dist/rpc.d.ts +313 -0
  56. package/dist/rpc.d.ts.map +1 -0
  57. package/dist/rpc.js +359 -0
  58. package/dist/rpc.js.map +1 -0
  59. package/dist/streaming.d.ts +199 -0
  60. package/dist/streaming.d.ts.map +1 -0
  61. package/dist/streaming.js +402 -0
  62. package/dist/streaming.js.map +1 -0
  63. package/dist/types.d.ts +152 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +7 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/validate.d.ts +58 -0
  68. package/dist/validate.d.ts.map +1 -0
  69. package/dist/validate.js +251 -0
  70. package/dist/validate.js.map +1 -0
  71. package/dist/worker.d.ts +270 -0
  72. package/dist/worker.d.ts.map +1 -0
  73. package/dist/worker.js +405 -0
  74. package/dist/worker.js.map +1 -0
  75. 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"}