@plitzi/sdk-event-bridge 0.30.19

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.
@@ -0,0 +1,35 @@
1
+ import { EventBridgeEvent, EventBridgeModule } from '@plitzi/sdk-shared';
2
+ export type EventBridgeCallback<T = any> = (...data: T[]) => T | Promise<T>;
3
+ export type EventBridgeParams<T = unknown> = {
4
+ filter?: (params?: T) => boolean;
5
+ override?: boolean;
6
+ };
7
+ export type Event<T = unknown> = {
8
+ callback: EventBridgeCallback<T>;
9
+ filter?: EventBridgeParams<T>['filter'];
10
+ };
11
+ export type EventBridgeProps<T = unknown> = {
12
+ events?: Record<EventBridgeModule, Record<EventBridgeEvent, Event<T>[]>>;
13
+ debugMode?: boolean;
14
+ };
15
+ type EventBridgeUpdateListener = (events: Record<EventBridgeEvent, unknown>) => void;
16
+ declare class EventBridge<T = unknown> {
17
+ debugMode: boolean;
18
+ events: Partial<Record<EventBridgeModule, Partial<Record<EventBridgeEvent, Event<T>[]>>>>;
19
+ private listeners;
20
+ constructor({ events, debugMode }?: EventBridgeProps<T> | undefined);
21
+ has(module: EventBridgeModule, event: EventBridgeEvent): Event<T>[] | undefined;
22
+ on(module: EventBridgeModule, event: EventBridgeEvent, callback?: EventBridgeCallback<T>, params?: EventBridgeParams<T>): void;
23
+ get(module: EventBridgeModule, event: EventBridgeEvent): Event<T>[] | undefined;
24
+ off(module: EventBridgeModule, event: EventBridgeEvent, callback?: EventBridgeCallback<T>): void;
25
+ emit(module: EventBridgeModule, events?: EventBridgeEvent[] | EventBridgeEvent, ...data: T[]): Promise<Awaited<T>[]>;
26
+ emitWithResponse(module: EventBridgeModule, event: EventBridgeEvent, ...data: T[]): Promise<T | Awaited<T>[] | undefined>;
27
+ once(module: EventBridgeModule, event: EventBridgeEvent, callback: EventBridgeCallback<T>, filter?: Event<T>['filter']): void;
28
+ clear(module?: EventBridgeModule): void;
29
+ getEvents(module?: EventBridgeModule): Partial<Record<EventBridgeEvent, Event<T>[]>> | Partial<Record<EventBridgeModule, Partial<Record<EventBridgeEvent, Event<T>[]>>>>;
30
+ getModuleEventsNames(module: EventBridgeModule): string[];
31
+ getModuleEventsCount(module: EventBridgeModule): number;
32
+ listen(events: EventBridgeEvent[] | EventBridgeEvent, listener: EventBridgeUpdateListener): () => void;
33
+ private touch;
34
+ }
35
+ export default EventBridge;
@@ -0,0 +1,101 @@
1
+ import { pConsole as e } from "@plitzi/sdk-shared/devTools/utils/PlitziConsole";
2
+ //#region src/EventBridge.ts
3
+ var t = class {
4
+ debugMode = !1;
5
+ events;
6
+ listeners = /* @__PURE__ */ new Map();
7
+ constructor({ events: e, debugMode: t = !1 } = {}) {
8
+ this.events = e ?? {}, this.debugMode = t;
9
+ }
10
+ has(e, t) {
11
+ if (!e) throw Error("Module name is required");
12
+ return this.events[e] && this.events[e][t];
13
+ }
14
+ on(e, t, n, r = {}) {
15
+ let { filter: i, override: a = !1 } = r;
16
+ if (!e) throw Error("Module name is required");
17
+ if (!n || typeof n != "function") throw Error("Callback must be a function");
18
+ this.events[e] || (this.events[e] = {}), (!this.events[e][t] || a && this.events[e][t].length > 0) && (this.events[e][t] = []), this.events[e][t].push({
19
+ callback: n,
20
+ filter: i
21
+ });
22
+ }
23
+ get(e, t) {
24
+ return this.has(e, t) ? this.events[e]?.[t] : [];
25
+ }
26
+ off(e, t, n) {
27
+ !this.has(e, t) || !this.events[e] || (n ? this.events[e][t] = this.events[e][t]?.filter((e) => e.callback !== n) : this.events[e][t] = [], this.events[e][t]?.length === 0 && delete this.events[e][t], Object.keys(this.events[e]).length === 0 && delete this.events[e]);
28
+ }
29
+ async emit(t, n = [], ...r) {
30
+ this.debugMode && e.info("eventBridge", "Event Triggered", {
31
+ module: t,
32
+ events: n,
33
+ data: r
34
+ });
35
+ let i;
36
+ i = Array.isArray(n) ? n : [n];
37
+ let a = [];
38
+ i.forEach((e) => {
39
+ if (!this.has(t, e)) return;
40
+ let n = this.get(t, e);
41
+ n && n.forEach((e) => {
42
+ let { callback: t, filter: n } = e;
43
+ (!n || typeof n != "function" || n(...r)) && a.push(t(...r));
44
+ });
45
+ });
46
+ let o = await Promise.all(a);
47
+ return this.touch(i.reduce((e, t) => ({
48
+ ...e,
49
+ [t]: r
50
+ }), {})), o;
51
+ }
52
+ async emitWithResponse(e, t, ...n) {
53
+ if (!this.has(e, t)) return;
54
+ let r = this.get(e, t);
55
+ if (!r) return;
56
+ let i = await Promise.all(r.filter((e) => !e.filter || e.filter(...n)).map((e) => e.callback(...n)));
57
+ return i.length === 1 ? i[0] : i;
58
+ }
59
+ once(e, t, n, r) {
60
+ if (!e) throw Error("Module name is required");
61
+ let i = async (r) => {
62
+ await n(r), this.off(e, t, i);
63
+ };
64
+ this.on(e, t, i, { filter: r });
65
+ }
66
+ clear(e) {
67
+ if (!e) {
68
+ this.events = {};
69
+ return;
70
+ }
71
+ this.events[e] && delete this.events[e];
72
+ }
73
+ getEvents(e) {
74
+ return e ? this.events[e] ? this.events[e] : {} : this.events;
75
+ }
76
+ getModuleEventsNames(e) {
77
+ return !e || !this.events[e] ? [] : Object.keys(this.events[e]);
78
+ }
79
+ getModuleEventsCount(e) {
80
+ return this.getModuleEventsNames(e).length;
81
+ }
82
+ listen(e, t) {
83
+ let n = Array.isArray(e) ? e : [e];
84
+ return n.forEach((e) => {
85
+ this.listeners.has(e) || this.listeners.set(e, /* @__PURE__ */ new Set()), this.listeners.get(e)?.add(t);
86
+ }), () => {
87
+ n.forEach((e) => {
88
+ let n = this.listeners.get(e);
89
+ n && (n.delete(t), n.size === 0 && this.listeners.delete(e));
90
+ });
91
+ };
92
+ }
93
+ touch(e) {
94
+ for (let t in e) {
95
+ let n = this.listeners.get(t);
96
+ if (n) for (let t of n) t(e);
97
+ }
98
+ }
99
+ };
100
+ //#endregion
101
+ export { t as default };
@@ -0,0 +1,5 @@
1
+ import { default as EventBridge } from './EventBridge';
2
+ import { EventBridgeContextValue as EventBridgeContextValueShared } from '@plitzi/sdk-shared';
3
+ export type EventBridgeContextValue<T = unknown> = EventBridgeContextValueShared<InstanceType<typeof EventBridge<T>>>;
4
+ declare const EventBridgeContext: import('react').Context<EventBridgeContextValue<unknown>>;
5
+ export default EventBridgeContext;
@@ -0,0 +1,5 @@
1
+ import { createContext as e } from "react";
2
+ var t = e({});
3
+ t.displayName = "EventBridgeContext";
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,9 @@
1
+ import { EventBridgeContextValue } from '@plitzi/sdk-shared';
2
+ import { ReactNode } from 'react';
3
+ export type EventBridgeContextProviderProps = {
4
+ children?: ReactNode;
5
+ debugMode: boolean;
6
+ onInit?: (instance: EventBridgeContextValue) => void;
7
+ };
8
+ declare const EventBridgeContextProvider: ({ children, debugMode, onInit }: EventBridgeContextProviderProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default EventBridgeContextProvider;
@@ -0,0 +1,20 @@
1
+ import e from "./EventBridge.mjs";
2
+ import t from "./EventBridgeContext.mjs";
3
+ import { useEffect as n, useMemo as r } from "react";
4
+ import { jsx as i } from "react/jsx-runtime";
5
+ //#region src/EventBridgeContextProvider.tsx
6
+ var a = ({ children: a, debugMode: o, onInit: s }) => {
7
+ let c = r(() => new e({ debugMode: o }), [o]);
8
+ n(() => () => {
9
+ c.clear();
10
+ }, [c]);
11
+ let l = r(() => ({ eventBridge: c }), [c]);
12
+ return n(() => {
13
+ s?.(l);
14
+ }, [s, l]), /* @__PURE__ */ i(t, {
15
+ value: l,
16
+ children: a
17
+ });
18
+ };
19
+ //#endregion
20
+ export { a as default };
@@ -0,0 +1,3 @@
1
+ import { EventBridgeEvent, EventBridgeModule } from '@plitzi/sdk-shared';
2
+ declare const EventBridgeTypesPerModule: Record<EventBridgeModule, EventBridgeEvent[]>;
3
+ export { EventBridgeTypesPerModule };
@@ -0,0 +1,15 @@
1
+ //#region src/EventBridgeHelper.ts
2
+ var e = {
3
+ main: /* @__PURE__ */ "schemaAddPage.schemaHomePage.schemaUpdatePage.schemaRemovePage.schemaAddPageFolder.schemaUpdatePageFolder.schemaRemovePageFolder.schemaUpdateSettings.schemaUpdate.schemaAddElement.schemaUpdateElement.schemaRemoveElement.schemaMoveElement.schemaCloneElement.schemaAddVariable.schemaUpdateVariable.schemaRemoveVariable.schemaAddTemplate.styleUpdate.styleAddSelector.styleUpdateSelector.styleRemoveSelector.styleAddSelectorVariable.styleUpdateSelectorVariable.styleRemoveSelectorVariable.styleAddVariable.styleUpdateVariable.styleRemoveVariable.styleAddTemplate.styleUpdateSettings".split("."),
4
+ builder: [
5
+ "builderSetBaseContext",
6
+ "builderSetSelected",
7
+ "builderSetHovered"
8
+ ],
9
+ segment: [],
10
+ template: [],
11
+ interaction: [],
12
+ element: []
13
+ };
14
+ //#endregion
15
+ export { e as EventBridgeTypesPerModule };
@@ -0,0 +1,4 @@
1
+ import { EventBridgeCallback, EventBridgeParams, default as EventBridge } from '../EventBridge';
2
+ import { EventBridgeEvent, EventBridgeModule } from '@plitzi/sdk-shared';
3
+ declare const useEventBridge: (module: EventBridgeModule, callbacks?: Partial<Record<EventBridgeEvent, EventBridgeCallback>>, params?: EventBridgeParams, context?: import('react').Context<import('..').EventBridgeContextValue<unknown>>, disabled?: boolean) => EventBridge<unknown>;
4
+ export default useEventBridge;
@@ -0,0 +1,22 @@
1
+ import e from "../EventBridgeContext.mjs";
2
+ import { use as t, useEffect as n } from "react";
3
+ //#region src/hooks/useEventBridge.ts
4
+ var r = (r, i = {}, a = {}, o = e, s = !1) => {
5
+ let { eventBridge: c } = t(o);
6
+ return n(() => {
7
+ if (s || !c || !r) return;
8
+ let e = Object.entries(i);
9
+ for (let [t, n] of e) typeof n == "function" && c.on(r, t, n, a);
10
+ return () => {
11
+ for (let [t, n] of e) typeof n == "function" && c.off(r, t, n);
12
+ };
13
+ }, [
14
+ r,
15
+ i,
16
+ c,
17
+ a,
18
+ s
19
+ ]), c;
20
+ };
21
+ //#endregion
22
+ export { r as default };
@@ -0,0 +1,11 @@
1
+ import { default as EventBridge } from './EventBridge';
2
+ import { default as EventBridgeContext } from './EventBridgeContext';
3
+ import { default as EventBridgeContextProvider } from './EventBridgeContextProvider';
4
+ import { default as useEventBridge } from './hooks/useEventBridge';
5
+ export * from './EventBridge';
6
+ export * from './EventBridgeContext';
7
+ export * from './EventBridgeContextProvider';
8
+ export * from './EventBridgeHelper';
9
+ export * from './hooks/useEventBridge';
10
+ export { EventBridge, EventBridgeContext, EventBridgeContextProvider, useEventBridge };
11
+ export default EventBridge;
package/dist/index.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import e from "./EventBridge.mjs";
2
+ import t from "./EventBridgeContext.mjs";
3
+ import n from "./EventBridgeContextProvider.mjs";
4
+ import r from "./hooks/useEventBridge.mjs";
5
+ import { EventBridgeTypesPerModule as i } from "./EventBridgeHelper.mjs";
6
+ //#region src/index.ts
7
+ var a = e;
8
+ //#endregion
9
+ export { e as EventBridge, t as EventBridgeContext, n as EventBridgeContextProvider, i as EventBridgeTypesPerModule, a as default, r as useEventBridge };
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@plitzi/sdk-event-bridge",
3
+ "version": "0.30.19",
4
+ "license": "AGPL-3.0",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs"
12
+ },
13
+ "./EventBridge": {
14
+ "types": "./dist/EventBridge.d.ts",
15
+ "import": "./dist/EventBridge.mjs"
16
+ },
17
+ "./EventBridgeContext": {
18
+ "types": "./dist/EventBridgeContext.d.ts",
19
+ "import": "./dist/EventBridgeContext.mjs"
20
+ },
21
+ "./EventBridgeContextProvider": {
22
+ "types": "./dist/EventBridgeContextProvider.d.ts",
23
+ "import": "./dist/EventBridgeContextProvider.mjs"
24
+ },
25
+ "./EventBridgeHelper": {
26
+ "types": "./dist/EventBridgeHelper.d.ts",
27
+ "import": "./dist/EventBridgeHelper.mjs"
28
+ },
29
+ "./hooks/useEventBridge": {
30
+ "types": "./dist/hooks/useEventBridge.d.ts",
31
+ "import": "./dist/hooks/useEventBridge.mjs"
32
+ },
33
+ "./index": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.mjs"
36
+ }
37
+ },
38
+ "scripts": {
39
+ "lint": "eslint ./src",
40
+ "typecheck": "tsc -p tsconfig.app.json --noEmit",
41
+ "build:dev": "vite build --mode development --minify false && node ../sdk-shared/scripts/generate-exports.mjs",
42
+ "build:dev-watch": "vite build --mode development --watch --minify false",
43
+ "build:prod": "vite build && node ../sdk-shared/scripts/generate-exports.mjs"
44
+ },
45
+ "type": "module",
46
+ "sideEffects": false,
47
+ "dependencies": {
48
+ "@plitzi/sdk-shared": "0.30.19",
49
+ "prop-types": "^15.8.1"
50
+ },
51
+ "devDependencies": {
52
+ "eslint": "^9.39.4",
53
+ "typescript": "^6.0.3",
54
+ "vite": "^8.0.10"
55
+ }
56
+ }