@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.
Files changed (46) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +286 -0
  3. package/dist/adapters/electron/main.d.mts +26 -0
  4. package/dist/adapters/electron/main.mjs +67 -0
  5. package/dist/adapters/electron/main.mjs.map +1 -0
  6. package/dist/adapters/electron/renderer.d.mts +24 -0
  7. package/dist/adapters/electron/renderer.mjs +53 -0
  8. package/dist/adapters/electron/renderer.mjs.map +1 -0
  9. package/dist/adapters/event-emitter/index.d.mts +35 -0
  10. package/dist/adapters/event-emitter/index.mjs +62 -0
  11. package/dist/adapters/event-emitter/index.mjs.map +1 -0
  12. package/dist/adapters/event-target/index.d.mts +35 -0
  13. package/dist/adapters/event-target/index.mjs +67 -0
  14. package/dist/adapters/event-target/index.mjs.map +1 -0
  15. package/dist/adapters/websocket/h3/index.d.mts +57 -0
  16. package/dist/adapters/websocket/h3/index.mjs +100 -0
  17. package/dist/adapters/websocket/h3/index.mjs.map +1 -0
  18. package/dist/adapters/websocket/index.d.mts +12 -0
  19. package/dist/adapters/websocket/index.mjs +1 -0
  20. package/dist/adapters/websocket/native/index.d.mts +26 -0
  21. package/dist/adapters/websocket/native/index.mjs +40 -0
  22. package/dist/adapters/websocket/native/index.mjs.map +1 -0
  23. package/dist/adapters/webworkers/index.d.mts +63 -0
  24. package/dist/adapters/webworkers/index.mjs +42 -0
  25. package/dist/adapters/webworkers/index.mjs.map +1 -0
  26. package/dist/adapters/webworkers/worker/index.d.mts +24 -0
  27. package/dist/adapters/webworkers/worker/index.mjs +40 -0
  28. package/dist/adapters/webworkers/worker/index.mjs.map +1 -0
  29. package/dist/context-C35Qku9U.mjs +191 -0
  30. package/dist/context-C35Qku9U.mjs.map +1 -0
  31. package/dist/context-C_-MRU46.d.mts +41 -0
  32. package/dist/eventa-B2HPBK4S.d.mts +51 -0
  33. package/dist/index-BgaYNgPh.d.mts +24 -0
  34. package/dist/index.d.mts +5 -0
  35. package/dist/index.mjs +4 -0
  36. package/dist/internal-DjiAQtsa.mjs +18 -0
  37. package/dist/internal-DjiAQtsa.mjs.map +1 -0
  38. package/dist/invoke-LTUFMmHi.d.mts +137 -0
  39. package/dist/shared-Da41l-vp.mjs +21 -0
  40. package/dist/shared-Da41l-vp.mjs.map +1 -0
  41. package/dist/shared-DbO1rU2W.mjs +71 -0
  42. package/dist/shared-DbO1rU2W.mjs.map +1 -0
  43. package/dist/shared-DllZ3RPS.d.mts +18 -0
  44. package/dist/src-Bb-vxm5k.mjs +289 -0
  45. package/dist/src-Bb-vxm5k.mjs.map +1 -0
  46. package/package.json +121 -0
@@ -0,0 +1,67 @@
1
+ import { EventaFlowDirection, EventaType, and, createContext as createContext$1, defineEventa, defineInboundEventa, defineOutboundEventa, matchBy, nanoid } from "../../context-C35Qku9U.mjs";
2
+ import "../../src-Bb-vxm5k.mjs";
3
+
4
+ //#region src/adapters/event-target/internal.ts
5
+ function generateCustomEventDetail(type, payload) {
6
+ return {
7
+ id: nanoid(),
8
+ type,
9
+ payload
10
+ };
11
+ }
12
+ function parseCustomEventDetail(data) {
13
+ return data;
14
+ }
15
+
16
+ //#endregion
17
+ //#region src/adapters/event-target/shared.ts
18
+ const workerErrorEvent = { ...defineEventa() };
19
+
20
+ //#endregion
21
+ //#region src/adapters/event-target/index.ts
22
+ function withRemoval(eventTarget, type, listener) {
23
+ eventTarget.addEventListener(type, listener);
24
+ return { remove: () => {
25
+ eventTarget.removeEventListener(type, listener);
26
+ } };
27
+ }
28
+ function createContext(eventTarget, options) {
29
+ const ctx = createContext$1();
30
+ const { messageEventName = "message", errorEventName = "error", extraListeners = {} } = options || {};
31
+ const cleanupRemoval = [];
32
+ ctx.on(and(matchBy((e) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection), matchBy("*")), (event) => {
33
+ const detail = generateCustomEventDetail(event.id, {
34
+ ...defineOutboundEventa(event.type),
35
+ ...event
36
+ });
37
+ const customEvent = new CustomEvent(messageEventName || EventaType.Event, {
38
+ detail,
39
+ bubbles: true,
40
+ cancelable: true
41
+ });
42
+ eventTarget.dispatchEvent(customEvent);
43
+ });
44
+ if (messageEventName) cleanupRemoval.push(withRemoval(eventTarget, messageEventName, (event) => {
45
+ try {
46
+ const { type, payload } = parseCustomEventDetail(event.detail);
47
+ ctx.emit(defineInboundEventa(type), payload.body, { raw: { event } });
48
+ } catch (error) {
49
+ console.error("Failed to parse WebSocket message:", error);
50
+ ctx.emit(workerErrorEvent, { error }, { raw: { event } });
51
+ }
52
+ }));
53
+ if (errorEventName) cleanupRemoval.push(withRemoval(eventTarget, errorEventName, (error) => {
54
+ ctx.emit(workerErrorEvent, { error }, { raw: { event: error } });
55
+ }));
56
+ for (const [eventName, listener] of Object.entries(extraListeners)) cleanupRemoval.push(withRemoval(eventTarget, eventName, listener));
57
+ return {
58
+ context: ctx,
59
+ dispose: () => {
60
+ cleanupRemoval.forEach((removal) => removal.remove());
61
+ }
62
+ };
63
+ }
64
+
65
+ //#endregion
66
+ export { createContext };
67
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["createBaseContext","cleanupRemoval: Array<{ remove: () => void }>"],"sources":["../../../src/adapters/event-target/internal.ts","../../../src/adapters/event-target/shared.ts","../../../src/adapters/event-target/index.ts"],"sourcesContent":["import type { EventTag } from '../..'\nimport type { CustomEventDetail as CustomEventDetailDetail } from './shared'\n\nimport { nanoid } from '../..'\n\nexport function generateCustomEventDetail<T>(type: EventTag<any, any>, payload: T): CustomEventDetailDetail<T> {\n return {\n id: nanoid(),\n type,\n payload,\n }\n}\n\nexport function parseCustomEventDetail<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 CustomEventDetail<T> {\n id: string\n type: EventTag<any, any>\n payload: T\n}\n\nexport const workerErrorEvent = { ...defineEventa<{ error: unknown }>() }\n","import type { EventContext } from '../../context'\nimport type { DirectionalEventa, Eventa } from '../../eventa'\n\nimport { createContext as createBaseContext } from '../../context'\nimport { and, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, EventaType, matchBy } from '../../eventa'\nimport { generateCustomEventDetail, parseCustomEventDetail } from './internal'\nimport { workerErrorEvent } from './shared'\n\nfunction withRemoval(eventTarget: EventTarget, type: string, listener: EventListenerOrEventListenerObject | null) {\n eventTarget.addEventListener(type, listener)\n\n return {\n remove: () => {\n eventTarget.removeEventListener(type, listener)\n },\n }\n}\n\nexport function createContext(eventTarget: EventTarget, options?: {\n messageEventName?: string | false\n errorEventName?: string | false\n extraListeners?: Record<string, (event: Event) => void | Promise<void>>\n}) {\n const ctx = createBaseContext() as EventContext<any, { raw: { event: CustomEvent | Event | unknown } }>\n\n const {\n messageEventName = 'message',\n errorEventName = 'error',\n extraListeners = {},\n } = options || {}\n\n const cleanupRemoval: Array<{ remove: () => void }> = []\n\n ctx.on(and(\n matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n matchBy('*'),\n ), (event) => {\n const detail = generateCustomEventDetail(event.id, { ...defineOutboundEventa(event.type), ...event })\n\n const customEvent = new CustomEvent(messageEventName || EventaType.Event, {\n detail,\n bubbles: true,\n cancelable: true,\n })\n\n eventTarget.dispatchEvent(customEvent)\n })\n\n if (messageEventName) {\n cleanupRemoval.push(withRemoval(eventTarget, messageEventName, (event) => {\n try {\n const { type, payload } = parseCustomEventDetail<Eventa<any>>((event as CustomEvent).detail)\n ctx.emit(defineInboundEventa(type), payload.body, { raw: { event } })\n }\n catch (error) {\n console.error('Failed to parse WebSocket message:', error)\n ctx.emit(workerErrorEvent, { error }, { raw: { event } })\n }\n }))\n }\n\n if (errorEventName) {\n cleanupRemoval.push(withRemoval(eventTarget, errorEventName, (error) => {\n ctx.emit(workerErrorEvent, { error }, { raw: { event: error } })\n }))\n }\n\n for (const [eventName, listener] of Object.entries(extraListeners)) {\n cleanupRemoval.push(withRemoval(eventTarget, eventName, listener))\n }\n\n return {\n context: ctx,\n dispose: () => {\n cleanupRemoval.forEach(removal => removal.remove())\n },\n }\n}\n\nexport type * from './shared'\n"],"mappings":";;;;AAKA,SAAgB,0BAA6B,MAA0B,SAAwC;AAC7G,QAAO;EACL,IAAI,QAAQ;EACZ;EACA;EACD;;AAGH,SAAgB,uBAA0B,MAA2C;AACnF,QAAO;;;;;ACJT,MAAa,mBAAmB,EAAE,GAAG,cAAkC,EAAE;;;;ACFzE,SAAS,YAAY,aAA0B,MAAc,UAAqD;AAChH,aAAY,iBAAiB,MAAM,SAAS;AAE5C,QAAO,EACL,cAAc;AACZ,cAAY,oBAAoB,MAAM,SAAS;IAElD;;AAGH,SAAgB,cAAc,aAA0B,SAIrD;CACD,MAAM,MAAMA,iBAAmB;CAE/B,MAAM,EACJ,mBAAmB,WACnB,iBAAiB,SACjB,iBAAiB,EAAE,KACjB,WAAW,EAAE;CAEjB,MAAMC,iBAAgD,EAAE;AAExD,KAAI,GAAG,IACL,SAAS,MAA8B,EAAE,mBAAmB,oBAAoB,YAAY,CAAC,EAAE,eAAe,EAC9G,QAAQ,IAAI,CACb,GAAG,UAAU;EACZ,MAAM,SAAS,0BAA0B,MAAM,IAAI;GAAE,GAAG,qBAAqB,MAAM,KAAK;GAAE,GAAG;GAAO,CAAC;EAErG,MAAM,cAAc,IAAI,YAAY,oBAAoB,WAAW,OAAO;GACxE;GACA,SAAS;GACT,YAAY;GACb,CAAC;AAEF,cAAY,cAAc,YAAY;GACtC;AAEF,KAAI,iBACF,gBAAe,KAAK,YAAY,aAAa,mBAAmB,UAAU;AACxE,MAAI;GACF,MAAM,EAAE,MAAM,YAAY,uBAAqC,MAAsB,OAAO;AAC5F,OAAI,KAAK,oBAAoB,KAAK,EAAE,QAAQ,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;WAEhE,OAAO;AACZ,WAAQ,MAAM,sCAAsC,MAAM;AAC1D,OAAI,KAAK,kBAAkB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;GAE3D,CAAC;AAGL,KAAI,eACF,gBAAe,KAAK,YAAY,aAAa,iBAAiB,UAAU;AACtE,MAAI,KAAK,kBAAkB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,OAAO,EAAE,CAAC;GAChE,CAAC;AAGL,MAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,eAAe,CAChE,gBAAe,KAAK,YAAY,aAAa,WAAW,SAAS,CAAC;AAGpE,QAAO;EACL,SAAS;EACT,eAAe;AACb,kBAAe,SAAQ,YAAW,QAAQ,QAAQ,CAAC;;EAEtD"}
@@ -0,0 +1,57 @@
1
+ import { Eventa } from "../../../eventa-B2HPBK4S.mjs";
2
+ import { EventContext } from "../../../context-C_-MRU46.mjs";
3
+ import { Hooks, Message, Peer, WSError } from "crossws";
4
+
5
+ //#region src/adapters/websocket/h3/global.d.ts
6
+ declare const wsConnectedEvent: Eventa<{
7
+ id: string;
8
+ }>;
9
+ declare const wsDisconnectedEvent: Eventa<{
10
+ id: string;
11
+ }>;
12
+ declare const wsErrorEvent: Eventa<{
13
+ error: unknown;
14
+ }>;
15
+ declare function createGlobalContext(): {
16
+ websocketHandlers: Omit<Hooks, 'upgrade'>;
17
+ context: EventContext<any, {
18
+ raw: {
19
+ error?: WSError;
20
+ message?: Message;
21
+ };
22
+ }>;
23
+ };
24
+ //#endregion
25
+ //#region src/adapters/websocket/h3/peer.d.ts
26
+ declare const wsConnectedEvent$1: Eventa<{
27
+ id: string;
28
+ }>;
29
+ declare const wsDisconnectedEvent$1: Eventa<{
30
+ id: string;
31
+ }>;
32
+ declare const wsErrorEvent$1: Eventa<{
33
+ error: unknown;
34
+ }>;
35
+ declare function createPeerContext(peer: Peer): {
36
+ hooks: Pick<Hooks, 'message'>;
37
+ context: EventContext<any, {
38
+ raw: {
39
+ message: Message;
40
+ };
41
+ }>;
42
+ };
43
+ interface PeerContext {
44
+ peer: Peer;
45
+ context: EventContext<any, {
46
+ raw: {
47
+ message: Message;
48
+ };
49
+ }>;
50
+ }
51
+ declare function createPeerHooks(): {
52
+ hooks: Partial<Hooks>;
53
+ untilLeastOneConnected: Promise<PeerContext>;
54
+ };
55
+ //#endregion
56
+ export { type PeerContext, createGlobalContext, createPeerContext, createPeerHooks, wsErrorEvent as global, wsConnectedEvent as globalWsConnectedEvent, wsDisconnectedEvent as globalWsDisconnectedEvent, wsConnectedEvent$1 as peerWsConnectedEvent, wsDisconnectedEvent$1 as peerWsDisconnectedEvent, wsErrorEvent$1 as peerWsErrorEvent };
57
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,100 @@
1
+ import { EventaFlowDirection, and, createContext, defineEventa, defineInboundEventa, defineOutboundEventa, matchBy } from "../../../context-C35Qku9U.mjs";
2
+ import { generateWebsocketPayload, parseWebsocketPayload } from "../../../internal-DjiAQtsa.mjs";
3
+
4
+ //#region src/adapters/websocket/h3/global.ts
5
+ const wsConnectedEvent = defineEventa("eventa:adapters:websocket-global:connected");
6
+ const wsDisconnectedEvent = defineEventa("eventa:adapters:websocket-global:disconnected");
7
+ const wsErrorEvent = defineEventa("eventa:adapters:websocket-global:error");
8
+ function createGlobalContext() {
9
+ const ctx = createContext();
10
+ const peers = /* @__PURE__ */ new Set();
11
+ ctx.on(and(matchBy((e) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection), matchBy("*")), (event) => {
12
+ const data = JSON.stringify(generateWebsocketPayload(event.id, {
13
+ ...defineOutboundEventa(event.type),
14
+ ...event
15
+ }));
16
+ for (const peer of peers) peer.send(data);
17
+ });
18
+ return {
19
+ websocketHandlers: {
20
+ open(peer) {
21
+ peers.add(peer);
22
+ ctx.emit(wsConnectedEvent, { id: peer.id }, { raw: {} });
23
+ },
24
+ close(peer) {
25
+ peers.delete(peer);
26
+ ctx.emit(wsDisconnectedEvent, { id: peer.id }, { raw: {} });
27
+ },
28
+ error(_, error) {
29
+ console.error("WebSocket error:", error);
30
+ ctx.emit(wsErrorEvent, { error }, { raw: { error } });
31
+ },
32
+ async message(_, message) {
33
+ try {
34
+ const { type, payload } = parseWebsocketPayload(message.text());
35
+ ctx.emit(defineInboundEventa(type), payload.body, { raw: { message } });
36
+ } catch (error) {
37
+ console.error("Failed to parse WebSocket message:", error);
38
+ ctx.emit(wsErrorEvent, { error }, { raw: { message } });
39
+ }
40
+ }
41
+ },
42
+ context: ctx
43
+ };
44
+ }
45
+
46
+ //#endregion
47
+ //#region src/adapters/websocket/h3/peer.ts
48
+ const wsConnectedEvent$1 = defineEventa("eventa:adapters:websocket-peer:connected");
49
+ const wsDisconnectedEvent$1 = defineEventa("eventa:adapters:websocket-peer:disconnected");
50
+ const wsErrorEvent$1 = defineEventa("eventa:adapters:websocket-peer:error");
51
+ function createPeerContext(peer) {
52
+ const peerId = peer.id;
53
+ const ctx = createContext();
54
+ ctx.on(and(matchBy((e) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection), matchBy("*")), (event) => {
55
+ const data = JSON.stringify(generateWebsocketPayload(event.id, {
56
+ ...defineOutboundEventa(event.type),
57
+ ...event
58
+ }));
59
+ peer.send(data);
60
+ });
61
+ return {
62
+ hooks: { message(peer$1, message) {
63
+ if (peer$1.id === peerId) try {
64
+ const { type, payload } = parseWebsocketPayload(message.text());
65
+ ctx.emit(defineInboundEventa(type), payload.body, { raw: { message } });
66
+ } catch (error) {
67
+ console.error("Failed to parse WebSocket message:", error);
68
+ ctx.emit(wsErrorEvent$1, { error }, { raw: { message } });
69
+ }
70
+ } },
71
+ context: ctx
72
+ };
73
+ }
74
+ function createPeerHooks() {
75
+ let resolve;
76
+ const untilLeastOneConnected = new Promise((r) => {
77
+ resolve = r;
78
+ });
79
+ let message;
80
+ return {
81
+ hooks: {
82
+ open: (peer) => {
83
+ const { context, hooks } = createPeerContext(peer);
84
+ message = hooks.message;
85
+ resolve({
86
+ peer,
87
+ context
88
+ });
89
+ },
90
+ message: (peer, msg) => {
91
+ if (message != null) message(peer, msg);
92
+ }
93
+ },
94
+ untilLeastOneConnected
95
+ };
96
+ }
97
+
98
+ //#endregion
99
+ export { createGlobalContext, createPeerContext, createPeerHooks, wsErrorEvent as global, wsConnectedEvent as globalWsConnectedEvent, wsDisconnectedEvent as globalWsDisconnectedEvent, wsConnectedEvent$1 as peerWsConnectedEvent, wsDisconnectedEvent$1 as peerWsDisconnectedEvent, wsErrorEvent$1 as peerWsErrorEvent };
100
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["createBaseContext","wsConnectedEvent","wsDisconnectedEvent","wsErrorEvent","createBaseContext","peer","resolve: (value: PeerContext) => void","message: Hooks['message'] | undefined"],"sources":["../../../../src/adapters/websocket/h3/global.ts","../../../../src/adapters/websocket/h3/peer.ts"],"sourcesContent":["import type { Hooks, Message, Peer, WSError } from 'crossws'\n\nimport type { EventContext } from '../../../context'\nimport type { DirectionalEventa, Eventa } from '../../../eventa'\n\nimport { createContext as createBaseContext } from '../../../context'\nimport { and, defineEventa, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../../eventa'\nimport { generateWebsocketPayload, parseWebsocketPayload } from '../internal'\n\nexport const wsConnectedEvent = defineEventa<{ id: string }>('eventa:adapters:websocket-global:connected')\nexport const wsDisconnectedEvent = defineEventa<{ id: string }>('eventa:adapters:websocket-global:disconnected')\nexport const wsErrorEvent = defineEventa<{ error: unknown }>('eventa:adapters:websocket-global:error')\n\nexport function createGlobalContext(): {\n websocketHandlers: Omit<Hooks, 'upgrade'>\n context: EventContext<any, { raw: { error?: WSError, message?: Message } }>\n} {\n const ctx = createBaseContext()\n const peers = new Set<Peer>()\n\n ctx.on(and(\n matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n matchBy('*'),\n ), (event) => {\n const data = JSON.stringify(generateWebsocketPayload(event.id, { ...defineOutboundEventa(event.type), ...event }))\n for (const peer of peers) {\n peer.send(data)\n }\n })\n\n return {\n websocketHandlers: {\n open(peer) {\n peers.add(peer)\n ctx.emit(wsConnectedEvent, { id: peer.id }, { raw: { } })\n },\n\n close(peer) {\n peers.delete(peer)\n ctx.emit(wsDisconnectedEvent, { id: peer.id }, { raw: { } })\n },\n\n error(_, error) {\n console.error('WebSocket error:', error)\n ctx.emit(wsErrorEvent, { error }, { raw: { error } })\n },\n\n async message(_, message) {\n try {\n const { type, payload } = parseWebsocketPayload<Eventa<any>>(message.text())\n ctx.emit(defineInboundEventa(type), payload.body, { raw: { message } })\n }\n catch (error) {\n console.error('Failed to parse WebSocket message:', error)\n ctx.emit(wsErrorEvent, { error }, { raw: { message } })\n }\n },\n },\n context: ctx,\n }\n}\n","import type { Hooks, Message, Peer } from 'crossws'\n\nimport type { EventContext } from '../../../context'\nimport type { DirectionalEventa, Eventa } from '../../../eventa'\n\nimport { createContext as createBaseContext } from '../../../context'\nimport { and, defineEventa, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../../eventa'\nimport { generateWebsocketPayload, parseWebsocketPayload } from '../internal'\n\nexport const wsConnectedEvent = defineEventa<{ id: string }>('eventa:adapters:websocket-peer:connected')\nexport const wsDisconnectedEvent = defineEventa<{ id: string }>('eventa:adapters:websocket-peer:disconnected')\nexport const wsErrorEvent = defineEventa<{ error: unknown }>('eventa:adapters:websocket-peer:error')\n\nexport function createPeerContext(peer: Peer): {\n hooks: Pick<Hooks, 'message'>\n context: EventContext<any, { raw: { message: Message } }>\n} {\n const peerId = peer.id\n const ctx = createBaseContext()\n\n ctx.on(and(\n matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n matchBy('*'),\n ), (event) => {\n const data = JSON.stringify(generateWebsocketPayload(event.id, { ...defineOutboundEventa(event.type), ...event }))\n peer.send(data)\n })\n\n return {\n hooks: {\n message(peer, message) {\n if (peer.id === peerId) {\n try {\n const { type, payload } = parseWebsocketPayload<Eventa<any>>(message.text())\n ctx.emit(defineInboundEventa(type), payload.body, { raw: { message } })\n }\n catch (error) {\n console.error('Failed to parse WebSocket message:', error)\n ctx.emit(wsErrorEvent, { error }, { raw: { message } })\n }\n }\n },\n },\n context: ctx,\n }\n}\n\nexport interface PeerContext { peer: Peer, context: EventContext<any, { raw: { message: Message } }> }\n\nexport function createPeerHooks(): { hooks: Partial<Hooks>, untilLeastOneConnected: Promise<PeerContext> } {\n let resolve: (value: PeerContext) => void\n const untilLeastOneConnected = new Promise<PeerContext>((r) => {\n resolve = r\n })\n\n let message: Hooks['message'] | undefined\n\n const hooks: Pick<Hooks, 'open' | 'message'> = {\n open: (peer) => {\n const { context, hooks } = createPeerContext(peer)\n message = hooks.message\n resolve({ peer, context })\n },\n message: (peer, msg) => {\n if (message != null) {\n message(peer, msg)\n }\n },\n }\n\n return { hooks, untilLeastOneConnected }\n}\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { EventTag } from "../../eventa-B2HPBK4S.mjs";
2
+
3
+ //#region src/adapters/websocket/shared.d.ts
4
+ interface WebsocketPayload<T> {
5
+ id: string;
6
+ type: EventTag<any, any>;
7
+ payload: T;
8
+ timestamp: number;
9
+ }
10
+ //#endregion
11
+ export { WebsocketPayload };
12
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,26 @@
1
+ import { Eventa } from "../../../eventa-B2HPBK4S.mjs";
2
+ import { EventContext } from "../../../context-C_-MRU46.mjs";
3
+
4
+ //#region src/adapters/websocket/native/index.d.ts
5
+ declare const wsConnectedEvent: Eventa<{
6
+ url: string;
7
+ }>;
8
+ declare const wsDisconnectedEvent: Eventa<{
9
+ url: string;
10
+ }>;
11
+ declare const wsErrorEvent: Eventa<{
12
+ error: unknown;
13
+ }>;
14
+ declare function createContext(wsConn: WebSocket): {
15
+ context: EventContext<any, {
16
+ raw: {
17
+ message?: any;
18
+ open?: Event;
19
+ error?: Event;
20
+ close?: CloseEvent;
21
+ };
22
+ }>;
23
+ };
24
+ //#endregion
25
+ export { createContext, wsConnectedEvent, wsDisconnectedEvent, wsErrorEvent };
26
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,40 @@
1
+ import { EventaFlowDirection, and, createContext as createContext$1, defineEventa, defineInboundEventa, defineOutboundEventa, matchBy } from "../../../context-C35Qku9U.mjs";
2
+ import { generateWebsocketPayload, parseWebsocketPayload } from "../../../internal-DjiAQtsa.mjs";
3
+
4
+ //#region src/adapters/websocket/native/index.ts
5
+ const wsConnectedEvent = defineEventa();
6
+ const wsDisconnectedEvent = defineEventa();
7
+ const wsErrorEvent = defineEventa();
8
+ function createContext(wsConn) {
9
+ const ctx = createContext$1();
10
+ ctx.on(and(matchBy((e) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection), matchBy("*")), (event) => {
11
+ const data = JSON.stringify(generateWebsocketPayload(event.id, {
12
+ ...defineOutboundEventa(event.type),
13
+ ...event
14
+ }));
15
+ wsConn.send(data);
16
+ });
17
+ wsConn.onmessage = (event) => {
18
+ try {
19
+ const { type, payload } = parseWebsocketPayload(event.data);
20
+ ctx.emit(defineInboundEventa(type), payload.body, { raw: { message: event } });
21
+ } catch (error) {
22
+ console.error("Failed to parse WebSocket message:", error);
23
+ ctx.emit(wsErrorEvent, { error }, { raw: { message: event } });
24
+ }
25
+ };
26
+ wsConn.onopen = (event) => {
27
+ ctx.emit(wsConnectedEvent, { url: wsConn.url }, { raw: { open: event } });
28
+ };
29
+ wsConn.onerror = (error) => {
30
+ ctx.emit(wsErrorEvent, { error }, { raw: { error } });
31
+ };
32
+ wsConn.onclose = (close) => {
33
+ ctx.emit(wsDisconnectedEvent, { url: wsConn.url }, { raw: { close } });
34
+ };
35
+ return { context: ctx };
36
+ }
37
+
38
+ //#endregion
39
+ export { createContext, wsConnectedEvent, wsDisconnectedEvent, wsErrorEvent };
40
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["createBaseContext"],"sources":["../../../../src/adapters/websocket/native/index.ts"],"sourcesContent":["import type { EventContext } from '../../../context'\nimport type { DirectionalEventa, Eventa } from '../../../eventa'\n\nimport { createContext as createBaseContext } from '../../../context'\nimport { and, defineEventa, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../../eventa'\nimport { generateWebsocketPayload, parseWebsocketPayload } from '../internal'\n\nexport const wsConnectedEvent = defineEventa<{ url: string }>()\nexport const wsDisconnectedEvent = defineEventa<{ url: string }>()\nexport const wsErrorEvent = defineEventa<{ error: unknown }>()\n\nexport function createContext(wsConn: WebSocket) {\n const ctx = createBaseContext() as EventContext<any, { raw: { message?: any, open?: Event, error?: Event, close?: CloseEvent } }>\n\n ctx.on(and(\n matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n matchBy('*'),\n ), (event) => {\n const data = JSON.stringify(generateWebsocketPayload(event.id, { ...defineOutboundEventa(event.type), ...event }))\n wsConn.send(data)\n })\n\n wsConn.onmessage = (event) => {\n try {\n const { type, payload } = parseWebsocketPayload<Eventa<any>>(event.data)\n ctx.emit(defineInboundEventa(type), payload.body, { raw: { message: event } })\n }\n catch (error) {\n console.error('Failed to parse WebSocket message:', error)\n ctx.emit(wsErrorEvent, { error }, { raw: { message: event } })\n }\n }\n\n wsConn.onopen = (event) => {\n ctx.emit(wsConnectedEvent, { url: wsConn.url }, { raw: { open: event } })\n }\n\n wsConn.onerror = (error) => {\n ctx.emit(wsErrorEvent, { error }, { raw: { error } })\n }\n\n wsConn.onclose = (close) => {\n ctx.emit(wsDisconnectedEvent, { url: wsConn.url }, { raw: { close } })\n }\n\n return {\n context: ctx,\n }\n}\n"],"mappings":";;;;AAOA,MAAa,mBAAmB,cAA+B;AAC/D,MAAa,sBAAsB,cAA+B;AAClE,MAAa,eAAe,cAAkC;AAE9D,SAAgB,cAAc,QAAmB;CAC/C,MAAM,MAAMA,iBAAmB;AAE/B,KAAI,GAAG,IACL,SAAS,MAA8B,EAAE,mBAAmB,oBAAoB,YAAY,CAAC,EAAE,eAAe,EAC9G,QAAQ,IAAI,CACb,GAAG,UAAU;EACZ,MAAM,OAAO,KAAK,UAAU,yBAAyB,MAAM,IAAI;GAAE,GAAG,qBAAqB,MAAM,KAAK;GAAE,GAAG;GAAO,CAAC,CAAC;AAClH,SAAO,KAAK,KAAK;GACjB;AAEF,QAAO,aAAa,UAAU;AAC5B,MAAI;GACF,MAAM,EAAE,MAAM,YAAY,sBAAmC,MAAM,KAAK;AACxE,OAAI,KAAK,oBAAoB,KAAK,EAAE,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;WAEzE,OAAO;AACZ,WAAQ,MAAM,sCAAsC,MAAM;AAC1D,OAAI,KAAK,cAAc,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;;;AAIlE,QAAO,UAAU,UAAU;AACzB,MAAI,KAAK,kBAAkB,EAAE,KAAK,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,EAAE,CAAC;;AAG3E,QAAO,WAAW,UAAU;AAC1B,MAAI,KAAK,cAAc,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;AAGvD,QAAO,WAAW,UAAU;AAC1B,MAAI,KAAK,qBAAqB,EAAE,KAAK,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;AAGxE,QAAO,EACL,SAAS,KACV"}
@@ -0,0 +1,63 @@
1
+ import { EventTag, Eventa } from "../../eventa-B2HPBK4S.mjs";
2
+ import { EventContext } from "../../context-C_-MRU46.mjs";
3
+ import { ExtendableInvokeResponse } from "../../invoke-LTUFMmHi.mjs";
4
+
5
+ //#region src/adapters/webworkers/shared.d.ts
6
+ interface WorkerPayload<T> {
7
+ id: string;
8
+ type: EventTag<any, any>;
9
+ payload: T;
10
+ transfer?: Transferable[];
11
+ }
12
+ interface WorkerEventa<T> extends Eventa<{
13
+ message: T;
14
+ transfer?: Transferable[];
15
+ }> {
16
+ _workerTransfer: true;
17
+ }
18
+ declare function defineWorkerEventa<T>(id?: string): WorkerEventa<T>;
19
+ declare function defineOutboundWorkerEventa<T>(id?: string): WorkerEventa<T>;
20
+ declare function isWorkerEventa(event: Eventa<any>): event is WorkerEventa<any>;
21
+ declare const workerErrorEvent: Eventa<{
22
+ error: unknown;
23
+ }>;
24
+ declare const workerMessageErrorEvent: Eventa<{
25
+ error: unknown;
26
+ message: any;
27
+ }>;
28
+ declare function normalizeOnListenerParameters(event: Eventa<any>, options?: {
29
+ transfer?: Transferable[];
30
+ } | unknown): {
31
+ body: any;
32
+ transfer: Transferable[] | undefined;
33
+ };
34
+ interface WithTransfer<T> {
35
+ message: T;
36
+ _transfer?: Transferable[];
37
+ }
38
+ declare function withTransfer<T>(body: T, transfer?: Transferable[]): ExtendableInvokeResponse<T, EventContext<{
39
+ invokeResponse?: {
40
+ transfer?: Transferable[];
41
+ };
42
+ }, any>>;
43
+ //#endregion
44
+ //#region src/adapters/webworkers/index.d.ts
45
+ declare function createContext(worker: Worker): {
46
+ context: EventContext<{
47
+ invokeRequest?: {
48
+ transfer?: Transferable[];
49
+ };
50
+ invokeResponse?: {
51
+ transfer?: Transferable[];
52
+ };
53
+ }, {
54
+ raw: {
55
+ message?: MessageEvent;
56
+ error?: ErrorEvent;
57
+ messageError?: MessageEvent;
58
+ };
59
+ }>;
60
+ };
61
+ //#endregion
62
+ export { WithTransfer, WorkerEventa, WorkerPayload, createContext, defineOutboundWorkerEventa, defineWorkerEventa, isWorkerEventa, normalizeOnListenerParameters, withTransfer, workerErrorEvent, workerMessageErrorEvent };
63
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,42 @@
1
+ import { EventaFlowDirection, and, createContext as createContext$1, defineInboundEventa, defineOutboundEventa, matchBy } from "../../context-C35Qku9U.mjs";
2
+ import "../../src-Bb-vxm5k.mjs";
3
+ import { defineOutboundWorkerEventa, defineWorkerEventa, generateWorkerPayload, isWorkerEventa, normalizeOnListenerParameters, parseWorkerPayload, withTransfer, workerErrorEvent } from "../../shared-DbO1rU2W.mjs";
4
+
5
+ //#region src/adapters/webworkers/index.ts
6
+ function createContext(worker) {
7
+ const ctx = createContext$1();
8
+ ctx.on(and(matchBy((e) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection), matchBy("*")), (event, options) => {
9
+ const { body, transfer } = normalizeOnListenerParameters(event, options);
10
+ const data = generateWorkerPayload(event.id, {
11
+ ...defineOutboundEventa(event.type),
12
+ ...event,
13
+ body
14
+ });
15
+ if (transfer != null) {
16
+ worker.postMessage(data, { transfer });
17
+ return;
18
+ }
19
+ worker.postMessage(data);
20
+ });
21
+ worker.onmessage = (event) => {
22
+ try {
23
+ const { type, payload } = parseWorkerPayload(event.data);
24
+ if (!isWorkerEventa(payload)) ctx.emit(defineInboundEventa(type), payload.body, { raw: { message: event } });
25
+ else ctx.emit(defineInboundEventa(type), { message: payload.body }, { raw: { message: event } });
26
+ } catch (error) {
27
+ console.error("Failed to parse WebWorker message:", error);
28
+ ctx.emit(workerErrorEvent, { error }, { raw: { message: event } });
29
+ }
30
+ };
31
+ worker.onerror = (error) => {
32
+ ctx.emit(workerErrorEvent, { error }, { raw: { error } });
33
+ };
34
+ worker.onmessageerror = (error) => {
35
+ ctx.emit(workerErrorEvent, { error }, { raw: { messageError: error } });
36
+ };
37
+ return { context: ctx };
38
+ }
39
+
40
+ //#endregion
41
+ export { createContext, defineOutboundWorkerEventa, defineWorkerEventa, isWorkerEventa, withTransfer };
42
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["createBaseContext"],"sources":["../../../src/adapters/webworkers/index.ts"],"sourcesContent":["import type { EventContext } from '../../context'\nimport type { DirectionalEventa, Eventa } from '../../eventa'\n\nimport { createContext as createBaseContext } from '../../context'\nimport { and, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../eventa'\nimport { generateWorkerPayload, parseWorkerPayload } from './internal'\nimport { isWorkerEventa, normalizeOnListenerParameters, workerErrorEvent } from './shared'\n\nexport function createContext(worker: Worker) {\n const ctx = createBaseContext() as EventContext<\n {\n invokeRequest?: { transfer?: Transferable[] }\n invokeResponse?: { transfer?: Transferable[] }\n },\n { raw: { message?: MessageEvent, error?: ErrorEvent, messageError?: MessageEvent } }\n >\n\n ctx.on(and(\n matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n matchBy('*'),\n ), (event, options) => {\n const { body, transfer } = normalizeOnListenerParameters(event, options)\n const data = generateWorkerPayload(event.id, { ...defineOutboundEventa(event.type), ...event, body })\n if (transfer != null) {\n worker.postMessage(data, { transfer })\n return\n }\n\n worker.postMessage(data)\n })\n\n worker.onmessage = (event) => {\n try {\n const { type, payload } = parseWorkerPayload<Eventa<any>>(event.data)\n if (!isWorkerEventa(payload)) {\n ctx.emit(defineInboundEventa(type), payload.body, { raw: { message: event } })\n }\n else {\n ctx.emit(defineInboundEventa(type), { message: payload.body }, { raw: { message: event } })\n }\n }\n catch (error) {\n console.error('Failed to parse WebWorker message:', error)\n ctx.emit(workerErrorEvent, { error }, { raw: { message: event } })\n }\n }\n\n worker.onerror = (error) => {\n ctx.emit(workerErrorEvent, { error }, { raw: { error } })\n }\n\n worker.onmessageerror = (error) => {\n ctx.emit(workerErrorEvent, { error }, { raw: { messageError: error } })\n }\n\n return {\n context: ctx,\n }\n}\n\nexport { defineOutboundWorkerEventa, defineWorkerEventa, isWorkerEventa, withTransfer } from './shared'\nexport type * from './shared'\n"],"mappings":";;;;;AAQA,SAAgB,cAAc,QAAgB;CAC5C,MAAM,MAAMA,iBAAmB;AAQ/B,KAAI,GAAG,IACL,SAAS,MAA8B,EAAE,mBAAmB,oBAAoB,YAAY,CAAC,EAAE,eAAe,EAC9G,QAAQ,IAAI,CACb,GAAG,OAAO,YAAY;EACrB,MAAM,EAAE,MAAM,aAAa,8BAA8B,OAAO,QAAQ;EACxE,MAAM,OAAO,sBAAsB,MAAM,IAAI;GAAE,GAAG,qBAAqB,MAAM,KAAK;GAAE,GAAG;GAAO;GAAM,CAAC;AACrG,MAAI,YAAY,MAAM;AACpB,UAAO,YAAY,MAAM,EAAE,UAAU,CAAC;AACtC;;AAGF,SAAO,YAAY,KAAK;GACxB;AAEF,QAAO,aAAa,UAAU;AAC5B,MAAI;GACF,MAAM,EAAE,MAAM,YAAY,mBAAgC,MAAM,KAAK;AACrE,OAAI,CAAC,eAAe,QAAQ,CAC1B,KAAI,KAAK,oBAAoB,KAAK,EAAE,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;OAG9E,KAAI,KAAK,oBAAoB,KAAK,EAAE,EAAE,SAAS,QAAQ,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;WAGxF,OAAO;AACZ,WAAQ,MAAM,sCAAsC,MAAM;AAC1D,OAAI,KAAK,kBAAkB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;;;AAItE,QAAO,WAAW,UAAU;AAC1B,MAAI,KAAK,kBAAkB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;AAG3D,QAAO,kBAAkB,UAAU;AACjC,MAAI,KAAK,kBAAkB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,OAAO,EAAE,CAAC;;AAGzE,QAAO,EACL,SAAS,KACV"}
@@ -0,0 +1,24 @@
1
+ import "../../../eventa-B2HPBK4S.mjs";
2
+ import { EventContext } from "../../../context-C_-MRU46.mjs";
3
+
4
+ //#region src/adapters/webworkers/worker/index.d.ts
5
+ declare function createContext(options?: {
6
+ messagePort?: Omit<Worker, 'close' | 'start'>;
7
+ }): {
8
+ context: EventContext<{
9
+ invokeRequest?: {
10
+ transfer?: Transferable[];
11
+ };
12
+ invokeResponse?: {
13
+ transfer?: Transferable[];
14
+ };
15
+ }, {
16
+ raw: {
17
+ event?: any;
18
+ error?: string | Event;
19
+ };
20
+ }>;
21
+ };
22
+ //#endregion
23
+ export { createContext };
24
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,40 @@
1
+ import { EventaFlowDirection, and, createContext as createContext$1, defineInboundEventa, defineOutboundEventa, matchBy } from "../../../context-C35Qku9U.mjs";
2
+ import "../../../src-Bb-vxm5k.mjs";
3
+ import { generateWorkerPayload, isWorkerEventa, normalizeOnListenerParameters, parseWorkerPayload, workerErrorEvent } from "../../../shared-DbO1rU2W.mjs";
4
+
5
+ //#region src/adapters/webworkers/worker/index.ts
6
+ function createContext(options) {
7
+ const { messagePort = self } = options || {};
8
+ const ctx = createContext$1();
9
+ ctx.on(and(matchBy((e) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection), matchBy("*")), (event, options$1) => {
10
+ const { body, transfer } = normalizeOnListenerParameters(event, options$1);
11
+ const data = generateWorkerPayload(event.id, {
12
+ ...defineOutboundEventa(event.type),
13
+ ...event,
14
+ body
15
+ });
16
+ if (transfer != null) {
17
+ messagePort.postMessage(data, { transfer });
18
+ return;
19
+ }
20
+ messagePort.postMessage(data);
21
+ });
22
+ self.onerror = (error) => {
23
+ ctx.emit(workerErrorEvent, { error }, { raw: { error } });
24
+ };
25
+ self.onmessage = (event) => {
26
+ try {
27
+ const { type, payload } = parseWorkerPayload(event.data);
28
+ if (!isWorkerEventa(payload)) ctx.emit(defineInboundEventa(type), payload.body, { raw: { event } });
29
+ else ctx.emit(defineInboundEventa(type), { message: payload.body }, { raw: { event } });
30
+ } catch (error) {
31
+ console.error("Failed to parse WebWorker message:", error);
32
+ ctx.emit(workerErrorEvent, { error }, { raw: { event } });
33
+ }
34
+ };
35
+ return { context: ctx };
36
+ }
37
+
38
+ //#endregion
39
+ export { createContext };
40
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["createBaseContext","options"],"sources":["../../../../src/adapters/webworkers/worker/index.ts"],"sourcesContent":["/* eslint-disable no-restricted-globals */\nimport type { EventContext } from '../../../context'\nimport type { DirectionalEventa, Eventa } from '../../../eventa'\n\nimport { createContext as createBaseContext } from '../../../context'\nimport { and, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../../eventa'\nimport { generateWorkerPayload, parseWorkerPayload } from '../internal'\nimport { isWorkerEventa, normalizeOnListenerParameters, workerErrorEvent } from '../shared'\n\nexport function createContext(options?: {\n messagePort?: Omit<Worker, 'close' | 'start'>\n}) {\n const {\n messagePort = self,\n } = options || {}\n\n const ctx = createBaseContext() as EventContext<\n {\n invokeRequest?: { transfer?: Transferable[] }\n invokeResponse?: { transfer?: Transferable[] }\n },\n { raw: { event?: any, error?: string | Event } }\n >\n\n ctx.on(and(\n matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n matchBy('*'),\n ), (event, options) => {\n const { body, transfer } = normalizeOnListenerParameters(event, options)\n const data = generateWorkerPayload(event.id, { ...defineOutboundEventa(event.type), ...event, body })\n if (transfer != null) {\n messagePort.postMessage(data, { transfer })\n return\n }\n\n messagePort.postMessage(data)\n })\n\n self.onerror = (error) => {\n ctx.emit(workerErrorEvent, { error }, { raw: { error } })\n }\n\n self.onmessage = (event) => {\n try {\n const { type, payload } = parseWorkerPayload<Eventa<any>>(event.data)\n if (!isWorkerEventa(payload)) {\n ctx.emit(defineInboundEventa(type), payload.body, { raw: { event } })\n }\n else {\n ctx.emit(defineInboundEventa(type), { message: payload.body }, { raw: { event } })\n }\n }\n catch (error) {\n console.error('Failed to parse WebWorker message:', error)\n ctx.emit(workerErrorEvent, { error }, { raw: { event } })\n }\n }\n\n return {\n context: ctx,\n }\n}\n"],"mappings":";;;;;AASA,SAAgB,cAAc,SAE3B;CACD,MAAM,EACJ,cAAc,SACZ,WAAW,EAAE;CAEjB,MAAM,MAAMA,iBAAmB;AAQ/B,KAAI,GAAG,IACL,SAAS,MAA8B,EAAE,mBAAmB,oBAAoB,YAAY,CAAC,EAAE,eAAe,EAC9G,QAAQ,IAAI,CACb,GAAG,OAAO,cAAY;EACrB,MAAM,EAAE,MAAM,aAAa,8BAA8B,OAAOC,UAAQ;EACxE,MAAM,OAAO,sBAAsB,MAAM,IAAI;GAAE,GAAG,qBAAqB,MAAM,KAAK;GAAE,GAAG;GAAO;GAAM,CAAC;AACrG,MAAI,YAAY,MAAM;AACpB,eAAY,YAAY,MAAM,EAAE,UAAU,CAAC;AAC3C;;AAGF,cAAY,YAAY,KAAK;GAC7B;AAEF,MAAK,WAAW,UAAU;AACxB,MAAI,KAAK,kBAAkB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;AAG3D,MAAK,aAAa,UAAU;AAC1B,MAAI;GACF,MAAM,EAAE,MAAM,YAAY,mBAAgC,MAAM,KAAK;AACrE,OAAI,CAAC,eAAe,QAAQ,CAC1B,KAAI,KAAK,oBAAoB,KAAK,EAAE,QAAQ,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;OAGrE,KAAI,KAAK,oBAAoB,KAAK,EAAE,EAAE,SAAS,QAAQ,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;WAG/E,OAAO;AACZ,WAAQ,MAAM,sCAAsC,MAAM;AAC1D,OAAI,KAAK,kBAAkB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;;AAI7D,QAAO,EACL,SAAS,KACV"}