react-broadcast-sync 1.5.1 → 1.8.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 (54) hide show
  1. package/README.md +59 -11
  2. package/dist/BroadcastProvider.d.ts +2 -7
  3. package/dist/index.cjs.js +1 -1
  4. package/dist/index.cjs.js.map +1 -1
  5. package/dist/index.esm.js +1 -1
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/types/types.d.ts +17 -0
  8. package/dist/utils/debug.d.ts +7 -1
  9. package/package.json +6 -1
  10. package/.eslintignore +0 -5
  11. package/.github/workflows/ci.yml +0 -61
  12. package/.github/workflows/release.yml +0 -39
  13. package/.husky/pre-commit +0 -5
  14. package/.nvmrc +0 -1
  15. package/.prettierignore +0 -4
  16. package/.prettierrc +0 -9
  17. package/.releaserc.json +0 -22
  18. package/CHANGELOG.md +0 -90
  19. package/assets/react-broadcast-sync-logo.png +0 -0
  20. package/commitlint.config.js +0 -3
  21. package/demo/react-broadcast-sync-demo/README.md +0 -130
  22. package/demo/react-broadcast-sync-demo/index.html +0 -14
  23. package/demo/react-broadcast-sync-demo/package-lock.json +0 -6379
  24. package/demo/react-broadcast-sync-demo/package.json +0 -42
  25. package/demo/react-broadcast-sync-demo/public/assets/react-broadcast-sync-demo-video.gif +0 -0
  26. package/demo/react-broadcast-sync-demo/public/assets/react-broadcast-sync-logo.png +0 -0
  27. package/demo/react-broadcast-sync-demo/src/App.tsx +0 -277
  28. package/demo/react-broadcast-sync-demo/src/components/Counter.tsx +0 -63
  29. package/demo/react-broadcast-sync-demo/src/components/TextSync.tsx +0 -61
  30. package/demo/react-broadcast-sync-demo/src/components/TodoList.tsx +0 -186
  31. package/demo/react-broadcast-sync-demo/src/hooks/useCounterBroadcast.ts +0 -96
  32. package/demo/react-broadcast-sync-demo/src/hooks/useTextBroadcast.ts +0 -37
  33. package/demo/react-broadcast-sync-demo/src/hooks/useTodoBroadcast.ts +0 -249
  34. package/demo/react-broadcast-sync-demo/src/main.tsx +0 -11
  35. package/demo/react-broadcast-sync-demo/src/theme.ts +0 -62
  36. package/demo/react-broadcast-sync-demo/tsconfig.json +0 -26
  37. package/demo/react-broadcast-sync-demo/tsconfig.node.json +0 -10
  38. package/demo/react-broadcast-sync-demo/vite.config.ts +0 -12
  39. package/eslint.config.js +0 -38
  40. package/jest.config.cjs +0 -9
  41. package/jest.setup.ts +0 -1
  42. package/rollup.config.mjs +0 -98
  43. package/src/BroadcastProvider.tsx +0 -80
  44. package/src/hooks/useBroadcastChannel.ts +0 -464
  45. package/src/index.ts +0 -9
  46. package/src/tests/BroadcastProvider.test.tsx +0 -163
  47. package/src/tests/debug.test.ts +0 -239
  48. package/src/tests/messageUtils.test.ts +0 -252
  49. package/src/tests/useBroadcastChannel.same-tab.test.tsx +0 -992
  50. package/src/tests/useBroadcastChannel.test.tsx +0 -1243
  51. package/src/types/types.ts +0 -124
  52. package/src/utils/debug.ts +0 -54
  53. package/src/utils/messageUtils.ts +0 -122
  54. package/tsconfig.json +0 -36
package/README.md CHANGED
@@ -71,6 +71,7 @@ Easily sync UI state or user events across browser tabs in React apps — notifi
71
71
  - Only accept allowed message types (optional)
72
72
  - `BroadcastProvider` for context-based usage
73
73
  - **Ping and active source detection** (discover other tabs and their source names)
74
+ - **Per-type `onMessage` callbacks** (react to incoming messages without polling state)
74
75
 
75
76
  ## Demo App
76
77
 
@@ -230,6 +231,7 @@ interface BroadcastOptions {
230
231
  cleanupDebounceMs?: number; // Debounce time in ms for cleanup operations (default: 0)
231
232
  batchingDelayMs?: number; // Delay in ms to batch outgoing messages (default: 20). If > 0, messages are batched and sent together.
232
233
  excludedBatchMessageTypes?: string[]; // Message types to always send immediately, never batched (default: []).
234
+ onMessage?: MessageCallback | OnMessageMap; // Callback(s) fired when a received message passes all filters (default: undefined).
233
235
  }
234
236
  ```
235
237
 
@@ -242,10 +244,11 @@ interface BroadcastOptions {
242
244
  | `keepLatestMessage` | `false` | Keep all messages by default |
243
245
  | `registeredTypes` | `[]` | Accept all message types by default |
244
246
  | `namespace` | `''` | No namespace by default |
245
- | `deduplicationTTL` | `300000` | 5 minutes (5 _ 60 _ 1000 ms) |
247
+ | `deduplicationTTL` | `300000` | 5 minutes (5 × 60 × 1000 ms) |
246
248
  | `cleanupDebounceMs` | `0` | No debounce by default |
247
249
  | `batchingDelayMs` | `20` | Batch delay in ms (0 = off) |
248
250
  | `excludedBatchMessageTypes` | `[]` | Types never batched |
251
+ | `onMessage` | `undefined` | Callback(s) for received messages |
249
252
 
250
253
  #### Return Value
251
254
 
@@ -408,6 +411,53 @@ closeChannel();
408
411
 
409
412
  ---
410
413
 
414
+ #### `onMessage` Callbacks
415
+
416
+ `onMessage` lets you react to incoming messages imperatively — without polling `messages` state or using `useEffect`. The callback fires after the message is added to state and only for messages that pass all active filters (`registeredTypes`, expiry, deduplication, self-filter). Internal protocol messages (PING, PONG, CLEAR_SENT_MESSAGES) never trigger it.
417
+
418
+ **Two supported shapes:**
419
+
420
+ ```ts
421
+ // 1. A single catch-all function — fires for every accepted message type
422
+ type MessageCallback = (msg: BroadcastMessage) => void;
423
+
424
+ // 2. A map from message type → one handler function
425
+ type OnMessageMap = { [type: string]: (msg: BroadcastMessage) => void };
426
+ ```
427
+
428
+ **Catch-all example:**
429
+
430
+ ```tsx
431
+ const { postMessage } = useBroadcastChannel('my-channel', {
432
+ onMessage: msg => {
433
+ console.log('received', msg.type, msg.message);
434
+ },
435
+ });
436
+ ```
437
+
438
+ **Per-type map example:**
439
+
440
+ ```tsx
441
+ useBroadcastChannel('my-channel', {
442
+ onMessage: {
443
+ error: msg => showToast(`Error: ${msg.message.text}`),
444
+ success: msg => celebrate(),
445
+ log: msg => console.log('[log]', msg.message),
446
+ },
447
+ });
448
+ ```
449
+
450
+ **Behavior:**
451
+
452
+ - Fires for messages from **other** tabs only — self-messages are always ignored before this point.
453
+ - Fires **after** `messages` state is updated — both the callback argument and `messages[messages.length - 1]` will be the same object.
454
+ - A type not listed in the map causes no error — it is silently skipped.
455
+ - If the callback throws, the error is caught and debug-logged. Message state is **not** affected.
456
+ - Changing `onMessage` between renders is safe — the latest callback is always used with no stale closure risk.
457
+ - Works with batched messages: each message in a batch triggers its own callback call.
458
+
459
+ ---
460
+
411
461
  ## Best Practices
412
462
 
413
463
  - **Use `namespace`** to isolate functionality between different app modules.
@@ -416,6 +466,7 @@ closeChannel();
416
466
  - **Use `keepLatestMessage: true`** if you only care about the most recent message (e.g. status updates).
417
467
  - **Set appropriate `deduplicationTTL`** based on your message frequency and importance.
418
468
  - **Use `cleanupDebounceMs`** when dealing with rapid message updates to prevent performance issues.
469
+ - **Use `onMessage`** for imperative side-effects (toasts, analytics, logging) rather than `useEffect` on `messages` — it fires exactly once per accepted message, with no extra renders required.
419
470
 
420
471
  ## Common Use Cases
421
472
 
@@ -657,20 +708,17 @@ Relies on [BroadcastChannel API](https://developer.mozilla.org/en-US/docs/Web/AP
657
708
 
658
709
  We're actively improving `react-broadcast-sync`! Here are some features and enhancements planned for upcoming versions:
659
710
 
660
- - **Integration Tests**
661
- Ensure robust behavior and edge-case coverage.
711
+ - **`BroadcastProvider` options support**
712
+ Pass a full `BroadcastOptions` object to the provider so consumers can use `onMessage`, `registeredTypes`, and other options without dropping down to the hook.
662
713
 
663
714
  - **Automatic Channel Recovery**
664
- Reconnect automatically if the `BroadcastChannel` gets disconnected or closed by the browser.
665
-
666
- - **`clearMessagesByType()`**
667
- Clear all messages of a specific type with a single call.
715
+ Reconnect automatically if the `BroadcastChannel` gets disconnected or closed by the browser, with configurable retry delay and attempt cap.
668
716
 
669
- - **Per-Type Callbacks**
670
- Define message handlers for specific types with `onMessage({ type, callback })`.
717
+ - **Cross-tab History (`withHistory`)**
718
+ On connect, a new tab can request recent message history from already-open tabs. Includes chunked transfer, expiry filtering, and deduplication to prevent replaying stale or duplicate messages.
671
719
 
672
- - **`clearAllSentMessages()` / `clearAllReceivedMessages()`**
673
- Fine-grained control for clearing messages based on source.
720
+ - **Integration Tests**
721
+ Real browser cross-tab tests using Playwright that go beyond what jsdom mocks can cover.
674
722
 
675
723
  We're committed to keeping this package lightweight, flexible, and production-ready.
676
724
  Your feedback and contributions are welcome — feel free to [open an issue](https://github.com/IdanShalem/react-broadcast-sync/issues)!
@@ -1,14 +1,9 @@
1
1
  import React from 'react';
2
- import { BroadcastMessage } from './types/types';
3
- interface BroadcastContextValue {
4
- messages: BroadcastMessage[];
5
- error: string | null;
6
- channel: BroadcastChannel | null;
7
- }
2
+ import { BroadcastActions } from './types/types';
8
3
  interface BroadcastProviderProps {
9
4
  channelName: string;
10
5
  children: React.ReactNode;
11
6
  }
12
7
  export declare const BroadcastProvider: React.FC<BroadcastProviderProps>;
13
- export declare const useBroadcastProvider: () => BroadcastContextValue;
8
+ export declare const useBroadcastProvider: () => BroadcastActions;
14
9
  export {};
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("react"),r=require("react/jsx-runtime");const t="__INTERNAL__",s=()=>Math.random().toString(36).substr(2,9),n=(e,r)=>{const t=`${s()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},o=e=>!!e.expirationDate&&e.expirationDate<Date.now(),c=(e,r,t,s={})=>{var o;const c=Date.now();return{id:n(t,c),type:e,message:r,timestamp:c,source:t,expirationDate:null!==(o=s.expirationDate)&&void 0!==o?o:s.expirationDuration?c+s.expirationDuration:void 0}},a=(e,r,s="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${s}`}`);return`${t}:${e}:${n}`},l=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${t}:`)&&"string"==typeof e.source,u=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const s=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(s,r,t||"");break;case"warn":console.warn(s,r,t||"");break;case"error":console.error(s,r,t||"")}},i={created:e=>u("info","Channel created:",e),closed:e=>u("info","Channel closed:",e)},d={sent:e=>u("info","Message sent:",e),received:e=>u("info","Message received:",e),cleared:e=>u("info","Message cleared:",e),expired:e=>u("info","Message expired:",e),duplicate:e=>u("warn","Duplicate message ignored:",e),allSentCleared:()=>u("info","All sent messages cleared"),allReceivedCleared:()=>u("info","All received messages cleared"),ignored:e=>u("info","Message ignored due to type filter:",e)},p={inProgress:()=>u("warn","Ping already in progress. Skipping call.")},f={started:()=>u("info","Cleanup started"),completed:e=>u("info","Cleanup completed:",{removedCount:e})},g=e=>u("error","Error:",e),h="CLEAR_SENT_MESSAGES",m="PING",v="PONG";let y;if("test"===process.env.NODE_ENV)try{y=require("react-dom").flushSync}catch(e){}const C=(r,t={})=>{const{sourceName:n,cleaningInterval:u=1e3,keepLatestMessage:C=!1,registeredTypes:E=[],namespace:b="",deduplicationTTL:S=3e5,cleanupDebounceMs:M=0,batchingDelayMs:P=20,excludedBatchMessageTypes:w=[]}=t,[N,x]=e.useState([]),[B,T]=e.useState([]),[D,A]=e.useState(null),[k,R]=e.useState(!1),$=e.useRef(null),_=e.useRef(new Map),G=e.useRef(null),I=e.useRef(null),L=e.useRef([]),O=e.useRef(!1),j=e.useMemo((()=>n||`tab-${s()}`),[n]),F=e.useMemo((()=>({CLEAR_SENT_MESSAGES:a(h,r,b),PING:a(m,r,b),PONG:a(v,r,b)})),[r,b]),q=e.useMemo((()=>b?`${r}-${b}`:r),[r,b]),J=e.useMemo((()=>E),[JSON.stringify(E)]),U=e.useCallback((()=>{x((e=>e.filter((e=>!o(e)))))}),[]),V=e.useRef(M>0?((e,r)=>{let t,s=null,n=null;const o=(...o)=>{n=o,null!==s&&clearTimeout(s),s=setTimeout((()=>{s=null,null!==n&&(t=e(...n),n=null)}),r)};return o.cancel=()=>{null!==s&&(clearTimeout(s),s=null,n=null)},o.flush=()=>(null!==s&&(clearTimeout(s),s=null,null!==n&&(t=e(...n),n=null)),t),o})(U,M):Object.assign(U,{cancel:()=>{}})).current,W=e.useCallback((e=>{A(e),setTimeout((()=>A(null)),3e3)}),[]),z=e.useCallback(((e=300)=>{if(k)return p.inProgress(),Promise.resolve([]);if(!$.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),W(e),Promise.resolve([])}y?y((()=>R(!0))):R(!0);const r=new Set;return G.current=r,$.current.postMessage(c(F.PING,null,j)),new Promise((t=>{setTimeout((()=>{R(!1),G.current===r&&(G.current=null),t(Array.from(r))}),e)}))}),[F.PING,j,W,k,y]),H=e.useCallback(((e,r,t={})=>{const s=$.current;if(!s){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),void W(e)}const n=c(e,r,j,t);if(!P||P<0||w.includes(e))try{s.postMessage(n)}catch(e){const r="Failed to send message";g(r),W(r),O.current=!0}else L.current.push(n),I.current||(I.current=setTimeout((()=>{if(O.current)return L.current=[],void(I.current=null);try{s.postMessage(L.current)}catch(e){const r="Failed to send message";g(r),W(r),O.current=!0}L.current=[],I.current=null}),P));d.sent(n),T((e=>[...e,n]))}),[j,W,P,w]),K=e.useCallback(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);x((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[]))}),[]),Q=e.useCallback(((e={})=>{var r,t,s;const{ids:n=[],types:o=[],sync:a=!1}=null!=e?e:{};T((e=>n.length>0||o.length>0?e.filter((e=>{if(e.source!==j)return!0;const r=0===n.length||n.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),a&&(null===(r=$.current)||void 0===r||r.postMessage(c(F.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(s=e.types)&&void 0!==s?s:[]},j)))}),[]),X=e.useCallback(((e={})=>{const{source:r,type:t}=e;for(let e=N.length-1;e>=0;e--){const s=N[e],n=!r||s.source===r,o=!t||s.type===t;if(n&&o)return s}return null}),[N]),Y=e.useCallback((e=>{var r;try{const t=e.data;if(d.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===j)return;if(l(t)){if(t.type===F.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void x((s=>[...s.filter((s=>{if(s.source!==t.source)return!0;const n=0===e.length||e.includes(s.id),o=0===r.length||r.includes(s.type);return!(n&&o)}))]))}if(t.type===F.PING)return void(null===(r=$.current)||void 0===r||r.postMessage(c(F.PONG,null,j)));if(t.type===F.PONG){const e=t.source,r=G.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(J.length>0&&!J.includes(t.type))return void d.ignored(t.type);if(o(t))return void d.expired(t.id);const s=Date.now(),n=_.current.get(t.id);if(n&&s-n<S)return void d.duplicate(t.id);_.current.set(t.id,s),x((e=>C?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";g(r),W(r)}}),[j,J,C,W,F,S]),Z=e.useCallback((()=>{const e=$.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",Y),e.close(),i.closed(q),$.current=null)}),[Y,q]);return e.useEffect((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),void W(e)}const e=new BroadcastChannel(q);return $.current=e,i.created(q),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{Y({data:e})})):Y(e)})),()=>{Z()}}),[q,Y,W]),e.useEffect((()=>{if(u<=0)return;const e=setInterval((()=>{f.started();const e=N.length;V(),f.completed(e-N.length)}),u);return()=>{var r;clearInterval(e),M>0&&(null===(r=V.cancel)||void 0===r||r.call(V))}}),[u,V,M]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of _.current.entries())e-t>=S&&_.current.delete(r)}),6e4);return()=>clearInterval(e)}),[S]),e.useEffect((()=>()=>{if(L.current.length>0&&$.current&&!O.current){try{$.current.postMessage(L.current)}catch(e){const r="Failed to send message";g(r),W(r)}L.current=[],setTimeout((()=>{}),0)}I.current&&(clearTimeout(I.current),I.current=null),O.current=!1}),[]),{channelName:q,messages:N,sentMessages:B,isPingInProgress:k,ping:z,postMessage:H,clearReceivedMessages:K,clearSentMessages:Q,getLatestMessage:X,error:D,closeChannel:Z}},E=e.createContext(void 0);class b extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?r.jsx("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}exports.BroadcastProvider=({children:t,channelName:s})=>{const{messages:n,error:o}=C(s),[c,a]=e.useState(null),l=e.useRef(null);e.useEffect((()=>{if("undefined"==typeof BroadcastChannel)return void a("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return l.current=e,()=>{e.close()}}),[s]);const u=e.useMemo((()=>({messages:n,error:c||o,channel:l.current})),[n,c,o]);return r.jsx(b,{children:r.jsx(E.Provider,{value:u,children:t})})},exports.useBroadcastChannel=C,exports.useBroadcastProvider=()=>{const r=e.useContext(E);if(!r)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return r};
1
+ "use strict";var e=require("react"),r=require("react/jsx-runtime");const t="__INTERNAL__",n=()=>Math.random().toString(36).substr(2,9),s=(e,r)=>{const t=`${n()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},a=e=>!!e.expirationDate&&e.expirationDate<Date.now(),o=(e,r,t,n={})=>{var a;const o=Date.now();return{id:s(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(a=n.expirationDate)&&void 0!==a?a:n.expirationDuration?o+n.expirationDuration:void 0}},c=(e,r,n="")=>{const s=btoa(`react-broadcast-sync:${e}:${`${r}-${n}`}`);return`${t}:${e}:${s}`},l=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${t}:`)&&"string"==typeof e.source,i=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const n=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(n,r,t||"");break;case"warn":console.warn(n,r,t||"");break;case"error":console.error(n,r,t||"")}},u={created:e=>i("info","Channel created:",e),closed:e=>i("info","Channel closed:",e)},d={sent:e=>i("info","Message sent:",e),received:e=>i("info","Message received:",e),cleared:e=>i("info","Message cleared:",e),expired:e=>i("info","Message expired:",e),duplicate:e=>i("warn","Duplicate message ignored:",e),allSentCleared:()=>i("info","All sent messages cleared"),allReceivedCleared:()=>i("info","All received messages cleared"),ignored:e=>i("info","Message ignored due to type filter:",e)},p={inProgress:()=>i("warn","Ping already in progress. Skipping call.")},g={started:()=>i("info","Cleanup started"),completed:e=>i("info","Cleanup completed:",e)},f=e=>{const{action:r,channelName:t,type:n,source:s,originalError:a}=e;let o=`${r}`;if(t&&(o+=` | channel: ${t}`),n&&(o+=` | type: ${n}`),s&&(o+=` | source: ${s}`),a instanceof Error)o+=` | cause: ${a.message}`;else if("string"==typeof a)o+=` | cause: ${a}`;else if(null!=a)try{o+=` | cause: ${JSON.stringify(a)}`}catch(e){o+=" | cause: [unserializable]"}i("error","Error:",o)},h="CLEAR_SENT_MESSAGES",y="PING",m="PONG";let v;if("test"===process.env.NODE_ENV)try{v=require("react-dom").flushSync}catch(e){}const E=(r,t={})=>{const{sourceName:s,cleaningInterval:i=1e3,keepLatestMessage:E=!1,registeredTypes:S=[],namespace:C="",deduplicationTTL:M=3e5,cleanupDebounceMs:b=0,batchingDelayMs:N=20,excludedBatchMessageTypes:P=[],onMessage:w}=t,[$,T]=e.useState([]),[A,R]=e.useState([]),[B,_]=e.useState(null),[x,D]=e.useState(!1),k=e.useRef(null),G=e.useRef(new Map),I=e.useRef(null),L=e.useRef(null),O=e.useRef([]),j=e.useRef(!1),F=e.useRef(w);F.current=w;const q=e.useMemo((()=>s||`tab-${n()}`),[s]),z=e.useMemo((()=>({CLEAR_SENT_MESSAGES:c(h,r,C),PING:c(y,r,C),PONG:c(m,r,C)})),[r,C]),J=e.useMemo((()=>C?`${r}-${C}`:r),[r,C]),U=e.useRef(S);U.current=S;const V=e.useCallback((()=>{T((e=>e.filter((e=>!a(e)))))}),[]),W=e.useRef(b>0?((e,r)=>{let t,n=null,s=null;const a=(...a)=>{s=a,null!==n&&clearTimeout(n),n=setTimeout((()=>{n=null,null!==s&&(t=e(...s),s=null)}),r)};return a.cancel=()=>{null!==n&&(clearTimeout(n),n=null,s=null)},a.flush=()=>(null!==n&&(clearTimeout(n),n=null,null!==s&&(t=e(...s),s=null)),t),a})(V,b):Object.assign(V,{cancel:()=>{}})).current,H=e.useCallback((e=>{_(e),setTimeout((()=>_(null)),3e3)}),[]),K=e.useCallback(((e=300)=>{if(x)return p.inProgress(),Promise.resolve([]);if(!k.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return f({action:"ping",channelName:J,originalError:e}),H(e),Promise.resolve([])}v?v((()=>D(!0))):D(!0);const r=new Set;return I.current=r,k.current.postMessage(o(z.PING,null,q)),new Promise((t=>{setTimeout((()=>{D(!1),I.current===r&&(I.current=null),t(Array.from(r))}),e)}))}),[z.PING,q,H,x,v]),Q=e.useCallback(((e,r,t={})=>{const n=k.current;if(!n){const r="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return f({action:"postMessage",channelName:J,type:e,originalError:r}),void H(r)}const s=o(e,r,q,t);if(!N||N<0||P.includes(e))try{n.postMessage(s)}catch(r){const t="Failed to send message";f({action:"postMessage",channelName:J,type:e,originalError:t}),H(t),j.current=!0}else O.current.push(s),L.current||(L.current=setTimeout((()=>{if(j.current)return O.current=[],void(L.current=null);try{n.postMessage(O.current)}catch(r){const t="Failed to send message";f({action:"postMessage",channelName:J,type:e,originalError:t}),H(t),j.current=!0}O.current=[],L.current=null}),N));d.sent(s),R((e=>[...e,s]))}),[q,H,N,P]),X=e.useCallback(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);T((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[])),r||d.allReceivedCleared()}),[]),Y=e.useCallback(((e={})=>{var r,t,n;const{ids:s=[],types:a=[],sync:c=!1}=null!=e?e:{};R((e=>s.length>0||a.length>0?e.filter((e=>{if(e.source!==q)return!0;const r=0===s.length||s.includes(e.id),t=0===a.length||a.includes(e.type);return!(r&&t)})):[])),0===s.length&&0===a.length&&d.allSentCleared(),c&&(null===(r=k.current)||void 0===r||r.postMessage(o(z.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},q)))}),[q,z.CLEAR_SENT_MESSAGES]),Z=e.useCallback(((e={})=>{const{source:r,type:t}=e;for(let e=$.length-1;e>=0;e--){const n=$[e],s=!r||n.source===r,a=!t||n.type===t;if(s&&a)return n}return null}),[$]),ee=e.useCallback((e=>{var r,t;try{const n=e.data;if(d.received(n),!(e=>Boolean(e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.type&&"string"==typeof e.source&&"number"==typeof e.timestamp))(n))return;if(n.source===q)return;if(l(n)){if(n.type===z.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=n.message||{};return void T((t=>[...t.filter((t=>{if(t.source!==n.source)return!0;const s=0===e.length||e.includes(t.id),a=0===r.length||r.includes(t.type);return!(s&&a)}))]))}if(n.type===z.PING)return void(null===(r=k.current)||void 0===r||r.postMessage(o(z.PONG,null,q)));if(n.type===z.PONG){const e=n.source,r=I.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(U.current.length>0&&!U.current.includes(n.type))return void d.ignored(n.type);if(a(n))return void d.expired(n.id);const s=Date.now(),c=G.current.get(n.id);if(c&&s-c<M)return void d.duplicate(n.id);G.current.set(n.id,s),T((e=>E?[n]:[...e,n]));try{const e=F.current;"function"==typeof e?e(n):e&&(null===(t=e[n.type])||void 0===t||t.call(e,n))}catch(e){f({action:"onMessage",channelName:J,originalError:e instanceof Error?e.message:String(e)})}}catch(e){const r="Error processing broadcast message";f({action:"handleMessage",channelName:J,originalError:r}),H(r)}}),[q,E,H,z,M]),re=e.useCallback((()=>{const e=k.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",ee),e.close(),u.closed(J),k.current=null)}),[ee,J]);return e.useEffect((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return f({action:"useBroadcastChannel",channelName:J,originalError:e}),void H(e)}let e=null;try{e=new BroadcastChannel(J)}catch(e){const r="Failed to create BroadcastChannel";return f({action:"useBroadcastChannel",channelName:J,originalError:e instanceof Error?e:String(e)}),void H(r)}return k.current=e,u.created(J),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{ee({data:e})})):ee(e)})),()=>{re()}}),[J,ee,H]),e.useEffect((()=>{if(i<=0)return;const e=setInterval((()=>{g.started();const e=$.length;W(),g.completed(e-$.length)}),i);return()=>{var r;clearInterval(e),b>0&&(null===(r=W.cancel)||void 0===r||r.call(W))}}),[i,W,b]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of G.current.entries())e-t>=M&&G.current.delete(r)}),6e4);return()=>clearInterval(e)}),[M]),e.useEffect((()=>()=>{if(O.current.length>0&&k.current&&!j.current){try{k.current.postMessage(O.current)}catch(e){const r="Failed to send message";f({action:"useBroadcastChannel",channelName:J,originalError:e instanceof Error?e:String(e)}),H(r)}O.current=[],setTimeout((()=>{}),0)}L.current&&(clearTimeout(L.current),L.current=null),j.current=!1}),[]),{channelName:J,messages:$,sentMessages:A,isPingInProgress:x,ping:K,postMessage:Q,clearReceivedMessages:X,clearSentMessages:Y,getLatestMessage:Z,error:B,closeChannel:re}},S=e.createContext(void 0);exports.BroadcastProvider=({children:e,channelName:t})=>{const n=E(t);return r.jsx(S.Provider,{value:n,children:e})},exports.useBroadcastChannel=E,exports.useBroadcastProvider=()=>{const r=e.useContext(S);if(!r)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return r};
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","stableRegisteredTypes","JSON","stringify","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","current","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","Set","postMessage","Array","from","messageContent","channelCurrent","includes","e","push","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","pongSource","has","add","receivedAt","get","set","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","call","key","entries","delete","BroadcastChannelContext","createContext","ErrorBoundary","React","Component","constructor","this","state","hasError","getDerivedStateFromError","componentDidCatch","render","_jsx","props","children","BroadcastProvider","hookError","value","Provider","useBroadcastProvider","context","useContext","Error"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","context","action","originalError","Error","JSON","stringify","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","onMessage","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","onMessageRef","current","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","registeredTypesRef","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","Set","postMessage","Array","from","messageContent","channelCurrent","includes","e","push","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","pongSource","has","add","receivedAt","get","set","cb","call","String","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","jsx","Provider","value","useBroadcastProvider","useContext"],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import e,{useState as r,useRef as t,useMemo as n,useCallback as s,useEffect as o,createContext as c,useContext as a}from"react";import{jsx as i}from"react/jsx-runtime";const l="__INTERNAL__",u=()=>Math.random().toString(36).substr(2,9),d=(e,r)=>{const t=`${u()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},p=e=>!!e.expirationDate&&e.expirationDate<Date.now(),g=(e,r,t,n={})=>{var s;const o=Date.now();return{id:d(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(s=n.expirationDate)&&void 0!==s?s:n.expirationDuration?o+n.expirationDuration:void 0}},h=(e,r,t="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${t}`}`);return`${l}:${e}:${n}`},f=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${l}:`)&&"string"==typeof e.source,m=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const n=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(n,r,t||"");break;case"warn":console.warn(n,r,t||"");break;case"error":console.error(n,r,t||"")}},y={created:e=>m("info","Channel created:",e),closed:e=>m("info","Channel closed:",e)},v={sent:e=>m("info","Message sent:",e),received:e=>m("info","Message received:",e),cleared:e=>m("info","Message cleared:",e),expired:e=>m("info","Message expired:",e),duplicate:e=>m("warn","Duplicate message ignored:",e),allSentCleared:()=>m("info","All sent messages cleared"),allReceivedCleared:()=>m("info","All received messages cleared"),ignored:e=>m("info","Message ignored due to type filter:",e)},E={inProgress:()=>m("warn","Ping already in progress. Skipping call.")},S={started:()=>m("info","Cleanup started"),completed:e=>m("info","Cleanup completed:",{removedCount:e})},b=e=>m("error","Error:",e),P="CLEAR_SENT_MESSAGES",w="PING",M="PONG";let C;if("test"===process.env.NODE_ENV)try{C=require("react-dom").flushSync}catch(e){}const N=(e,c={})=>{const{sourceName:a,cleaningInterval:i=1e3,keepLatestMessage:l=!1,registeredTypes:d=[],namespace:m="",deduplicationTTL:N=3e5,cleanupDebounceMs:T=0,batchingDelayMs:D=20,excludedBatchMessageTypes:A=[]}=c,[B,$]=r([]),[_,G]=r([]),[x,I]=r(null),[L,O]=r(!1),R=t(null),k=t(new Map),j=t(null),F=t(null),q=t([]),J=t(!1),U=n((()=>a||`tab-${u()}`),[a]),V=n((()=>({CLEAR_SENT_MESSAGES:h(P,e,m),PING:h(w,e,m),PONG:h(M,e,m)})),[e,m]),W=n((()=>m?`${e}-${m}`:e),[e,m]),z=n((()=>d),[JSON.stringify(d)]),H=s((()=>{$((e=>e.filter((e=>!p(e)))))}),[]),K=t(T>0?((e,r)=>{let t,n=null,s=null;const o=(...o)=>{s=o,null!==n&&clearTimeout(n),n=setTimeout((()=>{n=null,null!==s&&(t=e(...s),s=null)}),r)};return o.cancel=()=>{null!==n&&(clearTimeout(n),n=null,s=null)},o.flush=()=>(null!==n&&(clearTimeout(n),n=null,null!==s&&(t=e(...s),s=null)),t),o})(H,T):Object.assign(H,{cancel:()=>{}})).current,Q=s((e=>{I(e),setTimeout((()=>I(null)),3e3)}),[]),X=s(((e=300)=>{if(L)return E.inProgress(),Promise.resolve([]);if(!R.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),Q(e),Promise.resolve([])}C?C((()=>O(!0))):O(!0);const r=new Set;return j.current=r,R.current.postMessage(g(V.PING,null,U)),new Promise((t=>{setTimeout((()=>{O(!1),j.current===r&&(j.current=null),t(Array.from(r))}),e)}))}),[V.PING,U,Q,L,C]),Y=s(((e,r,t={})=>{const n=R.current;if(!n){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),void Q(e)}const s=g(e,r,U,t);if(!D||D<0||A.includes(e))try{n.postMessage(s)}catch(e){const r="Failed to send message";b(r),Q(r),J.current=!0}else q.current.push(s),F.current||(F.current=setTimeout((()=>{if(J.current)return q.current=[],void(F.current=null);try{n.postMessage(q.current)}catch(e){const r="Failed to send message";b(r),Q(r),J.current=!0}q.current=[],F.current=null}),D));v.sent(s),G((e=>[...e,s]))}),[U,Q,D,A]),Z=s(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);$((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[]))}),[]),ee=s(((e={})=>{var r,t,n;const{ids:s=[],types:o=[],sync:c=!1}=null!=e?e:{};G((e=>s.length>0||o.length>0?e.filter((e=>{if(e.source!==U)return!0;const r=0===s.length||s.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),c&&(null===(r=R.current)||void 0===r||r.postMessage(g(V.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},U)))}),[]),re=s(((e={})=>{const{source:r,type:t}=e;for(let e=B.length-1;e>=0;e--){const n=B[e],s=!r||n.source===r,o=!t||n.type===t;if(s&&o)return n}return null}),[B]),te=s((e=>{var r;try{const t=e.data;if(v.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===U)return;if(f(t)){if(t.type===V.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void $((n=>[...n.filter((n=>{if(n.source!==t.source)return!0;const s=0===e.length||e.includes(n.id),o=0===r.length||r.includes(n.type);return!(s&&o)}))]))}if(t.type===V.PING)return void(null===(r=R.current)||void 0===r||r.postMessage(g(V.PONG,null,U)));if(t.type===V.PONG){const e=t.source,r=j.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(z.length>0&&!z.includes(t.type))return void v.ignored(t.type);if(p(t))return void v.expired(t.id);const n=Date.now(),s=k.current.get(t.id);if(s&&n-s<N)return void v.duplicate(t.id);k.current.set(t.id,n),$((e=>l?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";b(r),Q(r)}}),[U,z,l,Q,V,N]),ne=s((()=>{const e=R.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",te),e.close(),y.closed(W),R.current=null)}),[te,W]);return o((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),void Q(e)}const e=new BroadcastChannel(W);return R.current=e,y.created(W),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{te({data:e})})):te(e)})),()=>{ne()}}),[W,te,Q]),o((()=>{if(i<=0)return;const e=setInterval((()=>{S.started();const e=B.length;K(),S.completed(e-B.length)}),i);return()=>{var r;clearInterval(e),T>0&&(null===(r=K.cancel)||void 0===r||r.call(K))}}),[i,K,T]),o((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of k.current.entries())e-t>=N&&k.current.delete(r)}),6e4);return()=>clearInterval(e)}),[N]),o((()=>()=>{if(q.current.length>0&&R.current&&!J.current){try{R.current.postMessage(q.current)}catch(e){const r="Failed to send message";b(r),Q(r)}q.current=[],setTimeout((()=>{}),0)}F.current&&(clearTimeout(F.current),F.current=null),J.current=!1}),[]),{channelName:W,messages:B,sentMessages:_,isPingInProgress:L,ping:X,postMessage:Y,clearReceivedMessages:Z,clearSentMessages:ee,getLatestMessage:re,error:x,closeChannel:ne}},T=c(void 0);class D extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?i("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}const A=({children:r,channelName:s})=>{const{messages:c,error:a}=N(s),[l,u]=e.useState(null),d=t(null);o((()=>{if("undefined"==typeof BroadcastChannel)return void u("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return d.current=e,()=>{e.close()}}),[s]);const p=n((()=>({messages:c,error:l||a,channel:d.current})),[c,l,a]);return i(D,{children:i(T.Provider,{value:p,children:r})})},B=()=>{const e=a(T);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{A as BroadcastProvider,N as useBroadcastChannel,B as useBroadcastProvider};
1
+ import{useState as e,useRef as r,useMemo as t,useCallback as n,useEffect as s,createContext as o,useContext as a}from"react";import{jsx as c}from"react/jsx-runtime";const i="__INTERNAL__",l=()=>Math.random().toString(36).substr(2,9),u=(e,r)=>{const t=`${l()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},d=e=>!!e.expirationDate&&e.expirationDate<Date.now(),p=(e,r,t,n={})=>{var s;const o=Date.now();return{id:u(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(s=n.expirationDate)&&void 0!==s?s:n.expirationDuration?o+n.expirationDuration:void 0}},g=(e,r,t="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${t}`}`);return`${i}:${e}:${n}`},f=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${i}:`)&&"string"==typeof e.source,h=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const n=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(n,r,t||"");break;case"warn":console.warn(n,r,t||"");break;case"error":console.error(n,r,t||"")}},y={created:e=>h("info","Channel created:",e),closed:e=>h("info","Channel closed:",e)},m={sent:e=>h("info","Message sent:",e),received:e=>h("info","Message received:",e),cleared:e=>h("info","Message cleared:",e),expired:e=>h("info","Message expired:",e),duplicate:e=>h("warn","Duplicate message ignored:",e),allSentCleared:()=>h("info","All sent messages cleared"),allReceivedCleared:()=>h("info","All received messages cleared"),ignored:e=>h("info","Message ignored due to type filter:",e)},v={inProgress:()=>h("warn","Ping already in progress. Skipping call.")},E={started:()=>h("info","Cleanup started"),completed:e=>h("info","Cleanup completed:",e)},S=e=>{const{action:r,channelName:t,type:n,source:s,originalError:o}=e;let a=`${r}`;if(t&&(a+=` | channel: ${t}`),n&&(a+=` | type: ${n}`),s&&(a+=` | source: ${s}`),o instanceof Error)a+=` | cause: ${o.message}`;else if("string"==typeof o)a+=` | cause: ${o}`;else if(null!=o)try{a+=` | cause: ${JSON.stringify(o)}`}catch(e){a+=" | cause: [unserializable]"}h("error","Error:",a)},M="CLEAR_SENT_MESSAGES",N="PING",b="PONG";let C;if("test"===process.env.NODE_ENV)try{C=require("react-dom").flushSync}catch(e){}const P=(o,a={})=>{const{sourceName:c,cleaningInterval:i=1e3,keepLatestMessage:u=!1,registeredTypes:h=[],namespace:P="",deduplicationTTL:w=3e5,cleanupDebounceMs:$=0,batchingDelayMs:T=20,excludedBatchMessageTypes:A=[],onMessage:_}=a,[D,B]=e([]),[G,I]=e([]),[x,L]=e(null),[R,O]=e(!1),k=r(null),j=r(new Map),F=r(null),q=r(null),z=r([]),J=r(!1),U=r(_);U.current=_;const V=t((()=>c||`tab-${l()}`),[c]),W=t((()=>({CLEAR_SENT_MESSAGES:g(M,o,P),PING:g(N,o,P),PONG:g(b,o,P)})),[o,P]),H=t((()=>P?`${o}-${P}`:o),[o,P]),K=r(h);K.current=h;const Q=n((()=>{B((e=>e.filter((e=>!d(e)))))}),[]),X=r($>0?((e,r)=>{let t,n=null,s=null;const o=(...o)=>{s=o,null!==n&&clearTimeout(n),n=setTimeout((()=>{n=null,null!==s&&(t=e(...s),s=null)}),r)};return o.cancel=()=>{null!==n&&(clearTimeout(n),n=null,s=null)},o.flush=()=>(null!==n&&(clearTimeout(n),n=null,null!==s&&(t=e(...s),s=null)),t),o})(Q,$):Object.assign(Q,{cancel:()=>{}})).current,Y=n((e=>{L(e),setTimeout((()=>L(null)),3e3)}),[]),Z=n(((e=300)=>{if(R)return v.inProgress(),Promise.resolve([]);if(!k.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return S({action:"ping",channelName:H,originalError:e}),Y(e),Promise.resolve([])}C?C((()=>O(!0))):O(!0);const r=new Set;return F.current=r,k.current.postMessage(p(W.PING,null,V)),new Promise((t=>{setTimeout((()=>{O(!1),F.current===r&&(F.current=null),t(Array.from(r))}),e)}))}),[W.PING,V,Y,R,C]),ee=n(((e,r,t={})=>{const n=k.current;if(!n){const r="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return S({action:"postMessage",channelName:H,type:e,originalError:r}),void Y(r)}const s=p(e,r,V,t);if(!T||T<0||A.includes(e))try{n.postMessage(s)}catch(r){const t="Failed to send message";S({action:"postMessage",channelName:H,type:e,originalError:t}),Y(t),J.current=!0}else z.current.push(s),q.current||(q.current=setTimeout((()=>{if(J.current)return z.current=[],void(q.current=null);try{n.postMessage(z.current)}catch(r){const t="Failed to send message";S({action:"postMessage",channelName:H,type:e,originalError:t}),Y(t),J.current=!0}z.current=[],q.current=null}),T));m.sent(s),I((e=>[...e,s]))}),[V,Y,T,A]),re=n(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);B((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[])),r||m.allReceivedCleared()}),[]),te=n(((e={})=>{var r,t,n;const{ids:s=[],types:o=[],sync:a=!1}=null!=e?e:{};I((e=>s.length>0||o.length>0?e.filter((e=>{if(e.source!==V)return!0;const r=0===s.length||s.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),0===s.length&&0===o.length&&m.allSentCleared(),a&&(null===(r=k.current)||void 0===r||r.postMessage(p(W.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},V)))}),[V,W.CLEAR_SENT_MESSAGES]),ne=n(((e={})=>{const{source:r,type:t}=e;for(let e=D.length-1;e>=0;e--){const n=D[e],s=!r||n.source===r,o=!t||n.type===t;if(s&&o)return n}return null}),[D]),se=n((e=>{var r,t;try{const n=e.data;if(m.received(n),!(e=>Boolean(e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.type&&"string"==typeof e.source&&"number"==typeof e.timestamp))(n))return;if(n.source===V)return;if(f(n)){if(n.type===W.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=n.message||{};return void B((t=>[...t.filter((t=>{if(t.source!==n.source)return!0;const s=0===e.length||e.includes(t.id),o=0===r.length||r.includes(t.type);return!(s&&o)}))]))}if(n.type===W.PING)return void(null===(r=k.current)||void 0===r||r.postMessage(p(W.PONG,null,V)));if(n.type===W.PONG){const e=n.source,r=F.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(K.current.length>0&&!K.current.includes(n.type))return void m.ignored(n.type);if(d(n))return void m.expired(n.id);const s=Date.now(),o=j.current.get(n.id);if(o&&s-o<w)return void m.duplicate(n.id);j.current.set(n.id,s),B((e=>u?[n]:[...e,n]));try{const e=U.current;"function"==typeof e?e(n):e&&(null===(t=e[n.type])||void 0===t||t.call(e,n))}catch(e){S({action:"onMessage",channelName:H,originalError:e instanceof Error?e.message:String(e)})}}catch(e){const r="Error processing broadcast message";S({action:"handleMessage",channelName:H,originalError:r}),Y(r)}}),[V,u,Y,W,w]),oe=n((()=>{const e=k.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",se),e.close(),y.closed(H),k.current=null)}),[se,H]);return s((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return S({action:"useBroadcastChannel",channelName:H,originalError:e}),void Y(e)}let e=null;try{e=new BroadcastChannel(H)}catch(e){const r="Failed to create BroadcastChannel";return S({action:"useBroadcastChannel",channelName:H,originalError:e instanceof Error?e:String(e)}),void Y(r)}return k.current=e,y.created(H),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{se({data:e})})):se(e)})),()=>{oe()}}),[H,se,Y]),s((()=>{if(i<=0)return;const e=setInterval((()=>{E.started();const e=D.length;X(),E.completed(e-D.length)}),i);return()=>{var r;clearInterval(e),$>0&&(null===(r=X.cancel)||void 0===r||r.call(X))}}),[i,X,$]),s((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of j.current.entries())e-t>=w&&j.current.delete(r)}),6e4);return()=>clearInterval(e)}),[w]),s((()=>()=>{if(z.current.length>0&&k.current&&!J.current){try{k.current.postMessage(z.current)}catch(e){const r="Failed to send message";S({action:"useBroadcastChannel",channelName:H,originalError:e instanceof Error?e:String(e)}),Y(r)}z.current=[],setTimeout((()=>{}),0)}q.current&&(clearTimeout(q.current),q.current=null),J.current=!1}),[]),{channelName:H,messages:D,sentMessages:G,isPingInProgress:R,ping:Z,postMessage:ee,clearReceivedMessages:re,clearSentMessages:te,getLatestMessage:ne,error:x,closeChannel:oe}},w=o(void 0),$=({children:e,channelName:r})=>{const t=P(r);return c(w.Provider,{value:t,children:e})},T=()=>{const e=a(w);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{$ as BroadcastProvider,P as useBroadcastChannel,T as useBroadcastProvider};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","stableRegisteredTypes","JSON","stringify","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","current","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","Set","postMessage","Array","from","messageContent","channelCurrent","includes","e","push","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","pongSource","has","add","receivedAt","get","set","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","call","key","entries","delete","BroadcastChannelContext","createContext","ErrorBoundary","React","Component","constructor","this","state","hasError","getDerivedStateFromError","componentDidCatch","render","_jsx","props","children","BroadcastProvider","hookError","value","Provider","useBroadcastProvider","context","useContext","Error"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","context","action","originalError","Error","JSON","stringify","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","onMessage","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","onMessageRef","current","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","registeredTypesRef","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","Set","postMessage","Array","from","messageContent","channelCurrent","includes","e","push","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","pongSource","has","add","receivedAt","get","set","cb","call","String","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","Provider","value","useBroadcastProvider","useContext"],"mappings":"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"}
@@ -20,6 +20,17 @@ export interface BroadcastOptions {
20
20
  batchingDelayMs?: number;
21
21
  /** Array of message types that should not be batched and sent immediately (default: []) */
22
22
  excludedBatchMessageTypes?: string[];
23
+ /**
24
+ * Callback(s) fired when an incoming message passes all filters
25
+ * (registeredTypes, expiry, deduplication, self-filter).
26
+ *
27
+ * - Pass a single function to handle all incoming message types.
28
+ * - Pass a type-keyed map `{ error: fn, success: fn }` for per-type handling.
29
+ *
30
+ * The callback fires after the message is added to state.
31
+ * Internal messages (PING, PONG, CLEAR_SENT_MESSAGES) never trigger this.
32
+ */
33
+ onMessage?: MessageCallback | OnMessageMap;
23
34
  }
24
35
  /**
25
36
  * Options for sending messages
@@ -61,6 +72,12 @@ export interface GetLatestMessageOptions {
61
72
  source?: string;
62
73
  type?: string;
63
74
  }
75
+ /** Callback invoked when a received message passes all filters */
76
+ export type MessageCallback = (msg: BroadcastMessage) => void;
77
+ /** Map from message type string to a single handler callback */
78
+ export type OnMessageMap = {
79
+ [type: string]: MessageCallback;
80
+ };
64
81
  /**
65
82
  * Actions and state provided by the broadcast channel hook
66
83
  */
@@ -20,5 +20,11 @@ export declare const debug: {
20
20
  started: () => void;
21
21
  completed: (removedCount: number) => void;
22
22
  };
23
- error: (error: string) => void;
23
+ error: (context: {
24
+ action: string;
25
+ channelName?: string;
26
+ type?: string;
27
+ source?: string;
28
+ originalError?: unknown;
29
+ }) => void;
24
30
  };
package/package.json CHANGED
@@ -1,12 +1,17 @@
1
1
  {
2
2
  "name": "react-broadcast-sync",
3
- "version": "1.5.1",
3
+ "version": "1.8.0",
4
4
  "description": "A lightweight React hook and provider for syncing state across browser tabs using BroadcastChannel API.",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "sideEffects": false,
9
9
  "type": "module",
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
10
15
  "exports": {
11
16
  ".": {
12
17
  "import": "./dist/index.esm.js",
package/.eslintignore DELETED
@@ -1,5 +0,0 @@
1
- node_modules/
2
- dist/
3
- coverage/
4
- demo/react-broadcast-sync/node_modules
5
- demo/react-broadcast-sync/dist
@@ -1,61 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- pull_request:
7
- branches: [main]
8
-
9
- jobs:
10
- lint-and-typecheck:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@v3
14
-
15
- - name: Setup Node.js
16
- uses: actions/setup-node@v4
17
- with:
18
- node-version: 20.11.1
19
-
20
- - name: Install dependencies
21
- run: npm ci
22
-
23
- - name: Run linter
24
- run: npm run lint
25
-
26
- - name: Run Prettier check
27
- run: npm run format:check
28
-
29
- - name: Run type checks
30
- run: npm run typecheck
31
-
32
- build-and-test:
33
- runs-on: ubuntu-latest
34
-
35
- strategy:
36
- matrix:
37
- node-version: [20.11.1]
38
-
39
- steps:
40
- - uses: actions/checkout@v3
41
-
42
- - name: Setup Node.js ${{ matrix.node-version }}
43
- uses: actions/setup-node@v4
44
- with:
45
- node-version: ${{ matrix.node-version }}
46
-
47
- - name: Install dependencies
48
- run: npm ci
49
-
50
- - name: Run build
51
- run: npm run build
52
-
53
- - name: Run tests with coverage
54
- run: npm test -- --coverage
55
-
56
- - name: Upload coverage to Codecov
57
- uses: codecov/codecov-action@v4
58
- with:
59
- token: ${{ secrets.CODECOV_TOKEN }}
60
- files: ./coverage/lcov.info
61
- fail_ci_if_error: true
@@ -1,39 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
-
8
- permissions:
9
- contents: write
10
- issues: write
11
- pull-requests: write
12
-
13
- jobs:
14
- release:
15
- name: Release
16
- runs-on: ubuntu-latest
17
- steps:
18
- - name: Checkout
19
- uses: actions/checkout@v4
20
- with:
21
- fetch-depth: 0
22
-
23
- - name: Setup Node.js
24
- uses: actions/setup-node@v4
25
- with:
26
- node-version: 20.11.1
27
- cache: 'npm'
28
-
29
- - name: Install dependencies
30
- run: npm ci
31
-
32
- - name: Build
33
- run: npm run build
34
-
35
- - name: Release
36
- env:
37
- GH_TOKEN: ${{ secrets.GH_PAT }}
38
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
39
- run: npx semantic-release
package/.husky/pre-commit DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env sh
2
- . "$(dirname -- "$0")/_/husky.sh"
3
-
4
- npx lint-staged
5
- npm run typecheck
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 20.11.1
package/.prettierignore DELETED
@@ -1,4 +0,0 @@
1
- node_modules
2
- dist
3
- coverage
4
- CHANGELOG.md
package/.prettierrc DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "semi": true,
3
- "tabWidth": 2,
4
- "printWidth": 100,
5
- "singleQuote": true,
6
- "trailingComma": "es5",
7
- "bracketSpacing": true,
8
- "arrowParens": "avoid"
9
- }
package/.releaserc.json DELETED
@@ -1,22 +0,0 @@
1
- {
2
- "branches": ["main"],
3
- "plugins": [
4
- "@semantic-release/commit-analyzer",
5
- "@semantic-release/release-notes-generator",
6
- [
7
- "@semantic-release/changelog",
8
- {
9
- "changelogFile": "CHANGELOG.md"
10
- }
11
- ],
12
- "@semantic-release/npm",
13
- [
14
- "@semantic-release/git",
15
- {
16
- "assets": ["CHANGELOG.md", "package.json"],
17
- "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
18
- }
19
- ],
20
- "@semantic-release/github"
21
- ]
22
- }