crosshook 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,10 +1,23 @@
1
1
  type Handler<T = any> = (payload: T) => void;
2
+ type EventMap = Record<string, (...args: any) => any>;
3
+ type InferPayload<T> = T extends (payload: infer P) => any ? P : void;
4
+ type EventsFrom<T extends EventMap> = {
5
+ [K in keyof T]: InferPayload<T[K]>;
6
+ };
7
+
2
8
  declare function register<T = any>(event: string, handler: Handler<T>): () => void;
3
- declare function call<T = any>(event: string, payload?: T): void;
9
+ declare function call(event: string, payload?: any): void;
4
10
 
5
11
  declare function useRegister<T = any>(event: string, handler: Handler<T>): void;
6
12
  declare function useBridge(): {
7
13
  call: typeof call;
8
14
  };
9
15
 
10
- export { type Handler, call, register, useBridge, useRegister };
16
+ declare function createCrosshook<T extends EventMap>(defs: T): {
17
+ useBridge: () => {
18
+ call<K extends keyof T>(event: K, payload: EventsFrom<T>[K]): void;
19
+ };
20
+ useRegister: <K extends keyof T>(event: K, handler: (payload: EventsFrom<T>[K]) => void) => void;
21
+ };
22
+
23
+ export { type EventMap, type EventsFrom, type Handler, type InferPayload, call, createCrosshook, register, useBridge, useRegister };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,23 @@
1
1
  type Handler<T = any> = (payload: T) => void;
2
+ type EventMap = Record<string, (...args: any) => any>;
3
+ type InferPayload<T> = T extends (payload: infer P) => any ? P : void;
4
+ type EventsFrom<T extends EventMap> = {
5
+ [K in keyof T]: InferPayload<T[K]>;
6
+ };
7
+
2
8
  declare function register<T = any>(event: string, handler: Handler<T>): () => void;
3
- declare function call<T = any>(event: string, payload?: T): void;
9
+ declare function call(event: string, payload?: any): void;
4
10
 
5
11
  declare function useRegister<T = any>(event: string, handler: Handler<T>): void;
6
12
  declare function useBridge(): {
7
13
  call: typeof call;
8
14
  };
9
15
 
10
- export { type Handler, call, register, useBridge, useRegister };
16
+ declare function createCrosshook<T extends EventMap>(defs: T): {
17
+ useBridge: () => {
18
+ call<K extends keyof T>(event: K, payload: EventsFrom<T>[K]): void;
19
+ };
20
+ useRegister: <K extends keyof T>(event: K, handler: (payload: EventsFrom<T>[K]) => void) => void;
21
+ };
22
+
23
+ export { type EventMap, type EventsFrom, type Handler, type InferPayload, call, createCrosshook, register, useBridge, useRegister };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var x=(r,e)=>{for(var t in e)l(r,t,{get:e[t],enumerable:!0})},y=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of p(e))!u.call(r,o)&&o!==t&&l(r,o,{get:()=>e[o],enumerable:!(s=f(e,o))||s.enumerable});return r};var H=r=>y(l({},"__esModule",{value:!0}),r);var T={};x(T,{call:()=>a,register:()=>i,useBridge:()=>c,useRegister:()=>g});module.exports=H(T);var d=require("react");var n=new Map;function i(r,e){return n.has(r)||n.set(r,new Set),n.get(r).add(e),()=>{n.get(r)?.delete(e),n.get(r)?.size===0&&n.delete(r)}}function a(r,e){let t=n.get(r);if(!t){process.env.NODE_ENV!=="production"&&console.warn(`[Bridge] No listeners for event "${r}"`);return}t.forEach(s=>{try{s(e)}catch(o){console.error(`[Bridge] Error in handler for "${r}"`,o)}})}function g(r,e){(0,d.useEffect)(()=>i(r,e),[r,e])}function c(){return{call:a}}0&&(module.exports={call,register,useBridge,useRegister});
1
+ "use strict";var f=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var y=(e,r)=>{for(var s in r)f(e,s,{get:r[s],enumerable:!0})},E=(e,r,s,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of g(r))!m.call(e,t)&&t!==s&&f(e,t,{get:()=>r[t],enumerable:!(o=d(r,t))||o.enumerable});return e};var x=e=>E(f({},"__esModule",{value:!0}),e);var H={};y(H,{call:()=>i,createCrosshook:()=>u,register:()=>a,useBridge:()=>c,useRegister:()=>p});module.exports=x(H);var n=new Map;function a(e,r){return n.has(e)||n.set(e,new Set),n.get(e).add(r),()=>{n.get(e)?.delete(r),n.get(e)?.size===0&&n.delete(e)}}function i(e,r){let s=n.get(e);if(!s){process.env.NODE_ENV!=="production"&&console.warn(`[crosshook] No listeners for "${e}"`);return}s.forEach(o=>{try{o(r)}catch(t){console.error(`[crosshook] Handler error in "${e}"`,t)}})}var l=require("react");function p(e,r){(0,l.useEffect)(()=>a(e,r),[e,r])}function c(){return{call:i}}function u(e){function r(){return{call(o,t){i(o,t)}}}function s(o,t){p(o,t)}return{useBridge:r,useRegister:s}}0&&(module.exports={call,createCrosshook,register,useBridge,useRegister});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/hooks.ts","../src/bridge.ts"],"sourcesContent":["export { useBridge, useRegister } from \"./hooks\";\nexport { call, register } from \"./bridge\";\nexport type { Handler } from \"./bridge\";","import { useEffect } from \"react\";\nimport { register, call, Handler } from \"./bridge\";\n\nexport function useRegister<T = any>(\n event: string,\n handler: Handler<T>\n) {\n useEffect(() => {\n const unregister = register(event, handler);\n return unregister;\n }, [event, handler]);\n}\n\nexport function useBridge() {\n return { call };\n}","export type Handler<T = any> = (payload: T) => void;\n\nconst listeners = new Map<string, Set<Handler>>();\n\nexport function register<T = any>(\n event: string,\n handler: Handler<T>\n) {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n listeners.get(event)!.add(handler as Handler);\n\n return () => {\n listeners.get(event)?.delete(handler as Handler);\n\n if (listeners.get(event)?.size === 0) {\n listeners.delete(event);\n }\n };\n}\n\nexport function call<T = any>(event: string, payload?: T) {\n const handlers = listeners.get(event);\n\n if (!handlers) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[Bridge] No listeners for event \"${event}\"`\n );\n }\n return;\n }\n\n handlers.forEach((handler) => {\n try {\n handler(payload);\n } catch (err) {\n console.error(\n `[Bridge] Error in handler for \"${event}\"`,\n err\n );\n }\n });\n}"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,aAAAC,EAAA,cAAAC,EAAA,gBAAAC,IAAA,eAAAC,EAAAN,GCAA,IAAAO,EAA0B,iBCE1B,IAAMC,EAAY,IAAI,IAEf,SAASC,EACZC,EACAC,EACF,CACE,OAAKH,EAAU,IAAIE,CAAK,GACpBF,EAAU,IAAIE,EAAO,IAAI,GAAK,EAGlCF,EAAU,IAAIE,CAAK,EAAG,IAAIC,CAAkB,EAErC,IAAM,CACTH,EAAU,IAAIE,CAAK,GAAG,OAAOC,CAAkB,EAE3CH,EAAU,IAAIE,CAAK,GAAG,OAAS,GAC/BF,EAAU,OAAOE,CAAK,CAE9B,CACJ,CAEO,SAASE,EAAcF,EAAeG,EAAa,CACtD,IAAMC,EAAWN,EAAU,IAAIE,CAAK,EAEpC,GAAI,CAACI,EAAU,CACP,QAAQ,IAAI,WAAa,cACzB,QAAQ,KACJ,oCAAoCJ,CAAK,GAC7C,EAEJ,MACJ,CAEAI,EAAS,QAASH,GAAY,CAC1B,GAAI,CACAA,EAAQE,CAAO,CACnB,OAASE,EAAK,CACV,QAAQ,MACJ,kCAAkCL,CAAK,IACvCK,CACJ,CACJ,CACJ,CAAC,CACL,CD1CO,SAASC,EACZC,EACAC,EACF,IACE,aAAU,IACaC,EAASF,EAAOC,CAAO,EAE3C,CAACD,EAAOC,CAAO,CAAC,CACvB,CAEO,SAASE,GAAY,CACxB,MAAO,CAAE,KAAAC,CAAK,CAClB","names":["index_exports","__export","call","register","useBridge","useRegister","__toCommonJS","import_react","listeners","register","event","handler","call","payload","handlers","err","useRegister","event","handler","register","useBridge","call"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/bridge.ts","../src/hooks.ts","../src/createCrossHook.ts"],"sourcesContent":["export { call, register } from \"./bridge\";\nexport { useBridge, useRegister } from \"./hooks\";\n\nexport { createCrosshook } from \"./createCrossHook\";\n\nexport type {\n Handler,\n EventMap,\n EventsFrom,\n InferPayload,\n} from \"./types\";","import type { Handler } from \"./types\";\n\nconst listeners = new Map<string, Set<Handler>>();\n\nexport function register<T = any>(\n event: string,\n handler: Handler<T>\n) {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n listeners.get(event)!.add(handler as Handler);\n\n return () => {\n listeners.get(event)?.delete(handler as Handler);\n\n if (listeners.get(event)?.size === 0) {\n listeners.delete(event);\n }\n };\n}\n\nexport function call(event: string, payload?: any) {\n const handlers = listeners.get(event);\n\n if (!handlers) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`[crosshook] No listeners for \"${event}\"`);\n }\n return;\n }\n\n handlers.forEach((handler) => {\n try {\n handler(payload);\n } catch (err) {\n console.error(\n `[crosshook] Handler error in \"${event}\"`,\n err\n );\n }\n });\n}","import { useEffect } from \"react\";\nimport { register, call } from \"./bridge\";\nimport type { Handler } from \"./types\";\n\nexport function useRegister<T = any>(\n event: string,\n handler: Handler<T>\n) {\n useEffect(() => {\n const unregister = register(event, handler);\n return unregister;\n }, [event, handler]);\n}\n\nexport function useBridge() {\n return { call };\n}","import { call as baseCall } from \"./bridge\";\nimport { useRegister as baseRegister } from \"./hooks\";\nimport type { EventMap, EventsFrom } from \"./types\";\n\nexport function createCrosshook<T extends EventMap>(defs: T) {\n type Events = EventsFrom<T>;\n\n function useBridge() {\n return {\n call<K extends keyof Events>(\n event: K,\n payload: Events[K]\n ) {\n baseCall(event as string, payload);\n },\n };\n }\n\n function useRegister<K extends keyof Events>(\n event: K,\n handler: (payload: Events[K]) => void\n ) {\n baseRegister(event as string, handler);\n }\n\n return {\n useBridge,\n useRegister,\n };\n}"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,oBAAAC,EAAA,aAAAC,EAAA,cAAAC,EAAA,gBAAAC,IAAA,eAAAC,EAAAP,GCEA,IAAMQ,EAAY,IAAI,IAEf,SAASC,EACZC,EACAC,EACF,CACE,OAAKH,EAAU,IAAIE,CAAK,GACpBF,EAAU,IAAIE,EAAO,IAAI,GAAK,EAGlCF,EAAU,IAAIE,CAAK,EAAG,IAAIC,CAAkB,EAErC,IAAM,CACTH,EAAU,IAAIE,CAAK,GAAG,OAAOC,CAAkB,EAE3CH,EAAU,IAAIE,CAAK,GAAG,OAAS,GAC/BF,EAAU,OAAOE,CAAK,CAE9B,CACJ,CAEO,SAASE,EAAKF,EAAeG,EAAe,CAC/C,IAAMC,EAAWN,EAAU,IAAIE,CAAK,EAEpC,GAAI,CAACI,EAAU,CACP,QAAQ,IAAI,WAAa,cACzB,QAAQ,KAAK,iCAAiCJ,CAAK,GAAG,EAE1D,MACJ,CAEAI,EAAS,QAASH,GAAY,CAC1B,GAAI,CACAA,EAAQE,CAAO,CACnB,OAASE,EAAK,CACV,QAAQ,MACJ,iCAAiCL,CAAK,IACtCK,CACJ,CACJ,CACJ,CAAC,CACL,CC3CA,IAAAC,EAA0B,iBAInB,SAASC,EACZC,EACAC,EACF,IACE,aAAU,IACaC,EAASF,EAAOC,CAAO,EAE3C,CAACD,EAAOC,CAAO,CAAC,CACvB,CAEO,SAASE,GAAY,CACxB,MAAO,CAAE,KAAAC,CAAK,CAClB,CCZO,SAASC,EAAoCC,EAAS,CAGzD,SAASC,GAAY,CACjB,MAAO,CACH,KACIC,EACAC,EACF,CACEC,EAASF,EAAiBC,CAAO,CACrC,CACJ,CACJ,CAEA,SAASE,EACLH,EACAI,EACF,CACED,EAAaH,EAAiBI,CAAO,CACzC,CAEA,MAAO,CACH,UAAAL,EACA,YAAAI,CACJ,CACJ","names":["index_exports","__export","call","createCrosshook","register","useBridge","useRegister","__toCommonJS","listeners","register","event","handler","call","payload","handlers","err","import_react","useRegister","event","handler","register","useBridge","call","createCrosshook","defs","useBridge","event","payload","call","useRegister","handler"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{useEffect as l}from"react";var t=new Map;function n(r,e){return t.has(r)||t.set(r,new Set),t.get(r).add(e),()=>{t.get(r)?.delete(e),t.get(r)?.size===0&&t.delete(r)}}function s(r,e){let o=t.get(r);if(!o){process.env.NODE_ENV!=="production"&&console.warn(`[Bridge] No listeners for event "${r}"`);return}o.forEach(i=>{try{i(e)}catch(a){console.error(`[Bridge] Error in handler for "${r}"`,a)}})}function d(r,e){l(()=>n(r,e),[r,e])}function g(){return{call:s}}export{s as call,n as register,g as useBridge,d as useRegister};
1
+ var t=new Map;function a(e,r){return t.has(e)||t.set(e,new Set),t.get(e).add(r),()=>{t.get(e)?.delete(r),t.get(e)?.size===0&&t.delete(e)}}function i(e,r){let s=t.get(e);if(!s){process.env.NODE_ENV!=="production"&&console.warn(`[crosshook] No listeners for "${e}"`);return}s.forEach(o=>{try{o(r)}catch(n){console.error(`[crosshook] Handler error in "${e}"`,n)}})}import{useEffect as f}from"react";function p(e,r){f(()=>a(e,r),[e,r])}function l(){return{call:i}}function c(e){function r(){return{call(o,n){i(o,n)}}}function s(o,n){p(o,n)}return{useBridge:r,useRegister:s}}export{i as call,c as createCrosshook,a as register,l as useBridge,p as useRegister};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks.ts","../src/bridge.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { register, call, Handler } from \"./bridge\";\n\nexport function useRegister<T = any>(\n event: string,\n handler: Handler<T>\n) {\n useEffect(() => {\n const unregister = register(event, handler);\n return unregister;\n }, [event, handler]);\n}\n\nexport function useBridge() {\n return { call };\n}","export type Handler<T = any> = (payload: T) => void;\n\nconst listeners = new Map<string, Set<Handler>>();\n\nexport function register<T = any>(\n event: string,\n handler: Handler<T>\n) {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n listeners.get(event)!.add(handler as Handler);\n\n return () => {\n listeners.get(event)?.delete(handler as Handler);\n\n if (listeners.get(event)?.size === 0) {\n listeners.delete(event);\n }\n };\n}\n\nexport function call<T = any>(event: string, payload?: T) {\n const handlers = listeners.get(event);\n\n if (!handlers) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[Bridge] No listeners for event \"${event}\"`\n );\n }\n return;\n }\n\n handlers.forEach((handler) => {\n try {\n handler(payload);\n } catch (err) {\n console.error(\n `[Bridge] Error in handler for \"${event}\"`,\n err\n );\n }\n });\n}"],"mappings":"AAAA,OAAS,aAAAA,MAAiB,QCE1B,IAAMC,EAAY,IAAI,IAEf,SAASC,EACZC,EACAC,EACF,CACE,OAAKH,EAAU,IAAIE,CAAK,GACpBF,EAAU,IAAIE,EAAO,IAAI,GAAK,EAGlCF,EAAU,IAAIE,CAAK,EAAG,IAAIC,CAAkB,EAErC,IAAM,CACTH,EAAU,IAAIE,CAAK,GAAG,OAAOC,CAAkB,EAE3CH,EAAU,IAAIE,CAAK,GAAG,OAAS,GAC/BF,EAAU,OAAOE,CAAK,CAE9B,CACJ,CAEO,SAASE,EAAcF,EAAeG,EAAa,CACtD,IAAMC,EAAWN,EAAU,IAAIE,CAAK,EAEpC,GAAI,CAACI,EAAU,CACP,QAAQ,IAAI,WAAa,cACzB,QAAQ,KACJ,oCAAoCJ,CAAK,GAC7C,EAEJ,MACJ,CAEAI,EAAS,QAASH,GAAY,CAC1B,GAAI,CACAA,EAAQE,CAAO,CACnB,OAASE,EAAK,CACV,QAAQ,MACJ,kCAAkCL,CAAK,IACvCK,CACJ,CACJ,CACJ,CAAC,CACL,CD1CO,SAASC,EACZC,EACAC,EACF,CACEC,EAAU,IACaC,EAASH,EAAOC,CAAO,EAE3C,CAACD,EAAOC,CAAO,CAAC,CACvB,CAEO,SAASG,GAAY,CACxB,MAAO,CAAE,KAAAC,CAAK,CAClB","names":["useEffect","listeners","register","event","handler","call","payload","handlers","err","useRegister","event","handler","useEffect","register","useBridge","call"]}
1
+ {"version":3,"sources":["../src/bridge.ts","../src/hooks.ts","../src/createCrossHook.ts"],"sourcesContent":["import type { Handler } from \"./types\";\n\nconst listeners = new Map<string, Set<Handler>>();\n\nexport function register<T = any>(\n event: string,\n handler: Handler<T>\n) {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n listeners.get(event)!.add(handler as Handler);\n\n return () => {\n listeners.get(event)?.delete(handler as Handler);\n\n if (listeners.get(event)?.size === 0) {\n listeners.delete(event);\n }\n };\n}\n\nexport function call(event: string, payload?: any) {\n const handlers = listeners.get(event);\n\n if (!handlers) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`[crosshook] No listeners for \"${event}\"`);\n }\n return;\n }\n\n handlers.forEach((handler) => {\n try {\n handler(payload);\n } catch (err) {\n console.error(\n `[crosshook] Handler error in \"${event}\"`,\n err\n );\n }\n });\n}","import { useEffect } from \"react\";\nimport { register, call } from \"./bridge\";\nimport type { Handler } from \"./types\";\n\nexport function useRegister<T = any>(\n event: string,\n handler: Handler<T>\n) {\n useEffect(() => {\n const unregister = register(event, handler);\n return unregister;\n }, [event, handler]);\n}\n\nexport function useBridge() {\n return { call };\n}","import { call as baseCall } from \"./bridge\";\nimport { useRegister as baseRegister } from \"./hooks\";\nimport type { EventMap, EventsFrom } from \"./types\";\n\nexport function createCrosshook<T extends EventMap>(defs: T) {\n type Events = EventsFrom<T>;\n\n function useBridge() {\n return {\n call<K extends keyof Events>(\n event: K,\n payload: Events[K]\n ) {\n baseCall(event as string, payload);\n },\n };\n }\n\n function useRegister<K extends keyof Events>(\n event: K,\n handler: (payload: Events[K]) => void\n ) {\n baseRegister(event as string, handler);\n }\n\n return {\n useBridge,\n useRegister,\n };\n}"],"mappings":"AAEA,IAAMA,EAAY,IAAI,IAEf,SAASC,EACZC,EACAC,EACF,CACE,OAAKH,EAAU,IAAIE,CAAK,GACpBF,EAAU,IAAIE,EAAO,IAAI,GAAK,EAGlCF,EAAU,IAAIE,CAAK,EAAG,IAAIC,CAAkB,EAErC,IAAM,CACTH,EAAU,IAAIE,CAAK,GAAG,OAAOC,CAAkB,EAE3CH,EAAU,IAAIE,CAAK,GAAG,OAAS,GAC/BF,EAAU,OAAOE,CAAK,CAE9B,CACJ,CAEO,SAASE,EAAKF,EAAeG,EAAe,CAC/C,IAAMC,EAAWN,EAAU,IAAIE,CAAK,EAEpC,GAAI,CAACI,EAAU,CACP,QAAQ,IAAI,WAAa,cACzB,QAAQ,KAAK,iCAAiCJ,CAAK,GAAG,EAE1D,MACJ,CAEAI,EAAS,QAASH,GAAY,CAC1B,GAAI,CACAA,EAAQE,CAAO,CACnB,OAASE,EAAK,CACV,QAAQ,MACJ,iCAAiCL,CAAK,IACtCK,CACJ,CACJ,CACJ,CAAC,CACL,CC3CA,OAAS,aAAAC,MAAiB,QAInB,SAASC,EACZC,EACAC,EACF,CACEC,EAAU,IACaC,EAASH,EAAOC,CAAO,EAE3C,CAACD,EAAOC,CAAO,CAAC,CACvB,CAEO,SAASG,GAAY,CACxB,MAAO,CAAE,KAAAC,CAAK,CAClB,CCZO,SAASC,EAAoCC,EAAS,CAGzD,SAASC,GAAY,CACjB,MAAO,CACH,KACIC,EACAC,EACF,CACEC,EAASF,EAAiBC,CAAO,CACrC,CACJ,CACJ,CAEA,SAASE,EACLH,EACAI,EACF,CACED,EAAaH,EAAiBI,CAAO,CACzC,CAEA,MAAO,CACH,UAAAL,EACA,YAAAI,CACJ,CACJ","names":["listeners","register","event","handler","call","payload","handlers","err","useEffect","useRegister","event","handler","useEffect","register","useBridge","call","createCrosshook","defs","useBridge","event","payload","call","useRegister","handler"]}
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "crosshook",
3
- "version": "1.0.0",
4
- "description": "Tiny hook-based event bridge for React",
3
+ "version": "1.0.2",
5
4
  "main": "dist/index.cjs",
6
5
  "module": "dist/index.js",
7
6
  "types": "dist/index.d.ts",