react-broadcast-sync 1.5.0 → 1.6.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.
- package/CHANGELOG.md +14 -0
- package/README.md +47 -9
- package/dist/BroadcastProvider.d.ts +2 -7
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/utils/debug.d.ts +7 -1
- package/package.json +1 -1
- package/src/BroadcastProvider.tsx +8 -60
- package/src/hooks/useBroadcastChannel.ts +57 -8
- package/src/tests/BroadcastProvider.test.tsx +10 -16
- package/src/tests/debug.test.ts +40 -6
- package/src/utils/debug.ts +28 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.6.0](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.5.1...v1.6.0) (2025-09-03)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* improve error messaging for debug mode ([3a1016f](https://github.com/IdanShalem/react-broadcast-sync/commit/3a1016f45244f412eaa96d8ca8310b5ca72cd73a))
|
|
7
|
+
|
|
8
|
+
## [1.5.1](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.5.0...v1.5.1) (2025-07-03)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* added readme for batching ([568a52c](https://github.com/IdanShalem/react-broadcast-sync/commit/568a52c4d23443a1e4c2a0c2ab10a6c618c68529))
|
|
14
|
+
|
|
1
15
|
# [1.5.0](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.4.0...v1.5.0) (2025-07-03)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -228,20 +228,24 @@ interface BroadcastOptions {
|
|
|
228
228
|
namespace?: string; // Channel namespace for isolation
|
|
229
229
|
deduplicationTTL?: number; // Time in ms to keep message IDs for deduplication (default: 5 minutes)
|
|
230
230
|
cleanupDebounceMs?: number; // Debounce time in ms for cleanup operations (default: 0)
|
|
231
|
+
batchingDelayMs?: number; // Delay in ms to batch outgoing messages (default: 20). If > 0, messages are batched and sent together.
|
|
232
|
+
excludedBatchMessageTypes?: string[]; // Message types to always send immediately, never batched (default: []).
|
|
231
233
|
}
|
|
232
234
|
```
|
|
233
235
|
|
|
234
236
|
#### Default Values
|
|
235
237
|
|
|
236
|
-
| Option
|
|
237
|
-
|
|
|
238
|
-
| `sourceName`
|
|
239
|
-
| `cleaningInterval`
|
|
240
|
-
| `keepLatestMessage`
|
|
241
|
-
| `registeredTypes`
|
|
242
|
-
| `namespace`
|
|
243
|
-
| `deduplicationTTL`
|
|
244
|
-
| `cleanupDebounceMs`
|
|
238
|
+
| Option | Default Value | Description |
|
|
239
|
+
| --------------------------- | ------------- | ----------------------------------- |
|
|
240
|
+
| `sourceName` | `undefined` | Auto-generated if not provided |
|
|
241
|
+
| `cleaningInterval` | `1000` | 1 second between cleanup runs |
|
|
242
|
+
| `keepLatestMessage` | `false` | Keep all messages by default |
|
|
243
|
+
| `registeredTypes` | `[]` | Accept all message types by default |
|
|
244
|
+
| `namespace` | `''` | No namespace by default |
|
|
245
|
+
| `deduplicationTTL` | `300000` | 5 minutes (5 _ 60 _ 1000 ms) |
|
|
246
|
+
| `cleanupDebounceMs` | `0` | No debounce by default |
|
|
247
|
+
| `batchingDelayMs` | `20` | Batch delay in ms (0 = off) |
|
|
248
|
+
| `excludedBatchMessageTypes` | `[]` | Types never batched |
|
|
245
249
|
|
|
246
250
|
#### Return Value
|
|
247
251
|
|
|
@@ -484,6 +488,40 @@ function TabStatus() {
|
|
|
484
488
|
- Implement debouncing for rapid state changes
|
|
485
489
|
- Consider using `expirationDuration` for temporary messages
|
|
486
490
|
|
|
491
|
+
#### Batching Mechanism
|
|
492
|
+
|
|
493
|
+
**Batching** allows you to group multiple outgoing messages and send them together in a single post to the BroadcastChannel. This can significantly reduce the number of cross-tab events, improve performance, and avoid flooding the channel when many messages are sent in rapid succession (e.g., during fast typing or bulk updates).
|
|
494
|
+
|
|
495
|
+
- **batchingDelayMs**: If set to a value greater than 0 (default: 20ms), outgoing messages are collected for up to this delay and then sent as an array. If 0 or negative, batching is disabled and all messages are sent immediately.
|
|
496
|
+
- **excludedBatchMessageTypes**: An array of message types that should always be sent immediately, even if batching is enabled. Use this for urgent or high-priority messages (e.g., 'alert', 'sync-now').
|
|
497
|
+
|
|
498
|
+
**How it works:**
|
|
499
|
+
|
|
500
|
+
- When batching is enabled, calls to `postMessage` within the batching window are buffered and sent as a batch (array of messages) after the delay.
|
|
501
|
+
- On the receiving side, the hook automatically handles both single messages and batches (arrays). If you listen to the channel directly, always check if `Array.isArray(event.data)`.
|
|
502
|
+
- If the tab unmounts or the channel closes, any unsent batched messages are flushed immediately.
|
|
503
|
+
|
|
504
|
+
**Why batching matters:**
|
|
505
|
+
|
|
506
|
+
- Reduces the number of events and improves efficiency, especially for high-frequency updates.
|
|
507
|
+
- Prevents message storms that can occur when many updates happen in a short time.
|
|
508
|
+
- Lets you control which messages are always sent immediately for real-time needs.
|
|
509
|
+
|
|
510
|
+
**Example:**
|
|
511
|
+
|
|
512
|
+
```tsx
|
|
513
|
+
const { postMessage } = useBroadcastChannel('my-channel', {
|
|
514
|
+
batchingDelayMs: 50, // Batch messages for up to 50ms
|
|
515
|
+
excludedBatchMessageTypes: ['alert'], // Always send 'alert' immediately
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
// These will be batched if sent within 50ms
|
|
519
|
+
postMessage('edit', { field: 'a', value: 1 });
|
|
520
|
+
postMessage('edit', { field: 'b', value: 2 });
|
|
521
|
+
// This will be sent immediately
|
|
522
|
+
postMessage('alert', { message: 'Something happened!' });
|
|
523
|
+
```
|
|
524
|
+
|
|
487
525
|
### Memory Management
|
|
488
526
|
|
|
489
527
|
- Clear messages when they're no longer needed using `clearReceivedMessages` / `clearSentMessages`
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
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: () =>
|
|
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__",
|
|
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};
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -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","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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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
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};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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","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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"}
|
package/dist/utils/debug.d.ts
CHANGED
|
@@ -20,5 +20,11 @@ export declare const debug: {
|
|
|
20
20
|
started: () => void;
|
|
21
21
|
completed: (removedCount: number) => void;
|
|
22
22
|
};
|
|
23
|
-
error: (
|
|
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,37 +1,8 @@
|
|
|
1
|
-
import React, { createContext, useContext
|
|
1
|
+
import React, { createContext, useContext } from 'react';
|
|
2
2
|
import { useBroadcastChannel } from './hooks/useBroadcastChannel';
|
|
3
|
-
import {
|
|
3
|
+
import { BroadcastActions } from './types/types';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
messages: BroadcastMessage[];
|
|
7
|
-
error: string | null;
|
|
8
|
-
channel: BroadcastChannel | null;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const BroadcastChannelContext = createContext<BroadcastContextValue | undefined>(undefined);
|
|
12
|
-
|
|
13
|
-
interface ErrorBoundaryProps {
|
|
14
|
-
children: React.ReactNode;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
class ErrorBoundary extends React.Component<ErrorBoundaryProps, { hasError: boolean }> {
|
|
18
|
-
state = { hasError: false };
|
|
19
|
-
|
|
20
|
-
static getDerivedStateFromError() {
|
|
21
|
-
return { hasError: true };
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
componentDidCatch(error: Error) {
|
|
25
|
-
console.error('BroadcastChannel error:', error);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
render() {
|
|
29
|
-
if (this.state.hasError) {
|
|
30
|
-
return <div>Error occurred in BroadcastProvider</div>;
|
|
31
|
-
}
|
|
32
|
-
return this.props.children;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
5
|
+
const BroadcastChannelContext = createContext<BroadcastActions | undefined>(undefined);
|
|
35
6
|
|
|
36
7
|
interface BroadcastProviderProps {
|
|
37
8
|
channelName: string;
|
|
@@ -39,39 +10,16 @@ interface BroadcastProviderProps {
|
|
|
39
10
|
}
|
|
40
11
|
|
|
41
12
|
export const BroadcastProvider: React.FC<BroadcastProviderProps> = ({ children, channelName }) => {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const [error, setError] = React.useState<string | null>(null);
|
|
45
|
-
const channel = useRef<BroadcastChannel | null>(null);
|
|
46
|
-
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
if (typeof BroadcastChannel === 'undefined') {
|
|
49
|
-
setError(
|
|
50
|
-
'BroadcastChannel is not supported in this browser. Please check browser compatibility.'
|
|
51
|
-
);
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const bc = new BroadcastChannel(channelName);
|
|
55
|
-
channel.current = bc;
|
|
56
|
-
|
|
57
|
-
return () => {
|
|
58
|
-
bc.close();
|
|
59
|
-
};
|
|
60
|
-
}, [channelName]);
|
|
61
|
-
|
|
62
|
-
const value = useMemo(
|
|
63
|
-
() => ({ messages, error: error || hookError, channel: channel.current }),
|
|
64
|
-
[messages, error, hookError]
|
|
65
|
-
);
|
|
13
|
+
const BroadcastChannelActions = useBroadcastChannel(channelName);
|
|
66
14
|
|
|
67
15
|
return (
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
</
|
|
16
|
+
<BroadcastChannelContext.Provider value={BroadcastChannelActions}>
|
|
17
|
+
{children}
|
|
18
|
+
</BroadcastChannelContext.Provider>
|
|
71
19
|
);
|
|
72
20
|
};
|
|
73
21
|
|
|
74
|
-
export const useBroadcastProvider = ():
|
|
22
|
+
export const useBroadcastProvider = (): BroadcastActions => {
|
|
75
23
|
const context = useContext(BroadcastChannelContext);
|
|
76
24
|
if (!context) {
|
|
77
25
|
throw new Error('useBroadcastProvider must be used within a BroadcastProvider');
|
|
@@ -126,7 +126,11 @@ export const useBroadcastChannel = (
|
|
|
126
126
|
if (!channel.current) {
|
|
127
127
|
const error =
|
|
128
128
|
'BroadcastChannel is not supported in this browser. Please check browser compatibility.';
|
|
129
|
-
debug.error(
|
|
129
|
+
debug.error({
|
|
130
|
+
action: 'ping',
|
|
131
|
+
channelName: resolvedChannelName,
|
|
132
|
+
originalError: error,
|
|
133
|
+
});
|
|
130
134
|
setErrorMessage(error);
|
|
131
135
|
return Promise.resolve([]);
|
|
132
136
|
}
|
|
@@ -161,7 +165,12 @@ export const useBroadcastChannel = (
|
|
|
161
165
|
if (!channelCurrent) {
|
|
162
166
|
const error =
|
|
163
167
|
'BroadcastChannel is not supported in this browser. Please check browser compatibility.';
|
|
164
|
-
debug.error(
|
|
168
|
+
debug.error({
|
|
169
|
+
action: 'postMessage',
|
|
170
|
+
channelName: resolvedChannelName,
|
|
171
|
+
type: messageType,
|
|
172
|
+
originalError: error,
|
|
173
|
+
});
|
|
165
174
|
setErrorMessage(error);
|
|
166
175
|
return;
|
|
167
176
|
}
|
|
@@ -175,7 +184,12 @@ export const useBroadcastChannel = (
|
|
|
175
184
|
channelCurrent.postMessage(message);
|
|
176
185
|
} catch (e) {
|
|
177
186
|
const error = 'Failed to send message';
|
|
178
|
-
debug.error(
|
|
187
|
+
debug.error({
|
|
188
|
+
action: 'postMessage',
|
|
189
|
+
channelName: resolvedChannelName,
|
|
190
|
+
type: messageType,
|
|
191
|
+
originalError: error,
|
|
192
|
+
});
|
|
179
193
|
setErrorMessage(error);
|
|
180
194
|
batchingErrorRef.current = true;
|
|
181
195
|
}
|
|
@@ -192,7 +206,12 @@ export const useBroadcastChannel = (
|
|
|
192
206
|
channelCurrent.postMessage(batchingMessagesRef.current);
|
|
193
207
|
} catch (e) {
|
|
194
208
|
const error = 'Failed to send message';
|
|
195
|
-
debug.error(
|
|
209
|
+
debug.error({
|
|
210
|
+
action: 'postMessage',
|
|
211
|
+
channelName: resolvedChannelName,
|
|
212
|
+
type: messageType,
|
|
213
|
+
originalError: error,
|
|
214
|
+
});
|
|
196
215
|
setErrorMessage(error);
|
|
197
216
|
batchingErrorRef.current = true;
|
|
198
217
|
}
|
|
@@ -224,6 +243,9 @@ export const useBroadcastChannel = (
|
|
|
224
243
|
)
|
|
225
244
|
: []
|
|
226
245
|
);
|
|
246
|
+
if (!hasFilters) {
|
|
247
|
+
debug.message.allReceivedCleared();
|
|
248
|
+
}
|
|
227
249
|
}, []);
|
|
228
250
|
|
|
229
251
|
const clearSentMessages = useCallback((options: ClearSentMessagesOptions = {}) => {
|
|
@@ -245,6 +267,9 @@ export const useBroadcastChannel = (
|
|
|
245
267
|
})
|
|
246
268
|
: []
|
|
247
269
|
);
|
|
270
|
+
if (ids.length === 0 && types.length === 0) {
|
|
271
|
+
debug.message.allSentCleared();
|
|
272
|
+
}
|
|
248
273
|
if (sync) {
|
|
249
274
|
channel.current?.postMessage(
|
|
250
275
|
createMessage(
|
|
@@ -339,7 +364,11 @@ export const useBroadcastChannel = (
|
|
|
339
364
|
setMessages(prev => (keepLatestMessage ? [message] : [...prev, message]));
|
|
340
365
|
} catch (e) {
|
|
341
366
|
const error = 'Error processing broadcast message';
|
|
342
|
-
debug.error(
|
|
367
|
+
debug.error({
|
|
368
|
+
action: 'handleMessage',
|
|
369
|
+
channelName: resolvedChannelName,
|
|
370
|
+
originalError: error,
|
|
371
|
+
});
|
|
343
372
|
setErrorMessage(error);
|
|
344
373
|
}
|
|
345
374
|
},
|
|
@@ -367,12 +396,28 @@ export const useBroadcastChannel = (
|
|
|
367
396
|
if (typeof BroadcastChannel === 'undefined') {
|
|
368
397
|
const error =
|
|
369
398
|
'BroadcastChannel is not supported in this browser. Please check browser compatibility.';
|
|
370
|
-
debug.error(
|
|
399
|
+
debug.error({
|
|
400
|
+
action: 'useBroadcastChannel',
|
|
401
|
+
channelName: resolvedChannelName,
|
|
402
|
+
originalError: error,
|
|
403
|
+
});
|
|
371
404
|
setErrorMessage(error);
|
|
372
405
|
return;
|
|
373
406
|
}
|
|
374
407
|
|
|
375
|
-
|
|
408
|
+
let bc: BroadcastChannel | null = null;
|
|
409
|
+
try {
|
|
410
|
+
bc = new BroadcastChannel(resolvedChannelName);
|
|
411
|
+
} catch (e) {
|
|
412
|
+
const error = 'Failed to create BroadcastChannel';
|
|
413
|
+
debug.error({
|
|
414
|
+
action: 'useBroadcastChannel',
|
|
415
|
+
channelName: resolvedChannelName,
|
|
416
|
+
originalError: e instanceof Error ? e : String(e),
|
|
417
|
+
});
|
|
418
|
+
setErrorMessage(error);
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
376
421
|
channel.current = bc;
|
|
377
422
|
debug.channel.created(resolvedChannelName);
|
|
378
423
|
|
|
@@ -431,7 +476,11 @@ export const useBroadcastChannel = (
|
|
|
431
476
|
channel.current.postMessage(batchingMessagesRef.current);
|
|
432
477
|
} catch (e) {
|
|
433
478
|
const error = 'Failed to send message';
|
|
434
|
-
debug.error(
|
|
479
|
+
debug.error({
|
|
480
|
+
action: 'useBroadcastChannel',
|
|
481
|
+
channelName: resolvedChannelName,
|
|
482
|
+
originalError: e instanceof Error ? e : String(e),
|
|
483
|
+
});
|
|
435
484
|
setErrorMessage(error);
|
|
436
485
|
}
|
|
437
486
|
batchingMessagesRef.current = [];
|
|
@@ -63,10 +63,9 @@ describe('BroadcastProvider', () => {
|
|
|
63
63
|
</BroadcastProvider>
|
|
64
64
|
);
|
|
65
65
|
|
|
66
|
-
// The provider
|
|
67
|
-
expect(mockChannels).toHaveLength(
|
|
66
|
+
// The provider delegates to useBroadcastChannel which creates one channel
|
|
67
|
+
expect(mockChannels).toHaveLength(1);
|
|
68
68
|
expect(mockChannels[0].name).toBe('test-channel');
|
|
69
|
-
expect(mockChannels[1].name).toBe('test-channel');
|
|
70
69
|
});
|
|
71
70
|
|
|
72
71
|
it('provides context values to children', () => {
|
|
@@ -132,23 +131,18 @@ describe('BroadcastProvider', () => {
|
|
|
132
131
|
expect(mockChannels[0].close).toHaveBeenCalled();
|
|
133
132
|
});
|
|
134
133
|
|
|
135
|
-
it('
|
|
134
|
+
it('propagates child component errors (no internal error boundary)', () => {
|
|
136
135
|
const ThrowComponent = () => {
|
|
137
136
|
throw new Error('Test error');
|
|
138
137
|
};
|
|
139
138
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
expect(screen.getByText('Error occurred in BroadcastProvider')).toBeInTheDocument();
|
|
149
|
-
expect(consoleError).toHaveBeenCalledWith('BroadcastChannel error:', expect.any(Error));
|
|
150
|
-
|
|
151
|
-
consoleError.mockRestore();
|
|
139
|
+
expect(() => {
|
|
140
|
+
render(
|
|
141
|
+
<BroadcastProvider channelName="test-channel">
|
|
142
|
+
<ThrowComponent />
|
|
143
|
+
</BroadcastProvider>
|
|
144
|
+
);
|
|
145
|
+
}).toThrow('Test error');
|
|
152
146
|
});
|
|
153
147
|
|
|
154
148
|
it('throws error when useBroadcastProvider is used outside provider', () => {
|
package/src/tests/debug.test.ts
CHANGED
|
@@ -32,7 +32,7 @@ describe('debug', () => {
|
|
|
32
32
|
it('does not log anything', () => {
|
|
33
33
|
debug.channel.created('test-channel');
|
|
34
34
|
debug.message.sent({ id: '123' });
|
|
35
|
-
debug.error('test error');
|
|
35
|
+
debug.error({ action: 'test error' });
|
|
36
36
|
|
|
37
37
|
expect(console.log).not.toHaveBeenCalled();
|
|
38
38
|
expect(console.warn).not.toHaveBeenCalled();
|
|
@@ -130,12 +130,12 @@ describe('debug', () => {
|
|
|
130
130
|
/\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z\] \[react-broadcast-sync\]/
|
|
131
131
|
),
|
|
132
132
|
'Cleanup completed:',
|
|
133
|
-
|
|
133
|
+
5
|
|
134
134
|
);
|
|
135
135
|
});
|
|
136
136
|
|
|
137
137
|
it('logs errors', () => {
|
|
138
|
-
debug.error('test error');
|
|
138
|
+
debug.error({ action: 'test error' });
|
|
139
139
|
expect(console.error).toHaveBeenCalledWith(
|
|
140
140
|
expect.stringMatching(
|
|
141
141
|
/\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z\] \[react-broadcast-sync\]/
|
|
@@ -145,6 +145,24 @@ describe('debug', () => {
|
|
|
145
145
|
);
|
|
146
146
|
});
|
|
147
147
|
|
|
148
|
+
it('includes string cause in error logs', () => {
|
|
149
|
+
debug.error({ action: 'action', originalError: 'string-cause' });
|
|
150
|
+
expect(console.error).toHaveBeenCalledWith(
|
|
151
|
+
expect.stringMatching(/\[.*react-broadcast-sync\]/),
|
|
152
|
+
'Error:',
|
|
153
|
+
expect.stringContaining('action | cause: string-cause')
|
|
154
|
+
);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it('includes object cause in error logs (JSON stringified)', () => {
|
|
158
|
+
debug.error({ action: 'action', originalError: { reason: 'bad', code: 500 } });
|
|
159
|
+
expect(console.error).toHaveBeenCalledWith(
|
|
160
|
+
expect.stringMatching(/\[.*react-broadcast-sync\]/),
|
|
161
|
+
'Error:',
|
|
162
|
+
expect.stringContaining('action | cause: {"reason":"bad","code":500}')
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
|
|
148
166
|
it('logs info with no data', () => {
|
|
149
167
|
debug.channel.created('test-channel');
|
|
150
168
|
expect(console.log).toHaveBeenCalledWith(
|
|
@@ -164,7 +182,7 @@ describe('debug', () => {
|
|
|
164
182
|
});
|
|
165
183
|
|
|
166
184
|
it('logs error with no data', () => {
|
|
167
|
-
debug.error('error!');
|
|
185
|
+
debug.error({ action: 'error!' });
|
|
168
186
|
expect(console.error).toHaveBeenCalledWith(
|
|
169
187
|
expect.stringMatching(/\[.*react-broadcast-sync\]/),
|
|
170
188
|
'Error:',
|
|
@@ -213,7 +231,7 @@ describe('debug', () => {
|
|
|
213
231
|
});
|
|
214
232
|
|
|
215
233
|
it('logs error messages', () => {
|
|
216
|
-
debug.error('Test error');
|
|
234
|
+
debug.error({ action: 'Test error' });
|
|
217
235
|
expect(console.error).toHaveBeenCalledWith(
|
|
218
236
|
expect.stringContaining('[react-broadcast-sync]'),
|
|
219
237
|
'Error:',
|
|
@@ -233,7 +251,23 @@ describe('debug', () => {
|
|
|
233
251
|
expect(console.log).toHaveBeenCalledWith(
|
|
234
252
|
expect.stringContaining('[react-broadcast-sync]'),
|
|
235
253
|
'Cleanup completed:',
|
|
236
|
-
|
|
254
|
+
2
|
|
255
|
+
);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it('logs all-cleared messages', () => {
|
|
259
|
+
debug.message.allSentCleared();
|
|
260
|
+
expect(console.log).toHaveBeenCalledWith(
|
|
261
|
+
expect.stringContaining('[react-broadcast-sync]'),
|
|
262
|
+
'All sent messages cleared',
|
|
263
|
+
''
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
debug.message.allReceivedCleared();
|
|
267
|
+
expect(console.log).toHaveBeenCalledWith(
|
|
268
|
+
expect.stringContaining('[react-broadcast-sync]'),
|
|
269
|
+
'All received messages cleared',
|
|
270
|
+
''
|
|
237
271
|
);
|
|
238
272
|
});
|
|
239
273
|
});
|
package/src/utils/debug.ts
CHANGED
|
@@ -48,7 +48,33 @@ export const debug = {
|
|
|
48
48
|
},
|
|
49
49
|
cleanup: {
|
|
50
50
|
started: () => log('info', 'Cleanup started'),
|
|
51
|
-
completed: (removedCount: number) => log('info', 'Cleanup completed:',
|
|
51
|
+
completed: (removedCount: number) => log('info', 'Cleanup completed:', removedCount),
|
|
52
|
+
},
|
|
53
|
+
error: (context: {
|
|
54
|
+
action: string;
|
|
55
|
+
channelName?: string;
|
|
56
|
+
type?: string;
|
|
57
|
+
source?: string;
|
|
58
|
+
originalError?: unknown;
|
|
59
|
+
}) => {
|
|
60
|
+
const { action, channelName, type, source, originalError } = context;
|
|
61
|
+
|
|
62
|
+
let message = `${action}`;
|
|
63
|
+
if (channelName) message += ` | channel: ${channelName}`;
|
|
64
|
+
if (type) message += ` | type: ${type}`;
|
|
65
|
+
if (source) message += ` | source: ${source}`;
|
|
66
|
+
if (originalError instanceof Error) {
|
|
67
|
+
message += ` | cause: ${originalError.message}`;
|
|
68
|
+
} else if (typeof originalError === 'string') {
|
|
69
|
+
message += ` | cause: ${originalError}`;
|
|
70
|
+
} else if (originalError != null) {
|
|
71
|
+
try {
|
|
72
|
+
message += ` | cause: ${JSON.stringify(originalError)}`;
|
|
73
|
+
} catch {
|
|
74
|
+
message += ' | cause: [unserializable]';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
log('error', 'Error:', message);
|
|
52
79
|
},
|
|
53
|
-
error: (error: string) => log('error', 'Error:', error),
|
|
54
80
|
};
|