@moeru/eventa 1.0.0-alpha.10 → 1.0.0-alpha.11
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as EventTag, r as Eventa } from "../../eventa-DWOtUOEf.mjs";
|
|
2
2
|
import { t as EventContext } from "../../context-C0RYgQg8.mjs";
|
|
3
|
-
import { t as ExtendableInvokeResponse } from "../../invoke-
|
|
3
|
+
import { t as ExtendableInvokeResponse } from "../../invoke-Cq-czNko.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/webworkers/shared.d.ts
|
|
6
6
|
interface WorkerPayload<T> {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as EventContext } from "./context-C0RYgQg8.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { y as InvokeEventa } from "./invoke-Cq-czNko.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/stream.d.ts
|
|
5
5
|
declare function defineStreamInvoke<Res, Req = undefined, ResErr = Error, ReqErr = Error, E = any, EO = any>(clientCtx: EventContext<E, EO>, event: InvokeEventa<Res, Req, ResErr, ReqErr>): (req: Req) => ReadableStream<Res>;
|
|
@@ -21,4 +21,4 @@ declare function toStreamHandler<Req, Res, EO extends {
|
|
|
21
21
|
}) => Promise<void>): StreamHandler<Res, Req, EO>;
|
|
22
22
|
//#endregion
|
|
23
23
|
export { defineStreamInvokeHandler as n, toStreamHandler as r, defineStreamInvoke as t };
|
|
24
|
-
//# sourceMappingURL=index-
|
|
24
|
+
//# sourceMappingURL=index-DYyPcVwf.d.mts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { _ as or, a as EventaLike, c as InboundEventa, d as and, f as defineEventa, g as nanoid, h as matchBy, i as EventaFlowDirection, l as InvokeEventConstraint, m as defineOutboundEventa, n as EventTag, o as EventaMatchExpression, p as defineInboundEventa, r as Eventa, s as EventaType, t as DirectionalEventa, u as OutboundEventa } from "./eventa-DWOtUOEf.mjs";
|
|
2
2
|
import { n as EventContextEmitFn, r as createContext, t as EventContext } from "./context-C0RYgQg8.mjs";
|
|
3
|
-
import { C as isSendEvent, S as
|
|
4
|
-
import { n as defineStreamInvokeHandler, r as toStreamHandler, t as defineStreamInvoke } from "./index-
|
|
5
|
-
export { DirectionalEventa, EventContext, EventContextEmitFn, EventTag, Eventa, EventaFlowDirection, EventaLike, EventaMatchExpression, EventaType, ExtendableInvokeResponse, Handler, HandlerMap, InboundEventa, InvocableEventContext, InvokeEventConstraint, InvokeEventType, InvokeEventa, InvokeFunction, InvokeFunctionMap, OutboundEventa, ReceiveEvent, ReceiveEventError, ReceiveEventStreamEnd, SendEvent, SendEventError, and, createContext, defineEventa, defineInboundEventa, defineInvoke, defineInvokeEventa, defineInvokeHandler, defineInvokeHandlers, defineInvokes, defineOutboundEventa, defineStreamInvoke, defineStreamInvokeHandler, isExtendableInvokeResponseLike, isInvokeEventa, isReceiveEvent, isSendEvent, matchBy, nanoid, or, toStreamHandler, undefineInvokeHandler };
|
|
3
|
+
import { C as SendEvent, D as isReceiveEvent, E as isInvokeEventa, O as isSendEvent, S as ReceiveEventStreamEnd, T as defineInvokeEventa, _ as InferSendEventError, a as InvokeFunction, b as ReceiveEvent, c as defineInvokeHandler, d as isExtendableInvokeResponseLike, f as undefineInvokeHandler, g as InferSendEvent, h as InferReceiveEventStreamEnd, i as InvocableEventContext, l as defineInvokeHandlers, m as InferReceiveEventError, n as Handler, o as InvokeFunctionMap, p as InferReceiveEvent, r as HandlerMap, s as defineInvoke, t as ExtendableInvokeResponse, u as defineInvokes, v as InvokeEventType, w as SendEventError, x as ReceiveEventError, y as InvokeEventa } from "./invoke-Cq-czNko.mjs";
|
|
4
|
+
import { n as defineStreamInvokeHandler, r as toStreamHandler, t as defineStreamInvoke } from "./index-DYyPcVwf.mjs";
|
|
5
|
+
export { DirectionalEventa, EventContext, EventContextEmitFn, EventTag, Eventa, EventaFlowDirection, EventaLike, EventaMatchExpression, EventaType, ExtendableInvokeResponse, Handler, HandlerMap, InboundEventa, InferReceiveEvent, InferReceiveEventError, InferReceiveEventStreamEnd, InferSendEvent, InferSendEventError, InvocableEventContext, InvokeEventConstraint, InvokeEventType, InvokeEventa, InvokeFunction, InvokeFunctionMap, OutboundEventa, ReceiveEvent, ReceiveEventError, ReceiveEventStreamEnd, SendEvent, SendEventError, and, createContext, defineEventa, defineInboundEventa, defineInvoke, defineInvokeEventa, defineInvokeHandler, defineInvokeHandlers, defineInvokes, defineOutboundEventa, defineStreamInvoke, defineStreamInvokeHandler, isExtendableInvokeResponseLike, isInvokeEventa, isReceiveEvent, isSendEvent, matchBy, nanoid, or, toStreamHandler, undefineInvokeHandler };
|
|
@@ -16,9 +16,9 @@ interface SendEvent<Res$1, Req$1 = undefined, _ = undefined, __ = undefined> ext
|
|
|
16
16
|
id: EventTag<Res$1, Req$1>;
|
|
17
17
|
invokeType: InvokeEventType.SendEvent;
|
|
18
18
|
}
|
|
19
|
-
interface SendEventError<Res$1, Req$1 = undefined, _ = undefined, ReqErr = Error> extends Eventa<{
|
|
19
|
+
interface SendEventError<Res$1, Req$1 = undefined, _ = undefined, ReqErr$1 = Error> extends Eventa<{
|
|
20
20
|
invokeId: string;
|
|
21
|
-
content: ReqErr;
|
|
21
|
+
content: ReqErr$1;
|
|
22
22
|
}> {
|
|
23
23
|
id: EventTag<Res$1, Req$1>;
|
|
24
24
|
invokeType: InvokeEventType.SendEventError;
|
|
@@ -30,10 +30,10 @@ interface ReceiveEvent<Res$1, Req$1 = undefined, _ = undefined, __ = undefined>
|
|
|
30
30
|
id: EventTag<Res$1, Req$1>;
|
|
31
31
|
invokeType: InvokeEventType.ReceiveEvent;
|
|
32
32
|
}
|
|
33
|
-
interface ReceiveEventError<Res$1, Req$1 = undefined, ResErr = undefined, _ = undefined> extends Eventa<{
|
|
33
|
+
interface ReceiveEventError<Res$1, Req$1 = undefined, ResErr$1 = undefined, _ = undefined> extends Eventa<{
|
|
34
34
|
invokeId: string;
|
|
35
35
|
content: {
|
|
36
|
-
error: ResErr;
|
|
36
|
+
error: ResErr$1;
|
|
37
37
|
};
|
|
38
38
|
}> {
|
|
39
39
|
id: EventTag<Res$1, Req$1>;
|
|
@@ -46,19 +46,34 @@ interface ReceiveEventStreamEnd<Res$1, Req$1 = undefined, _ = undefined, __ = un
|
|
|
46
46
|
id: EventTag<Res$1, Req$1>;
|
|
47
47
|
invokeType: InvokeEventType.ReceiveEventStreamEnd;
|
|
48
48
|
}
|
|
49
|
-
interface InvokeEventa<Res$1, Req$1 = undefined, ResErr = Error, ReqErr = Error> {
|
|
50
|
-
sendEvent: SendEvent<Res$1, Req$1, ResErr, ReqErr>;
|
|
51
|
-
sendEventError: SendEventError<Res$1, Req$1, ResErr, ReqErr>;
|
|
52
|
-
receiveEvent: ReceiveEvent<Res$1, Req$1, ResErr, ReqErr>;
|
|
53
|
-
receiveEventError: ReceiveEventError<Res$1, Req$1, ResErr, ReqErr>;
|
|
54
|
-
receiveEventStreamEnd: ReceiveEventStreamEnd<Res$1, Req$1, ResErr, ReqErr>;
|
|
49
|
+
interface InvokeEventa<Res$1, Req$1 = undefined, ResErr$1 = Error, ReqErr$1 = Error> {
|
|
50
|
+
sendEvent: SendEvent<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
51
|
+
sendEventError: SendEventError<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
52
|
+
receiveEvent: ReceiveEvent<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
53
|
+
receiveEventError: ReceiveEventError<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
54
|
+
receiveEventStreamEnd: ReceiveEventStreamEnd<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
sendEvent: SendEvent<Res
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
type InferSendEvent<T> = T extends {
|
|
57
|
+
sendEvent: SendEvent<infer Res, infer Req, infer ResErr, infer ReqErr>;
|
|
58
|
+
} ? SendEvent<Res, Req, ResErr, ReqErr> : never;
|
|
59
|
+
type InferSendEventError<T> = T extends {
|
|
60
|
+
sendEventError: SendEventError<infer Res, infer Req, infer ResErr, infer ReqErr>;
|
|
61
|
+
} ? SendEventError<Res, Req, ResErr, ReqErr> : never;
|
|
62
|
+
type InferReceiveEvent<T> = T extends {
|
|
63
|
+
receiveEvent: ReceiveEvent<infer Res, infer Req, infer ResErr, infer ReqErr>;
|
|
64
|
+
} ? ReceiveEvent<Res, Req, ResErr, ReqErr> : never;
|
|
65
|
+
type InferReceiveEventError<T> = T extends {
|
|
66
|
+
receiveEventError: ReceiveEventError<infer Res, infer Req, infer ResErr, infer ReqErr>;
|
|
67
|
+
} ? ReceiveEventError<Res, Req, ResErr, ReqErr> : never;
|
|
68
|
+
type InferReceiveEventStreamEnd<T> = T extends {
|
|
69
|
+
receiveEventStreamEnd: ReceiveEventStreamEnd<infer Res, infer Req, infer ResErr, infer ReqErr>;
|
|
70
|
+
} ? ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr> : never;
|
|
71
|
+
declare function defineInvokeEventa<Res$1, Req$1 = undefined, ResErr$1 = Error, ReqErr$1 = Error>(tag?: string): {
|
|
72
|
+
sendEvent: SendEvent<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
73
|
+
sendEventError: SendEventError<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
74
|
+
receiveEvent: ReceiveEvent<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
75
|
+
receiveEventError: ReceiveEventError<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
76
|
+
receiveEventStreamEnd: ReceiveEventStreamEnd<Res$1, Req$1, ResErr$1, ReqErr$1>;
|
|
62
77
|
};
|
|
63
78
|
declare function isInvokeEventa(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any> | ReceiveEvent<any, any, any, any> | ReceiveEventError<any, any, any, any> | ReceiveEventStreamEnd<any, any, any, any>;
|
|
64
79
|
declare function isSendEvent(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any>;
|
|
@@ -102,12 +117,12 @@ type Handler<Res$1, Req$1 = any, EC extends EventContext<any, any> = EventContex
|
|
|
102
117
|
*/
|
|
103
118
|
abortController?: AbortController;
|
|
104
119
|
} & RawEventOptions) => ExtendableInvokeResponse<Res$1, EC>;
|
|
105
|
-
type InternalInvokeHandler<Res$1, Req$1 = any, ResErr = Error, ReqErr = Error, EO = any> = (params: InvokeEventa<Res$1, Req$1, ResErr, ReqErr>['sendEvent'], eventOptions?: EO) => void;
|
|
120
|
+
type InternalInvokeHandler<Res$1, Req$1 = any, ResErr$1 = Error, ReqErr$1 = Error, EO = any> = (params: InvokeEventa<Res$1, Req$1, ResErr$1, ReqErr$1>['sendEvent'], eventOptions?: EO) => void;
|
|
106
121
|
type HandlerMap<EventMap extends Record<string, InvokeEventa<any, any, any, any>>, EO = any, EC extends EventContext<any, any> = EventContext<any, any>> = { [K in keyof EventMap]: EventMap[K] extends InvokeEventa<infer Res, infer Req, any, any> ? Handler<Res, Req, EC, EO> : never };
|
|
107
122
|
interface InvocableEventContext<E$1, EO> extends EventContext<E$1, EO> {
|
|
108
123
|
invokeHandlers?: Map<string, Map<Handler<any>, InternalInvokeHandler<any>>>;
|
|
109
124
|
}
|
|
110
|
-
declare function defineInvoke<Res$1, Req$1 = undefined, ResErr = Error, ReqErr = Error, CtxExt = any, EOpts = any, ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>>(ctx: ECtx, event: InvokeEventa<Res$1, Req$1, ResErr, ReqErr>): InvokeFunction<Res$1, Req$1, ECtx>;
|
|
125
|
+
declare function defineInvoke<Res$1, Req$1 = undefined, ResErr$1 = Error, ReqErr$1 = Error, CtxExt = any, EOpts = any, ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>>(ctx: ECtx, event: InvokeEventa<Res$1, Req$1, ResErr$1, ReqErr$1>): InvokeFunction<Res$1, Req$1, ECtx>;
|
|
111
126
|
declare function defineInvokes<EK extends string, EventMap extends Record<EK, InvokeEventa<any, any, any, any>>, CtxExt = any, EOpts = any, ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>>(ctx: ECtx, events: EventMap): InvokeFunctionMap<EventMap, ECtx>;
|
|
112
127
|
/**
|
|
113
128
|
* Define an invoke handler for a specific invoke event.
|
|
@@ -117,9 +132,9 @@ declare function defineInvokes<EK extends string, EventMap extends Record<EK, In
|
|
|
117
132
|
* @param handler The handler function to be invoked when the event is triggered.
|
|
118
133
|
* @returns A function that can be called to remove the invoke handler.
|
|
119
134
|
*/
|
|
120
|
-
declare function defineInvokeHandler<Res$1, Req$1 = undefined, ResErr = Error, ReqErr = Error, CtxExt = any, EOpts extends {
|
|
135
|
+
declare function defineInvokeHandler<Res$1, Req$1 = undefined, ResErr$1 = Error, ReqErr$1 = Error, CtxExt = any, EOpts extends {
|
|
121
136
|
raw?: any;
|
|
122
|
-
} = any>(ctx: InvocableEventContext<CtxExt, EOpts>, event: InvokeEventa<Res$1, Req$1, ResErr, ReqErr>, handler: Handler<Res$1, Req$1, InvocableEventContext<CtxExt, EOpts>, EOpts>): () => void;
|
|
137
|
+
} = any>(ctx: InvocableEventContext<CtxExt, EOpts>, event: InvokeEventa<Res$1, Req$1, ResErr$1, ReqErr$1>, handler: Handler<Res$1, Req$1, InvocableEventContext<CtxExt, EOpts>, EOpts>): () => void;
|
|
123
138
|
declare function defineInvokeHandlers<EK extends string, EventMap extends Record<EK, InvokeEventa<any, any, any, any>>, CtxExt = any, EOpts extends {
|
|
124
139
|
raw?: any;
|
|
125
140
|
} = any>(ctx: InvocableEventContext<CtxExt, EOpts>, events: EventMap, handlers: HandlerMap<EventMap, EOpts>): Record<EK, () => void>;
|
|
@@ -131,7 +146,7 @@ declare function defineInvokeHandlers<EK extends string, EventMap extends Record
|
|
|
131
146
|
* @param handler The specific handler to remove. If not omitted, all handlers for the event will be removed.
|
|
132
147
|
* @returns `true` if at least one handler was removed, `false` otherwise
|
|
133
148
|
*/
|
|
134
|
-
declare function undefineInvokeHandler<Res$1, Req$1 = undefined, ResErr = Error, ReqErr = Error, CtxExt = any, EOpts = any>(ctx: InvocableEventContext<CtxExt, EOpts>, event: InvokeEventa<Res$1, Req$1, ResErr, ReqErr>, handler?: Handler<Res$1, Req$1, InvocableEventContext<CtxExt, EOpts>, EOpts>): boolean;
|
|
149
|
+
declare function undefineInvokeHandler<Res$1, Req$1 = undefined, ResErr$1 = Error, ReqErr$1 = Error, CtxExt = any, EOpts = any>(ctx: InvocableEventContext<CtxExt, EOpts>, event: InvokeEventa<Res$1, Req$1, ResErr$1, ReqErr$1>, handler?: Handler<Res$1, Req$1, InvocableEventContext<CtxExt, EOpts>, EOpts>): boolean;
|
|
135
150
|
//#endregion
|
|
136
|
-
export {
|
|
137
|
-
//# sourceMappingURL=invoke-
|
|
151
|
+
export { SendEvent as C, isReceiveEvent as D, isInvokeEventa as E, isSendEvent as O, ReceiveEventStreamEnd as S, defineInvokeEventa as T, InferSendEventError as _, InvokeFunction as a, ReceiveEvent as b, defineInvokeHandler as c, isExtendableInvokeResponseLike as d, undefineInvokeHandler as f, InferSendEvent as g, InferReceiveEventStreamEnd as h, InvocableEventContext as i, defineInvokeHandlers as l, InferReceiveEventError as m, Handler as n, InvokeFunctionMap as o, InferReceiveEvent as p, HandlerMap as r, defineInvoke as s, ExtendableInvokeResponse as t, defineInvokes as u, InvokeEventType as v, SendEventError as w, ReceiveEventError as x, InvokeEventa as y };
|
|
152
|
+
//# sourceMappingURL=invoke-Cq-czNko.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src-Bnf7MdlN.mjs","names":["values: Promise<[Res, boolean]>[]","resolve: (x: [Res, boolean]) => void","handlerError: Error | null","val: Res"],"sources":["../src/invoke-shared.ts","../src/invoke.ts","../src/stream.ts"],"sourcesContent":["import type { Eventa, EventTag } from './eventa'\n\nimport { defineEventa, nanoid } from './eventa'\n\nexport enum InvokeEventType {\n SendEvent,\n SendEventError,\n ReceiveEvent,\n ReceiveEventError,\n ReceiveEventStreamEnd,\n}\n\nexport interface SendEvent<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{ invokeId: string, content: Req }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.SendEvent\n}\nexport interface SendEventError<Res, Req = undefined, _ = undefined, ReqErr = Error> extends Eventa<{ invokeId: string, content: ReqErr }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.SendEventError\n}\nexport interface ReceiveEvent<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{ invokeId: string, content: Res }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.ReceiveEvent\n}\nexport interface ReceiveEventError<Res, Req = undefined, ResErr = undefined, _ = undefined> extends Eventa<{ invokeId: string, content: { error: ResErr } }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.ReceiveEventError\n}\nexport interface ReceiveEventStreamEnd<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{ invokeId: string, content: undefined }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.ReceiveEventStreamEnd\n}\n\nexport interface InvokeEventa<Res, Req = undefined, ResErr = Error, ReqErr = Error> {\n sendEvent: SendEvent<Res, Req, ResErr, ReqErr>\n sendEventError: SendEventError<Res, Req, ResErr, ReqErr>\n receiveEvent: ReceiveEvent<Res, Req, ResErr, ReqErr>\n receiveEventError: ReceiveEventError<Res, Req, ResErr, ReqErr>\n receiveEventStreamEnd: ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr>\n}\n\nexport function defineInvokeEventa<Res, Req = undefined, ResErr = Error, ReqErr = Error>(tag?: string) {\n if (!tag) {\n tag = nanoid()\n }\n\n const sendEvent = {\n ...defineEventa<InvokeEventType.SendEvent>(`${tag}-send`),\n invokeType: InvokeEventType.SendEvent,\n } as SendEvent<Res, Req, ResErr, ReqErr>\n const sendEventError = {\n ...defineEventa<InvokeEventType.SendEventError>(`${tag}-send-error`),\n invokeType: InvokeEventType.SendEventError,\n } as SendEventError<Res, Req, ResErr, ReqErr>\n const receiveEvent = {\n ...defineEventa<InvokeEventType.ReceiveEvent>(`${tag}-receive`),\n invokeType: InvokeEventType.ReceiveEvent,\n } as ReceiveEvent<Res, Req, ResErr, ReqErr>\n const receiveEventError = {\n ...defineEventa<InvokeEventType.ReceiveEventError>(`${tag}-receive-error`),\n invokeType: InvokeEventType.ReceiveEventError,\n } as ReceiveEventError<Res, Req, ResErr, ReqErr>\n const receiveEventStreamEnd = {\n ...defineEventa<InvokeEventType.ReceiveEventStreamEnd>(`${tag}-receive-stream-end`),\n invokeType: InvokeEventType.ReceiveEventStreamEnd,\n } as ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr>\n\n return {\n sendEvent,\n sendEventError,\n receiveEvent,\n receiveEventError,\n receiveEventStreamEnd,\n } satisfies InvokeEventa<Res, Req, ResErr, ReqErr>\n}\n\nexport function isInvokeEventa(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any> | ReceiveEvent<any, any, any, any> | ReceiveEventError<any, any, any, any> | ReceiveEventStreamEnd<any, any, any, any> {\n if (typeof event !== 'object') {\n return false\n }\n if ('invokeType' in event) {\n return true\n }\n\n return false\n}\n\nexport function isSendEvent(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any> {\n if (!isInvokeEventa(event)) {\n return false\n }\n\n return event.invokeType === InvokeEventType.SendEvent || event.invokeType === InvokeEventType.SendEventError\n}\n\nexport function isReceiveEvent(event: Eventa<any>): event is ReceiveEvent<any, any, any, any> | ReceiveEventError<any, any, any, any> | ReceiveEventStreamEnd<any, any, any, any> {\n if (!isInvokeEventa(event)) {\n return false\n }\n\n return event.invokeType === InvokeEventType.ReceiveEvent || event.invokeType === InvokeEventType.ReceiveEventError || event.invokeType === InvokeEventType.ReceiveEventStreamEnd\n}\n","import type { EventContext } from './context'\nimport type { Eventa } from './eventa'\nimport type { InvokeEventa, ReceiveEvent, ReceiveEventError } from './invoke-shared'\n\nimport { defineEventa, nanoid } from './eventa'\nimport { isReceiveEvent } from './invoke-shared'\n\ntype IsInvokeRequestOptional<EC extends EventContext<any, any>>\n = EC extends EventContext<infer E, any>\n ? E extends { invokeRequest: any }\n ? undefined extends E['invokeRequest']\n ? true\n : false\n : E extends { invokeRequest?: any }\n ? undefined extends E['invokeRequest']\n ? true\n : false\n : true\n : true\n\ntype ExtractInvokeRequest<EC extends EventContext<any, any>>\n = EC extends EventContext<infer E, any>\n ? E extends { invokeRequest: infer IR }\n ? IR\n : E extends { invokeRequest?: infer IR }\n ? IR\n : undefined\n : undefined\n\ntype ExtractInvokeResponse<EC extends EventContext<any, any>>\n = EC extends EventContext<infer E, any>\n ? E extends { invokeResponse: infer IR }\n ? IR\n : E extends { invokeResponse?: infer IR }\n ? IR\n : undefined\n : undefined\n\nexport type InvokeFunction<Res, Req, EC extends EventContext<any, any>>\n = [Req] extends [undefined]\n ? IsInvokeRequestOptional<EC> extends true\n ? (req?: Req, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res>\n : (req: Req, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res>\n : IsInvokeRequestOptional<EC> extends true\n ? (req: Req, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res>\n : (req: Req, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res>\n\nexport type InvokeFunctionMap<EventMap extends Record<string, InvokeEventa<any, any, any, any>>, EC extends EventContext<any, any>> = {\n [K in keyof EventMap]: EventMap[K] extends InvokeEventa<infer Res, infer Req, any, any> ? InvokeFunction<Res, Req, EC> : never\n}\n\nexport type ExtendableInvokeResponse<Res, EC extends EventContext<any, any>>\n = | Promise<Res>\n | Res\n | Promise<{ response: Res, invokeResponse?: ExtractInvokeResponse<EC> }>\n | { response: Res, invokeResponse?: ExtractInvokeResponse<EC> }\n\nexport function isExtendableInvokeResponseLike<Res, EC extends EventContext<any, any>>(value: Eventa<unknown> | ReceiveEvent<{ response: Res, invokeResponse?: unknown }>): value is ReceiveEvent<{ response: Res, invokeResponse?: ExtractInvokeResponse<EC> }> {\n if (!isReceiveEvent(value)) {\n return false\n }\n\n return typeof value.body?.content === 'object'\n && value.body?.content != null\n && 'response' in value.body.content\n && (\n !('invokeResponse' in value.body.content)\n || (\n 'invokeResponse' in value.body.content\n && (\n typeof value.body.content.invokeResponse === 'object'\n || typeof value.body.content.invokeResponse === 'undefined'\n )\n )\n )\n}\n\nexport type Handler<Res, Req = any, EC extends EventContext<any, any> = EventContext<any, any>, RawEventOptions = unknown> = (\n payload: Req,\n options?: {\n /**\n * TODO: Support aborting invoke handlers\n */\n abortController?: AbortController\n } & RawEventOptions,\n) => ExtendableInvokeResponse<Res, EC>\n\ntype InternalInvokeHandler<\n Res,\n Req = any,\n ResErr = Error,\n ReqErr = Error,\n EO = any,\n> = (params: InvokeEventa<Res, Req, ResErr, ReqErr>['sendEvent'], eventOptions?: EO) => void\n\nexport type HandlerMap<\n EventMap extends Record<string, InvokeEventa<any, any, any, any>>,\n EO = any,\n EC extends EventContext<any, any> = EventContext<any, any>,\n> = {\n [K in keyof EventMap]: EventMap[K] extends InvokeEventa<infer Res, infer Req, any, any>\n ? Handler<Res, Req, EC, EO>\n : never\n}\n\nexport interface InvocableEventContext<E, EO> extends EventContext<E, EO> {\n invokeHandlers?: Map<string, Map<Handler<any>, InternalInvokeHandler<any>>>\n}\n\nexport function defineInvoke<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n CtxExt = any,\n EOpts = any,\n ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>,\n>(ctx: ECtx, event: InvokeEventa<Res, Req, ResErr, ReqErr>): InvokeFunction<Res, Req, ECtx> {\n const mInvokeIdPromiseResolvers = new Map<string, (value: Res | PromiseLike<Res>) => void>()\n const mInvokeIdPromiseRejectors = new Map<string, (err?: any) => void>()\n\n function _invoke(req: Req, options?: { invokeRequest?: ExtractInvokeRequest<ECtx> }): Promise<Res> {\n return new Promise<Res>((resolve, reject) => {\n const invokeId = nanoid()\n mInvokeIdPromiseResolvers.set(invokeId, resolve)\n mInvokeIdPromiseRejectors.set(invokeId, reject)\n\n const invokeReceiveEvent = defineEventa(`${event.receiveEvent.id}-${invokeId}`) as ReceiveEvent<Res>\n const invokeReceiveEventError = defineEventa(`${event.receiveEventError.id}-${invokeId}`) as ReceiveEventError<Res, Req, ResErr, ReqErr>\n\n ctx.on(invokeReceiveEvent, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n const { content } = payload.body\n mInvokeIdPromiseResolvers.get(invokeId)?.(content as Res)\n mInvokeIdPromiseResolvers.delete(invokeId)\n mInvokeIdPromiseRejectors.delete(invokeId)\n ctx.off(invokeReceiveEvent)\n ctx.off(invokeReceiveEventError)\n })\n\n ctx.on(invokeReceiveEventError, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n const { error } = payload.body.content\n mInvokeIdPromiseRejectors.get(invokeId)?.(error)\n mInvokeIdPromiseRejectors.delete(invokeId)\n mInvokeIdPromiseResolvers.delete(invokeId)\n ctx.off(invokeReceiveEvent)\n ctx.off(invokeReceiveEventError)\n })\n\n ctx.emit(event.sendEvent, { invokeId, content: req }, options as any) // emit: event_trigger\n })\n }\n\n return _invoke as InvokeFunction<Res, Req, ECtx>\n}\n\nexport function defineInvokes<\n EK extends string,\n EventMap extends Record<EK, InvokeEventa<any, any, any, any>>,\n CtxExt = any,\n EOpts = any,\n ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>,\n>(ctx: ECtx, events: EventMap): InvokeFunctionMap<EventMap, ECtx> {\n return (Object.keys(events) as EK[]).reduce((invokes, key) => {\n invokes[key] = defineInvoke(ctx, events[key])\n return invokes\n }, {} as Record<EK, InvokeFunction<any, any, ECtx>>) as InvokeFunctionMap<EventMap, ECtx>\n}\n\n/**\n * Define an invoke handler for a specific invoke event.\n *\n * @param ctx The event context in which to define the invoke handler.\n * @param event The invoke event for which the handler is to be defined.\n * @param handler The handler function to be invoked when the event is triggered.\n * @returns A function that can be called to remove the invoke handler.\n */\nexport function defineInvokeHandler<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n CtxExt = any,\n EOpts extends { raw?: any } = any,\n>(\n ctx: InvocableEventContext<CtxExt, EOpts>,\n event: InvokeEventa<Res, Req, ResErr, ReqErr>,\n handler: Handler<Res, Req, InvocableEventContext<CtxExt, EOpts>, EOpts>,\n): () => void {\n if (!ctx.invokeHandlers) {\n ctx.invokeHandlers = new Map()\n }\n\n let handlers = ctx.invokeHandlers?.get(event.sendEvent.id)\n if (!handlers) {\n handlers = new Map()\n ctx.invokeHandlers?.set(event.sendEvent.id, handlers)\n }\n\n let internalHandler = handlers.get(handler) as InternalInvokeHandler<Res, Req, ResErr, ReqErr, EOpts> | undefined\n if (!internalHandler) {\n internalHandler = async (payload, options) => { // on: event_trigger\n if (!payload.body) {\n return\n }\n if (!payload.body.invokeId) {\n return\n }\n\n try {\n const response = await handler(payload.body?.content as Req, options) // Call the handler function with the request payload\n ctx.emit(\n { ...defineEventa(`${event.receiveEvent.id}-${payload.body.invokeId}`), invokeType: event.receiveEvent.invokeType } as ReceiveEvent<ExtendableInvokeResponse<Res, InvocableEventContext<CtxExt, EOpts>>>,\n { ...payload.body, content: response },\n options,\n ) // emit: event_response\n }\n catch (error) {\n // TODO: to error object\n ctx.emit(\n { ...defineEventa(`${event.receiveEventError.id}-${payload.body.invokeId}`), invokeType: event.receiveEventError.invokeType } as ReceiveEventError<Res, Req, ResErr, ReqErr>,\n { ...payload.body, content: { error: error as ResErr } },\n options,\n )\n }\n }\n\n handlers.set(handler, internalHandler)\n ctx.on(event.sendEvent, internalHandler)\n }\n\n return () => ctx.off(event.sendEvent, internalHandler)\n}\n\nexport function defineInvokeHandlers<\n EK extends string,\n EventMap extends Record<EK, InvokeEventa<any, any, any, any>>,\n CtxExt = any,\n EOpts extends { raw?: any } = any,\n>(\n ctx: InvocableEventContext<CtxExt, EOpts>,\n events: EventMap,\n handlers: HandlerMap<EventMap, EOpts>,\n): Record<EK, () => void> {\n const eventKeys = Object.keys(events) as EK[]\n const handlerKeys = new Set(Object.keys(handlers) as EK[])\n\n if (eventKeys.length !== handlerKeys.size || !eventKeys.every(key => handlerKeys.has(key))) {\n throw new Error('The keys of events and handlers must match.')\n }\n\n return eventKeys.reduce((returnValues, key) => {\n returnValues[key] = defineInvokeHandler(ctx, events[key], handlers[key])\n return returnValues\n }, {} as Record<EK, () => void>)\n}\n\n/**\n * Remove one or all invoke handlers for a specific invoke event.\n *\n * @param ctx The event context from which to remove the invoke handler(s).\n * @param event The invoke event whose handlers are to be removed.\n * @param handler The specific handler to remove. If not omitted, all handlers for the event will be removed.\n * @returns `true` if at least one handler was removed, `false` otherwise\n */\nexport function undefineInvokeHandler<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n CtxExt = any,\n EOpts = any,\n>(\n ctx: InvocableEventContext<CtxExt, EOpts>,\n event: InvokeEventa<Res, Req, ResErr, ReqErr>,\n handler?: Handler<Res, Req, InvocableEventContext<CtxExt, EOpts>, EOpts>,\n): boolean {\n if (!ctx.invokeHandlers)\n return false\n\n const handlers = ctx.invokeHandlers?.get(event.sendEvent.id)\n if (!handlers)\n return false\n\n if (handler) {\n const internalHandler = handlers.get(handler)\n if (!internalHandler)\n return false\n\n ctx.off(event.sendEvent, internalHandler)\n ctx.invokeHandlers.delete(event.sendEvent.id)\n return true\n }\n\n let returnValue = false\n for (const internalHandlers of handlers.values()) {\n ctx.off(event.sendEvent, internalHandlers)\n returnValue = true\n }\n ctx.invokeHandlers.delete(event.sendEvent.id)\n return returnValue\n}\n","import type { EventContext } from './context'\nimport type {\n InvokeEventa,\n ReceiveEvent,\n ReceiveEventError,\n ReceiveEventStreamEnd,\n} from './invoke-shared'\n\nimport { defineEventa, nanoid } from './eventa'\n\nexport function defineStreamInvoke<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n E = any,\n EO = any,\n>(clientCtx: EventContext<E, EO>, event: InvokeEventa<Res, Req, ResErr, ReqErr>) {\n return (req: Req) => {\n const invokeId = nanoid()\n\n const invokeReceiveEvent = defineEventa(`${event.receiveEvent.id}-${invokeId}`) as ReceiveEvent<Res>\n const invokeReceiveEventError = defineEventa(`${event.receiveEventError.id}-${invokeId}`) as ReceiveEventError<Res, Req, ResErr, ReqErr>\n const invokeReceiveEventStreamEnd = defineEventa(`${event.receiveEventStreamEnd.id}-${invokeId}`) as ReceiveEventStreamEnd<Res>\n\n const stream = new ReadableStream<Res>({\n start(controller) {\n clientCtx.on(invokeReceiveEvent, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n controller.enqueue(payload.body.content as Res)\n })\n clientCtx.on(invokeReceiveEventError, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n controller.error(payload.body.content.error as ResErr)\n })\n clientCtx.on(invokeReceiveEventStreamEnd, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n controller.close()\n })\n },\n cancel() {\n clientCtx.off(invokeReceiveEvent)\n clientCtx.off(invokeReceiveEventError)\n clientCtx.off(invokeReceiveEventStreamEnd)\n },\n })\n\n clientCtx.emit(event.sendEvent, { invokeId, content: req }) // emit: event_trigger\n return stream\n }\n}\n\ntype StreamHandler<Res, Req = any, RawEventOptions = unknown> = (\n payload: Req,\n options?: {\n /**\n * TODO: Support aborting invoke handlers\n */\n abortController?: AbortController\n } & RawEventOptions,\n) => AsyncGenerator<Res, void, unknown>\n\nexport function defineStreamInvokeHandler<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n E = any,\n EO extends { raw?: any } = any,\n>(serverCtx: EventContext<E, EO>, event: InvokeEventa<Res, Req, ResErr, ReqErr>, fn: StreamHandler<Res, Req, EO>) {\n serverCtx.on(event.sendEvent, async (payload, options) => { // on: event_trigger\n if (!payload.body) {\n return\n }\n if (!payload.body.invokeId) {\n return\n }\n\n const invokeReceiveEvent = defineEventa(`${event.receiveEvent.id}-${payload.body.invokeId}`) as ReceiveEvent<Res>\n const invokeReceiveEventError = defineEventa(`${event.receiveEventError.id}-${payload.body.invokeId}`) as ReceiveEventError<Res, Req, ResErr, ReqErr>\n const invokeReceiveEventStreamEnd = defineEventa(`${event.receiveEventStreamEnd.id}-${payload.body.invokeId}`) as ReceiveEventStreamEnd<Res>\n\n try {\n const generator = fn(payload.body.content as Req, options) // Call the handler function with the request payload\n for await (const res of generator) {\n serverCtx.emit(invokeReceiveEvent, { ...payload.body, content: res }, options) // emit: event_response\n }\n\n serverCtx.emit(invokeReceiveEventStreamEnd, { ...payload.body, content: undefined }, options) // emit: event_stream_end\n }\n catch (error) {\n serverCtx.emit(invokeReceiveEventError, { ...payload.body, content: { error: error as ResErr } }, options) // emit: event_response with error\n }\n })\n}\n\nexport function toStreamHandler<Req, Res, EO extends { raw?: any } = any>(handler: (context: { payload: Req, options?: EO, emit: (data: Res) => void }) => Promise<void>): StreamHandler<Res, Req, EO> {\n return (payload, options) => {\n const values: Promise<[Res, boolean]>[] = []\n let resolve: (x: [Res, boolean]) => void\n let handlerError: Error | null = null\n\n values.push(new Promise((r) => {\n resolve = r\n }))\n\n const emit = (data: Res) => {\n resolve([data, false])\n values.push(new Promise((r) => {\n resolve = r\n }))\n }\n\n // Start the handler and mark completion when done\n handler({ payload, options, emit })\n .then(() => {\n resolve([undefined as any, true])\n })\n .catch((err) => {\n handlerError = err\n resolve([undefined as any, true])\n })\n\n return (async function* () {\n let val: Res\n for (let i = 0, done = false; !done; i++) {\n [val, done] = await values[i]\n delete values[i] // Clean up memory\n\n if (handlerError) {\n throw handlerError\n }\n\n if (!done) {\n yield val\n }\n }\n }())\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"src-Bnf7MdlN.mjs","names":["values: Promise<[Res, boolean]>[]","resolve: (x: [Res, boolean]) => void","handlerError: Error | null","val: Res"],"sources":["../src/invoke-shared.ts","../src/invoke.ts","../src/stream.ts"],"sourcesContent":["import type { Eventa, EventTag } from './eventa'\n\nimport { defineEventa, nanoid } from './eventa'\n\nexport enum InvokeEventType {\n SendEvent,\n SendEventError,\n ReceiveEvent,\n ReceiveEventError,\n ReceiveEventStreamEnd,\n}\n\nexport interface SendEvent<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{ invokeId: string, content: Req }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.SendEvent\n}\nexport interface SendEventError<Res, Req = undefined, _ = undefined, ReqErr = Error> extends Eventa<{ invokeId: string, content: ReqErr }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.SendEventError\n}\nexport interface ReceiveEvent<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{ invokeId: string, content: Res }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.ReceiveEvent\n}\nexport interface ReceiveEventError<Res, Req = undefined, ResErr = undefined, _ = undefined> extends Eventa<{ invokeId: string, content: { error: ResErr } }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.ReceiveEventError\n}\nexport interface ReceiveEventStreamEnd<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{ invokeId: string, content: undefined }> {\n id: EventTag<Res, Req>\n invokeType: InvokeEventType.ReceiveEventStreamEnd\n}\n\nexport interface InvokeEventa<Res, Req = undefined, ResErr = Error, ReqErr = Error> {\n sendEvent: SendEvent<Res, Req, ResErr, ReqErr>\n sendEventError: SendEventError<Res, Req, ResErr, ReqErr>\n receiveEvent: ReceiveEvent<Res, Req, ResErr, ReqErr>\n receiveEventError: ReceiveEventError<Res, Req, ResErr, ReqErr>\n receiveEventStreamEnd: ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr>\n}\n\nexport type InferSendEvent<T> = T extends { sendEvent: SendEvent<infer Res, infer Req, infer ResErr, infer ReqErr> }\n ? SendEvent<Res, Req, ResErr, ReqErr>\n : never\n\nexport type InferSendEventError<T> = T extends { sendEventError: SendEventError<infer Res, infer Req, infer ResErr, infer ReqErr> }\n ? SendEventError<Res, Req, ResErr, ReqErr>\n : never\n\nexport type InferReceiveEvent<T> = T extends { receiveEvent: ReceiveEvent<infer Res, infer Req, infer ResErr, infer ReqErr> }\n ? ReceiveEvent<Res, Req, ResErr, ReqErr>\n : never\n\nexport type InferReceiveEventError<T> = T extends { receiveEventError: ReceiveEventError<infer Res, infer Req, infer ResErr, infer ReqErr> }\n ? ReceiveEventError<Res, Req, ResErr, ReqErr>\n : never\n\nexport type InferReceiveEventStreamEnd<T> = T extends { receiveEventStreamEnd: ReceiveEventStreamEnd<infer Res, infer Req, infer ResErr, infer ReqErr> }\n ? ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr>\n : never\n\nexport function defineInvokeEventa<Res, Req = undefined, ResErr = Error, ReqErr = Error>(tag?: string) {\n if (!tag) {\n tag = nanoid()\n }\n\n const sendEvent = {\n ...defineEventa<InvokeEventType.SendEvent>(`${tag}-send`),\n invokeType: InvokeEventType.SendEvent,\n } as SendEvent<Res, Req, ResErr, ReqErr>\n const sendEventError = {\n ...defineEventa<InvokeEventType.SendEventError>(`${tag}-send-error`),\n invokeType: InvokeEventType.SendEventError,\n } as SendEventError<Res, Req, ResErr, ReqErr>\n const receiveEvent = {\n ...defineEventa<InvokeEventType.ReceiveEvent>(`${tag}-receive`),\n invokeType: InvokeEventType.ReceiveEvent,\n } as ReceiveEvent<Res, Req, ResErr, ReqErr>\n const receiveEventError = {\n ...defineEventa<InvokeEventType.ReceiveEventError>(`${tag}-receive-error`),\n invokeType: InvokeEventType.ReceiveEventError,\n } as ReceiveEventError<Res, Req, ResErr, ReqErr>\n const receiveEventStreamEnd = {\n ...defineEventa<InvokeEventType.ReceiveEventStreamEnd>(`${tag}-receive-stream-end`),\n invokeType: InvokeEventType.ReceiveEventStreamEnd,\n } as ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr>\n\n return {\n sendEvent,\n sendEventError,\n receiveEvent,\n receiveEventError,\n receiveEventStreamEnd,\n } satisfies InvokeEventa<Res, Req, ResErr, ReqErr>\n}\n\nexport function isInvokeEventa(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any> | ReceiveEvent<any, any, any, any> | ReceiveEventError<any, any, any, any> | ReceiveEventStreamEnd<any, any, any, any> {\n if (typeof event !== 'object') {\n return false\n }\n if ('invokeType' in event) {\n return true\n }\n\n return false\n}\n\nexport function isSendEvent(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any> {\n if (!isInvokeEventa(event)) {\n return false\n }\n\n return event.invokeType === InvokeEventType.SendEvent || event.invokeType === InvokeEventType.SendEventError\n}\n\nexport function isReceiveEvent(event: Eventa<any>): event is ReceiveEvent<any, any, any, any> | ReceiveEventError<any, any, any, any> | ReceiveEventStreamEnd<any, any, any, any> {\n if (!isInvokeEventa(event)) {\n return false\n }\n\n return event.invokeType === InvokeEventType.ReceiveEvent || event.invokeType === InvokeEventType.ReceiveEventError || event.invokeType === InvokeEventType.ReceiveEventStreamEnd\n}\n","import type { EventContext } from './context'\nimport type { Eventa } from './eventa'\nimport type { InvokeEventa, ReceiveEvent, ReceiveEventError } from './invoke-shared'\n\nimport { defineEventa, nanoid } from './eventa'\nimport { isReceiveEvent } from './invoke-shared'\n\ntype IsInvokeRequestOptional<EC extends EventContext<any, any>>\n = EC extends EventContext<infer E, any>\n ? E extends { invokeRequest: any }\n ? undefined extends E['invokeRequest']\n ? true\n : false\n : E extends { invokeRequest?: any }\n ? undefined extends E['invokeRequest']\n ? true\n : false\n : true\n : true\n\ntype ExtractInvokeRequest<EC extends EventContext<any, any>>\n = EC extends EventContext<infer E, any>\n ? E extends { invokeRequest: infer IR }\n ? IR\n : E extends { invokeRequest?: infer IR }\n ? IR\n : undefined\n : undefined\n\ntype ExtractInvokeResponse<EC extends EventContext<any, any>>\n = EC extends EventContext<infer E, any>\n ? E extends { invokeResponse: infer IR }\n ? IR\n : E extends { invokeResponse?: infer IR }\n ? IR\n : undefined\n : undefined\n\nexport type InvokeFunction<Res, Req, EC extends EventContext<any, any>>\n = [Req] extends [undefined]\n ? IsInvokeRequestOptional<EC> extends true\n ? (req?: Req, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res>\n : (req: Req, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res>\n : IsInvokeRequestOptional<EC> extends true\n ? (req: Req, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res>\n : (req: Req, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res>\n\nexport type InvokeFunctionMap<EventMap extends Record<string, InvokeEventa<any, any, any, any>>, EC extends EventContext<any, any>> = {\n [K in keyof EventMap]: EventMap[K] extends InvokeEventa<infer Res, infer Req, any, any> ? InvokeFunction<Res, Req, EC> : never\n}\n\nexport type ExtendableInvokeResponse<Res, EC extends EventContext<any, any>>\n = | Promise<Res>\n | Res\n | Promise<{ response: Res, invokeResponse?: ExtractInvokeResponse<EC> }>\n | { response: Res, invokeResponse?: ExtractInvokeResponse<EC> }\n\nexport function isExtendableInvokeResponseLike<Res, EC extends EventContext<any, any>>(value: Eventa<unknown> | ReceiveEvent<{ response: Res, invokeResponse?: unknown }>): value is ReceiveEvent<{ response: Res, invokeResponse?: ExtractInvokeResponse<EC> }> {\n if (!isReceiveEvent(value)) {\n return false\n }\n\n return typeof value.body?.content === 'object'\n && value.body?.content != null\n && 'response' in value.body.content\n && (\n !('invokeResponse' in value.body.content)\n || (\n 'invokeResponse' in value.body.content\n && (\n typeof value.body.content.invokeResponse === 'object'\n || typeof value.body.content.invokeResponse === 'undefined'\n )\n )\n )\n}\n\nexport type Handler<Res, Req = any, EC extends EventContext<any, any> = EventContext<any, any>, RawEventOptions = unknown> = (\n payload: Req,\n options?: {\n /**\n * TODO: Support aborting invoke handlers\n */\n abortController?: AbortController\n } & RawEventOptions,\n) => ExtendableInvokeResponse<Res, EC>\n\ntype InternalInvokeHandler<\n Res,\n Req = any,\n ResErr = Error,\n ReqErr = Error,\n EO = any,\n> = (params: InvokeEventa<Res, Req, ResErr, ReqErr>['sendEvent'], eventOptions?: EO) => void\n\nexport type HandlerMap<\n EventMap extends Record<string, InvokeEventa<any, any, any, any>>,\n EO = any,\n EC extends EventContext<any, any> = EventContext<any, any>,\n> = {\n [K in keyof EventMap]: EventMap[K] extends InvokeEventa<infer Res, infer Req, any, any>\n ? Handler<Res, Req, EC, EO>\n : never\n}\n\nexport interface InvocableEventContext<E, EO> extends EventContext<E, EO> {\n invokeHandlers?: Map<string, Map<Handler<any>, InternalInvokeHandler<any>>>\n}\n\nexport function defineInvoke<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n CtxExt = any,\n EOpts = any,\n ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>,\n>(ctx: ECtx, event: InvokeEventa<Res, Req, ResErr, ReqErr>): InvokeFunction<Res, Req, ECtx> {\n const mInvokeIdPromiseResolvers = new Map<string, (value: Res | PromiseLike<Res>) => void>()\n const mInvokeIdPromiseRejectors = new Map<string, (err?: any) => void>()\n\n function _invoke(req: Req, options?: { invokeRequest?: ExtractInvokeRequest<ECtx> }): Promise<Res> {\n return new Promise<Res>((resolve, reject) => {\n const invokeId = nanoid()\n mInvokeIdPromiseResolvers.set(invokeId, resolve)\n mInvokeIdPromiseRejectors.set(invokeId, reject)\n\n const invokeReceiveEvent = defineEventa(`${event.receiveEvent.id}-${invokeId}`) as ReceiveEvent<Res>\n const invokeReceiveEventError = defineEventa(`${event.receiveEventError.id}-${invokeId}`) as ReceiveEventError<Res, Req, ResErr, ReqErr>\n\n ctx.on(invokeReceiveEvent, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n const { content } = payload.body\n mInvokeIdPromiseResolvers.get(invokeId)?.(content as Res)\n mInvokeIdPromiseResolvers.delete(invokeId)\n mInvokeIdPromiseRejectors.delete(invokeId)\n ctx.off(invokeReceiveEvent)\n ctx.off(invokeReceiveEventError)\n })\n\n ctx.on(invokeReceiveEventError, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n const { error } = payload.body.content\n mInvokeIdPromiseRejectors.get(invokeId)?.(error)\n mInvokeIdPromiseRejectors.delete(invokeId)\n mInvokeIdPromiseResolvers.delete(invokeId)\n ctx.off(invokeReceiveEvent)\n ctx.off(invokeReceiveEventError)\n })\n\n ctx.emit(event.sendEvent, { invokeId, content: req }, options as any) // emit: event_trigger\n })\n }\n\n return _invoke as InvokeFunction<Res, Req, ECtx>\n}\n\nexport function defineInvokes<\n EK extends string,\n EventMap extends Record<EK, InvokeEventa<any, any, any, any>>,\n CtxExt = any,\n EOpts = any,\n ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>,\n>(ctx: ECtx, events: EventMap): InvokeFunctionMap<EventMap, ECtx> {\n return (Object.keys(events) as EK[]).reduce((invokes, key) => {\n invokes[key] = defineInvoke(ctx, events[key])\n return invokes\n }, {} as Record<EK, InvokeFunction<any, any, ECtx>>) as InvokeFunctionMap<EventMap, ECtx>\n}\n\n/**\n * Define an invoke handler for a specific invoke event.\n *\n * @param ctx The event context in which to define the invoke handler.\n * @param event The invoke event for which the handler is to be defined.\n * @param handler The handler function to be invoked when the event is triggered.\n * @returns A function that can be called to remove the invoke handler.\n */\nexport function defineInvokeHandler<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n CtxExt = any,\n EOpts extends { raw?: any } = any,\n>(\n ctx: InvocableEventContext<CtxExt, EOpts>,\n event: InvokeEventa<Res, Req, ResErr, ReqErr>,\n handler: Handler<Res, Req, InvocableEventContext<CtxExt, EOpts>, EOpts>,\n): () => void {\n if (!ctx.invokeHandlers) {\n ctx.invokeHandlers = new Map()\n }\n\n let handlers = ctx.invokeHandlers?.get(event.sendEvent.id)\n if (!handlers) {\n handlers = new Map()\n ctx.invokeHandlers?.set(event.sendEvent.id, handlers)\n }\n\n let internalHandler = handlers.get(handler) as InternalInvokeHandler<Res, Req, ResErr, ReqErr, EOpts> | undefined\n if (!internalHandler) {\n internalHandler = async (payload, options) => { // on: event_trigger\n if (!payload.body) {\n return\n }\n if (!payload.body.invokeId) {\n return\n }\n\n try {\n const response = await handler(payload.body?.content as Req, options) // Call the handler function with the request payload\n ctx.emit(\n { ...defineEventa(`${event.receiveEvent.id}-${payload.body.invokeId}`), invokeType: event.receiveEvent.invokeType } as ReceiveEvent<ExtendableInvokeResponse<Res, InvocableEventContext<CtxExt, EOpts>>>,\n { ...payload.body, content: response },\n options,\n ) // emit: event_response\n }\n catch (error) {\n // TODO: to error object\n ctx.emit(\n { ...defineEventa(`${event.receiveEventError.id}-${payload.body.invokeId}`), invokeType: event.receiveEventError.invokeType } as ReceiveEventError<Res, Req, ResErr, ReqErr>,\n { ...payload.body, content: { error: error as ResErr } },\n options,\n )\n }\n }\n\n handlers.set(handler, internalHandler)\n ctx.on(event.sendEvent, internalHandler)\n }\n\n return () => ctx.off(event.sendEvent, internalHandler)\n}\n\nexport function defineInvokeHandlers<\n EK extends string,\n EventMap extends Record<EK, InvokeEventa<any, any, any, any>>,\n CtxExt = any,\n EOpts extends { raw?: any } = any,\n>(\n ctx: InvocableEventContext<CtxExt, EOpts>,\n events: EventMap,\n handlers: HandlerMap<EventMap, EOpts>,\n): Record<EK, () => void> {\n const eventKeys = Object.keys(events) as EK[]\n const handlerKeys = new Set(Object.keys(handlers) as EK[])\n\n if (eventKeys.length !== handlerKeys.size || !eventKeys.every(key => handlerKeys.has(key))) {\n throw new Error('The keys of events and handlers must match.')\n }\n\n return eventKeys.reduce((returnValues, key) => {\n returnValues[key] = defineInvokeHandler(ctx, events[key], handlers[key])\n return returnValues\n }, {} as Record<EK, () => void>)\n}\n\n/**\n * Remove one or all invoke handlers for a specific invoke event.\n *\n * @param ctx The event context from which to remove the invoke handler(s).\n * @param event The invoke event whose handlers are to be removed.\n * @param handler The specific handler to remove. If not omitted, all handlers for the event will be removed.\n * @returns `true` if at least one handler was removed, `false` otherwise\n */\nexport function undefineInvokeHandler<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n CtxExt = any,\n EOpts = any,\n>(\n ctx: InvocableEventContext<CtxExt, EOpts>,\n event: InvokeEventa<Res, Req, ResErr, ReqErr>,\n handler?: Handler<Res, Req, InvocableEventContext<CtxExt, EOpts>, EOpts>,\n): boolean {\n if (!ctx.invokeHandlers)\n return false\n\n const handlers = ctx.invokeHandlers?.get(event.sendEvent.id)\n if (!handlers)\n return false\n\n if (handler) {\n const internalHandler = handlers.get(handler)\n if (!internalHandler)\n return false\n\n ctx.off(event.sendEvent, internalHandler)\n ctx.invokeHandlers.delete(event.sendEvent.id)\n return true\n }\n\n let returnValue = false\n for (const internalHandlers of handlers.values()) {\n ctx.off(event.sendEvent, internalHandlers)\n returnValue = true\n }\n ctx.invokeHandlers.delete(event.sendEvent.id)\n return returnValue\n}\n","import type { EventContext } from './context'\nimport type {\n InvokeEventa,\n ReceiveEvent,\n ReceiveEventError,\n ReceiveEventStreamEnd,\n} from './invoke-shared'\n\nimport { defineEventa, nanoid } from './eventa'\n\nexport function defineStreamInvoke<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n E = any,\n EO = any,\n>(clientCtx: EventContext<E, EO>, event: InvokeEventa<Res, Req, ResErr, ReqErr>) {\n return (req: Req) => {\n const invokeId = nanoid()\n\n const invokeReceiveEvent = defineEventa(`${event.receiveEvent.id}-${invokeId}`) as ReceiveEvent<Res>\n const invokeReceiveEventError = defineEventa(`${event.receiveEventError.id}-${invokeId}`) as ReceiveEventError<Res, Req, ResErr, ReqErr>\n const invokeReceiveEventStreamEnd = defineEventa(`${event.receiveEventStreamEnd.id}-${invokeId}`) as ReceiveEventStreamEnd<Res>\n\n const stream = new ReadableStream<Res>({\n start(controller) {\n clientCtx.on(invokeReceiveEvent, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n controller.enqueue(payload.body.content as Res)\n })\n clientCtx.on(invokeReceiveEventError, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n controller.error(payload.body.content.error as ResErr)\n })\n clientCtx.on(invokeReceiveEventStreamEnd, (payload) => {\n if (!payload.body) {\n return\n }\n if (payload.body.invokeId !== invokeId) {\n return\n }\n\n controller.close()\n })\n },\n cancel() {\n clientCtx.off(invokeReceiveEvent)\n clientCtx.off(invokeReceiveEventError)\n clientCtx.off(invokeReceiveEventStreamEnd)\n },\n })\n\n clientCtx.emit(event.sendEvent, { invokeId, content: req }) // emit: event_trigger\n return stream\n }\n}\n\ntype StreamHandler<Res, Req = any, RawEventOptions = unknown> = (\n payload: Req,\n options?: {\n /**\n * TODO: Support aborting invoke handlers\n */\n abortController?: AbortController\n } & RawEventOptions,\n) => AsyncGenerator<Res, void, unknown>\n\nexport function defineStreamInvokeHandler<\n Res,\n Req = undefined,\n ResErr = Error,\n ReqErr = Error,\n E = any,\n EO extends { raw?: any } = any,\n>(serverCtx: EventContext<E, EO>, event: InvokeEventa<Res, Req, ResErr, ReqErr>, fn: StreamHandler<Res, Req, EO>) {\n serverCtx.on(event.sendEvent, async (payload, options) => { // on: event_trigger\n if (!payload.body) {\n return\n }\n if (!payload.body.invokeId) {\n return\n }\n\n const invokeReceiveEvent = defineEventa(`${event.receiveEvent.id}-${payload.body.invokeId}`) as ReceiveEvent<Res>\n const invokeReceiveEventError = defineEventa(`${event.receiveEventError.id}-${payload.body.invokeId}`) as ReceiveEventError<Res, Req, ResErr, ReqErr>\n const invokeReceiveEventStreamEnd = defineEventa(`${event.receiveEventStreamEnd.id}-${payload.body.invokeId}`) as ReceiveEventStreamEnd<Res>\n\n try {\n const generator = fn(payload.body.content as Req, options) // Call the handler function with the request payload\n for await (const res of generator) {\n serverCtx.emit(invokeReceiveEvent, { ...payload.body, content: res }, options) // emit: event_response\n }\n\n serverCtx.emit(invokeReceiveEventStreamEnd, { ...payload.body, content: undefined }, options) // emit: event_stream_end\n }\n catch (error) {\n serverCtx.emit(invokeReceiveEventError, { ...payload.body, content: { error: error as ResErr } }, options) // emit: event_response with error\n }\n })\n}\n\nexport function toStreamHandler<Req, Res, EO extends { raw?: any } = any>(handler: (context: { payload: Req, options?: EO, emit: (data: Res) => void }) => Promise<void>): StreamHandler<Res, Req, EO> {\n return (payload, options) => {\n const values: Promise<[Res, boolean]>[] = []\n let resolve: (x: [Res, boolean]) => void\n let handlerError: Error | null = null\n\n values.push(new Promise((r) => {\n resolve = r\n }))\n\n const emit = (data: Res) => {\n resolve([data, false])\n values.push(new Promise((r) => {\n resolve = r\n }))\n }\n\n // Start the handler and mark completion when done\n handler({ payload, options, emit })\n .then(() => {\n resolve([undefined as any, true])\n })\n .catch((err) => {\n handlerError = err\n resolve([undefined as any, true])\n })\n\n return (async function* () {\n let val: Res\n for (let i = 0, done = false; !done; i++) {\n [val, done] = await values[i]\n delete values[i] // Clean up memory\n\n if (handlerError) {\n throw handlerError\n }\n\n if (!done) {\n yield val\n }\n }\n }())\n }\n}\n"],"mappings":"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"}
|