@moeru/eventa 0.3.0 → 1.0.0-alpha.7
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/dist/adapters/electron/main.d.mts +5 -5
- package/dist/adapters/electron/main.mjs +3 -3
- package/dist/adapters/electron/renderer.d.mts +5 -5
- package/dist/adapters/electron/renderer.mjs +3 -3
- package/dist/adapters/event-emitter/index.d.mts +4 -4
- package/dist/adapters/event-emitter/index.mjs +2 -2
- package/dist/adapters/event-target/index.d.mts +4 -4
- package/dist/adapters/event-target/index.mjs +2 -2
- package/dist/adapters/websocket/h3/index.d.mts +2 -2
- package/dist/adapters/websocket/h3/index.mjs +2 -2
- package/dist/adapters/websocket/index.d.mts +1 -1
- package/dist/adapters/websocket/native/index.d.mts +2 -2
- package/dist/adapters/websocket/native/index.mjs +2 -2
- package/dist/adapters/webworkers/index.d.mts +3 -3
- package/dist/adapters/webworkers/index.mjs +3 -3
- package/dist/adapters/webworkers/worker/index.d.mts +2 -2
- package/dist/adapters/webworkers/worker/index.mjs +3 -3
- package/dist/{context-C_-MRU46.d.mts → context-CvPT-awQ.d.mts} +3 -3
- package/dist/{context-C35Qku9U.mjs → context-Y8SMtoKx.mjs} +2 -2
- package/dist/{context-C35Qku9U.mjs.map → context-Y8SMtoKx.mjs.map} +1 -1
- package/dist/{eventa-B2HPBK4S.d.mts → eventa-DmQvmwYT.d.mts} +2 -2
- package/dist/{index-BgaYNgPh.d.mts → index-NaTw0d4N.d.mts} +4 -4
- package/dist/index.d.mts +4 -4
- package/dist/index.mjs +2 -2
- package/dist/{internal-DjiAQtsa.mjs → internal-mfpOkMuE.mjs} +3 -3
- package/dist/{internal-DjiAQtsa.mjs.map → internal-mfpOkMuE.mjs.map} +1 -1
- package/dist/invoke-CBQuKH1-.d.mts +137 -0
- package/dist/{shared-DllZ3RPS.d.mts → shared-5hbiyQt-.d.mts} +3 -3
- package/dist/{shared-DbO1rU2W.mjs → shared-DQmSel5n.mjs} +4 -4
- package/dist/{shared-DbO1rU2W.mjs.map → shared-DQmSel5n.mjs.map} +1 -1
- package/dist/{shared-Da41l-vp.mjs → shared-ZN4ksxrB.mjs} +3 -3
- package/dist/{shared-Da41l-vp.mjs.map → shared-ZN4ksxrB.mjs.map} +1 -1
- package/dist/{src-Bb-vxm5k.mjs → src-CSnWn9Kk.mjs} +26 -31
- package/dist/src-CSnWn9Kk.mjs.map +1 -0
- package/package.json +11 -11
- package/dist/invoke-LTUFMmHi.d.mts +0 -137
- package/dist/src-Bb-vxm5k.mjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "../../eventa-
|
|
2
|
-
import { EventContext } from "../../context-
|
|
3
|
-
import "../../invoke-
|
|
4
|
-
import "../../index-
|
|
5
|
-
import {
|
|
1
|
+
import "../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../context-CvPT-awQ.mjs";
|
|
3
|
+
import "../../invoke-CBQuKH1-.mjs";
|
|
4
|
+
import "../../index-NaTw0d4N.mjs";
|
|
5
|
+
import { n as errorEvent, t as Payload } from "../../shared-5hbiyQt-.mjs";
|
|
6
6
|
import { BrowserWindow, IpcMain, IpcMainEvent } from "electron";
|
|
7
7
|
|
|
8
8
|
//#region src/adapters/electron/main.d.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../../src-
|
|
3
|
-
import {
|
|
1
|
+
import { c as matchBy, i as and, n as EventaFlowDirection, o as defineInboundEventa, s as defineOutboundEventa, t as createContext$1 } from "../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import "../../src-CSnWn9Kk.mjs";
|
|
3
|
+
import { n as generatePayload, r as parsePayload, t as errorEvent } from "../../shared-ZN4ksxrB.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/electron/main.ts
|
|
6
6
|
function withRemoval(ipcMain, type, listener) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "../../eventa-
|
|
2
|
-
import { EventContext } from "../../context-
|
|
3
|
-
import "../../invoke-
|
|
4
|
-
import "../../index-
|
|
5
|
-
import {
|
|
1
|
+
import "../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../context-CvPT-awQ.mjs";
|
|
3
|
+
import "../../invoke-CBQuKH1-.mjs";
|
|
4
|
+
import "../../index-NaTw0d4N.mjs";
|
|
5
|
+
import { n as errorEvent, t as Payload } from "../../shared-5hbiyQt-.mjs";
|
|
6
6
|
import { IpcRenderer, IpcRendererListener } from "@electron-toolkit/preload";
|
|
7
7
|
|
|
8
8
|
//#region src/adapters/electron/renderer.d.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../../src-
|
|
3
|
-
import {
|
|
1
|
+
import { c as matchBy, i as and, n as EventaFlowDirection, o as defineInboundEventa, s as defineOutboundEventa, t as createContext$1 } from "../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import "../../src-CSnWn9Kk.mjs";
|
|
3
|
+
import { n as generatePayload, r as parsePayload, t as errorEvent } from "../../shared-ZN4ksxrB.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/electron/renderer.ts
|
|
6
6
|
function createContext(ipcRenderer, options) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { EventTag, EventaType } from "../../eventa-
|
|
2
|
-
import { EventContext } from "../../context-
|
|
3
|
-
import "../../invoke-
|
|
4
|
-
import "../../index-
|
|
1
|
+
import { n as EventTag, s as EventaType } from "../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../context-CvPT-awQ.mjs";
|
|
3
|
+
import "../../invoke-CBQuKH1-.mjs";
|
|
4
|
+
import "../../index-NaTw0d4N.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/adapters/event-emitter/shared.d.ts
|
|
7
7
|
interface Payload<T> {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../../src-
|
|
1
|
+
import { a as defineEventa, c as matchBy, i as and, l as nanoid, n as EventaFlowDirection, o as defineInboundEventa, s as defineOutboundEventa, t as createContext$1 } from "../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import "../../src-CSnWn9Kk.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/event-emitter/internal.ts
|
|
5
5
|
function generatePayload(type, payload) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { EventTag, EventaType } from "../../eventa-
|
|
2
|
-
import { EventContext } from "../../context-
|
|
3
|
-
import "../../invoke-
|
|
4
|
-
import "../../index-
|
|
1
|
+
import { n as EventTag, s as EventaType } from "../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../context-CvPT-awQ.mjs";
|
|
3
|
+
import "../../invoke-CBQuKH1-.mjs";
|
|
4
|
+
import "../../index-NaTw0d4N.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/adapters/event-target/shared.d.ts
|
|
7
7
|
interface CustomEventDetail<T> {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../../src-
|
|
1
|
+
import { a as defineEventa, c as matchBy, i as and, l as nanoid, n as EventaFlowDirection, o as defineInboundEventa, r as EventaType, s as defineOutboundEventa, t as createContext$1 } from "../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import "../../src-CSnWn9Kk.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/event-target/internal.ts
|
|
5
5
|
function generateCustomEventDetail(type, payload) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Eventa } from "../../../eventa-
|
|
2
|
-
import { EventContext } from "../../../context-
|
|
1
|
+
import { r as Eventa } from "../../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../../context-CvPT-awQ.mjs";
|
|
3
3
|
import { Hooks, Message, Peer, WSError } from "crossws";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/websocket/h3/global.d.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { a as defineEventa, c as matchBy, i as and, n as EventaFlowDirection, o as defineInboundEventa, s as defineOutboundEventa, t as createContext } from "../../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import { n as parseWebsocketPayload, t as generateWebsocketPayload } from "../../../internal-mfpOkMuE.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/websocket/h3/global.ts
|
|
5
5
|
const wsConnectedEvent = defineEventa("eventa:adapters:websocket-global:connected");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Eventa } from "../../../eventa-
|
|
2
|
-
import { EventContext } from "../../../context-
|
|
1
|
+
import { r as Eventa } from "../../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../../context-CvPT-awQ.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/websocket/native/index.d.ts
|
|
5
5
|
declare const wsConnectedEvent: Eventa<{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { a as defineEventa, c as matchBy, i as and, n as EventaFlowDirection, o as defineInboundEventa, s as defineOutboundEventa, t as createContext$1 } from "../../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import { n as parseWebsocketPayload, t as generateWebsocketPayload } from "../../../internal-mfpOkMuE.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/websocket/native/index.ts
|
|
5
5
|
const wsConnectedEvent = defineEventa();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { EventTag, Eventa } from "../../eventa-
|
|
2
|
-
import { EventContext } from "../../context-
|
|
3
|
-
import { ExtendableInvokeResponse } from "../../invoke-
|
|
1
|
+
import { n as EventTag, r as Eventa } from "../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../context-CvPT-awQ.mjs";
|
|
3
|
+
import { t as ExtendableInvokeResponse } from "../../invoke-CBQuKH1-.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/webworkers/shared.d.ts
|
|
6
6
|
interface WorkerPayload<T> {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../../src-
|
|
3
|
-
import {
|
|
1
|
+
import { c as matchBy, i as and, n as EventaFlowDirection, o as defineInboundEventa, s as defineOutboundEventa, t as createContext$1 } from "../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import "../../src-CSnWn9Kk.mjs";
|
|
3
|
+
import { a as withTransfer, c as parseWorkerPayload, i as normalizeOnListenerParameters, n as defineWorkerEventa, o as workerErrorEvent, r as isWorkerEventa, s as generateWorkerPayload, t as defineOutboundWorkerEventa } from "../../shared-DQmSel5n.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/webworkers/index.ts
|
|
6
6
|
function createContext(worker) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../../../eventa-
|
|
2
|
-
import { EventContext } from "../../../context-
|
|
1
|
+
import "../../../eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "../../../context-CvPT-awQ.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/webworkers/worker/index.d.ts
|
|
5
5
|
declare function createContext(options?: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../../../src-
|
|
3
|
-
import {
|
|
1
|
+
import { c as matchBy, i as and, n as EventaFlowDirection, o as defineInboundEventa, s as defineOutboundEventa, t as createContext$1 } from "../../../context-Y8SMtoKx.mjs";
|
|
2
|
+
import "../../../src-CSnWn9Kk.mjs";
|
|
3
|
+
import { c as parseWorkerPayload, i as normalizeOnListenerParameters, o as workerErrorEvent, r as isWorkerEventa, s as generateWorkerPayload } from "../../../shared-DQmSel5n.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/webworkers/worker/index.ts
|
|
6
6
|
function createContext(options) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventTag,
|
|
1
|
+
import { n as EventTag, o as EventaMatchExpression, r as Eventa } from "./eventa-DmQvmwYT.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/context-hooks.d.ts
|
|
4
4
|
interface EventaAdapterProps<EmitOptions = any> {
|
|
@@ -37,5 +37,5 @@ interface EventContext<Extensions = undefined, EmitOptions = undefined> {
|
|
|
37
37
|
}
|
|
38
38
|
type EventContextEmitFn = EventContext['emit'];
|
|
39
39
|
//#endregion
|
|
40
|
-
export {
|
|
41
|
-
//# sourceMappingURL=context-
|
|
40
|
+
export { EventContextEmitFn as n, createContext as r, EventContext as t };
|
|
41
|
+
//# sourceMappingURL=context-CvPT-awQ.d.mts.map
|
|
@@ -187,5 +187,5 @@ function createContext(props = {}) {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
//#endregion
|
|
190
|
-
export {
|
|
191
|
-
//# sourceMappingURL=context-
|
|
190
|
+
export { defineEventa as a, matchBy as c, and as i, nanoid as l, EventaFlowDirection as n, defineInboundEventa as o, EventaType as r, defineOutboundEventa as s, createContext as t, or as u };
|
|
191
|
+
//# sourceMappingURL=context-Y8SMtoKx.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-C35Qku9U.mjs","names":["matcher: (event: E) => boolean | Promise<boolean>"],"sources":["../src/eventa.ts","../src/context.ts"],"sourcesContent":["import isGlobMatch from 'picomatch'\n\nimport { customAlphabet } from 'nanoid'\n\nexport function nanoid() {\n return customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 16)()\n}\n\nexport interface InvokeEventConstraint<_Req, _Res> {}\n\nexport type EventTag<Res, Req> = string & InvokeEventConstraint<Req, Res>\n\nexport enum EventaType {\n Event = 'event',\n MatchExpression = 'matchExpression',\n}\n\nexport enum EventaFlowDirection {\n Inbound = 'inbound',\n Outbound = 'outbound',\n}\n\nexport interface DirectionalEventa<P, T = undefined> extends Eventa<P> {\n _flowDirection: EventaFlowDirection | T\n}\n\nexport interface InboundEventa<T> extends DirectionalEventa<T> {\n _flowDirection: EventaFlowDirection.Inbound\n}\n\nexport interface OutboundEventa<T> extends DirectionalEventa<T> {\n _flowDirection: EventaFlowDirection.Outbound\n}\n\nexport function defineInboundEventa<T>(id?: string): InboundEventa<T> {\n return {\n ...defineEventa<T>(id),\n _flowDirection: EventaFlowDirection.Inbound,\n } as InboundEventa<T>\n}\n\nexport function defineOutboundEventa<T>(id?: string): OutboundEventa<T> {\n return {\n ...defineEventa<T>(id),\n _flowDirection: EventaFlowDirection.Outbound,\n } as OutboundEventa<T>\n}\n\n// type ServerInvokeHandlerEvent<Req, Res> = symbol & InvokeEventConstraint<Req, Res>\n// type ClientInvoke<Req> = symbol & InvokeEventConstraint<Req, null>\n\nexport interface EventaLike<_P = undefined, T extends EventaType = EventaType> {\n id: string\n type?: T\n}\n\nexport interface Eventa<P = unknown> extends EventaLike<P, EventaType.Event> {\n body?: P\n}\n\nexport function defineEventa<P = undefined>(id?: string): Eventa<P> {\n if (!id) {\n id = nanoid()\n }\n\n return {\n id,\n type: EventaType.Event,\n }\n}\n\nexport interface EventaMatchExpression<P = undefined> extends EventaLike<P, EventaType.MatchExpression> {\n matcher?: (event: Eventa<P>) => boolean | Promise<boolean>\n}\n\nexport function and<P>(...matchExpression: Array<EventaMatchExpression<P>>): EventaMatchExpression<P> {\n return {\n id: nanoid(),\n type: EventaType.MatchExpression,\n matcher: (event: Eventa<P>) => {\n return matchExpression.every(m => m.matcher ? m.matcher(event) : false)\n },\n }\n}\n\nexport function or<P>(...matchExpression: Array<EventaMatchExpression<P>>): EventaMatchExpression<P> {\n return {\n id: nanoid(),\n type: EventaType.MatchExpression,\n matcher: (event: Eventa<P>) => {\n return matchExpression.some(m => m.matcher ? m.matcher(event) : false)\n },\n }\n}\n\nexport function matchBy<P = undefined>(glob: string, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(options: { ids: string[] }, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(options: { eventa: Eventa<P>[] }, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(options: { types: EventaType[] }, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(regExp: RegExp, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined, E extends Eventa<P> = Eventa<P>>(matcher: (event: E) => boolean | Promise<boolean>): EventaMatchExpression<P>\nexport function matchBy<P = undefined, E extends Eventa<P> = Eventa<P>>(\n matchExpressionPossibleValues:\n | string\n | Eventa<any>\n | { ids: string[] }\n | { eventa: Eventa<P>[] }\n | { types: EventaType[] }\n | RegExp\n | ((event: E) => boolean | Promise<boolean>),\n inverted?: boolean,\n): EventaMatchExpression<P> {\n const id = nanoid()\n\n let matcher: (event: E) => boolean | Promise<boolean> = () => false\n if (typeof matchExpressionPossibleValues === 'string') {\n matcher = (eventa) => {\n return isGlobMatch(matchExpressionPossibleValues)(eventa.id)\n }\n }\n else if (typeof matchExpressionPossibleValues === 'object') {\n if ('ids' in matchExpressionPossibleValues) {\n matcher = (event: Eventa<P>) => {\n if (inverted) {\n return !matchExpressionPossibleValues.ids.includes(event.id)\n }\n\n return matchExpressionPossibleValues.ids.includes(event.id)\n }\n }\n else if ('eventa' in matchExpressionPossibleValues) {\n matcher = (event: Eventa<P>) => {\n if (inverted) {\n return !matchExpressionPossibleValues.eventa.some(e => e.id === event.id)\n }\n\n return matchExpressionPossibleValues.eventa.some(e => e.id === event.id)\n }\n }\n else if ('types' in matchExpressionPossibleValues) {\n matcher = (event: Eventa<P>) => {\n if (typeof event.type === 'undefined') {\n return false\n }\n if (inverted) {\n return !matchExpressionPossibleValues.types.includes(event.type)\n }\n\n return matchExpressionPossibleValues.types.includes(event.type)\n }\n }\n }\n else if (matchExpressionPossibleValues instanceof RegExp) {\n matcher = (event: Eventa<P>) => {\n if (inverted) {\n return !matchExpressionPossibleValues.test(event.id)\n }\n\n return matchExpressionPossibleValues.test(event.id)\n }\n }\n else if (typeof matchExpressionPossibleValues === 'function') {\n matcher = matchExpressionPossibleValues\n }\n\n return {\n id,\n type: EventaType.MatchExpression,\n matcher,\n } satisfies EventaMatchExpression<P>\n}\n","import type { EventaAdapter } from './context-hooks'\nimport type { Eventa, EventaMatchExpression, EventTag } from './eventa'\n\nimport { EventaType } from './eventa'\n\ninterface CreateContextProps<EmitOptions = any> {\n adapter?: EventaAdapter<EmitOptions>\n}\n\nexport function createContext<Extensions = any, Options = { raw: any }>(props: CreateContextProps<Options> = {}): EventContext<Extensions, Options> {\n const listeners = new Map<EventTag<any, any>, Set<(params: any, options?: Options) => any>>()\n const onceListeners = new Map<EventTag<any, any>, Set<(params: any, options?: Options) => any>>()\n\n const matchExpressions = new Map<string, EventaMatchExpression<any>>()\n const matchExpressionListeners = new Map<string, Set<(params: any, options?: Options) => any>>()\n const matchExpressionOnceListeners = new Map<string, Set<(params: any, options?: Options) => any>>()\n\n const hooks = props.adapter?.(emit).hooks\n\n function emit<P>(event: Eventa<P>, payload: P, options?: Options) {\n const emittingPayload = { ...event, body: payload }\n\n for (const listener of listeners.get(event.id) || []) {\n listener(emittingPayload, options)\n hooks?.onReceived?.(event.id, emittingPayload)\n }\n\n for (const onceListener of onceListeners.get(event.id) || []) {\n onceListener(emittingPayload, options)\n hooks?.onReceived?.(event.id, emittingPayload)\n onceListeners.get(event.id)?.delete(onceListener)\n }\n\n for (const matchExpression of matchExpressions.values()) {\n if (matchExpression.matcher) {\n const match = matchExpression.matcher(emittingPayload)\n if (!match) {\n continue\n }\n\n for (const listener of matchExpressionListeners.get(matchExpression.id) || []) {\n listener(emittingPayload, options)\n hooks?.onReceived?.(matchExpression.id, emittingPayload)\n }\n for (const onceListener of matchExpressionOnceListeners.get(matchExpression.id) || []) {\n onceListener(emittingPayload, options)\n hooks?.onReceived?.(matchExpression.id, emittingPayload)\n matchExpressionOnceListeners.get(matchExpression.id)?.delete(onceListener)\n }\n }\n }\n\n hooks?.onSent(event.id, emittingPayload, options)\n }\n\n return {\n get listeners() {\n return listeners\n },\n\n get onceListeners() {\n return onceListeners\n },\n\n emit,\n\n on<P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: Options) => void): () => void {\n if (eventOrMatchExpression.type === EventaType.Event) {\n const event = eventOrMatchExpression as Eventa<P>\n if (!listeners.has(event.id)) {\n listeners.set(event.id, new Set())\n }\n\n listeners.get(event.id)?.add(handler)\n\n return () => listeners.get(event.id)?.delete(handler)\n }\n\n if (eventOrMatchExpression.type === EventaType.MatchExpression) {\n const matchExpression = eventOrMatchExpression as EventaMatchExpression<P>\n if (!matchExpressions.has(matchExpression.id)) {\n matchExpressions.set(matchExpression.id, matchExpression as EventaMatchExpression<P>)\n }\n if (!matchExpressionListeners.has(matchExpression.id)) {\n matchExpressionListeners.set(matchExpression.id, new Set())\n }\n\n matchExpressionListeners.get(matchExpression.id)?.add(handler)\n\n return () => matchExpressionListeners.get(matchExpression.id)?.delete(handler)\n }\n\n return () => void 0\n },\n\n once<P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: Options) => void): () => void {\n if (eventOrMatchExpression.type === EventaType.Event) {\n const event = eventOrMatchExpression as Eventa<P>\n if (!onceListeners.has(event.id)) {\n onceListeners.set(event.id, new Set())\n }\n\n onceListeners.get(event.id)?.add(handler)\n\n return () => onceListeners.get(event.id)?.delete(handler)\n }\n\n if (eventOrMatchExpression.type === EventaType.MatchExpression) {\n const matchExpression = eventOrMatchExpression as EventaMatchExpression<P>\n if (!matchExpressions.has(matchExpression.id)) {\n matchExpressions.set(matchExpression.id, matchExpression as EventaMatchExpression<P>)\n }\n if (!matchExpressionListeners.has(matchExpression.id)) {\n matchExpressionListeners.set(matchExpression.id, new Set())\n }\n\n matchExpressionOnceListeners.get(matchExpression.id)?.add(handler)\n\n return () => matchExpressionOnceListeners.get(matchExpression.id)?.delete(handler)\n }\n\n return () => void 0\n },\n\n off<P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler?: (payload: Eventa<P>, options?: Options) => void) {\n switch (eventOrMatchExpression.type) {\n case EventaType.Event:\n if (handler !== undefined) {\n listeners.get(eventOrMatchExpression.id)?.delete(handler)\n onceListeners.get(eventOrMatchExpression.id)?.delete(handler)\n break\n }\n\n listeners.delete(eventOrMatchExpression.id)\n onceListeners.delete(eventOrMatchExpression.id)\n break\n case EventaType.MatchExpression:\n if (handler !== undefined) {\n matchExpressionListeners.get(eventOrMatchExpression.id)?.delete(handler)\n matchExpressionOnceListeners.get(eventOrMatchExpression.id)?.delete(handler)\n break\n }\n\n matchExpressionListeners.delete(eventOrMatchExpression.id)\n matchExpressionOnceListeners.delete(eventOrMatchExpression.id)\n break\n }\n },\n }\n}\n\nexport interface EventContext<Extensions = undefined, EmitOptions = undefined> {\n listeners: Map<EventTag<any, any>, Set<(params: any) => any>>\n onceListeners: Map<EventTag<any, any>, Set<(params: any) => any>>\n\n emit: <P>(event: Eventa<P>, payload: P, options?: EmitOptions) => void\n on: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: EmitOptions) => void) => () => void\n once: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: EmitOptions) => void) => () => void\n off: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler?: (payload: Eventa<P>, options?: EmitOptions) => void) => void\n\n /**\n * Extensions\n */\n extensions?: Extensions\n}\n\nexport type EventContextEmitFn = EventContext['emit']\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-Y8SMtoKx.mjs","names":["matcher: (event: E) => boolean | Promise<boolean>"],"sources":["../src/eventa.ts","../src/context.ts"],"sourcesContent":["import isGlobMatch from 'picomatch'\n\nimport { customAlphabet } from 'nanoid'\n\nexport function nanoid() {\n return customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 16)()\n}\n\nexport interface InvokeEventConstraint<_Req, _Res> {}\n\nexport type EventTag<Res, Req> = string & InvokeEventConstraint<Req, Res>\n\nexport enum EventaType {\n Event = 'event',\n MatchExpression = 'matchExpression',\n}\n\nexport enum EventaFlowDirection {\n Inbound = 'inbound',\n Outbound = 'outbound',\n}\n\nexport interface DirectionalEventa<P, T = undefined> extends Eventa<P> {\n _flowDirection: EventaFlowDirection | T\n}\n\nexport interface InboundEventa<T> extends DirectionalEventa<T> {\n _flowDirection: EventaFlowDirection.Inbound\n}\n\nexport interface OutboundEventa<T> extends DirectionalEventa<T> {\n _flowDirection: EventaFlowDirection.Outbound\n}\n\nexport function defineInboundEventa<T>(id?: string): InboundEventa<T> {\n return {\n ...defineEventa<T>(id),\n _flowDirection: EventaFlowDirection.Inbound,\n } as InboundEventa<T>\n}\n\nexport function defineOutboundEventa<T>(id?: string): OutboundEventa<T> {\n return {\n ...defineEventa<T>(id),\n _flowDirection: EventaFlowDirection.Outbound,\n } as OutboundEventa<T>\n}\n\n// type ServerInvokeHandlerEvent<Req, Res> = symbol & InvokeEventConstraint<Req, Res>\n// type ClientInvoke<Req> = symbol & InvokeEventConstraint<Req, null>\n\nexport interface EventaLike<_P = undefined, T extends EventaType = EventaType> {\n id: string\n type?: T\n}\n\nexport interface Eventa<P = unknown> extends EventaLike<P, EventaType.Event> {\n body?: P\n}\n\nexport function defineEventa<P = undefined>(id?: string): Eventa<P> {\n if (!id) {\n id = nanoid()\n }\n\n return {\n id,\n type: EventaType.Event,\n }\n}\n\nexport interface EventaMatchExpression<P = undefined> extends EventaLike<P, EventaType.MatchExpression> {\n matcher?: (event: Eventa<P>) => boolean | Promise<boolean>\n}\n\nexport function and<P>(...matchExpression: Array<EventaMatchExpression<P>>): EventaMatchExpression<P> {\n return {\n id: nanoid(),\n type: EventaType.MatchExpression,\n matcher: (event: Eventa<P>) => {\n return matchExpression.every(m => m.matcher ? m.matcher(event) : false)\n },\n }\n}\n\nexport function or<P>(...matchExpression: Array<EventaMatchExpression<P>>): EventaMatchExpression<P> {\n return {\n id: nanoid(),\n type: EventaType.MatchExpression,\n matcher: (event: Eventa<P>) => {\n return matchExpression.some(m => m.matcher ? m.matcher(event) : false)\n },\n }\n}\n\nexport function matchBy<P = undefined>(glob: string, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(options: { ids: string[] }, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(options: { eventa: Eventa<P>[] }, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(options: { types: EventaType[] }, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined>(regExp: RegExp, inverted?: boolean): EventaMatchExpression<P>\nexport function matchBy<P = undefined, E extends Eventa<P> = Eventa<P>>(matcher: (event: E) => boolean | Promise<boolean>): EventaMatchExpression<P>\nexport function matchBy<P = undefined, E extends Eventa<P> = Eventa<P>>(\n matchExpressionPossibleValues:\n | string\n | Eventa<any>\n | { ids: string[] }\n | { eventa: Eventa<P>[] }\n | { types: EventaType[] }\n | RegExp\n | ((event: E) => boolean | Promise<boolean>),\n inverted?: boolean,\n): EventaMatchExpression<P> {\n const id = nanoid()\n\n let matcher: (event: E) => boolean | Promise<boolean> = () => false\n if (typeof matchExpressionPossibleValues === 'string') {\n matcher = (eventa) => {\n return isGlobMatch(matchExpressionPossibleValues)(eventa.id)\n }\n }\n else if (typeof matchExpressionPossibleValues === 'object') {\n if ('ids' in matchExpressionPossibleValues) {\n matcher = (event: Eventa<P>) => {\n if (inverted) {\n return !matchExpressionPossibleValues.ids.includes(event.id)\n }\n\n return matchExpressionPossibleValues.ids.includes(event.id)\n }\n }\n else if ('eventa' in matchExpressionPossibleValues) {\n matcher = (event: Eventa<P>) => {\n if (inverted) {\n return !matchExpressionPossibleValues.eventa.some(e => e.id === event.id)\n }\n\n return matchExpressionPossibleValues.eventa.some(e => e.id === event.id)\n }\n }\n else if ('types' in matchExpressionPossibleValues) {\n matcher = (event: Eventa<P>) => {\n if (typeof event.type === 'undefined') {\n return false\n }\n if (inverted) {\n return !matchExpressionPossibleValues.types.includes(event.type)\n }\n\n return matchExpressionPossibleValues.types.includes(event.type)\n }\n }\n }\n else if (matchExpressionPossibleValues instanceof RegExp) {\n matcher = (event: Eventa<P>) => {\n if (inverted) {\n return !matchExpressionPossibleValues.test(event.id)\n }\n\n return matchExpressionPossibleValues.test(event.id)\n }\n }\n else if (typeof matchExpressionPossibleValues === 'function') {\n matcher = matchExpressionPossibleValues\n }\n\n return {\n id,\n type: EventaType.MatchExpression,\n matcher,\n } satisfies EventaMatchExpression<P>\n}\n","import type { EventaAdapter } from './context-hooks'\nimport type { Eventa, EventaMatchExpression, EventTag } from './eventa'\n\nimport { EventaType } from './eventa'\n\ninterface CreateContextProps<EmitOptions = any> {\n adapter?: EventaAdapter<EmitOptions>\n}\n\nexport function createContext<Extensions = any, Options = { raw: any }>(props: CreateContextProps<Options> = {}): EventContext<Extensions, Options> {\n const listeners = new Map<EventTag<any, any>, Set<(params: any, options?: Options) => any>>()\n const onceListeners = new Map<EventTag<any, any>, Set<(params: any, options?: Options) => any>>()\n\n const matchExpressions = new Map<string, EventaMatchExpression<any>>()\n const matchExpressionListeners = new Map<string, Set<(params: any, options?: Options) => any>>()\n const matchExpressionOnceListeners = new Map<string, Set<(params: any, options?: Options) => any>>()\n\n const hooks = props.adapter?.(emit).hooks\n\n function emit<P>(event: Eventa<P>, payload: P, options?: Options) {\n const emittingPayload = { ...event, body: payload }\n\n for (const listener of listeners.get(event.id) || []) {\n listener(emittingPayload, options)\n hooks?.onReceived?.(event.id, emittingPayload)\n }\n\n for (const onceListener of onceListeners.get(event.id) || []) {\n onceListener(emittingPayload, options)\n hooks?.onReceived?.(event.id, emittingPayload)\n onceListeners.get(event.id)?.delete(onceListener)\n }\n\n for (const matchExpression of matchExpressions.values()) {\n if (matchExpression.matcher) {\n const match = matchExpression.matcher(emittingPayload)\n if (!match) {\n continue\n }\n\n for (const listener of matchExpressionListeners.get(matchExpression.id) || []) {\n listener(emittingPayload, options)\n hooks?.onReceived?.(matchExpression.id, emittingPayload)\n }\n for (const onceListener of matchExpressionOnceListeners.get(matchExpression.id) || []) {\n onceListener(emittingPayload, options)\n hooks?.onReceived?.(matchExpression.id, emittingPayload)\n matchExpressionOnceListeners.get(matchExpression.id)?.delete(onceListener)\n }\n }\n }\n\n hooks?.onSent(event.id, emittingPayload, options)\n }\n\n return {\n get listeners() {\n return listeners\n },\n\n get onceListeners() {\n return onceListeners\n },\n\n emit,\n\n on<P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: Options) => void): () => void {\n if (eventOrMatchExpression.type === EventaType.Event) {\n const event = eventOrMatchExpression as Eventa<P>\n if (!listeners.has(event.id)) {\n listeners.set(event.id, new Set())\n }\n\n listeners.get(event.id)?.add(handler)\n\n return () => listeners.get(event.id)?.delete(handler)\n }\n\n if (eventOrMatchExpression.type === EventaType.MatchExpression) {\n const matchExpression = eventOrMatchExpression as EventaMatchExpression<P>\n if (!matchExpressions.has(matchExpression.id)) {\n matchExpressions.set(matchExpression.id, matchExpression as EventaMatchExpression<P>)\n }\n if (!matchExpressionListeners.has(matchExpression.id)) {\n matchExpressionListeners.set(matchExpression.id, new Set())\n }\n\n matchExpressionListeners.get(matchExpression.id)?.add(handler)\n\n return () => matchExpressionListeners.get(matchExpression.id)?.delete(handler)\n }\n\n return () => void 0\n },\n\n once<P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: Options) => void): () => void {\n if (eventOrMatchExpression.type === EventaType.Event) {\n const event = eventOrMatchExpression as Eventa<P>\n if (!onceListeners.has(event.id)) {\n onceListeners.set(event.id, new Set())\n }\n\n onceListeners.get(event.id)?.add(handler)\n\n return () => onceListeners.get(event.id)?.delete(handler)\n }\n\n if (eventOrMatchExpression.type === EventaType.MatchExpression) {\n const matchExpression = eventOrMatchExpression as EventaMatchExpression<P>\n if (!matchExpressions.has(matchExpression.id)) {\n matchExpressions.set(matchExpression.id, matchExpression as EventaMatchExpression<P>)\n }\n if (!matchExpressionListeners.has(matchExpression.id)) {\n matchExpressionListeners.set(matchExpression.id, new Set())\n }\n\n matchExpressionOnceListeners.get(matchExpression.id)?.add(handler)\n\n return () => matchExpressionOnceListeners.get(matchExpression.id)?.delete(handler)\n }\n\n return () => void 0\n },\n\n off<P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler?: (payload: Eventa<P>, options?: Options) => void) {\n switch (eventOrMatchExpression.type) {\n case EventaType.Event:\n if (handler !== undefined) {\n listeners.get(eventOrMatchExpression.id)?.delete(handler)\n onceListeners.get(eventOrMatchExpression.id)?.delete(handler)\n break\n }\n\n listeners.delete(eventOrMatchExpression.id)\n onceListeners.delete(eventOrMatchExpression.id)\n break\n case EventaType.MatchExpression:\n if (handler !== undefined) {\n matchExpressionListeners.get(eventOrMatchExpression.id)?.delete(handler)\n matchExpressionOnceListeners.get(eventOrMatchExpression.id)?.delete(handler)\n break\n }\n\n matchExpressionListeners.delete(eventOrMatchExpression.id)\n matchExpressionOnceListeners.delete(eventOrMatchExpression.id)\n break\n }\n },\n }\n}\n\nexport interface EventContext<Extensions = undefined, EmitOptions = undefined> {\n listeners: Map<EventTag<any, any>, Set<(params: any) => any>>\n onceListeners: Map<EventTag<any, any>, Set<(params: any) => any>>\n\n emit: <P>(event: Eventa<P>, payload: P, options?: EmitOptions) => void\n on: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: EmitOptions) => void) => () => void\n once: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: EmitOptions) => void) => () => void\n off: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler?: (payload: Eventa<P>, options?: EmitOptions) => void) => void\n\n /**\n * Extensions\n */\n extensions?: Extensions\n}\n\nexport type EventContextEmitFn = EventContext['emit']\n"],"mappings":"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"}
|
|
@@ -47,5 +47,5 @@ declare function matchBy<P = undefined>(options: {
|
|
|
47
47
|
declare function matchBy<P = undefined>(regExp: RegExp, inverted?: boolean): EventaMatchExpression<P>;
|
|
48
48
|
declare function matchBy<P = undefined, E extends Eventa<P> = Eventa<P>>(matcher: (event: E) => boolean | Promise<boolean>): EventaMatchExpression<P>;
|
|
49
49
|
//#endregion
|
|
50
|
-
export {
|
|
51
|
-
//# sourceMappingURL=eventa-
|
|
50
|
+
export { or as _, EventaLike as a, InboundEventa as c, and as d, defineEventa as f, nanoid as g, matchBy as h, EventaFlowDirection as i, InvokeEventConstraint as l, defineOutboundEventa as m, EventTag as n, EventaMatchExpression as o, defineInboundEventa as p, Eventa as r, EventaType as s, DirectionalEventa as t, OutboundEventa as u };
|
|
51
|
+
//# sourceMappingURL=eventa-DmQvmwYT.d.mts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EventContext } from "./context-
|
|
2
|
-
import { InvokeEventa } from "./invoke-
|
|
1
|
+
import { t as EventContext } from "./context-CvPT-awQ.mjs";
|
|
2
|
+
import { m as InvokeEventa } from "./invoke-CBQuKH1-.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>;
|
|
@@ -20,5 +20,5 @@ declare function toStreamHandler<Req, Res, EO extends {
|
|
|
20
20
|
emit: (data: Res) => void;
|
|
21
21
|
}) => Promise<void>): StreamHandler<Res, Req, EO>;
|
|
22
22
|
//#endregion
|
|
23
|
-
export {
|
|
24
|
-
//# sourceMappingURL=index-
|
|
23
|
+
export { defineStreamInvokeHandler as n, toStreamHandler as r, defineStreamInvoke as t };
|
|
24
|
+
//# sourceMappingURL=index-NaTw0d4N.d.mts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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-DmQvmwYT.mjs";
|
|
2
|
+
import { n as EventContextEmitFn, r as createContext, t as EventContext } from "./context-CvPT-awQ.mjs";
|
|
3
|
+
import { C as isSendEvent, S as isReceiveEvent, _ as ReceiveEventStreamEnd, a as InvokeFunction, b as defineInvokeEventa, c as defineInvokeHandler, d as isExtendableInvokeResponseLike, f as undefineInvokeHandler, g as ReceiveEventError, h as ReceiveEvent, i as InvocableEventContext, l as defineInvokeHandlers, m as InvokeEventa, n as Handler, o as InvokeFunctionMap, p as InvokeEventType, r as HandlerMap, s as defineInvoke, t as ExtendableInvokeResponse, u as defineInvokes, v as SendEvent, x as isInvokeEventa, y as SendEventError } from "./invoke-CBQuKH1-.mjs";
|
|
4
|
+
import { n as defineStreamInvokeHandler, r as toStreamHandler, t as defineStreamInvoke } from "./index-NaTw0d4N.mjs";
|
|
5
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 };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { a as defineEventa, c as matchBy, i as and, l as nanoid, n as EventaFlowDirection, o as defineInboundEventa, r as EventaType, s as defineOutboundEventa, t as createContext, u as or } from "./context-Y8SMtoKx.mjs";
|
|
2
|
+
import { a as defineInvokeHandler, c as isExtendableInvokeResponseLike, d as defineInvokeEventa, f as isInvokeEventa, i as defineInvoke, l as undefineInvokeHandler, m as isSendEvent, n as defineStreamInvokeHandler, o as defineInvokeHandlers, p as isReceiveEvent, r as toStreamHandler, s as defineInvokes, t as defineStreamInvoke, u as InvokeEventType } from "./src-CSnWn9Kk.mjs";
|
|
3
3
|
|
|
4
4
|
export { EventaFlowDirection, EventaType, InvokeEventType, and, createContext, defineEventa, defineInboundEventa, defineInvoke, defineInvokeEventa, defineInvokeHandler, defineInvokeHandlers, defineInvokes, defineOutboundEventa, defineStreamInvoke, defineStreamInvokeHandler, isExtendableInvokeResponseLike, isInvokeEventa, isReceiveEvent, isSendEvent, matchBy, nanoid, or, toStreamHandler, undefineInvokeHandler };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { nanoid } from "./context-
|
|
1
|
+
import { l as nanoid } from "./context-Y8SMtoKx.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/adapters/websocket/internal.ts
|
|
4
4
|
function generateWebsocketPayload(type, payload) {
|
|
@@ -14,5 +14,5 @@ function parseWebsocketPayload(data) {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
//#endregion
|
|
17
|
-
export {
|
|
18
|
-
//# sourceMappingURL=internal-
|
|
17
|
+
export { parseWebsocketPayload as n, generateWebsocketPayload as t };
|
|
18
|
+
//# sourceMappingURL=internal-mfpOkMuE.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-
|
|
1
|
+
{"version":3,"file":"internal-mfpOkMuE.mjs","names":[],"sources":["../src/adapters/websocket/internal.ts"],"sourcesContent":["import type { EventTag } from '../../eventa'\nimport type { WebsocketPayload } from './shared'\n\nimport { nanoid } from '../../eventa'\n\nexport function generateWebsocketPayload<T>(type: EventTag<any, any>, payload: T): WebsocketPayload<T> {\n return {\n id: nanoid(),\n type,\n payload,\n timestamp: Date.now(),\n }\n}\n\nexport function parseWebsocketPayload<T>(data: string): WebsocketPayload<T> {\n return JSON.parse(data) as WebsocketPayload<T>\n}\n"],"mappings":";;;AAKA,SAAgB,yBAA4B,MAA0B,SAAiC;AACrG,QAAO;EACL,IAAI,QAAQ;EACZ;EACA;EACA,WAAW,KAAK,KAAK;EACtB;;AAGH,SAAgB,sBAAyB,MAAmC;AAC1E,QAAO,KAAK,MAAM,KAAK"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { n as EventTag, r as Eventa } from "./eventa-DmQvmwYT.mjs";
|
|
2
|
+
import { t as EventContext } from "./context-CvPT-awQ.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/invoke-shared.d.ts
|
|
5
|
+
declare enum InvokeEventType {
|
|
6
|
+
SendEvent = 0,
|
|
7
|
+
SendEventError = 1,
|
|
8
|
+
ReceiveEvent = 2,
|
|
9
|
+
ReceiveEventError = 3,
|
|
10
|
+
ReceiveEventStreamEnd = 4,
|
|
11
|
+
}
|
|
12
|
+
interface SendEvent<Res$1, Req$1 = undefined, _ = undefined, __ = undefined> extends Eventa<{
|
|
13
|
+
invokeId: string;
|
|
14
|
+
content: Req$1;
|
|
15
|
+
}> {
|
|
16
|
+
id: EventTag<Res$1, Req$1>;
|
|
17
|
+
invokeType: InvokeEventType.SendEvent;
|
|
18
|
+
}
|
|
19
|
+
interface SendEventError<Res$1, Req$1 = undefined, _ = undefined, ReqErr = Error> extends Eventa<{
|
|
20
|
+
invokeId: string;
|
|
21
|
+
content: ReqErr;
|
|
22
|
+
}> {
|
|
23
|
+
id: EventTag<Res$1, Req$1>;
|
|
24
|
+
invokeType: InvokeEventType.SendEventError;
|
|
25
|
+
}
|
|
26
|
+
interface ReceiveEvent<Res$1, Req$1 = undefined, _ = undefined, __ = undefined> extends Eventa<{
|
|
27
|
+
invokeId: string;
|
|
28
|
+
content: Res$1;
|
|
29
|
+
}> {
|
|
30
|
+
id: EventTag<Res$1, Req$1>;
|
|
31
|
+
invokeType: InvokeEventType.ReceiveEvent;
|
|
32
|
+
}
|
|
33
|
+
interface ReceiveEventError<Res$1, Req$1 = undefined, ResErr = undefined, _ = undefined> extends Eventa<{
|
|
34
|
+
invokeId: string;
|
|
35
|
+
content: {
|
|
36
|
+
error: ResErr;
|
|
37
|
+
};
|
|
38
|
+
}> {
|
|
39
|
+
id: EventTag<Res$1, Req$1>;
|
|
40
|
+
invokeType: InvokeEventType.ReceiveEventError;
|
|
41
|
+
}
|
|
42
|
+
interface ReceiveEventStreamEnd<Res$1, Req$1 = undefined, _ = undefined, __ = undefined> extends Eventa<{
|
|
43
|
+
invokeId: string;
|
|
44
|
+
content: undefined;
|
|
45
|
+
}> {
|
|
46
|
+
id: EventTag<Res$1, Req$1>;
|
|
47
|
+
invokeType: InvokeEventType.ReceiveEventStreamEnd;
|
|
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>;
|
|
55
|
+
}
|
|
56
|
+
declare function defineInvokeEventa<Res$1, Req$1 = undefined, ResErr = Error, ReqErr = Error>(tag?: string): {
|
|
57
|
+
sendEvent: SendEvent<Res$1, Req$1, ResErr, ReqErr>;
|
|
58
|
+
sendEventError: SendEventError<Res$1, Req$1, ResErr, ReqErr>;
|
|
59
|
+
receiveEvent: ReceiveEvent<Res$1, Req$1, ResErr, ReqErr>;
|
|
60
|
+
receiveEventError: ReceiveEventError<Res$1, Req$1, ResErr, ReqErr>;
|
|
61
|
+
receiveEventStreamEnd: ReceiveEventStreamEnd<Res$1, Req$1, ResErr, ReqErr>;
|
|
62
|
+
};
|
|
63
|
+
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
|
+
declare function isSendEvent(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any>;
|
|
65
|
+
declare function isReceiveEvent(event: Eventa<any>): event is ReceiveEvent<any, any, any, any> | ReceiveEventError<any, any, any, any> | ReceiveEventStreamEnd<any, any, any, any>;
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/invoke.d.ts
|
|
68
|
+
type IsInvokeRequestOptional<EC extends EventContext<any, any>> = EC extends EventContext<infer E, any> ? E extends {
|
|
69
|
+
invokeRequest: any;
|
|
70
|
+
} ? undefined extends E['invokeRequest'] ? true : false : E extends {
|
|
71
|
+
invokeRequest?: any;
|
|
72
|
+
} ? undefined extends E['invokeRequest'] ? true : false : true : true;
|
|
73
|
+
type ExtractInvokeRequest<EC extends EventContext<any, any>> = EC extends EventContext<infer E, any> ? E extends {
|
|
74
|
+
invokeRequest: infer IR;
|
|
75
|
+
} ? IR : E extends {
|
|
76
|
+
invokeRequest?: infer IR;
|
|
77
|
+
} ? IR : undefined : undefined;
|
|
78
|
+
type ExtractInvokeResponse<EC extends EventContext<any, any>> = EC extends EventContext<infer E, any> ? E extends {
|
|
79
|
+
invokeResponse: infer IR;
|
|
80
|
+
} ? IR : E extends {
|
|
81
|
+
invokeResponse?: infer IR;
|
|
82
|
+
} ? IR : undefined : undefined;
|
|
83
|
+
type InvokeFunction<Res$1, Req$1, EC extends EventContext<any, any>> = Req$1 extends undefined ? IsInvokeRequestOptional<EC> extends true ? (req?: Req$1, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res$1> : (req: Req$1, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res$1> : IsInvokeRequestOptional<EC> extends true ? (req: Req$1, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res$1> : (req: Req$1, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res$1>;
|
|
84
|
+
type InvokeFunctionMap<EventMap extends Record<string, InvokeEventa<any, any, any, any>>, EC extends EventContext<any, any>> = { [K in keyof EventMap]: EventMap[K] extends InvokeEventa<infer Res, infer Req, any, any> ? InvokeFunction<Res, Req, EC> : never };
|
|
85
|
+
type ExtendableInvokeResponse<Res$1, EC extends EventContext<any, any>> = Promise<Res$1> | Res$1 | Promise<{
|
|
86
|
+
response: Res$1;
|
|
87
|
+
invokeResponse?: ExtractInvokeResponse<EC>;
|
|
88
|
+
}> | {
|
|
89
|
+
response: Res$1;
|
|
90
|
+
invokeResponse?: ExtractInvokeResponse<EC>;
|
|
91
|
+
};
|
|
92
|
+
declare function isExtendableInvokeResponseLike<Res$1, EC extends EventContext<any, any>>(value: Eventa<unknown> | ReceiveEvent<{
|
|
93
|
+
response: Res$1;
|
|
94
|
+
invokeResponse?: unknown;
|
|
95
|
+
}>): value is ReceiveEvent<{
|
|
96
|
+
response: Res$1;
|
|
97
|
+
invokeResponse?: ExtractInvokeResponse<EC>;
|
|
98
|
+
}>;
|
|
99
|
+
type Handler<Res$1, Req$1 = any, EC extends EventContext<any, any> = EventContext<any, any>, RawEventOptions = unknown> = (payload: Req$1, options?: {
|
|
100
|
+
/**
|
|
101
|
+
* TODO: Support aborting invoke handlers
|
|
102
|
+
*/
|
|
103
|
+
abortController?: AbortController;
|
|
104
|
+
} & 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;
|
|
106
|
+
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
|
+
interface InvocableEventContext<E$1, EO> extends EventContext<E$1, EO> {
|
|
108
|
+
invokeHandlers?: Map<string, Map<Handler<any>, InternalInvokeHandler<any>>>;
|
|
109
|
+
}
|
|
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>;
|
|
111
|
+
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
|
+
/**
|
|
113
|
+
* Define an invoke handler for a specific invoke event.
|
|
114
|
+
*
|
|
115
|
+
* @param ctx The event context in which to define the invoke handler.
|
|
116
|
+
* @param event The invoke event for which the handler is to be defined.
|
|
117
|
+
* @param handler The handler function to be invoked when the event is triggered.
|
|
118
|
+
* @returns A function that can be called to remove the invoke handler.
|
|
119
|
+
*/
|
|
120
|
+
declare function defineInvokeHandler<Res$1, Req$1 = undefined, ResErr = Error, ReqErr = Error, CtxExt = any, EOpts extends {
|
|
121
|
+
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;
|
|
123
|
+
declare function defineInvokeHandlers<EK extends string, EventMap extends Record<EK, InvokeEventa<any, any, any, any>>, CtxExt = any, EOpts extends {
|
|
124
|
+
raw?: any;
|
|
125
|
+
} = any>(ctx: InvocableEventContext<CtxExt, EOpts>, events: EventMap, handlers: HandlerMap<EventMap, EOpts>): Record<EK, () => void>;
|
|
126
|
+
/**
|
|
127
|
+
* Remove one or all invoke handlers for a specific invoke event.
|
|
128
|
+
*
|
|
129
|
+
* @param ctx The event context from which to remove the invoke handler(s).
|
|
130
|
+
* @param event The invoke event whose handlers are to be removed.
|
|
131
|
+
* @param handler The specific handler to remove. If not omitted, all handlers for the event will be removed.
|
|
132
|
+
* @returns `true` if at least one handler was removed, `false` otherwise
|
|
133
|
+
*/
|
|
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;
|
|
135
|
+
//#endregion
|
|
136
|
+
export { isSendEvent as C, isReceiveEvent as S, ReceiveEventStreamEnd as _, InvokeFunction as a, defineInvokeEventa as b, defineInvokeHandler as c, isExtendableInvokeResponseLike as d, undefineInvokeHandler as f, ReceiveEventError as g, ReceiveEvent as h, InvocableEventContext as i, defineInvokeHandlers as l, InvokeEventa as m, Handler as n, InvokeFunctionMap as o, InvokeEventType as p, HandlerMap as r, defineInvoke as s, ExtendableInvokeResponse as t, defineInvokes as u, SendEvent as v, isInvokeEventa as x, SendEventError as y };
|
|
137
|
+
//# sourceMappingURL=invoke-CBQuKH1-.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventTag, EventaType } from "./eventa-
|
|
1
|
+
import { n as EventTag, s as EventaType } from "./eventa-DmQvmwYT.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/adapters/electron/shared.d.ts
|
|
4
4
|
interface Payload<T> {
|
|
@@ -14,5 +14,5 @@ declare const errorEvent: {
|
|
|
14
14
|
type?: EventaType.Event | undefined;
|
|
15
15
|
};
|
|
16
16
|
//#endregion
|
|
17
|
-
export {
|
|
18
|
-
//# sourceMappingURL=shared-
|
|
17
|
+
export { errorEvent as n, Payload as t };
|
|
18
|
+
//# sourceMappingURL=shared-5hbiyQt-.d.mts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineEventa,
|
|
2
|
-
import { isExtendableInvokeResponseLike } from "./src-
|
|
1
|
+
import { a as defineEventa, l as nanoid, s as defineOutboundEventa } from "./context-Y8SMtoKx.mjs";
|
|
2
|
+
import { c as isExtendableInvokeResponseLike } from "./src-CSnWn9Kk.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/adapters/webworkers/internal.ts
|
|
5
5
|
function generateWorkerPayload(type, payload) {
|
|
@@ -67,5 +67,5 @@ function withTransfer(body, transfer) {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
//#endregion
|
|
70
|
-
export {
|
|
71
|
-
//# sourceMappingURL=shared-
|
|
70
|
+
export { withTransfer as a, parseWorkerPayload as c, normalizeOnListenerParameters as i, defineWorkerEventa as n, workerErrorEvent as o, isWorkerEventa as r, generateWorkerPayload as s, defineOutboundWorkerEventa as t };
|
|
71
|
+
//# sourceMappingURL=shared-DQmSel5n.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-
|
|
1
|
+
{"version":3,"file":"shared-DQmSel5n.mjs","names":["eventPayload: any","transfer: Transferable[] | undefined"],"sources":["../src/adapters/webworkers/internal.ts","../src/adapters/webworkers/shared.ts"],"sourcesContent":["import type { EventTag } from '../..'\nimport type { WorkerPayload } from './shared'\n\nimport { nanoid } from '../..'\n\nexport function generateWorkerPayload<T>(type: EventTag<any, any>, payload: T): WorkerPayload<T> {\n return {\n id: nanoid(),\n type,\n payload,\n }\n}\n\nexport function parseWorkerPayload<T>(data: unknown): WorkerPayload<T> {\n return data as WorkerPayload<T>\n}\n","import type { EventContext } from '../../context'\nimport type { Eventa, EventTag } from '../../eventa'\nimport type { ExtendableInvokeResponse } from '../../invoke'\n\nimport { defineEventa, defineOutboundEventa } from '../../eventa'\nimport { isExtendableInvokeResponseLike } from '../../invoke'\n\nexport interface WorkerPayload<T> {\n id: string\n type: EventTag<any, any>\n payload: T\n transfer?: Transferable[]\n}\n\nexport interface WorkerEventa<T> extends Eventa<{ message: T, transfer?: Transferable[] }> {\n _workerTransfer: true\n}\n\nexport function defineWorkerEventa<T>(id?: string): WorkerEventa<T> {\n return {\n ...defineEventa<{ message: T, transfer?: Transferable[] }>(id),\n _workerTransfer: true,\n }\n}\n\nexport function defineOutboundWorkerEventa<T>(id?: string): WorkerEventa<T> {\n return {\n ...defineOutboundEventa<{ message: T, transfer?: Transferable[] }>(id),\n _workerTransfer: true,\n }\n}\n\nexport function isWorkerEventa(event: Eventa<any>): event is WorkerEventa<any> {\n return typeof event === 'object'\n && '_workerTransfer' in event\n && typeof event._workerTransfer === 'boolean'\n && event._workerTransfer === true\n}\n\nexport const workerErrorEvent = defineEventa<{ error: unknown }>()\nexport const workerMessageErrorEvent = defineEventa<{ error: unknown, message: any }>()\n\nexport function normalizeOnListenerParameters(event: Eventa<any>, options?: { transfer?: Transferable[] } | unknown) {\n let eventPayload: any = event.body\n let transfer: Transferable[] | undefined\n\n if (isExtendableInvokeResponseLike<unknown, EventContext<{ invokeResponse?: { transfer?: Transferable[] } }>>(event)) {\n if (event.body!.content.invokeResponse?.transfer != null) {\n transfer = event.body!.content.invokeResponse!.transfer\n delete event.body!.content.invokeResponse\n }\n\n eventPayload = { ...event.body, content: event.body!.content.response }\n delete eventPayload.content.response\n }\n else if (isWorkerEventa(event)) {\n transfer = event.body?.transfer\n delete event.body?.transfer\n\n eventPayload = event.body?.message\n delete event.body?.message\n }\n\n // Override from options\n if (typeof options !== 'undefined' && options != null && typeof options === 'object' && 'transfer' in options) {\n if (Array.isArray(options.transfer)) {\n transfer = options.transfer\n }\n }\n\n return {\n body: eventPayload,\n transfer,\n }\n}\n\nexport interface WithTransfer<T> {\n message: T\n _transfer?: Transferable[]\n}\n\nexport function withTransfer<T>(body: T, transfer?: Transferable[]): ExtendableInvokeResponse<T, EventContext<{ invokeResponse?: { transfer?: Transferable[] } }, any>> {\n return {\n response: body,\n invokeResponse: {\n transfer: transfer ?? [],\n },\n }\n}\n"],"mappings":";;;;AAKA,SAAgB,sBAAyB,MAA0B,SAA8B;AAC/F,QAAO;EACL,IAAI,QAAQ;EACZ;EACA;EACD;;AAGH,SAAgB,mBAAsB,MAAiC;AACrE,QAAO;;;;;ACIT,SAAgB,mBAAsB,IAA8B;AAClE,QAAO;EACL,GAAG,aAAwD,GAAG;EAC9D,iBAAiB;EAClB;;AAGH,SAAgB,2BAA8B,IAA8B;AAC1E,QAAO;EACL,GAAG,qBAAgE,GAAG;EACtE,iBAAiB;EAClB;;AAGH,SAAgB,eAAe,OAAgD;AAC7E,QAAO,OAAO,UAAU,YACnB,qBAAqB,SACrB,OAAO,MAAM,oBAAoB,aACjC,MAAM,oBAAoB;;AAGjC,MAAa,mBAAmB,cAAkC;AAClE,MAAa,0BAA0B,cAAgD;AAEvF,SAAgB,8BAA8B,OAAoB,SAAmD;CACnH,IAAIA,eAAoB,MAAM;CAC9B,IAAIC;AAEJ,KAAI,+BAA0G,MAAM,EAAE;AACpH,MAAI,MAAM,KAAM,QAAQ,gBAAgB,YAAY,MAAM;AACxD,cAAW,MAAM,KAAM,QAAQ,eAAgB;AAC/C,UAAO,MAAM,KAAM,QAAQ;;AAG7B,iBAAe;GAAE,GAAG,MAAM;GAAM,SAAS,MAAM,KAAM,QAAQ;GAAU;AACvE,SAAO,aAAa,QAAQ;YAErB,eAAe,MAAM,EAAE;AAC9B,aAAW,MAAM,MAAM;AACvB,SAAO,MAAM,MAAM;AAEnB,iBAAe,MAAM,MAAM;AAC3B,SAAO,MAAM,MAAM;;AAIrB,KAAI,OAAO,YAAY,eAAe,WAAW,QAAQ,OAAO,YAAY,YAAY,cAAc,SACpG;MAAI,MAAM,QAAQ,QAAQ,SAAS,CACjC,YAAW,QAAQ;;AAIvB,QAAO;EACL,MAAM;EACN;EACD;;AAQH,SAAgB,aAAgB,MAAS,UAA+H;AACtK,QAAO;EACL,UAAU;EACV,gBAAgB,EACd,UAAU,YAAY,EAAE,EACzB;EACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineEventa, nanoid } from "./context-
|
|
1
|
+
import { a as defineEventa, l as nanoid } from "./context-Y8SMtoKx.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/adapters/electron/internal.ts
|
|
4
4
|
function generatePayload(type, payload) {
|
|
@@ -17,5 +17,5 @@ function parsePayload(data) {
|
|
|
17
17
|
const errorEvent = { ...defineEventa() };
|
|
18
18
|
|
|
19
19
|
//#endregion
|
|
20
|
-
export {
|
|
21
|
-
//# sourceMappingURL=shared-
|
|
20
|
+
export { generatePayload as n, parsePayload as r, errorEvent as t };
|
|
21
|
+
//# sourceMappingURL=shared-ZN4ksxrB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-
|
|
1
|
+
{"version":3,"file":"shared-ZN4ksxrB.mjs","names":[],"sources":["../src/adapters/electron/internal.ts","../src/adapters/electron/shared.ts"],"sourcesContent":["import type { EventTag } from '../..'\nimport type { Payload as CustomEventDetailDetail } from './shared'\n\nimport { nanoid } from '../..'\n\nexport function generatePayload<T>(type: EventTag<any, any>, payload: T): CustomEventDetailDetail<T> {\n return {\n id: nanoid(),\n type,\n payload,\n }\n}\n\nexport function parsePayload<T>(data: unknown): CustomEventDetailDetail<T> {\n return data as CustomEventDetailDetail<T>\n}\n","import type { EventTag } from '../../eventa'\n\nimport { defineEventa } from '../../eventa'\n\nexport interface Payload<T> {\n id: string\n type: EventTag<any, any>\n payload: T\n}\n\nexport const errorEvent = { ...defineEventa<{ error: unknown }>() }\n"],"mappings":";;;AAKA,SAAgB,gBAAmB,MAA0B,SAAwC;AACnG,QAAO;EACL,IAAI,QAAQ;EACZ;EACA;EACD;;AAGH,SAAgB,aAAgB,MAA2C;AACzE,QAAO;;;;;ACJT,MAAa,aAAa,EAAE,GAAG,cAAkC,EAAE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineEventa, nanoid } from "./context-
|
|
1
|
+
import { a as defineEventa, l as nanoid } from "./context-Y8SMtoKx.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/invoke-shared.ts
|
|
4
4
|
let InvokeEventType = /* @__PURE__ */ function(InvokeEventType$1) {
|
|
@@ -11,32 +11,27 @@ let InvokeEventType = /* @__PURE__ */ function(InvokeEventType$1) {
|
|
|
11
11
|
}({});
|
|
12
12
|
function defineInvokeEventa(tag) {
|
|
13
13
|
if (!tag) tag = nanoid();
|
|
14
|
-
const sendEvent = {
|
|
15
|
-
...defineEventa(`${tag}-send`),
|
|
16
|
-
invokeType: InvokeEventType.SendEvent
|
|
17
|
-
};
|
|
18
|
-
const sendEventError = {
|
|
19
|
-
...defineEventa(`${tag}-send-error`),
|
|
20
|
-
invokeType: InvokeEventType.SendEventError
|
|
21
|
-
};
|
|
22
|
-
const receiveEvent = {
|
|
23
|
-
...defineEventa(`${tag}-receive`),
|
|
24
|
-
invokeType: InvokeEventType.ReceiveEvent
|
|
25
|
-
};
|
|
26
|
-
const receiveEventError = {
|
|
27
|
-
...defineEventa(`${tag}-receive-error`),
|
|
28
|
-
invokeType: InvokeEventType.ReceiveEventError
|
|
29
|
-
};
|
|
30
|
-
const receiveEventStreamEnd = {
|
|
31
|
-
...defineEventa(`${tag}-receive-stream-end`),
|
|
32
|
-
invokeType: InvokeEventType.ReceiveEventStreamEnd
|
|
33
|
-
};
|
|
34
14
|
return {
|
|
35
|
-
sendEvent
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
15
|
+
sendEvent: {
|
|
16
|
+
...defineEventa(`${tag}-send`),
|
|
17
|
+
invokeType: InvokeEventType.SendEvent
|
|
18
|
+
},
|
|
19
|
+
sendEventError: {
|
|
20
|
+
...defineEventa(`${tag}-send-error`),
|
|
21
|
+
invokeType: InvokeEventType.SendEventError
|
|
22
|
+
},
|
|
23
|
+
receiveEvent: {
|
|
24
|
+
...defineEventa(`${tag}-receive`),
|
|
25
|
+
invokeType: InvokeEventType.ReceiveEvent
|
|
26
|
+
},
|
|
27
|
+
receiveEventError: {
|
|
28
|
+
...defineEventa(`${tag}-receive-error`),
|
|
29
|
+
invokeType: InvokeEventType.ReceiveEventError
|
|
30
|
+
},
|
|
31
|
+
receiveEventStreamEnd: {
|
|
32
|
+
...defineEventa(`${tag}-receive-stream-end`),
|
|
33
|
+
invokeType: InvokeEventType.ReceiveEventStreamEnd
|
|
34
|
+
}
|
|
40
35
|
};
|
|
41
36
|
}
|
|
42
37
|
function isInvokeEventa(event) {
|
|
@@ -138,7 +133,7 @@ function defineInvokeHandler(ctx, event, handler) {
|
|
|
138
133
|
invokeType: event.receiveEventError.invokeType
|
|
139
134
|
}, {
|
|
140
135
|
...payload.body,
|
|
141
|
-
content: error
|
|
136
|
+
content: { error }
|
|
142
137
|
}, options);
|
|
143
138
|
}
|
|
144
139
|
};
|
|
@@ -202,7 +197,7 @@ function defineStreamInvoke(clientCtx, event) {
|
|
|
202
197
|
clientCtx.on(invokeReceiveEventError, (payload) => {
|
|
203
198
|
if (!payload.body) return;
|
|
204
199
|
if (payload.body.invokeId !== invokeId) return;
|
|
205
|
-
controller.error(payload.body.content);
|
|
200
|
+
controller.error(payload.body.content.error);
|
|
206
201
|
});
|
|
207
202
|
clientCtx.on(invokeReceiveEventStreamEnd, (payload) => {
|
|
208
203
|
if (!payload.body) return;
|
|
@@ -243,7 +238,7 @@ function defineStreamInvokeHandler(serverCtx, event, fn) {
|
|
|
243
238
|
} catch (error) {
|
|
244
239
|
serverCtx.emit(invokeReceiveEventError, {
|
|
245
240
|
...payload.body,
|
|
246
|
-
content: error
|
|
241
|
+
content: { error }
|
|
247
242
|
}, options);
|
|
248
243
|
}
|
|
249
244
|
});
|
|
@@ -285,5 +280,5 @@ function toStreamHandler(handler) {
|
|
|
285
280
|
}
|
|
286
281
|
|
|
287
282
|
//#endregion
|
|
288
|
-
export {
|
|
289
|
-
//# sourceMappingURL=src-
|
|
283
|
+
export { defineInvokeHandler as a, isExtendableInvokeResponseLike as c, defineInvokeEventa as d, isInvokeEventa as f, defineInvoke as i, undefineInvokeHandler as l, isSendEvent as m, defineStreamInvokeHandler as n, defineInvokeHandlers as o, isReceiveEvent as p, toStreamHandler as r, defineInvokes as s, defineStreamInvoke as t, InvokeEventType as u };
|
|
284
|
+
//# sourceMappingURL=src-CSnWn9Kk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-CSnWn9Kk.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":";;;AAIA,IAAY,8DAAL;AACL;AACA;AACA;AACA;AACA;;;AAgCF,SAAgB,mBAAyE,KAAc;AACrG,KAAI,CAAC,IACH,OAAM,QAAQ;AAwBhB,QAAO;EACL,WAtBgB;GAChB,GAAG,aAAwC,GAAG,IAAI,OAAO;GACzD,YAAY,gBAAgB;GAC7B;EAoBC,gBAnBqB;GACrB,GAAG,aAA6C,GAAG,IAAI,aAAa;GACpE,YAAY,gBAAgB;GAC7B;EAiBC,cAhBmB;GACnB,GAAG,aAA2C,GAAG,IAAI,UAAU;GAC/D,YAAY,gBAAgB;GAC7B;EAcC,mBAbwB;GACxB,GAAG,aAAgD,GAAG,IAAI,gBAAgB;GAC1E,YAAY,gBAAgB;GAC7B;EAWC,uBAV4B;GAC5B,GAAG,aAAoD,GAAG,IAAI,qBAAqB;GACnF,YAAY,gBAAgB;GAC7B;EAQA;;AAGH,SAAgB,eAAe,OAAwN;AACrP,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,KAAI,gBAAgB,MAClB,QAAO;AAGT,QAAO;;AAGT,SAAgB,YAAY,OAAiG;AAC3H,KAAI,CAAC,eAAe,MAAM,CACxB,QAAO;AAGT,QAAO,MAAM,eAAe,gBAAgB,aAAa,MAAM,eAAe,gBAAgB;;AAGhG,SAAgB,eAAe,OAAmJ;AAChL,KAAI,CAAC,eAAe,MAAM,CACxB,QAAO;AAGT,QAAO,MAAM,eAAe,gBAAgB,gBAAgB,MAAM,eAAe,gBAAgB,qBAAqB,MAAM,eAAe,gBAAgB;;;;;AC3C7J,SAAgB,+BAAuE,OAA0K;AAC/P,KAAI,CAAC,eAAe,MAAM,CACxB,QAAO;AAGT,QAAO,OAAO,MAAM,MAAM,YAAY,YACjC,MAAM,MAAM,WAAW,QACvB,cAAc,MAAM,KAAK,YAE1B,EAAE,oBAAoB,MAAM,KAAK,YAE/B,oBAAoB,MAAM,KAAK,YAE7B,OAAO,MAAM,KAAK,QAAQ,mBAAmB,YAC1C,OAAO,MAAM,KAAK,QAAQ,mBAAmB;;AAsC1D,SAAgB,aAQd,KAAW,OAA+E;CAC1F,MAAM,4CAA4B,IAAI,KAAsD;CAC5F,MAAM,4CAA4B,IAAI,KAAkC;CAExE,SAAS,QAAQ,KAAU,SAAwE;AACjG,SAAO,IAAI,SAAc,SAAS,WAAW;GAC3C,MAAM,WAAW,QAAQ;AACzB,6BAA0B,IAAI,UAAU,QAAQ;AAChD,6BAA0B,IAAI,UAAU,OAAO;GAE/C,MAAM,qBAAqB,aAAa,GAAG,MAAM,aAAa,GAAG,GAAG,WAAW;GAC/E,MAAM,0BAA0B,aAAa,GAAG,MAAM,kBAAkB,GAAG,GAAG,WAAW;AAEzF,OAAI,GAAG,qBAAqB,YAAY;AACtC,QAAI,CAAC,QAAQ,KACX;AAEF,QAAI,QAAQ,KAAK,aAAa,SAC5B;IAGF,MAAM,EAAE,YAAY,QAAQ;AAC5B,8BAA0B,IAAI,SAAS,GAAG,QAAe;AACzD,8BAA0B,OAAO,SAAS;AAC1C,8BAA0B,OAAO,SAAS;AAC1C,QAAI,IAAI,mBAAmB;AAC3B,QAAI,IAAI,wBAAwB;KAChC;AAEF,OAAI,GAAG,0BAA0B,YAAY;AAC3C,QAAI,CAAC,QAAQ,KACX;AAEF,QAAI,QAAQ,KAAK,aAAa,SAC5B;IAGF,MAAM,EAAE,UAAU,QAAQ,KAAK;AAC/B,8BAA0B,IAAI,SAAS,GAAG,MAAM;AAChD,8BAA0B,OAAO,SAAS;AAC1C,8BAA0B,OAAO,SAAS;AAC1C,QAAI,IAAI,mBAAmB;AAC3B,QAAI,IAAI,wBAAwB;KAChC;AAEF,OAAI,KAAK,MAAM,WAAW;IAAE;IAAU,SAAS;IAAK,EAAE,QAAe;IACrE;;AAGJ,QAAO;;AAGT,SAAgB,cAMd,KAAW,QAAqD;AAChE,QAAQ,OAAO,KAAK,OAAO,CAAU,QAAQ,SAAS,QAAQ;AAC5D,UAAQ,OAAO,aAAa,KAAK,OAAO,KAAK;AAC7C,SAAO;IACN,EAAE,CAA+C;;;;;;;;;;AAWtD,SAAgB,oBAQd,KACA,OACA,SACY;AACZ,KAAI,CAAC,IAAI,eACP,KAAI,iCAAiB,IAAI,KAAK;CAGhC,IAAI,WAAW,IAAI,gBAAgB,IAAI,MAAM,UAAU,GAAG;AAC1D,KAAI,CAAC,UAAU;AACb,6BAAW,IAAI,KAAK;AACpB,MAAI,gBAAgB,IAAI,MAAM,UAAU,IAAI,SAAS;;CAGvD,IAAI,kBAAkB,SAAS,IAAI,QAAQ;AAC3C,KAAI,CAAC,iBAAiB;AACpB,oBAAkB,OAAO,SAAS,YAAY;AAC5C,OAAI,CAAC,QAAQ,KACX;AAEF,OAAI,CAAC,QAAQ,KAAK,SAChB;AAGF,OAAI;IACF,MAAM,WAAW,MAAM,QAAQ,QAAQ,MAAM,SAAgB,QAAQ;AACrE,QAAI,KACF;KAAE,GAAG,aAAa,GAAG,MAAM,aAAa,GAAG,GAAG,QAAQ,KAAK,WAAW;KAAE,YAAY,MAAM,aAAa;KAAY,EACnH;KAAE,GAAG,QAAQ;KAAM,SAAS;KAAU,EACtC,QACD;YAEI,OAAO;AAEZ,QAAI,KACF;KAAE,GAAG,aAAa,GAAG,MAAM,kBAAkB,GAAG,GAAG,QAAQ,KAAK,WAAW;KAAE,YAAY,MAAM,kBAAkB;KAAY,EAC7H;KAAE,GAAG,QAAQ;KAAM,SAAS,EAAS,OAAiB;KAAE,EACxD,QACD;;;AAIL,WAAS,IAAI,SAAS,gBAAgB;AACtC,MAAI,GAAG,MAAM,WAAW,gBAAgB;;AAG1C,cAAa,IAAI,IAAI,MAAM,WAAW,gBAAgB;;AAGxD,SAAgB,qBAMd,KACA,QACA,UACwB;CACxB,MAAM,YAAY,OAAO,KAAK,OAAO;CACrC,MAAM,cAAc,IAAI,IAAI,OAAO,KAAK,SAAS,CAAS;AAE1D,KAAI,UAAU,WAAW,YAAY,QAAQ,CAAC,UAAU,OAAM,QAAO,YAAY,IAAI,IAAI,CAAC,CACxF,OAAM,IAAI,MAAM,8CAA8C;AAGhE,QAAO,UAAU,QAAQ,cAAc,QAAQ;AAC7C,eAAa,OAAO,oBAAoB,KAAK,OAAO,MAAM,SAAS,KAAK;AACxE,SAAO;IACN,EAAE,CAA2B;;;;;;;;;;AAWlC,SAAgB,sBAQd,KACA,OACA,SACS;AACT,KAAI,CAAC,IAAI,eACP,QAAO;CAET,MAAM,WAAW,IAAI,gBAAgB,IAAI,MAAM,UAAU,GAAG;AAC5D,KAAI,CAAC,SACH,QAAO;AAET,KAAI,SAAS;EACX,MAAM,kBAAkB,SAAS,IAAI,QAAQ;AAC7C,MAAI,CAAC,gBACH,QAAO;AAET,MAAI,IAAI,MAAM,WAAW,gBAAgB;AACzC,MAAI,eAAe,OAAO,MAAM,UAAU,GAAG;AAC7C,SAAO;;CAGT,IAAI,cAAc;AAClB,MAAK,MAAM,oBAAoB,SAAS,QAAQ,EAAE;AAChD,MAAI,IAAI,MAAM,WAAW,iBAAiB;AAC1C,gBAAc;;AAEhB,KAAI,eAAe,OAAO,MAAM,UAAU,GAAG;AAC7C,QAAO;;;;;AC/ST,SAAgB,mBAOd,WAAgC,OAA+C;AAC/E,SAAQ,QAAa;EACnB,MAAM,WAAW,QAAQ;EAEzB,MAAM,qBAAqB,aAAa,GAAG,MAAM,aAAa,GAAG,GAAG,WAAW;EAC/E,MAAM,0BAA0B,aAAa,GAAG,MAAM,kBAAkB,GAAG,GAAG,WAAW;EACzF,MAAM,8BAA8B,aAAa,GAAG,MAAM,sBAAsB,GAAG,GAAG,WAAW;EAEjG,MAAM,SAAS,IAAI,eAAoB;GACrC,MAAM,YAAY;AAChB,cAAU,GAAG,qBAAqB,YAAY;AAC5C,SAAI,CAAC,QAAQ,KACX;AAEF,SAAI,QAAQ,KAAK,aAAa,SAC5B;AAGF,gBAAW,QAAQ,QAAQ,KAAK,QAAe;MAC/C;AACF,cAAU,GAAG,0BAA0B,YAAY;AACjD,SAAI,CAAC,QAAQ,KACX;AAEJ,SAAI,QAAQ,KAAK,aAAa,SAC5B;AAGF,gBAAW,MAAM,QAAQ,KAAK,QAAQ,MAAgB;MACtD;AACA,cAAU,GAAG,8BAA8B,YAAY;AACrD,SAAI,CAAC,QAAQ,KACX;AAEF,SAAI,QAAQ,KAAK,aAAa,SAC5B;AAGF,gBAAW,OAAO;MAClB;;GAEJ,SAAS;AACP,cAAU,IAAI,mBAAmB;AACjC,cAAU,IAAI,wBAAwB;AACtC,cAAU,IAAI,4BAA4B;;GAE7C,CAAC;AAEF,YAAU,KAAK,MAAM,WAAW;GAAE;GAAU,SAAS;GAAK,CAAC;AAC3D,SAAO;;;AAcX,SAAgB,0BAOd,WAAgC,OAA+C,IAAiC;AAChH,WAAU,GAAG,MAAM,WAAW,OAAO,SAAS,YAAY;AACxD,MAAI,CAAC,QAAQ,KACX;AAEF,MAAI,CAAC,QAAQ,KAAK,SAChB;EAGF,MAAM,qBAAqB,aAAa,GAAG,MAAM,aAAa,GAAG,GAAG,QAAQ,KAAK,WAAW;EAC5F,MAAM,0BAA0B,aAAa,GAAG,MAAM,kBAAkB,GAAG,GAAG,QAAQ,KAAK,WAAW;EACtG,MAAM,8BAA8B,aAAa,GAAG,MAAM,sBAAsB,GAAG,GAAG,QAAQ,KAAK,WAAW;AAE9G,MAAI;GACF,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAgB,QAAQ;AAC1D,cAAW,MAAM,OAAO,UACtB,WAAU,KAAK,oBAAoB;IAAE,GAAG,QAAQ;IAAM,SAAS;IAAK,EAAE,QAAQ;AAGhF,aAAU,KAAK,6BAA6B;IAAE,GAAG,QAAQ;IAAM,SAAS;IAAW,EAAE,QAAQ;WAExF,OAAO;AACZ,aAAU,KAAK,yBAAyB;IAAE,GAAG,QAAQ;IAAM,SAAS,EAAS,OAAiB;IAAE,EAAE,QAAQ;;GAE5G;;AAGJ,SAAgB,gBAA0D,SAA6H;AACrM,SAAQ,SAAS,YAAY;EAC3B,MAAMA,SAAoC,EAAE;EAC5C,IAAIC;EACJ,IAAIC,eAA6B;AAEjC,SAAO,KAAK,IAAI,SAAS,MAAM;AAC7B,aAAU;IACV,CAAC;EAEH,MAAM,QAAQ,SAAc;AAC1B,WAAQ,CAAC,MAAM,MAAM,CAAC;AACtB,UAAO,KAAK,IAAI,SAAS,MAAM;AAC7B,cAAU;KACV,CAAC;;AAIL,UAAQ;GAAE;GAAS;GAAS;GAAM,CAAC,CAChC,WAAW;AACV,WAAQ,CAAC,QAAkB,KAAK,CAAC;IACjC,CACD,OAAO,QAAQ;AACd,kBAAe;AACf,WAAQ,CAAC,QAAkB,KAAK,CAAC;IACjC;AAEJ,SAAQ,mBAAmB;GACzB,IAAIC;AACJ,QAAK,IAAI,IAAI,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK;AACxC,KAAC,KAAK,QAAQ,MAAM,OAAO;AAC3B,WAAO,OAAO;AAEd,QAAI,aACF,OAAM;AAGR,QAAI,CAAC,KACH,OAAM;;KAGT"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moeru/eventa",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "1.0.0-alpha.7",
|
|
5
5
|
"description": "Events are all you need",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "RainbowBird",
|
|
@@ -95,19 +95,19 @@
|
|
|
95
95
|
"picomatch": "^4.0.3"
|
|
96
96
|
},
|
|
97
97
|
"devDependencies": {
|
|
98
|
-
"@antfu/eslint-config": "^
|
|
98
|
+
"@antfu/eslint-config": "^6.2.0",
|
|
99
99
|
"@electron-toolkit/preload": "^3.0.2",
|
|
100
|
-
"@types/node": "^24.
|
|
101
|
-
"@vitest/web-worker": "^
|
|
102
|
-
"bumpp": "^10.
|
|
100
|
+
"@types/node": "^24.10.1",
|
|
101
|
+
"@vitest/web-worker": "^4.0.13",
|
|
102
|
+
"bumpp": "^10.3.1",
|
|
103
103
|
"crossws": "^0.4.1",
|
|
104
|
-
"eslint": "^9.
|
|
105
|
-
"taze": "^19.
|
|
106
|
-
"tsdown": "^0.
|
|
104
|
+
"eslint": "^9.39.1",
|
|
105
|
+
"taze": "^19.9.0",
|
|
106
|
+
"tsdown": "^0.16.6",
|
|
107
107
|
"typescript": "^5.9.3",
|
|
108
|
-
"unplugin-unused": "^0.5.
|
|
109
|
-
"vite": "^7.
|
|
110
|
-
"vitest": "^
|
|
108
|
+
"unplugin-unused": "^0.5.6",
|
|
109
|
+
"vite": "^7.2.4",
|
|
110
|
+
"vitest": "^4.0.13"
|
|
111
111
|
},
|
|
112
112
|
"scripts": {
|
|
113
113
|
"build": "tsdown",
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { EventTag, Eventa } from "./eventa-B2HPBK4S.mjs";
|
|
2
|
-
import { EventContext } from "./context-C_-MRU46.mjs";
|
|
3
|
-
|
|
4
|
-
//#region src/invoke-shared.d.ts
|
|
5
|
-
declare enum InvokeEventType {
|
|
6
|
-
SendEvent = 0,
|
|
7
|
-
SendEventError = 1,
|
|
8
|
-
ReceiveEvent = 2,
|
|
9
|
-
ReceiveEventError = 3,
|
|
10
|
-
ReceiveEventStreamEnd = 4,
|
|
11
|
-
}
|
|
12
|
-
interface SendEvent<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{
|
|
13
|
-
invokeId: string;
|
|
14
|
-
content: Req;
|
|
15
|
-
}> {
|
|
16
|
-
id: EventTag<Res, Req>;
|
|
17
|
-
invokeType: InvokeEventType.SendEvent;
|
|
18
|
-
}
|
|
19
|
-
interface SendEventError<Res, Req = undefined, _ = undefined, ReqErr = Error> extends Eventa<{
|
|
20
|
-
invokeId: string;
|
|
21
|
-
content: ReqErr;
|
|
22
|
-
}> {
|
|
23
|
-
id: EventTag<Res, Req>;
|
|
24
|
-
invokeType: InvokeEventType.SendEventError;
|
|
25
|
-
}
|
|
26
|
-
interface ReceiveEvent<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{
|
|
27
|
-
invokeId: string;
|
|
28
|
-
content: Res;
|
|
29
|
-
}> {
|
|
30
|
-
id: EventTag<Res, Req>;
|
|
31
|
-
invokeType: InvokeEventType.ReceiveEvent;
|
|
32
|
-
}
|
|
33
|
-
interface ReceiveEventError<Res, Req = undefined, ResErr = undefined, _ = undefined> extends Eventa<{
|
|
34
|
-
invokeId: string;
|
|
35
|
-
content: {
|
|
36
|
-
error: ResErr;
|
|
37
|
-
};
|
|
38
|
-
}> {
|
|
39
|
-
id: EventTag<Res, Req>;
|
|
40
|
-
invokeType: InvokeEventType.ReceiveEventError;
|
|
41
|
-
}
|
|
42
|
-
interface ReceiveEventStreamEnd<Res, Req = undefined, _ = undefined, __ = undefined> extends Eventa<{
|
|
43
|
-
invokeId: string;
|
|
44
|
-
content: undefined;
|
|
45
|
-
}> {
|
|
46
|
-
id: EventTag<Res, Req>;
|
|
47
|
-
invokeType: InvokeEventType.ReceiveEventStreamEnd;
|
|
48
|
-
}
|
|
49
|
-
interface InvokeEventa<Res, Req = undefined, ResErr = Error, ReqErr = Error> {
|
|
50
|
-
sendEvent: SendEvent<Res, Req, ResErr, ReqErr>;
|
|
51
|
-
sendEventError: SendEventError<Res, Req, ResErr, ReqErr>;
|
|
52
|
-
receiveEvent: ReceiveEvent<Res, Req, ResErr, ReqErr>;
|
|
53
|
-
receiveEventError: ReceiveEventError<Res, Req, ResErr, ReqErr>;
|
|
54
|
-
receiveEventStreamEnd: ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr>;
|
|
55
|
-
}
|
|
56
|
-
declare function defineInvokeEventa<Res, Req = undefined, ResErr = Error, ReqErr = Error>(tag?: string): {
|
|
57
|
-
sendEvent: SendEvent<Res, Req, ResErr, ReqErr>;
|
|
58
|
-
sendEventError: SendEventError<Res, Req, ResErr, ReqErr>;
|
|
59
|
-
receiveEvent: ReceiveEvent<Res, Req, ResErr, ReqErr>;
|
|
60
|
-
receiveEventError: ReceiveEventError<Res, Req, ResErr, ReqErr>;
|
|
61
|
-
receiveEventStreamEnd: ReceiveEventStreamEnd<Res, Req, ResErr, ReqErr>;
|
|
62
|
-
};
|
|
63
|
-
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
|
-
declare function isSendEvent(event: Eventa<any>): event is SendEvent<any, any, any, any> | SendEventError<any, any, any, any>;
|
|
65
|
-
declare function isReceiveEvent(event: Eventa<any>): event is ReceiveEvent<any, any, any, any> | ReceiveEventError<any, any, any, any> | ReceiveEventStreamEnd<any, any, any, any>;
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region src/invoke.d.ts
|
|
68
|
-
type IsInvokeRequestOptional<EC extends EventContext<any, any>> = EC extends EventContext<infer E, any> ? E extends {
|
|
69
|
-
invokeRequest: any;
|
|
70
|
-
} ? undefined extends E['invokeRequest'] ? true : false : E extends {
|
|
71
|
-
invokeRequest?: any;
|
|
72
|
-
} ? undefined extends E['invokeRequest'] ? true : false : true : true;
|
|
73
|
-
type ExtractInvokeRequest<EC extends EventContext<any, any>> = EC extends EventContext<infer E, any> ? E extends {
|
|
74
|
-
invokeRequest: infer IR;
|
|
75
|
-
} ? IR : E extends {
|
|
76
|
-
invokeRequest?: infer IR;
|
|
77
|
-
} ? IR : undefined : undefined;
|
|
78
|
-
type ExtractInvokeResponse<EC extends EventContext<any, any>> = EC extends EventContext<infer E, any> ? E extends {
|
|
79
|
-
invokeResponse: infer IR;
|
|
80
|
-
} ? IR : E extends {
|
|
81
|
-
invokeResponse?: infer IR;
|
|
82
|
-
} ? IR : undefined : undefined;
|
|
83
|
-
type InvokeFunction<Res, Req, EC extends EventContext<any, any>> = Req extends undefined ? IsInvokeRequestOptional<EC> extends true ? (req?: Req, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res> : (req: Req, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res> : IsInvokeRequestOptional<EC> extends true ? (req: Req, invokeRequest?: ExtractInvokeRequest<EC>) => Promise<Res> : (req: Req, invokeRequest: ExtractInvokeRequest<EC>) => Promise<Res>;
|
|
84
|
-
type InvokeFunctionMap<EventMap extends Record<string, InvokeEventa<any, any, any, any>>, EC extends EventContext<any, any>> = { [K in keyof EventMap]: EventMap[K] extends InvokeEventa<infer Res, infer Req, any, any> ? InvokeFunction<Res, Req, EC> : never };
|
|
85
|
-
type ExtendableInvokeResponse<Res, EC extends EventContext<any, any>> = Promise<Res> | Res | Promise<{
|
|
86
|
-
response: Res;
|
|
87
|
-
invokeResponse?: ExtractInvokeResponse<EC>;
|
|
88
|
-
}> | {
|
|
89
|
-
response: Res;
|
|
90
|
-
invokeResponse?: ExtractInvokeResponse<EC>;
|
|
91
|
-
};
|
|
92
|
-
declare function isExtendableInvokeResponseLike<Res, EC extends EventContext<any, any>>(value: Eventa<unknown> | ReceiveEvent<{
|
|
93
|
-
response: Res;
|
|
94
|
-
invokeResponse?: unknown;
|
|
95
|
-
}>): value is ReceiveEvent<{
|
|
96
|
-
response: Res;
|
|
97
|
-
invokeResponse?: ExtractInvokeResponse<EC>;
|
|
98
|
-
}>;
|
|
99
|
-
type Handler<Res, Req = any, EC extends EventContext<any, any> = EventContext<any, any>, RawEventOptions = unknown> = (payload: Req, options?: {
|
|
100
|
-
/**
|
|
101
|
-
* TODO: Support aborting invoke handlers
|
|
102
|
-
*/
|
|
103
|
-
abortController?: AbortController;
|
|
104
|
-
} & RawEventOptions) => ExtendableInvokeResponse<Res, EC>;
|
|
105
|
-
type InternalInvokeHandler<Res, Req = any, ResErr = Error, ReqErr = Error, EO = any> = (params: InvokeEventa<Res, Req, ResErr, ReqErr>['sendEvent'], eventOptions?: EO) => void;
|
|
106
|
-
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
|
-
interface InvocableEventContext<E, EO> extends EventContext<E, EO> {
|
|
108
|
-
invokeHandlers?: Map<string, Map<Handler<any>, InternalInvokeHandler<any>>>;
|
|
109
|
-
}
|
|
110
|
-
declare function defineInvoke<Res, Req = undefined, ResErr = Error, ReqErr = Error, CtxExt = any, EOpts = any, ECtx extends EventContext<CtxExt, EOpts> = EventContext<CtxExt, EOpts>>(ctx: ECtx, event: InvokeEventa<Res, Req, ResErr, ReqErr>): InvokeFunction<Res, Req, ECtx>;
|
|
111
|
-
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
|
-
/**
|
|
113
|
-
* Define an invoke handler for a specific invoke event.
|
|
114
|
-
*
|
|
115
|
-
* @param ctx The event context in which to define the invoke handler.
|
|
116
|
-
* @param event The invoke event for which the handler is to be defined.
|
|
117
|
-
* @param handler The handler function to be invoked when the event is triggered.
|
|
118
|
-
* @returns A function that can be called to remove the invoke handler.
|
|
119
|
-
*/
|
|
120
|
-
declare function defineInvokeHandler<Res, Req = undefined, ResErr = Error, ReqErr = Error, CtxExt = any, EOpts extends {
|
|
121
|
-
raw?: any;
|
|
122
|
-
} = any>(ctx: InvocableEventContext<CtxExt, EOpts>, event: InvokeEventa<Res, Req, ResErr, ReqErr>, handler: Handler<Res, Req, InvocableEventContext<CtxExt, EOpts>, EOpts>): () => void;
|
|
123
|
-
declare function defineInvokeHandlers<EK extends string, EventMap extends Record<EK, InvokeEventa<any, any, any, any>>, CtxExt = any, EOpts extends {
|
|
124
|
-
raw?: any;
|
|
125
|
-
} = any>(ctx: InvocableEventContext<CtxExt, EOpts>, events: EventMap, handlers: HandlerMap<EventMap, EOpts>): Record<EK, () => void>;
|
|
126
|
-
/**
|
|
127
|
-
* Remove one or all invoke handlers for a specific invoke event.
|
|
128
|
-
*
|
|
129
|
-
* @param ctx The event context from which to remove the invoke handler(s).
|
|
130
|
-
* @param event The invoke event whose handlers are to be removed.
|
|
131
|
-
* @param handler The specific handler to remove. If not omitted, all handlers for the event will be removed.
|
|
132
|
-
* @returns `true` if at least one handler was removed, `false` otherwise
|
|
133
|
-
*/
|
|
134
|
-
declare function undefineInvokeHandler<Res, Req = undefined, ResErr = Error, ReqErr = Error, CtxExt = any, EOpts = any>(ctx: InvocableEventContext<CtxExt, EOpts>, event: InvokeEventa<Res, Req, ResErr, ReqErr>, handler?: Handler<Res, Req, InvocableEventContext<CtxExt, EOpts>, EOpts>): boolean;
|
|
135
|
-
//#endregion
|
|
136
|
-
export { ExtendableInvokeResponse, Handler, HandlerMap, InvocableEventContext, InvokeEventType, InvokeEventa, InvokeFunction, InvokeFunctionMap, ReceiveEvent, ReceiveEventError, ReceiveEventStreamEnd, SendEvent, SendEventError, defineInvoke, defineInvokeEventa, defineInvokeHandler, defineInvokeHandlers, defineInvokes, isExtendableInvokeResponseLike, isInvokeEventa, isReceiveEvent, isSendEvent, undefineInvokeHandler };
|
|
137
|
-
//# sourceMappingURL=invoke-LTUFMmHi.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"src-Bb-vxm5k.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<ResErr>\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<ResErr>,\n { ...payload.body, content: error as any },\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<ResErr>\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 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<ResErr>\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 as any }, 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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"}
|