@moeru/eventa 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +286 -0
- package/dist/adapters/electron/main.d.mts +26 -0
- package/dist/adapters/electron/main.mjs +67 -0
- package/dist/adapters/electron/main.mjs.map +1 -0
- package/dist/adapters/electron/renderer.d.mts +24 -0
- package/dist/adapters/electron/renderer.mjs +53 -0
- package/dist/adapters/electron/renderer.mjs.map +1 -0
- package/dist/adapters/event-emitter/index.d.mts +35 -0
- package/dist/adapters/event-emitter/index.mjs +62 -0
- package/dist/adapters/event-emitter/index.mjs.map +1 -0
- package/dist/adapters/event-target/index.d.mts +35 -0
- package/dist/adapters/event-target/index.mjs +67 -0
- package/dist/adapters/event-target/index.mjs.map +1 -0
- package/dist/adapters/websocket/h3/index.d.mts +57 -0
- package/dist/adapters/websocket/h3/index.mjs +100 -0
- package/dist/adapters/websocket/h3/index.mjs.map +1 -0
- package/dist/adapters/websocket/index.d.mts +12 -0
- package/dist/adapters/websocket/index.mjs +1 -0
- package/dist/adapters/websocket/native/index.d.mts +26 -0
- package/dist/adapters/websocket/native/index.mjs +40 -0
- package/dist/adapters/websocket/native/index.mjs.map +1 -0
- package/dist/adapters/webworkers/index.d.mts +63 -0
- package/dist/adapters/webworkers/index.mjs +42 -0
- package/dist/adapters/webworkers/index.mjs.map +1 -0
- package/dist/adapters/webworkers/worker/index.d.mts +24 -0
- package/dist/adapters/webworkers/worker/index.mjs +40 -0
- package/dist/adapters/webworkers/worker/index.mjs.map +1 -0
- package/dist/context-C35Qku9U.mjs +191 -0
- package/dist/context-C35Qku9U.mjs.map +1 -0
- package/dist/context-C_-MRU46.d.mts +41 -0
- package/dist/eventa-B2HPBK4S.d.mts +51 -0
- package/dist/index-BgaYNgPh.d.mts +24 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +4 -0
- package/dist/internal-DjiAQtsa.mjs +18 -0
- package/dist/internal-DjiAQtsa.mjs.map +1 -0
- package/dist/invoke-LTUFMmHi.d.mts +137 -0
- package/dist/shared-Da41l-vp.mjs +21 -0
- package/dist/shared-Da41l-vp.mjs.map +1 -0
- package/dist/shared-DbO1rU2W.mjs +71 -0
- package/dist/shared-DbO1rU2W.mjs.map +1 -0
- package/dist/shared-DllZ3RPS.d.mts +18 -0
- package/dist/src-Bb-vxm5k.mjs +289 -0
- package/dist/src-Bb-vxm5k.mjs.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import isGlobMatch from "picomatch";
|
|
2
|
+
import { customAlphabet } from "nanoid";
|
|
3
|
+
|
|
4
|
+
//#region src/eventa.ts
|
|
5
|
+
function nanoid() {
|
|
6
|
+
return customAlphabet("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 16)();
|
|
7
|
+
}
|
|
8
|
+
let EventaType = /* @__PURE__ */ function(EventaType$1) {
|
|
9
|
+
EventaType$1["Event"] = "event";
|
|
10
|
+
EventaType$1["MatchExpression"] = "matchExpression";
|
|
11
|
+
return EventaType$1;
|
|
12
|
+
}({});
|
|
13
|
+
let EventaFlowDirection = /* @__PURE__ */ function(EventaFlowDirection$1) {
|
|
14
|
+
EventaFlowDirection$1["Inbound"] = "inbound";
|
|
15
|
+
EventaFlowDirection$1["Outbound"] = "outbound";
|
|
16
|
+
return EventaFlowDirection$1;
|
|
17
|
+
}({});
|
|
18
|
+
function defineInboundEventa(id) {
|
|
19
|
+
return {
|
|
20
|
+
...defineEventa(id),
|
|
21
|
+
_flowDirection: EventaFlowDirection.Inbound
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function defineOutboundEventa(id) {
|
|
25
|
+
return {
|
|
26
|
+
...defineEventa(id),
|
|
27
|
+
_flowDirection: EventaFlowDirection.Outbound
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function defineEventa(id) {
|
|
31
|
+
if (!id) id = nanoid();
|
|
32
|
+
return {
|
|
33
|
+
id,
|
|
34
|
+
type: EventaType.Event
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function and(...matchExpression) {
|
|
38
|
+
return {
|
|
39
|
+
id: nanoid(),
|
|
40
|
+
type: EventaType.MatchExpression,
|
|
41
|
+
matcher: (event) => {
|
|
42
|
+
return matchExpression.every((m) => m.matcher ? m.matcher(event) : false);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function or(...matchExpression) {
|
|
47
|
+
return {
|
|
48
|
+
id: nanoid(),
|
|
49
|
+
type: EventaType.MatchExpression,
|
|
50
|
+
matcher: (event) => {
|
|
51
|
+
return matchExpression.some((m) => m.matcher ? m.matcher(event) : false);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function matchBy(matchExpressionPossibleValues, inverted) {
|
|
56
|
+
const id = nanoid();
|
|
57
|
+
let matcher = () => false;
|
|
58
|
+
if (typeof matchExpressionPossibleValues === "string") matcher = (eventa) => {
|
|
59
|
+
return isGlobMatch(matchExpressionPossibleValues)(eventa.id);
|
|
60
|
+
};
|
|
61
|
+
else if (typeof matchExpressionPossibleValues === "object") {
|
|
62
|
+
if ("ids" in matchExpressionPossibleValues) matcher = (event) => {
|
|
63
|
+
if (inverted) return !matchExpressionPossibleValues.ids.includes(event.id);
|
|
64
|
+
return matchExpressionPossibleValues.ids.includes(event.id);
|
|
65
|
+
};
|
|
66
|
+
else if ("eventa" in matchExpressionPossibleValues) matcher = (event) => {
|
|
67
|
+
if (inverted) return !matchExpressionPossibleValues.eventa.some((e) => e.id === event.id);
|
|
68
|
+
return matchExpressionPossibleValues.eventa.some((e) => e.id === event.id);
|
|
69
|
+
};
|
|
70
|
+
else if ("types" in matchExpressionPossibleValues) matcher = (event) => {
|
|
71
|
+
if (typeof event.type === "undefined") return false;
|
|
72
|
+
if (inverted) return !matchExpressionPossibleValues.types.includes(event.type);
|
|
73
|
+
return matchExpressionPossibleValues.types.includes(event.type);
|
|
74
|
+
};
|
|
75
|
+
} else if (matchExpressionPossibleValues instanceof RegExp) matcher = (event) => {
|
|
76
|
+
if (inverted) return !matchExpressionPossibleValues.test(event.id);
|
|
77
|
+
return matchExpressionPossibleValues.test(event.id);
|
|
78
|
+
};
|
|
79
|
+
else if (typeof matchExpressionPossibleValues === "function") matcher = matchExpressionPossibleValues;
|
|
80
|
+
return {
|
|
81
|
+
id,
|
|
82
|
+
type: EventaType.MatchExpression,
|
|
83
|
+
matcher
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
//#region src/context.ts
|
|
89
|
+
function createContext(props = {}) {
|
|
90
|
+
const listeners = /* @__PURE__ */ new Map();
|
|
91
|
+
const onceListeners = /* @__PURE__ */ new Map();
|
|
92
|
+
const matchExpressions = /* @__PURE__ */ new Map();
|
|
93
|
+
const matchExpressionListeners = /* @__PURE__ */ new Map();
|
|
94
|
+
const matchExpressionOnceListeners = /* @__PURE__ */ new Map();
|
|
95
|
+
const hooks = props.adapter?.(emit).hooks;
|
|
96
|
+
function emit(event, payload, options) {
|
|
97
|
+
const emittingPayload = {
|
|
98
|
+
...event,
|
|
99
|
+
body: payload
|
|
100
|
+
};
|
|
101
|
+
for (const listener of listeners.get(event.id) || []) {
|
|
102
|
+
listener(emittingPayload, options);
|
|
103
|
+
hooks?.onReceived?.(event.id, emittingPayload);
|
|
104
|
+
}
|
|
105
|
+
for (const onceListener of onceListeners.get(event.id) || []) {
|
|
106
|
+
onceListener(emittingPayload, options);
|
|
107
|
+
hooks?.onReceived?.(event.id, emittingPayload);
|
|
108
|
+
onceListeners.get(event.id)?.delete(onceListener);
|
|
109
|
+
}
|
|
110
|
+
for (const matchExpression of matchExpressions.values()) if (matchExpression.matcher) {
|
|
111
|
+
if (!matchExpression.matcher(emittingPayload)) continue;
|
|
112
|
+
for (const listener of matchExpressionListeners.get(matchExpression.id) || []) {
|
|
113
|
+
listener(emittingPayload, options);
|
|
114
|
+
hooks?.onReceived?.(matchExpression.id, emittingPayload);
|
|
115
|
+
}
|
|
116
|
+
for (const onceListener of matchExpressionOnceListeners.get(matchExpression.id) || []) {
|
|
117
|
+
onceListener(emittingPayload, options);
|
|
118
|
+
hooks?.onReceived?.(matchExpression.id, emittingPayload);
|
|
119
|
+
matchExpressionOnceListeners.get(matchExpression.id)?.delete(onceListener);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
hooks?.onSent(event.id, emittingPayload, options);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
get listeners() {
|
|
126
|
+
return listeners;
|
|
127
|
+
},
|
|
128
|
+
get onceListeners() {
|
|
129
|
+
return onceListeners;
|
|
130
|
+
},
|
|
131
|
+
emit,
|
|
132
|
+
on(eventOrMatchExpression, handler) {
|
|
133
|
+
if (eventOrMatchExpression.type === EventaType.Event) {
|
|
134
|
+
const event = eventOrMatchExpression;
|
|
135
|
+
if (!listeners.has(event.id)) listeners.set(event.id, /* @__PURE__ */ new Set());
|
|
136
|
+
listeners.get(event.id)?.add(handler);
|
|
137
|
+
return () => listeners.get(event.id)?.delete(handler);
|
|
138
|
+
}
|
|
139
|
+
if (eventOrMatchExpression.type === EventaType.MatchExpression) {
|
|
140
|
+
const matchExpression = eventOrMatchExpression;
|
|
141
|
+
if (!matchExpressions.has(matchExpression.id)) matchExpressions.set(matchExpression.id, matchExpression);
|
|
142
|
+
if (!matchExpressionListeners.has(matchExpression.id)) matchExpressionListeners.set(matchExpression.id, /* @__PURE__ */ new Set());
|
|
143
|
+
matchExpressionListeners.get(matchExpression.id)?.add(handler);
|
|
144
|
+
return () => matchExpressionListeners.get(matchExpression.id)?.delete(handler);
|
|
145
|
+
}
|
|
146
|
+
return () => void 0;
|
|
147
|
+
},
|
|
148
|
+
once(eventOrMatchExpression, handler) {
|
|
149
|
+
if (eventOrMatchExpression.type === EventaType.Event) {
|
|
150
|
+
const event = eventOrMatchExpression;
|
|
151
|
+
if (!onceListeners.has(event.id)) onceListeners.set(event.id, /* @__PURE__ */ new Set());
|
|
152
|
+
onceListeners.get(event.id)?.add(handler);
|
|
153
|
+
return () => onceListeners.get(event.id)?.delete(handler);
|
|
154
|
+
}
|
|
155
|
+
if (eventOrMatchExpression.type === EventaType.MatchExpression) {
|
|
156
|
+
const matchExpression = eventOrMatchExpression;
|
|
157
|
+
if (!matchExpressions.has(matchExpression.id)) matchExpressions.set(matchExpression.id, matchExpression);
|
|
158
|
+
if (!matchExpressionListeners.has(matchExpression.id)) matchExpressionListeners.set(matchExpression.id, /* @__PURE__ */ new Set());
|
|
159
|
+
matchExpressionOnceListeners.get(matchExpression.id)?.add(handler);
|
|
160
|
+
return () => matchExpressionOnceListeners.get(matchExpression.id)?.delete(handler);
|
|
161
|
+
}
|
|
162
|
+
return () => void 0;
|
|
163
|
+
},
|
|
164
|
+
off(eventOrMatchExpression, handler) {
|
|
165
|
+
switch (eventOrMatchExpression.type) {
|
|
166
|
+
case EventaType.Event:
|
|
167
|
+
if (handler !== void 0) {
|
|
168
|
+
listeners.get(eventOrMatchExpression.id)?.delete(handler);
|
|
169
|
+
onceListeners.get(eventOrMatchExpression.id)?.delete(handler);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
listeners.delete(eventOrMatchExpression.id);
|
|
173
|
+
onceListeners.delete(eventOrMatchExpression.id);
|
|
174
|
+
break;
|
|
175
|
+
case EventaType.MatchExpression:
|
|
176
|
+
if (handler !== void 0) {
|
|
177
|
+
matchExpressionListeners.get(eventOrMatchExpression.id)?.delete(handler);
|
|
178
|
+
matchExpressionOnceListeners.get(eventOrMatchExpression.id)?.delete(handler);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
matchExpressionListeners.delete(eventOrMatchExpression.id);
|
|
182
|
+
matchExpressionOnceListeners.delete(eventOrMatchExpression.id);
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
//#endregion
|
|
190
|
+
export { EventaFlowDirection, EventaType, and, createContext, defineEventa, defineInboundEventa, defineOutboundEventa, matchBy, nanoid, or };
|
|
191
|
+
//# sourceMappingURL=context-C35Qku9U.mjs.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { EventTag, Eventa, EventaMatchExpression } from "./eventa-B2HPBK4S.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/context-hooks.d.ts
|
|
4
|
+
interface EventaAdapterProps<EmitOptions = any> {
|
|
5
|
+
cleanup: () => void;
|
|
6
|
+
hooks: {
|
|
7
|
+
/**
|
|
8
|
+
* When `ctx.on`, `ctx.once` called, call `onReceived`
|
|
9
|
+
*/
|
|
10
|
+
onReceived: <Req, Res>(tag: EventTag<Req, Res>, payload: Req) => void;
|
|
11
|
+
/**
|
|
12
|
+
* When `ctx.emit` called, call `onSent`
|
|
13
|
+
*/
|
|
14
|
+
onSent: <Req, Res>(tag: EventTag<Req, Res>, payload: Req, options?: EmitOptions) => void;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
type EventaAdapter<EmitOptions = any> = <P>(emit: (event: Eventa<P>, payload: P, options?: EmitOptions) => void) => EventaAdapterProps;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/context.d.ts
|
|
20
|
+
interface CreateContextProps<EmitOptions = any> {
|
|
21
|
+
adapter?: EventaAdapter<EmitOptions>;
|
|
22
|
+
}
|
|
23
|
+
declare function createContext<Extensions = any, Options = {
|
|
24
|
+
raw: any;
|
|
25
|
+
}>(props?: CreateContextProps<Options>): EventContext<Extensions, Options>;
|
|
26
|
+
interface EventContext<Extensions = undefined, EmitOptions = undefined> {
|
|
27
|
+
listeners: Map<EventTag<any, any>, Set<(params: any) => any>>;
|
|
28
|
+
onceListeners: Map<EventTag<any, any>, Set<(params: any) => any>>;
|
|
29
|
+
emit: <P>(event: Eventa<P>, payload: P, options?: EmitOptions) => void;
|
|
30
|
+
on: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: EmitOptions) => void) => () => void;
|
|
31
|
+
once: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler: (payload: Eventa<P>, options?: EmitOptions) => void) => () => void;
|
|
32
|
+
off: <P>(eventOrMatchExpression: Eventa<P> | EventaMatchExpression<P>, handler?: (payload: Eventa<P>, options?: EmitOptions) => void) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Extensions
|
|
35
|
+
*/
|
|
36
|
+
extensions?: Extensions;
|
|
37
|
+
}
|
|
38
|
+
type EventContextEmitFn = EventContext['emit'];
|
|
39
|
+
//#endregion
|
|
40
|
+
export { EventContext, EventContextEmitFn, createContext };
|
|
41
|
+
//# sourceMappingURL=context-C_-MRU46.d.mts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/eventa.d.ts
|
|
2
|
+
declare function nanoid(): string;
|
|
3
|
+
interface InvokeEventConstraint<_Req, _Res> {}
|
|
4
|
+
type EventTag<Res, Req> = string & InvokeEventConstraint<Req, Res>;
|
|
5
|
+
declare enum EventaType {
|
|
6
|
+
Event = "event",
|
|
7
|
+
MatchExpression = "matchExpression",
|
|
8
|
+
}
|
|
9
|
+
declare enum EventaFlowDirection {
|
|
10
|
+
Inbound = "inbound",
|
|
11
|
+
Outbound = "outbound",
|
|
12
|
+
}
|
|
13
|
+
interface DirectionalEventa<P, T = undefined> extends Eventa<P> {
|
|
14
|
+
_flowDirection: EventaFlowDirection | T;
|
|
15
|
+
}
|
|
16
|
+
interface InboundEventa<T> extends DirectionalEventa<T> {
|
|
17
|
+
_flowDirection: EventaFlowDirection.Inbound;
|
|
18
|
+
}
|
|
19
|
+
interface OutboundEventa<T> extends DirectionalEventa<T> {
|
|
20
|
+
_flowDirection: EventaFlowDirection.Outbound;
|
|
21
|
+
}
|
|
22
|
+
declare function defineInboundEventa<T>(id?: string): InboundEventa<T>;
|
|
23
|
+
declare function defineOutboundEventa<T>(id?: string): OutboundEventa<T>;
|
|
24
|
+
interface EventaLike<_P = undefined, T extends EventaType = EventaType> {
|
|
25
|
+
id: string;
|
|
26
|
+
type?: T;
|
|
27
|
+
}
|
|
28
|
+
interface Eventa<P = unknown> extends EventaLike<P, EventaType.Event> {
|
|
29
|
+
body?: P;
|
|
30
|
+
}
|
|
31
|
+
declare function defineEventa<P = undefined>(id?: string): Eventa<P>;
|
|
32
|
+
interface EventaMatchExpression<P = undefined> extends EventaLike<P, EventaType.MatchExpression> {
|
|
33
|
+
matcher?: (event: Eventa<P>) => boolean | Promise<boolean>;
|
|
34
|
+
}
|
|
35
|
+
declare function and<P>(...matchExpression: Array<EventaMatchExpression<P>>): EventaMatchExpression<P>;
|
|
36
|
+
declare function or<P>(...matchExpression: Array<EventaMatchExpression<P>>): EventaMatchExpression<P>;
|
|
37
|
+
declare function matchBy<P = undefined>(glob: string, inverted?: boolean): EventaMatchExpression<P>;
|
|
38
|
+
declare function matchBy<P = undefined>(options: {
|
|
39
|
+
ids: string[];
|
|
40
|
+
}, inverted?: boolean): EventaMatchExpression<P>;
|
|
41
|
+
declare function matchBy<P = undefined>(options: {
|
|
42
|
+
eventa: Eventa<P>[];
|
|
43
|
+
}, inverted?: boolean): EventaMatchExpression<P>;
|
|
44
|
+
declare function matchBy<P = undefined>(options: {
|
|
45
|
+
types: EventaType[];
|
|
46
|
+
}, inverted?: boolean): EventaMatchExpression<P>;
|
|
47
|
+
declare function matchBy<P = undefined>(regExp: RegExp, inverted?: boolean): EventaMatchExpression<P>;
|
|
48
|
+
declare function matchBy<P = undefined, E extends Eventa<P> = Eventa<P>>(matcher: (event: E) => boolean | Promise<boolean>): EventaMatchExpression<P>;
|
|
49
|
+
//#endregion
|
|
50
|
+
export { DirectionalEventa, EventTag, Eventa, EventaFlowDirection, EventaLike, EventaMatchExpression, EventaType, InboundEventa, InvokeEventConstraint, OutboundEventa, and, defineEventa, defineInboundEventa, defineOutboundEventa, matchBy, nanoid, or };
|
|
51
|
+
//# sourceMappingURL=eventa-B2HPBK4S.d.mts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EventContext } from "./context-C_-MRU46.mjs";
|
|
2
|
+
import { InvokeEventa } from "./invoke-LTUFMmHi.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/stream.d.ts
|
|
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>;
|
|
6
|
+
type StreamHandler<Res, Req = any, RawEventOptions = unknown> = (payload: Req, options?: {
|
|
7
|
+
/**
|
|
8
|
+
* TODO: Support aborting invoke handlers
|
|
9
|
+
*/
|
|
10
|
+
abortController?: AbortController;
|
|
11
|
+
} & RawEventOptions) => AsyncGenerator<Res, void, unknown>;
|
|
12
|
+
declare function defineStreamInvokeHandler<Res, Req = undefined, ResErr = Error, ReqErr = Error, E = any, EO extends {
|
|
13
|
+
raw?: any;
|
|
14
|
+
} = any>(serverCtx: EventContext<E, EO>, event: InvokeEventa<Res, Req, ResErr, ReqErr>, fn: StreamHandler<Res, Req, EO>): void;
|
|
15
|
+
declare function toStreamHandler<Req, Res, EO extends {
|
|
16
|
+
raw?: any;
|
|
17
|
+
} = any>(handler: (context: {
|
|
18
|
+
payload: Req;
|
|
19
|
+
options?: EO;
|
|
20
|
+
emit: (data: Res) => void;
|
|
21
|
+
}) => Promise<void>): StreamHandler<Res, Req, EO>;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { defineStreamInvoke, defineStreamInvokeHandler, toStreamHandler };
|
|
24
|
+
//# sourceMappingURL=index-BgaYNgPh.d.mts.map
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DirectionalEventa, EventTag, Eventa, EventaFlowDirection, EventaLike, EventaMatchExpression, EventaType, InboundEventa, InvokeEventConstraint, OutboundEventa, and, defineEventa, defineInboundEventa, defineOutboundEventa, matchBy, nanoid, or } from "./eventa-B2HPBK4S.mjs";
|
|
2
|
+
import { EventContext, EventContextEmitFn, createContext } from "./context-C_-MRU46.mjs";
|
|
3
|
+
import { ExtendableInvokeResponse, Handler, HandlerMap, InvocableEventContext, InvokeEventType, InvokeEventa, InvokeFunction, InvokeFunctionMap, ReceiveEvent, ReceiveEventError, ReceiveEventStreamEnd, SendEvent, SendEventError, defineInvoke, defineInvokeEventa, defineInvokeHandler, defineInvokeHandlers, defineInvokes, isExtendableInvokeResponseLike, isInvokeEventa, isReceiveEvent, isSendEvent, undefineInvokeHandler } from "./invoke-LTUFMmHi.mjs";
|
|
4
|
+
import { defineStreamInvoke, defineStreamInvokeHandler, toStreamHandler } from "./index-BgaYNgPh.mjs";
|
|
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
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EventaFlowDirection, EventaType, and, createContext, defineEventa, defineInboundEventa, defineOutboundEventa, matchBy, nanoid, or } from "./context-C35Qku9U.mjs";
|
|
2
|
+
import { InvokeEventType, defineInvoke, defineInvokeEventa, defineInvokeHandler, defineInvokeHandlers, defineInvokes, defineStreamInvoke, defineStreamInvokeHandler, isExtendableInvokeResponseLike, isInvokeEventa, isReceiveEvent, isSendEvent, toStreamHandler, undefineInvokeHandler } from "./src-Bb-vxm5k.mjs";
|
|
3
|
+
|
|
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 };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { nanoid } from "./context-C35Qku9U.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/adapters/websocket/internal.ts
|
|
4
|
+
function generateWebsocketPayload(type, payload) {
|
|
5
|
+
return {
|
|
6
|
+
id: nanoid(),
|
|
7
|
+
type,
|
|
8
|
+
payload,
|
|
9
|
+
timestamp: Date.now()
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function parseWebsocketPayload(data) {
|
|
13
|
+
return JSON.parse(data);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { generateWebsocketPayload, parseWebsocketPayload };
|
|
18
|
+
//# sourceMappingURL=internal-DjiAQtsa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-DjiAQtsa.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 { 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
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineEventa, nanoid } from "./context-C35Qku9U.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/adapters/electron/internal.ts
|
|
4
|
+
function generatePayload(type, payload) {
|
|
5
|
+
return {
|
|
6
|
+
id: nanoid(),
|
|
7
|
+
type,
|
|
8
|
+
payload
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function parsePayload(data) {
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/adapters/electron/shared.ts
|
|
17
|
+
const errorEvent = { ...defineEventa() };
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { errorEvent, generatePayload, parsePayload };
|
|
21
|
+
//# sourceMappingURL=shared-Da41l-vp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-Da41l-vp.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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { defineEventa, defineOutboundEventa, nanoid } from "./context-C35Qku9U.mjs";
|
|
2
|
+
import { isExtendableInvokeResponseLike } from "./src-Bb-vxm5k.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/adapters/webworkers/internal.ts
|
|
5
|
+
function generateWorkerPayload(type, payload) {
|
|
6
|
+
return {
|
|
7
|
+
id: nanoid(),
|
|
8
|
+
type,
|
|
9
|
+
payload
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function parseWorkerPayload(data) {
|
|
13
|
+
return data;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/adapters/webworkers/shared.ts
|
|
18
|
+
function defineWorkerEventa(id) {
|
|
19
|
+
return {
|
|
20
|
+
...defineEventa(id),
|
|
21
|
+
_workerTransfer: true
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function defineOutboundWorkerEventa(id) {
|
|
25
|
+
return {
|
|
26
|
+
...defineOutboundEventa(id),
|
|
27
|
+
_workerTransfer: true
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function isWorkerEventa(event) {
|
|
31
|
+
return typeof event === "object" && "_workerTransfer" in event && typeof event._workerTransfer === "boolean" && event._workerTransfer === true;
|
|
32
|
+
}
|
|
33
|
+
const workerErrorEvent = defineEventa();
|
|
34
|
+
const workerMessageErrorEvent = defineEventa();
|
|
35
|
+
function normalizeOnListenerParameters(event, options) {
|
|
36
|
+
let eventPayload = event.body;
|
|
37
|
+
let transfer;
|
|
38
|
+
if (isExtendableInvokeResponseLike(event)) {
|
|
39
|
+
if (event.body.content.invokeResponse?.transfer != null) {
|
|
40
|
+
transfer = event.body.content.invokeResponse.transfer;
|
|
41
|
+
delete event.body.content.invokeResponse;
|
|
42
|
+
}
|
|
43
|
+
eventPayload = {
|
|
44
|
+
...event.body,
|
|
45
|
+
content: event.body.content.response
|
|
46
|
+
};
|
|
47
|
+
delete eventPayload.content.response;
|
|
48
|
+
} else if (isWorkerEventa(event)) {
|
|
49
|
+
transfer = event.body?.transfer;
|
|
50
|
+
delete event.body?.transfer;
|
|
51
|
+
eventPayload = event.body?.message;
|
|
52
|
+
delete event.body?.message;
|
|
53
|
+
}
|
|
54
|
+
if (typeof options !== "undefined" && options != null && typeof options === "object" && "transfer" in options) {
|
|
55
|
+
if (Array.isArray(options.transfer)) transfer = options.transfer;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
body: eventPayload,
|
|
59
|
+
transfer
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function withTransfer(body, transfer) {
|
|
63
|
+
return {
|
|
64
|
+
response: body,
|
|
65
|
+
invokeResponse: { transfer: transfer ?? [] }
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
export { defineOutboundWorkerEventa, defineWorkerEventa, generateWorkerPayload, isWorkerEventa, normalizeOnListenerParameters, parseWorkerPayload, withTransfer, workerErrorEvent };
|
|
71
|
+
//# sourceMappingURL=shared-DbO1rU2W.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-DbO1rU2W.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"}
|