@alcadur/react-events-hook 1.3.0 → 1.5.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 (56) hide show
  1. package/dist/actions/clear-memo.d.ts +3 -0
  2. package/dist/actions/clear-memo.d.ts.map +1 -0
  3. package/{src/actions/clear-memo.ts → dist/actions/clear-memo.js} +6 -8
  4. package/dist/actions/clear-memo.js.map +1 -0
  5. package/dist/actions/emit-event.d.ts +6 -0
  6. package/dist/actions/emit-event.d.ts.map +1 -0
  7. package/{src/actions/emit-event.ts → dist/actions/emit-event.js} +22 -28
  8. package/dist/actions/emit-event.js.map +1 -0
  9. package/dist/actions/index.d.ts +5 -0
  10. package/dist/actions/index.d.ts.map +1 -0
  11. package/{src/actions/index.ts → dist/actions/index.js} +5 -4
  12. package/dist/actions/index.js.map +1 -0
  13. package/dist/actions/on-event.d.ts +3 -0
  14. package/dist/actions/on-event.d.ts.map +1 -0
  15. package/{src/actions/on-event.ts → dist/actions/on-event.js} +12 -16
  16. package/dist/actions/on-event.js.map +1 -0
  17. package/dist/actions/remove-event.d.ts +3 -0
  18. package/dist/actions/remove-event.d.ts.map +1 -0
  19. package/{src/actions/remove-event.ts → dist/actions/remove-event.js} +15 -17
  20. package/dist/actions/remove-event.js.map +1 -0
  21. package/dist/events.model.d.ts +6 -0
  22. package/dist/events.model.d.ts.map +1 -0
  23. package/dist/events.model.js +2 -0
  24. package/dist/events.model.js.map +1 -0
  25. package/dist/hooks/index.d.ts +2 -0
  26. package/dist/hooks/index.d.ts.map +1 -0
  27. package/dist/hooks/index.js +2 -0
  28. package/dist/hooks/index.js.map +1 -0
  29. package/dist/hooks/useEvents.d.ts +9 -0
  30. package/dist/hooks/useEvents.d.ts.map +1 -0
  31. package/{src/hooks/useEvents.ts → dist/hooks/useEvents.js} +21 -24
  32. package/dist/hooks/useEvents.js.map +1 -0
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/{src/index.ts → dist/index.js} +4 -3
  36. package/dist/index.js.map +1 -0
  37. package/dist/shared-events.d.ts +8 -0
  38. package/dist/shared-events.d.ts.map +1 -0
  39. package/dist/shared-events.js +3 -0
  40. package/dist/shared-events.js.map +1 -0
  41. package/dist/utils.d.ts +3 -0
  42. package/dist/utils.d.ts.map +1 -0
  43. package/dist/utils.js +4 -0
  44. package/dist/utils.js.map +1 -0
  45. package/package.json +22 -8
  46. package/index.ts +0 -1
  47. package/src/actions/index.test.ts +0 -147
  48. package/src/events.model.ts +0 -4
  49. package/src/hooks/index.ts +0 -1
  50. package/src/hooks/useEvents.test.ts +0 -95
  51. package/src/setupTests.ts +0 -1
  52. package/src/shared-events.ts +0 -5
  53. package/src/utils.test.ts +0 -16
  54. package/src/utils.ts +0 -5
  55. package/tsconfig.json +0 -13
  56. package/vitest.config.ts +0 -13
@@ -0,0 +1,3 @@
1
+ import { EventNameType } from "../events.model";
2
+ export declare const clearMemo: (key: EventNameType) => void;
3
+ //# sourceMappingURL=clear-memo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-memo.d.ts","sourceRoot":"","sources":["../../src/actions/clear-memo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,SAAS,GAAI,KAAK,aAAa,SAI3C,CAAA"}
@@ -1,8 +1,6 @@
1
- import { lastEmittedValues } from "../shared-events";
2
- import { EventNameType } from "../events.model";
3
-
4
- export const clearMemo = (key: EventNameType) => {
5
- lastEmittedValues[key] = undefined;
6
- delete lastEmittedValues[key];
7
-
8
- }
1
+ import { lastEmittedValues } from "../shared-events";
2
+ export const clearMemo = (key) => {
3
+ lastEmittedValues[key] = undefined;
4
+ delete lastEmittedValues[key];
5
+ };
6
+ //# sourceMappingURL=clear-memo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-memo.js","sourceRoot":"","sources":["../../src/actions/clear-memo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAkB,EAAE,EAAE;IAC5C,iBAAiB,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACnC,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAElC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { EventNameType } from "../events.model";
2
+ export declare function emitEvent(event: EventNameType, ...args: any[]): void;
3
+ export declare namespace emitEvent {
4
+ var memo: (event: EventNameType, ...args: any[]) => void;
5
+ }
6
+ //# sourceMappingURL=emit-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-event.d.ts","sourceRoot":"","sources":["../../src/actions/emit-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAYhD,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAE7D;yBAFe,SAAS;sBAKI,aAAa,WAAW,GAAG,EAAE"}
@@ -1,28 +1,22 @@
1
- import { lastEmittedValues, sharedEvents } from "../shared-events";
2
- import { EventNameType } from "../events.model";
3
- import { clearMemo } from "./clear-memo";
4
-
5
- function emitter(event: EventNameType, ...args: any[]) {
6
- const callbacks = sharedEvents[event];
7
- if (!callbacks) {
8
- return;
9
- }
10
-
11
- callbacks.forEach(callback => callback(...args));
12
- }
13
-
14
- export function emitEvent(event: EventNameType, ...args: any[]) {
15
- emitter(event, ...args);
16
- }
17
-
18
- if (!emitEvent.memo) {
19
- emitEvent.memo = (event: EventNameType, ...args: any[]) => {
20
- lastEmittedValues[event] = args;
21
-
22
- if (args.length === 1 && args[0] === undefined) {
23
- clearMemo(event);
24
- }
25
-
26
- emitter(event, ...args);
27
- }
28
- }
1
+ import { lastEmittedValues, sharedEvents } from "../shared-events";
2
+ import { clearMemo } from "./clear-memo";
3
+ function emitter(event, ...args) {
4
+ const callbacks = sharedEvents[event];
5
+ if (!callbacks) {
6
+ return;
7
+ }
8
+ callbacks.forEach(callback => callback(...args));
9
+ }
10
+ export function emitEvent(event, ...args) {
11
+ emitter(event, ...args);
12
+ }
13
+ if (!emitEvent.memo) {
14
+ emitEvent.memo = (event, ...args) => {
15
+ lastEmittedValues[event] = args;
16
+ if (args.length === 1 && args[0] === undefined) {
17
+ clearMemo(event);
18
+ }
19
+ emitter(event, ...args);
20
+ };
21
+ }
22
+ //# sourceMappingURL=emit-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-event.js","sourceRoot":"","sources":["../../src/actions/emit-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,SAAS,OAAO,CAAC,KAAoB,EAAE,GAAG,IAAW;IACjD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAoB,EAAE,GAAG,IAAW;IAC1D,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAClB,SAAS,CAAC,IAAI,GAAG,CAAC,KAAoB,EAAE,GAAG,IAAW,EAAE,EAAE;QACtD,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7C,SAAS,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAA;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './emit-event';
2
+ export * from './on-event';
3
+ export * from './remove-event';
4
+ export * from './clear-memo';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
@@ -1,4 +1,5 @@
1
- export * from './emit-event';
2
- export * from './on-event';
3
- export * from './remove-event';
4
- export * from './clear-memo';
1
+ export * from './emit-event';
2
+ export * from './on-event';
3
+ export * from './remove-event';
4
+ export * from './clear-memo';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { EventCallbackType, EventNameType } from "../events.model";
2
+ export declare function onEvent(event: EventNameType, callback: EventCallbackType[] | EventCallbackType): void;
3
+ //# sourceMappingURL=on-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-event.d.ts","sourceRoot":"","sources":["../../src/actions/on-event.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEnE,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,QAW9F"}
@@ -1,16 +1,12 @@
1
- import { lastEmittedValues, sharedEvents } from "../shared-events";
2
- import { getAsArray } from "../utils";
3
- import { EventCallbackType, EventNameType } from "../events.model";
4
-
5
- export function onEvent(event: EventNameType, callback: EventCallbackType[] | EventCallbackType) {
6
- const callbacks = sharedEvents[event] ?? [];
7
-
8
- const newCallbacks = getAsArray(callback)
9
- callbacks.push(...newCallbacks);
10
-
11
- sharedEvents[event] = callbacks;
12
-
13
- if (lastEmittedValues[event]) {
14
- newCallbacks.forEach(callback => callback(...lastEmittedValues[event]));
15
- }
16
- }
1
+ import { lastEmittedValues, sharedEvents } from "../shared-events";
2
+ import { getAsArray } from "../utils";
3
+ export function onEvent(event, callback) {
4
+ const callbacks = sharedEvents[event] ?? [];
5
+ const newCallbacks = getAsArray(callback);
6
+ callbacks.push(...newCallbacks);
7
+ sharedEvents[event] = callbacks;
8
+ if (lastEmittedValues[event]) {
9
+ newCallbacks.forEach(callback => callback(...lastEmittedValues[event]));
10
+ }
11
+ }
12
+ //# sourceMappingURL=on-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-event.js","sourceRoot":"","sources":["../../src/actions/on-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,MAAM,UAAU,OAAO,CAAC,KAAoB,EAAE,QAAiD;IAC3F,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAE5C,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACzC,SAAS,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAEhC,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAEhC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { EventCallbackType, EventNameType } from "../events.model";
2
+ export declare function removeEvent(event: EventNameType, callback: EventCallbackType | EventCallbackType[]): void;
3
+ //# sourceMappingURL=remove-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-event.d.ts","sourceRoot":"","sources":["../../src/actions/remove-event.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,QAYlG"}
@@ -1,17 +1,15 @@
1
- import { sharedEvents } from "../shared-events";
2
- import { getAsArray } from "../utils";
3
- import { EventCallbackType, EventNameType } from "../events.model";
4
-
5
- export function removeEvent(event: EventNameType, callback: EventCallbackType | EventCallbackType[]) {
6
- const declaredCallbacks = sharedEvents[event];
7
- if (!declaredCallbacks) {
8
- return;
9
- }
10
-
11
- getAsArray(callback).forEach(cb => {
12
- const index = declaredCallbacks.indexOf(cb);
13
- if (index !== -1) {
14
- declaredCallbacks.splice(index, 1);
15
- }
16
- })
17
- }
1
+ import { sharedEvents } from "../shared-events";
2
+ import { getAsArray } from "../utils";
3
+ export function removeEvent(event, callback) {
4
+ const declaredCallbacks = sharedEvents[event];
5
+ if (!declaredCallbacks) {
6
+ return;
7
+ }
8
+ getAsArray(callback).forEach(cb => {
9
+ const index = declaredCallbacks.indexOf(cb);
10
+ if (index !== -1) {
11
+ declaredCallbacks.splice(index, 1);
12
+ }
13
+ });
14
+ }
15
+ //# sourceMappingURL=remove-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-event.js","sourceRoot":"","sources":["../../src/actions/remove-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,QAAiD;IAC/F,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAO;IACX,CAAC;IAED,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;IACL,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type EventNameType = string | number | symbol;
2
+ export type EventCallbackType = ((...args: any[]) => void) | (() => void);
3
+ export type InitEventsType = {
4
+ [key: EventNameType]: EventCallbackType[] | EventCallbackType;
5
+ };
6
+ //# sourceMappingURL=events.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.model.d.ts","sourceRoot":"","sources":["../src/events.model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AACpD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAA;AAEzE,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,GAAG,EAAE,aAAa,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,CAAA;CAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=events.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.model.js","sourceRoot":"","sources":["../src/events.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './useEvents';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './useEvents';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { InitEventsType } from "../events.model";
2
+ import { emitEvent, onEvent, removeEvent } from "../actions";
3
+ export declare const useEvents: (eventMap?: InitEventsType) => {
4
+ onEvent: typeof onEvent;
5
+ emitEvent: typeof emitEvent;
6
+ removeEvent: typeof removeEvent;
7
+ clearMemo: (key: import("../events.model").EventNameType) => void;
8
+ };
9
+ //# sourceMappingURL=useEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useEvents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAExE,eAAO,MAAM,SAAS,GAAI,WAAU,cAAmB;;;;;CAmBtD,CAAC"}
@@ -1,24 +1,21 @@
1
- import { useEffect } from "react";
2
- import { InitEventsType } from "../events.model";
3
- import { emitEvent, onEvent, removeEvent, clearMemo } from "../actions";
4
-
5
- export const useEvents = (eventMap: InitEventsType = {}) => {
6
- useEffect(() => {
7
- if (!eventMap) {
8
- return;
9
- }
10
- const events = [...Object.keys(eventMap), ...Object.getOwnPropertySymbols(eventMap)]
11
-
12
- events.forEach( event => {
13
- onEvent(event, eventMap[event])
14
- })
15
-
16
- return () => {
17
- events.forEach((event) => {
18
- removeEvent(event, eventMap[event])
19
- })
20
- }
21
- }, [eventMap])
22
-
23
- return { onEvent, emitEvent, removeEvent, clearMemo };
24
- };
1
+ "use client";
2
+ import { useEffect } from "react";
3
+ import { emitEvent, onEvent, removeEvent, clearMemo } from "../actions";
4
+ export const useEvents = (eventMap = {}) => {
5
+ useEffect(() => {
6
+ if (!eventMap) {
7
+ return;
8
+ }
9
+ const events = [...Object.keys(eventMap), ...Object.getOwnPropertySymbols(eventMap)];
10
+ events.forEach(event => {
11
+ onEvent(event, eventMap[event]);
12
+ });
13
+ return () => {
14
+ events.forEach((event) => {
15
+ removeEvent(event, eventMap[event]);
16
+ });
17
+ };
18
+ }, [eventMap]);
19
+ return { onEvent, emitEvent, removeEvent, clearMemo };
20
+ };
21
+ //# sourceMappingURL=useEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEvents.js","sourceRoot":"","sources":["../../src/hooks/useEvents.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,WAA2B,EAAE,EAAE,EAAE;IACvD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAA;QAEpF,MAAM,CAAC,OAAO,CAAE,KAAK,CAAC,EAAE;YACpB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;YACvC,CAAC,CAAC,CAAA;QACN,CAAC,CAAA;IACL,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './hooks';
2
+ export * from './utils';
3
+ export * from './actions';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
@@ -1,3 +1,4 @@
1
- export * from './hooks';
2
- export * from './utils';
3
- export * from './actions';
1
+ export * from './hooks';
2
+ export * from './utils';
3
+ export * from './actions';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { EventCallbackType, EventNameType } from "./events.model";
2
+ export declare const sharedEvents: {
3
+ [key: EventNameType]: EventCallbackType[];
4
+ };
5
+ export declare const lastEmittedValues: {
6
+ [key: EventNameType]: any;
7
+ };
8
+ //# sourceMappingURL=shared-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-events.d.ts","sourceRoot":"","sources":["../src/shared-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEvE,eAAO,MAAM,YAAY,EAAE;IAAE,CAAC,GAAG,EAAE,aAAa,GAAG,iBAAiB,EAAE,CAAA;CAAO,CAAC;AAE9E,eAAO,MAAM,iBAAiB,EAAE;IAAE,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,CAAA;CAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const sharedEvents = {};
2
+ export const lastEmittedValues = {};
3
+ //# sourceMappingURL=shared-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-events.js","sourceRoot":"","sources":["../src/shared-events.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAkD,EAAE,CAAC;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAkC,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { EventCallbackType } from "./events.model";
2
+ export declare function getAsArray(value: EventCallbackType[] | EventCallbackType): EventCallbackType[];
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,CAE9F"}
package/dist/utils.js ADDED
@@ -0,0 +1,4 @@
1
+ export function getAsArray(value) {
2
+ return Array.isArray(value) ? value : [value];
3
+ }
4
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,KAA8C;IACrE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC"}
package/package.json CHANGED
@@ -1,16 +1,12 @@
1
1
  {
2
2
  "name": "@alcadur/react-events-hook",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Helps in easy communication between React components as also with external sources",
5
5
  "keywords": [
6
- "react",
7
6
  "react",
8
7
  "hook",
9
- "react",
10
8
  "hooks",
11
- "events",
12
- "events",
13
- "hook"
9
+ "events"
14
10
  ],
15
11
  "homepage": "https://github.com/Alcadur/react-events-hook#readme",
16
12
  "bugs": {
@@ -23,9 +19,27 @@
23
19
  "license": "MIT",
24
20
  "author": "Alcadur",
25
21
  "type": "module",
26
- "main": "index.ts",
22
+ "main": "./dist/index.js",
23
+ "module": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js",
29
+ "default": "./dist/index.js"
30
+ }
31
+ },
32
+ "files": [
33
+ "dist"
34
+ ],
27
35
  "scripts": {
28
- "test": "vitest run"
36
+ "build": "tsc",
37
+ "test": "vitest run",
38
+ "prepublishOnly": "npm run build"
39
+ },
40
+ "peerDependencies": {
41
+ "react": ">=16.8.0",
42
+ "react-dom": ">=16.8.0"
29
43
  },
30
44
  "devDependencies": {
31
45
  "@rollup/plugin-typescript": "^12.3.0",
package/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './src';
@@ -1,147 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from "vitest";
2
- import { lastEmittedValues, sharedEvents } from "../shared-events";
3
- import { emitEvent } from "./emit-event";
4
- import { onEvent } from "./on-event";
5
- import { removeEvent } from "./remove-event";
6
- import { clearMemo } from "./clear-memo";
7
-
8
- describe("actions", () => {
9
- beforeEach(() => {
10
- Object.keys(sharedEvents).forEach((key) => delete sharedEvents[key]);
11
- Object.keys(lastEmittedValues).forEach((key) => delete lastEmittedValues[key]);
12
- });
13
-
14
- describe("onEvent", () => {
15
- it("registers a single callback", () => {
16
- const callback = vi.fn();
17
-
18
- onEvent("test-event", callback);
19
-
20
- expect(sharedEvents["test-event"]).toEqual([callback]);
21
- });
22
-
23
- it("registers an array of callbacks", () => {
24
- const callback1 = vi.fn();
25
- const callback2 = vi.fn();
26
-
27
- onEvent("test-event", [callback1, callback2]);
28
-
29
- expect(sharedEvents["test-event"]).toEqual([callback1, callback2]);
30
- });
31
- });
32
-
33
- describe("emitEvent", () => {
34
- it("invokes all callbacks with provided args", () => {
35
- const callback1 = vi.fn();
36
- const callback2 = vi.fn();
37
-
38
- onEvent("test-event", [callback1, callback2]);
39
- emitEvent("test-event", "data", 1);
40
-
41
- expect(callback1).toHaveBeenCalledWith("data", 1);
42
- expect(callback2).toHaveBeenCalledWith("data", 1);
43
- });
44
-
45
- it("does nothing when event has no callbacks", () => {
46
- expect(() => emitEvent("missing-event", "data")).not.toThrow();
47
- });
48
-
49
- describe("memo", () => {
50
- it("invokes all callback and stores the value", () => {
51
- const callback = vi.fn();
52
- onEvent("memo-event", callback);
53
-
54
- emitEvent.memo("memo-event", "memo-data");
55
-
56
- expect(callback).toHaveBeenCalledWith("memo-data");
57
- expect(lastEmittedValues["memo-event"]).toEqual(["memo-data"]);
58
- });
59
-
60
- it("triggers callback immediately if event was already memoized", () => {
61
- const callback = vi.fn();
62
-
63
- emitEvent.memo("memo-event", "old-data");
64
- onEvent("memo-event", callback);
65
-
66
- expect(callback).toHaveBeenCalledWith("old-data");
67
- });
68
-
69
- it("clears memoized value when emitEvent.memo is called with undefined", () => {
70
- const callback = vi.fn();
71
- onEvent("memo-event", callback);
72
-
73
- emitEvent.memo("memo-event", "some-data");
74
- expect(lastEmittedValues["memo-event"]).toEqual(["some-data"]);
75
- expect(callback).toHaveBeenCalledWith("some-data");
76
-
77
- emitEvent.memo("memo-event", undefined);
78
- expect(lastEmittedValues["memo-event"]).toBeUndefined();
79
- expect(callback).toHaveBeenCalledWith(undefined);
80
- });
81
-
82
- it("should not trigger callback immediately when last emitted value is undefined", () => {
83
- const callback = vi.fn();
84
- const callback2 = vi.fn();
85
-
86
- emitEvent.memo("memo-event", "some-data");
87
- onEvent("memo-event", callback);
88
- expect(callback).toHaveBeenCalledWith("some-data");
89
-
90
- emitEvent.memo("memo-event", undefined);
91
- onEvent("memo-event", callback2);
92
- expect(callback).toHaveBeenCalledWith(undefined);
93
- expect(callback2).not.toHaveBeenCalled();
94
- });
95
- });
96
- });
97
-
98
- describe("clearMemo", () => {
99
- it("removes the memoized value for a given event", () => {
100
- emitEvent.memo("test-event", "data");
101
- expect(lastEmittedValues["test-event"]).toEqual(["data"]);
102
-
103
- clearMemo("test-event");
104
- expect(lastEmittedValues["test-event"]).toBeUndefined();
105
- });
106
-
107
- it("does not trigger callbacks", () => {
108
- const callback = vi.fn();
109
- onEvent("test-event", callback);
110
- emitEvent.memo("test-event", "data");
111
- callback.mockClear();
112
-
113
- clearMemo("test-event");
114
- expect(callback).not.toHaveBeenCalled();
115
- });
116
- });
117
-
118
- describe("removeEvent", () => {
119
- it("removes a single callback", () => {
120
- const callback = vi.fn();
121
-
122
- onEvent("test-event", callback);
123
- removeEvent("test-event", callback);
124
- emitEvent("test-event", "data");
125
-
126
- expect(callback).not.toHaveBeenCalled();
127
- });
128
-
129
- it("removes multiple callbacks from array input", () => {
130
- const callback1 = vi.fn();
131
- const callback2 = vi.fn();
132
-
133
- onEvent("test-event", [callback1, callback2]);
134
- removeEvent("test-event", [callback1, callback2]);
135
- emitEvent("test-event", "data");
136
-
137
- expect(callback1).not.toHaveBeenCalled();
138
- expect(callback2).not.toHaveBeenCalled();
139
- });
140
-
141
- it("does nothing when event has no callbacks", () => {
142
- const callback = vi.fn();
143
-
144
- expect(() => removeEvent("missing-event", callback)).not.toThrow();
145
- });
146
- });
147
- });
@@ -1,4 +0,0 @@
1
- export type EventNameType = string | number | symbol
2
- export type EventCallbackType = ((...args: any[]) => void) | (() => void)
3
-
4
- export type InitEventsType = { [key: EventNameType]: EventCallbackType[] | EventCallbackType }
@@ -1 +0,0 @@
1
- export * from './useEvents';
@@ -1,95 +0,0 @@
1
- import { renderHook, act } from '@testing-library/react';
2
- import { useEvents } from './useEvents';
3
- import { describe, it, expect, beforeEach, vi } from "vitest";
4
- import { lastEmittedValues, sharedEvents } from '../shared-events';
5
-
6
- describe('useEvents', () => {
7
- beforeEach(() => {
8
- Object.keys(sharedEvents).forEach(key => delete sharedEvents[key]);
9
- Object.keys(lastEmittedValues).forEach(key => delete lastEmittedValues[key]);
10
- });
11
-
12
- it('should register and emit events', () => {
13
- const { result } = renderHook(() => useEvents());
14
- const callback = vi.fn();
15
-
16
- act(() => {
17
- result.current.onEvent('test-event', callback);
18
- });
19
-
20
- act(() => {
21
- result.current.emitEvent('test-event', 'data');
22
- });
23
-
24
- expect(callback).toHaveBeenCalledWith('data');
25
- });
26
-
27
- it('should remove events', () => {
28
- const { result } = renderHook(() => useEvents());
29
- const callback = vi.fn();
30
-
31
- act(() => {
32
- result.current.onEvent('test-event', callback);
33
- result.current.removeEvent('test-event', callback);
34
- });
35
-
36
- act(() => {
37
- result.current.emitEvent('test-event', 'data');
38
- });
39
-
40
- expect(callback).not.toHaveBeenCalled();
41
- });
42
-
43
- it('should register events from init map', () => {
44
- const callback = vi.fn();
45
- const callbackSymbol = vi.fn();
46
- const symbolEvent = Symbol('init-event');
47
- renderHook(() => useEvents({
48
- 'init-event': callback,
49
- [symbolEvent]: callbackSymbol
50
- }));
51
-
52
- const { result } = renderHook(() => useEvents());
53
- act(() => {
54
- result.current.emitEvent('init-event', 'init-data');
55
- result.current.emitEvent(symbolEvent);
56
- });
57
-
58
- expect(callback).toHaveBeenCalledWith('init-data');
59
- expect(callbackSymbol).toHaveBeenCalled()
60
- });
61
-
62
- it('should support memoized events', () => {
63
- const { result } = renderHook(() => useEvents());
64
- const callback = vi.fn();
65
-
66
- act(() => {
67
- result.current.emitEvent.memo('memo-event', 'memo-data');
68
- });
69
-
70
- act(() => {
71
- result.current.onEvent('memo-event', callback);
72
- });
73
-
74
- expect(callback).toHaveBeenCalledWith('memo-data');
75
- });
76
-
77
- it('should clear memoized events', () => {
78
- const { result } = renderHook(() => useEvents());
79
- const callback = vi.fn();
80
-
81
- act(() => {
82
- result.current.emitEvent.memo('memo-event', 'memo-data');
83
- });
84
-
85
- act(() => {
86
- result.current.clearMemo('memo-event');
87
- });
88
-
89
- act(() => {
90
- result.current.onEvent('memo-event', callback);
91
- });
92
-
93
- expect(callback).not.toHaveBeenCalled();
94
- });
95
- });
package/src/setupTests.ts DELETED
@@ -1 +0,0 @@
1
- import '@testing-library/jest-dom';
@@ -1,5 +0,0 @@
1
- import type { EventCallbackType, EventNameType } from "./events.model";
2
-
3
- export const sharedEvents: { [key: EventNameType]: EventCallbackType[] } = {};
4
-
5
- export const lastEmittedValues: { [key: EventNameType]: any } = {};
package/src/utils.test.ts DELETED
@@ -1,16 +0,0 @@
1
- import { getAsArray } from './utils';
2
- import { describe, it, expect, vi } from "vitest";
3
-
4
- describe('utils', () => {
5
- describe('getAsArray', () => {
6
- it('should return the same array if an array is passed', () => {
7
- const arr = [vi.fn()];
8
- expect(getAsArray(arr)).toBe(arr);
9
- });
10
-
11
- it('should wrap a single value in an array', () => {
12
- const callback = vi.fn();
13
- expect(getAsArray(callback)).toEqual([callback]);
14
- });
15
- });
16
- });
package/src/utils.ts DELETED
@@ -1,5 +0,0 @@
1
- import { EventCallbackType } from "./events.model";
2
-
3
- export function getAsArray(value: EventCallbackType[] | EventCallbackType): EventCallbackType[] {
4
- return Array.isArray(value) ? value : [value];
5
- }
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "outDir": "dist",
4
- "jsx": "react",
5
- "skipLibCheck": true,
6
- "allowSyntheticDefaultImports": true,
7
- "declaration": true,
8
- "lib": ["esnext"],
9
- "strictNullChecks": true,
10
- },
11
- "include": ["src"],
12
- "exclude": ["example"]
13
- }
package/vitest.config.ts DELETED
@@ -1,13 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
- import react from '@vitejs/plugin-react';
3
-
4
- export default defineConfig({
5
- plugins: [react()],
6
- test: {
7
- environment: 'jsdom',
8
- globals: true,
9
- type: 'module',
10
- setupFiles: './src/setupTests.ts',
11
- exclude: ['dist/**', 'node_modules/**']
12
- },
13
- });