react-broadcast-sync 1.6.0 → 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 (52) hide show
  1. package/README.md +59 -11
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.esm.js +1 -1
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/types/types.d.ts +17 -0
  7. package/package.json +6 -1
  8. package/.eslintignore +0 -5
  9. package/.github/workflows/ci.yml +0 -61
  10. package/.github/workflows/release.yml +0 -39
  11. package/.husky/pre-commit +0 -5
  12. package/.nvmrc +0 -1
  13. package/.prettierignore +0 -4
  14. package/.prettierrc +0 -9
  15. package/.releaserc.json +0 -22
  16. package/CHANGELOG.md +0 -97
  17. package/assets/react-broadcast-sync-logo.png +0 -0
  18. package/commitlint.config.js +0 -3
  19. package/demo/react-broadcast-sync-demo/README.md +0 -130
  20. package/demo/react-broadcast-sync-demo/index.html +0 -14
  21. package/demo/react-broadcast-sync-demo/package-lock.json +0 -6379
  22. package/demo/react-broadcast-sync-demo/package.json +0 -42
  23. package/demo/react-broadcast-sync-demo/public/assets/react-broadcast-sync-demo-video.gif +0 -0
  24. package/demo/react-broadcast-sync-demo/public/assets/react-broadcast-sync-logo.png +0 -0
  25. package/demo/react-broadcast-sync-demo/src/App.tsx +0 -277
  26. package/demo/react-broadcast-sync-demo/src/components/Counter.tsx +0 -63
  27. package/demo/react-broadcast-sync-demo/src/components/TextSync.tsx +0 -61
  28. package/demo/react-broadcast-sync-demo/src/components/TodoList.tsx +0 -186
  29. package/demo/react-broadcast-sync-demo/src/hooks/useCounterBroadcast.ts +0 -96
  30. package/demo/react-broadcast-sync-demo/src/hooks/useTextBroadcast.ts +0 -37
  31. package/demo/react-broadcast-sync-demo/src/hooks/useTodoBroadcast.ts +0 -249
  32. package/demo/react-broadcast-sync-demo/src/main.tsx +0 -11
  33. package/demo/react-broadcast-sync-demo/src/theme.ts +0 -62
  34. package/demo/react-broadcast-sync-demo/tsconfig.json +0 -26
  35. package/demo/react-broadcast-sync-demo/tsconfig.node.json +0 -10
  36. package/demo/react-broadcast-sync-demo/vite.config.ts +0 -12
  37. package/eslint.config.js +0 -38
  38. package/jest.config.cjs +0 -9
  39. package/jest.setup.ts +0 -1
  40. package/rollup.config.mjs +0 -98
  41. package/src/BroadcastProvider.tsx +0 -28
  42. package/src/hooks/useBroadcastChannel.ts +0 -513
  43. package/src/index.ts +0 -9
  44. package/src/tests/BroadcastProvider.test.tsx +0 -157
  45. package/src/tests/debug.test.ts +0 -273
  46. package/src/tests/messageUtils.test.ts +0 -252
  47. package/src/tests/useBroadcastChannel.same-tab.test.tsx +0 -992
  48. package/src/tests/useBroadcastChannel.test.tsx +0 -1243
  49. package/src/types/types.ts +0 -124
  50. package/src/utils/debug.ts +0 -80
  51. package/src/utils/messageUtils.ts +0 -122
  52. 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)!
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__",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:C=[],namespace:b="",deduplicationTTL:M=3e5,cleanupDebounceMs:S=0,batchingDelayMs:N=20,excludedBatchMessageTypes:P=[]}=t,[w,$]=e.useState([]),[T,B]=e.useState([]),[A,x]=e.useState(null),[D,R]=e.useState(!1),k=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((()=>s||`tab-${n()}`),[s]),F=e.useMemo((()=>({CLEAR_SENT_MESSAGES:c(h,r,b),PING:c(y,r,b),PONG:c(m,r,b)})),[r,b]),q=e.useMemo((()=>b?`${r}-${b}`:r),[r,b]),J=e.useMemo((()=>C),[JSON.stringify(C)]),z=e.useCallback((()=>{$((e=>e.filter((e=>!a(e)))))}),[]),U=e.useRef(S>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})(z,S):Object.assign(z,{cancel:()=>{}})).current,V=e.useCallback((e=>{x(e),setTimeout((()=>x(null)),3e3)}),[]),W=e.useCallback(((e=300)=>{if(D)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:q,originalError:e}),V(e),Promise.resolve([])}v?v((()=>R(!0))):R(!0);const r=new Set;return G.current=r,k.current.postMessage(o(F.PING,null,j)),new Promise((t=>{setTimeout((()=>{R(!1),G.current===r&&(G.current=null),t(Array.from(r))}),e)}))}),[F.PING,j,V,D,v]),H=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:q,type:e,originalError:r}),void V(r)}const s=o(e,r,j,t);if(!N||N<0||P.includes(e))try{n.postMessage(s)}catch(r){const t="Failed to send message";f({action:"postMessage",channelName:q,type:e,originalError:t}),V(t),O.current=!0}else L.current.push(s),I.current||(I.current=setTimeout((()=>{if(O.current)return L.current=[],void(I.current=null);try{n.postMessage(L.current)}catch(r){const t="Failed to send message";f({action:"postMessage",channelName:q,type:e,originalError:t}),V(t),O.current=!0}L.current=[],I.current=null}),N));d.sent(s),B((e=>[...e,s]))}),[j,V,N,P]),K=e.useCallback(((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)))):[])),r||d.allReceivedCleared()}),[]),Q=e.useCallback(((e={})=>{var r,t,n;const{ids:s=[],types:a=[],sync:c=!1}=null!=e?e:{};B((e=>s.length>0||a.length>0?e.filter((e=>{if(e.source!==j)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(F.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},j)))}),[]),X=e.useCallback(((e={})=>{const{source:r,type:t}=e;for(let e=w.length-1;e>=0;e--){const n=w[e],s=!r||n.source===r,a=!t||n.type===t;if(s&&a)return n}return null}),[w]),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 $((n=>[...n.filter((n=>{if(n.source!==t.source)return!0;const s=0===e.length||e.includes(n.id),a=0===r.length||r.includes(n.type);return!(s&&a)}))]))}if(t.type===F.PING)return void(null===(r=k.current)||void 0===r||r.postMessage(o(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(a(t))return void d.expired(t.id);const n=Date.now(),s=_.current.get(t.id);if(s&&n-s<M)return void d.duplicate(t.id);_.current.set(t.id,n),$((e=>E?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";f({action:"handleMessage",channelName:q,originalError:r}),V(r)}}),[j,J,E,V,F,M]),Z=e.useCallback((()=>{const e=k.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",Y),e.close(),u.closed(q),k.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 f({action:"useBroadcastChannel",channelName:q,originalError:e}),void V(e)}let e=null;try{e=new BroadcastChannel(q)}catch(e){const r="Failed to create BroadcastChannel";return f({action:"useBroadcastChannel",channelName:q,originalError:e instanceof Error?e:String(e)}),void V(r)}return k.current=e,u.created(q),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{Y({data:e})})):Y(e)})),()=>{Z()}}),[q,Y,V]),e.useEffect((()=>{if(i<=0)return;const e=setInterval((()=>{g.started();const e=w.length;U(),g.completed(e-w.length)}),i);return()=>{var r;clearInterval(e),S>0&&(null===(r=U.cancel)||void 0===r||r.call(U))}}),[i,U,S]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of _.current.entries())e-t>=M&&_.current.delete(r)}),6e4);return()=>clearInterval(e)}),[M]),e.useEffect((()=>()=>{if(L.current.length>0&&k.current&&!O.current){try{k.current.postMessage(L.current)}catch(e){const r="Failed to send message";f({action:"useBroadcastChannel",channelName:q,originalError:e instanceof Error?e:String(e)}),V(r)}L.current=[],setTimeout((()=>{}),0)}I.current&&(clearTimeout(I.current),I.current=null),O.current=!1}),[]),{channelName:q,messages:w,sentMessages:T,isPingInProgress:D,ping:W,postMessage:H,clearReceivedMessages:K,clearSentMessages:Q,getLatestMessage:X,error:A,closeChannel:Z}},C=e.createContext(void 0);exports.BroadcastProvider=({children:e,channelName:t})=>{const n=E(t);return r.jsx(C.Provider,{value:n,children:e})},exports.useBroadcastChannel=E,exports.useBroadcastProvider=()=>{const r=e.useContext(C);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","context","action","originalError","Error","JSON","stringify","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","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","String","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","call","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","jsx","Provider","value","useBroadcastProvider","useContext"],"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{useState as e,useRef as r,useMemo as t,useCallback as n,useEffect as s,createContext as a,useContext as o}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 a=Date.now();return{id:u(t,a),type:e,message:r,timestamp:a,source:t,expirationDate:null!==(s=n.expirationDate)&&void 0!==s?s:n.expirationDuration?a+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)},N=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]"}h("error","Error:",o)},M="CLEAR_SENT_MESSAGES",S="PING",b="PONG";let P;if("test"===process.env.NODE_ENV)try{P=require("react-dom").flushSync}catch(e){}const C=(a,o={})=>{const{sourceName:c,cleaningInterval:i=1e3,keepLatestMessage:u=!1,registeredTypes:h=[],namespace:C="",deduplicationTTL:w=3e5,cleanupDebounceMs:$=0,batchingDelayMs:T=20,excludedBatchMessageTypes:A=[]}=o,[D,B]=e([]),[_,G]=e([]),[I,x]=e(null),[L,O]=e(!1),R=r(null),k=r(new Map),j=r(null),F=r(null),J=r([]),q=r(!1),z=t((()=>c||`tab-${l()}`),[c]),U=t((()=>({CLEAR_SENT_MESSAGES:g(M,a,C),PING:g(S,a,C),PONG:g(b,a,C)})),[a,C]),V=t((()=>C?`${a}-${C}`:a),[a,C]),W=t((()=>h),[JSON.stringify(h)]),H=n((()=>{B((e=>e.filter((e=>!d(e)))))}),[]),K=r($>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})(H,$):Object.assign(H,{cancel:()=>{}})).current,Q=n((e=>{x(e),setTimeout((()=>x(null)),3e3)}),[]),X=n(((e=300)=>{if(L)return v.inProgress(),Promise.resolve([]);if(!R.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return N({action:"ping",channelName:V,originalError:e}),Q(e),Promise.resolve([])}P?P((()=>O(!0))):O(!0);const r=new Set;return j.current=r,R.current.postMessage(p(U.PING,null,z)),new Promise((t=>{setTimeout((()=>{O(!1),j.current===r&&(j.current=null),t(Array.from(r))}),e)}))}),[U.PING,z,Q,L,P]),Y=n(((e,r,t={})=>{const n=R.current;if(!n){const r="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return N({action:"postMessage",channelName:V,type:e,originalError:r}),void Q(r)}const s=p(e,r,z,t);if(!T||T<0||A.includes(e))try{n.postMessage(s)}catch(r){const t="Failed to send message";N({action:"postMessage",channelName:V,type:e,originalError:t}),Q(t),q.current=!0}else J.current.push(s),F.current||(F.current=setTimeout((()=>{if(q.current)return J.current=[],void(F.current=null);try{n.postMessage(J.current)}catch(r){const t="Failed to send message";N({action:"postMessage",channelName:V,type:e,originalError:t}),Q(t),q.current=!0}J.current=[],F.current=null}),T));m.sent(s),G((e=>[...e,s]))}),[z,Q,T,A]),Z=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()}),[]),ee=n(((e={})=>{var r,t,n;const{ids:s=[],types:a=[],sync:o=!1}=null!=e?e:{};G((e=>s.length>0||a.length>0?e.filter((e=>{if(e.source!==z)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&&m.allSentCleared(),o&&(null===(r=R.current)||void 0===r||r.postMessage(p(U.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},z)))}),[]),re=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,a=!t||n.type===t;if(s&&a)return n}return null}),[D]),te=n((e=>{var r;try{const t=e.data;if(m.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===z)return;if(f(t)){if(t.type===U.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void B((n=>[...n.filter((n=>{if(n.source!==t.source)return!0;const s=0===e.length||e.includes(n.id),a=0===r.length||r.includes(n.type);return!(s&&a)}))]))}if(t.type===U.PING)return void(null===(r=R.current)||void 0===r||r.postMessage(p(U.PONG,null,z)));if(t.type===U.PONG){const e=t.source,r=j.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(W.length>0&&!W.includes(t.type))return void m.ignored(t.type);if(d(t))return void m.expired(t.id);const n=Date.now(),s=k.current.get(t.id);if(s&&n-s<w)return void m.duplicate(t.id);k.current.set(t.id,n),B((e=>u?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";N({action:"handleMessage",channelName:V,originalError:r}),Q(r)}}),[z,W,u,Q,U,w]),ne=n((()=>{const e=R.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",te),e.close(),y.closed(V),R.current=null)}),[te,V]);return s((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return N({action:"useBroadcastChannel",channelName:V,originalError:e}),void Q(e)}let e=null;try{e=new BroadcastChannel(V)}catch(e){const r="Failed to create BroadcastChannel";return N({action:"useBroadcastChannel",channelName:V,originalError:e instanceof Error?e:String(e)}),void Q(r)}return R.current=e,y.created(V),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{te({data:e})})):te(e)})),()=>{ne()}}),[V,te,Q]),s((()=>{if(i<=0)return;const e=setInterval((()=>{E.started();const e=D.length;K(),E.completed(e-D.length)}),i);return()=>{var r;clearInterval(e),$>0&&(null===(r=K.cancel)||void 0===r||r.call(K))}}),[i,K,$]),s((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of k.current.entries())e-t>=w&&k.current.delete(r)}),6e4);return()=>clearInterval(e)}),[w]),s((()=>()=>{if(J.current.length>0&&R.current&&!q.current){try{R.current.postMessage(J.current)}catch(e){const r="Failed to send message";N({action:"useBroadcastChannel",channelName:V,originalError:e instanceof Error?e:String(e)}),Q(r)}J.current=[],setTimeout((()=>{}),0)}F.current&&(clearTimeout(F.current),F.current=null),q.current=!1}),[]),{channelName:V,messages:D,sentMessages:_,isPingInProgress:L,ping:X,postMessage:Y,clearReceivedMessages:Z,clearSentMessages:ee,getLatestMessage:re,error:I,closeChannel:ne}},w=a(void 0),$=({children:e,channelName:r})=>{const t=C(r);return c(w.Provider,{value:t,children:e})},T=()=>{const e=o(w);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{$ as BroadcastProvider,C as useBroadcastChannel,T 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","context","action","originalError","Error","JSON","stringify","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","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","String","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","call","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","Provider","value","useBroadcastProvider","useContext"],"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
  */
package/package.json CHANGED
@@ -1,12 +1,17 @@
1
1
  {
2
2
  "name": "react-broadcast-sync",
3
- "version": "1.6.0",
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
- }