react-broadcast-sync 1.5.1 → 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 CHANGED
@@ -1,3 +1,10 @@
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
+
1
8
  ## [1.5.1](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.5.0...v1.5.1) (2025-07-03)
2
9
 
3
10
 
@@ -1,14 +1,9 @@
1
1
  import React from 'react';
2
- import { BroadcastMessage } from './types/types';
3
- interface BroadcastContextValue {
4
- messages: BroadcastMessage[];
5
- error: string | null;
6
- channel: BroadcastChannel | null;
7
- }
2
+ import { BroadcastActions } from './types/types';
8
3
  interface BroadcastProviderProps {
9
4
  channelName: string;
10
5
  children: React.ReactNode;
11
6
  }
12
7
  export declare const BroadcastProvider: React.FC<BroadcastProviderProps>;
13
- export declare const useBroadcastProvider: () => BroadcastContextValue;
8
+ export declare const useBroadcastProvider: () => BroadcastActions;
14
9
  export {};
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("react"),r=require("react/jsx-runtime");const t="__INTERNAL__",s=()=>Math.random().toString(36).substr(2,9),n=(e,r)=>{const t=`${s()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},o=e=>!!e.expirationDate&&e.expirationDate<Date.now(),c=(e,r,t,s={})=>{var o;const c=Date.now();return{id:n(t,c),type:e,message:r,timestamp:c,source:t,expirationDate:null!==(o=s.expirationDate)&&void 0!==o?o:s.expirationDuration?c+s.expirationDuration:void 0}},a=(e,r,s="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${s}`}`);return`${t}:${e}:${n}`},l=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${t}:`)&&"string"==typeof e.source,u=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const s=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(s,r,t||"");break;case"warn":console.warn(s,r,t||"");break;case"error":console.error(s,r,t||"")}},i={created:e=>u("info","Channel created:",e),closed:e=>u("info","Channel closed:",e)},d={sent:e=>u("info","Message sent:",e),received:e=>u("info","Message received:",e),cleared:e=>u("info","Message cleared:",e),expired:e=>u("info","Message expired:",e),duplicate:e=>u("warn","Duplicate message ignored:",e),allSentCleared:()=>u("info","All sent messages cleared"),allReceivedCleared:()=>u("info","All received messages cleared"),ignored:e=>u("info","Message ignored due to type filter:",e)},p={inProgress:()=>u("warn","Ping already in progress. Skipping call.")},f={started:()=>u("info","Cleanup started"),completed:e=>u("info","Cleanup completed:",{removedCount:e})},g=e=>u("error","Error:",e),h="CLEAR_SENT_MESSAGES",m="PING",v="PONG";let y;if("test"===process.env.NODE_ENV)try{y=require("react-dom").flushSync}catch(e){}const C=(r,t={})=>{const{sourceName:n,cleaningInterval:u=1e3,keepLatestMessage:C=!1,registeredTypes:E=[],namespace:b="",deduplicationTTL:S=3e5,cleanupDebounceMs:M=0,batchingDelayMs:P=20,excludedBatchMessageTypes:w=[]}=t,[N,x]=e.useState([]),[B,T]=e.useState([]),[D,A]=e.useState(null),[k,R]=e.useState(!1),$=e.useRef(null),_=e.useRef(new Map),G=e.useRef(null),I=e.useRef(null),L=e.useRef([]),O=e.useRef(!1),j=e.useMemo((()=>n||`tab-${s()}`),[n]),F=e.useMemo((()=>({CLEAR_SENT_MESSAGES:a(h,r,b),PING:a(m,r,b),PONG:a(v,r,b)})),[r,b]),q=e.useMemo((()=>b?`${r}-${b}`:r),[r,b]),J=e.useMemo((()=>E),[JSON.stringify(E)]),U=e.useCallback((()=>{x((e=>e.filter((e=>!o(e)))))}),[]),V=e.useRef(M>0?((e,r)=>{let t,s=null,n=null;const o=(...o)=>{n=o,null!==s&&clearTimeout(s),s=setTimeout((()=>{s=null,null!==n&&(t=e(...n),n=null)}),r)};return o.cancel=()=>{null!==s&&(clearTimeout(s),s=null,n=null)},o.flush=()=>(null!==s&&(clearTimeout(s),s=null,null!==n&&(t=e(...n),n=null)),t),o})(U,M):Object.assign(U,{cancel:()=>{}})).current,W=e.useCallback((e=>{A(e),setTimeout((()=>A(null)),3e3)}),[]),z=e.useCallback(((e=300)=>{if(k)return p.inProgress(),Promise.resolve([]);if(!$.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),W(e),Promise.resolve([])}y?y((()=>R(!0))):R(!0);const r=new Set;return G.current=r,$.current.postMessage(c(F.PING,null,j)),new Promise((t=>{setTimeout((()=>{R(!1),G.current===r&&(G.current=null),t(Array.from(r))}),e)}))}),[F.PING,j,W,k,y]),H=e.useCallback(((e,r,t={})=>{const s=$.current;if(!s){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),void W(e)}const n=c(e,r,j,t);if(!P||P<0||w.includes(e))try{s.postMessage(n)}catch(e){const r="Failed to send message";g(r),W(r),O.current=!0}else L.current.push(n),I.current||(I.current=setTimeout((()=>{if(O.current)return L.current=[],void(I.current=null);try{s.postMessage(L.current)}catch(e){const r="Failed to send message";g(r),W(r),O.current=!0}L.current=[],I.current=null}),P));d.sent(n),T((e=>[...e,n]))}),[j,W,P,w]),K=e.useCallback(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);x((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[]))}),[]),Q=e.useCallback(((e={})=>{var r,t,s;const{ids:n=[],types:o=[],sync:a=!1}=null!=e?e:{};T((e=>n.length>0||o.length>0?e.filter((e=>{if(e.source!==j)return!0;const r=0===n.length||n.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),a&&(null===(r=$.current)||void 0===r||r.postMessage(c(F.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(s=e.types)&&void 0!==s?s:[]},j)))}),[]),X=e.useCallback(((e={})=>{const{source:r,type:t}=e;for(let e=N.length-1;e>=0;e--){const s=N[e],n=!r||s.source===r,o=!t||s.type===t;if(n&&o)return s}return null}),[N]),Y=e.useCallback((e=>{var r;try{const t=e.data;if(d.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===j)return;if(l(t)){if(t.type===F.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void x((s=>[...s.filter((s=>{if(s.source!==t.source)return!0;const n=0===e.length||e.includes(s.id),o=0===r.length||r.includes(s.type);return!(n&&o)}))]))}if(t.type===F.PING)return void(null===(r=$.current)||void 0===r||r.postMessage(c(F.PONG,null,j)));if(t.type===F.PONG){const e=t.source,r=G.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(J.length>0&&!J.includes(t.type))return void d.ignored(t.type);if(o(t))return void d.expired(t.id);const s=Date.now(),n=_.current.get(t.id);if(n&&s-n<S)return void d.duplicate(t.id);_.current.set(t.id,s),x((e=>C?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";g(r),W(r)}}),[j,J,C,W,F,S]),Z=e.useCallback((()=>{const e=$.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",Y),e.close(),i.closed(q),$.current=null)}),[Y,q]);return e.useEffect((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),void W(e)}const e=new BroadcastChannel(q);return $.current=e,i.created(q),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{Y({data:e})})):Y(e)})),()=>{Z()}}),[q,Y,W]),e.useEffect((()=>{if(u<=0)return;const e=setInterval((()=>{f.started();const e=N.length;V(),f.completed(e-N.length)}),u);return()=>{var r;clearInterval(e),M>0&&(null===(r=V.cancel)||void 0===r||r.call(V))}}),[u,V,M]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of _.current.entries())e-t>=S&&_.current.delete(r)}),6e4);return()=>clearInterval(e)}),[S]),e.useEffect((()=>()=>{if(L.current.length>0&&$.current&&!O.current){try{$.current.postMessage(L.current)}catch(e){const r="Failed to send message";g(r),W(r)}L.current=[],setTimeout((()=>{}),0)}I.current&&(clearTimeout(I.current),I.current=null),O.current=!1}),[]),{channelName:q,messages:N,sentMessages:B,isPingInProgress:k,ping:z,postMessage:H,clearReceivedMessages:K,clearSentMessages:Q,getLatestMessage:X,error:D,closeChannel:Z}},E=e.createContext(void 0);class b extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?r.jsx("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}exports.BroadcastProvider=({children:t,channelName:s})=>{const{messages:n,error:o}=C(s),[c,a]=e.useState(null),l=e.useRef(null);e.useEffect((()=>{if("undefined"==typeof BroadcastChannel)return void a("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return l.current=e,()=>{e.close()}}),[s]);const u=e.useMemo((()=>({messages:n,error:c||o,channel:l.current})),[n,c,o]);return r.jsx(b,{children:r.jsx(E.Provider,{value:u,children:t})})},exports.useBroadcastChannel=C,exports.useBroadcastProvider=()=>{const r=e.useContext(E);if(!r)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return r};
1
+ "use strict";var e=require("react"),r=require("react/jsx-runtime");const t="__INTERNAL__",n=()=>Math.random().toString(36).substr(2,9),s=(e,r)=>{const t=`${n()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},a=e=>!!e.expirationDate&&e.expirationDate<Date.now(),o=(e,r,t,n={})=>{var a;const o=Date.now();return{id:s(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(a=n.expirationDate)&&void 0!==a?a:n.expirationDuration?o+n.expirationDuration:void 0}},c=(e,r,n="")=>{const s=btoa(`react-broadcast-sync:${e}:${`${r}-${n}`}`);return`${t}:${e}:${s}`},l=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${t}:`)&&"string"==typeof e.source,i=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const n=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(n,r,t||"");break;case"warn":console.warn(n,r,t||"");break;case"error":console.error(n,r,t||"")}},u={created:e=>i("info","Channel created:",e),closed:e=>i("info","Channel closed:",e)},d={sent:e=>i("info","Message sent:",e),received:e=>i("info","Message received:",e),cleared:e=>i("info","Message cleared:",e),expired:e=>i("info","Message expired:",e),duplicate:e=>i("warn","Duplicate message ignored:",e),allSentCleared:()=>i("info","All sent messages cleared"),allReceivedCleared:()=>i("info","All received messages cleared"),ignored:e=>i("info","Message ignored due to type filter:",e)},p={inProgress:()=>i("warn","Ping already in progress. Skipping call.")},g={started:()=>i("info","Cleanup started"),completed:e=>i("info","Cleanup completed:",e)},f=e=>{const{action:r,channelName:t,type:n,source:s,originalError:a}=e;let o=`${r}`;if(t&&(o+=` | channel: ${t}`),n&&(o+=` | type: ${n}`),s&&(o+=` | source: ${s}`),a instanceof Error)o+=` | cause: ${a.message}`;else if("string"==typeof a)o+=` | cause: ${a}`;else if(null!=a)try{o+=` | cause: ${JSON.stringify(a)}`}catch(e){o+=" | cause: [unserializable]"}i("error","Error:",o)},h="CLEAR_SENT_MESSAGES",y="PING",m="PONG";let v;if("test"===process.env.NODE_ENV)try{v=require("react-dom").flushSync}catch(e){}const E=(r,t={})=>{const{sourceName:s,cleaningInterval:i=1e3,keepLatestMessage:E=!1,registeredTypes: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
@@ -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":"mEAEA,MAAMA,EAAkB,eAIXC,EAAqBA,IAAMC,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,GAMhEC,EAAoBA,CAACC,EAAgBC,KAChD,MAAMC,EAAM,GAAGR,OAAwBM,KAAUC,IACjD,OAAOE,KAAKD,GAAKE,QAAQ,MAAO,KASrBC,EAAoBC,KACxBA,EAAQC,gBAAiBD,EAAQC,eAAiBC,KAAKC,MAInDC,EAAgBA,CAC3BC,EACAC,EACAZ,EACAa,EAAoE,CAAA,WAEpE,MAAMZ,EAAYO,KAAKC,MACvB,MAAO,CACLK,GAAIf,EAAkBC,EAAQC,GAC9BU,OACAL,QAASM,EACTX,YACAD,SACAO,eAEE,UADAM,EAAQN,sBACR,IAAAQ,EAAAA,EAACF,EAAQG,mBAAqBf,EAAYY,EAAQG,wBAAqBC,IAIhEC,EAAyBA,CACpCC,EACAC,EACAC,EAAY,MAEZ,MAEMC,EAAOnB,KADC,wBAAagB,KADP,GAAGC,KAAeC,OAGtC,MAAO,GAAG5B,KAAmB0B,KAAYG,KAO9BC,EAA+BjB,GAExCA,GACmB,iBAAZA,GACiB,iBAAjBA,EAAQK,MACAL,EAAQK,KARba,WAAW,GAAG/B,OASE,iBAAnBa,EAAQN,OCzDbyB,EAAMA,CAACC,EAAiBpB,EAAiBqB,KAC7C,GATuB,oBAAZC,UAA2BA,QAAQC,KACK,SAA1CD,QAAQC,IAAIC,0BAQD,OAEpB,MACMC,EAAS,KADG,IAAIvB,MAAOwB,wCAE7B,OAAQN,GACN,IAAK,OACHO,QAAQR,IAAIM,EAAQzB,EAASqB,GAAQ,IACrC,MACF,IAAK,OACHM,QAAQC,KAAKH,EAAQzB,EAASqB,GAAQ,IACtC,MACF,IAAK,QACHM,QAAQE,MAAMJ,EAAQzB,EAASqB,GAAQ,MAKhCS,EACF,CACPC,QAAUC,GAAiBb,EAAI,OAAQ,mBAAoBa,GAC3DC,OAASD,GAAiBb,EAAI,OAAQ,kBAAmBa,IAHhDF,EAKF,CACPI,KAAOlC,GAAiBmB,EAAI,OAAQ,gBAAiBnB,GACrDmC,SAAWnC,GAAiBmB,EAAI,OAAQ,oBAAqBnB,GAC7DoC,QAAUC,GAAsBlB,EAAI,OAAQ,mBAAoBkB,GAChEC,QAAUD,GAAsBlB,EAAI,OAAQ,mBAAoBkB,GAChEE,UAAYF,GAAsBlB,EAAI,OAAQ,6BAA8BkB,GAC5EG,eAAgBA,IAAMrB,EAAI,OAAQ,6BAClCsB,mBAAoBA,IAAMtB,EAAI,OAAQ,iCACtCuB,QAAUC,GACRxB,EAAI,OAAQ,sCAAuCwB,IAd5Cb,EAgBL,CACJc,WAAYA,IAAMzB,EAAI,OAAQ,6CAjBrBW,EAmBF,CACPe,QAASA,IAAM1B,EAAI,OAAQ,mBAC3B2B,UAAYC,GAAyB5B,EAAI,OAAQ,qBAAsB,CAAE4B,kBArBhEjB,EAuBHD,GAAkBV,EAAI,QAAS,SAAUU,GC9B7CmB,EACiB,sBADjBA,EAEE,OAFFA,EAGE,OAGR,IAAIC,EACJ,GAA6B,SAAzB3B,QAAQC,IAAI2B,SACd,IAEED,EAAcE,QAAQ,aAAaC,SACpC,CAAC,MAAA3C,GACA,CAcG,MAAM4C,EAAsBA,CACjCvC,EACAP,EAA4B,MAE5B,MAAM+C,WACJA,EAAUC,iBACVA,EAAmB,IAAIC,kBACvBA,GAAoB,EAAKC,gBACzBA,EAAkB,GAAE1C,UACpBA,EAAY,GAAE2C,iBACdA,EAAmB,IAAaC,kBAChCA,EAAoB,EAACC,gBACrBA,EAAkB,GAAEC,0BACpBA,EAA4B,IAC1BtD,GAGGuD,EAAUC,GAAeC,EAAAA,SAA6B,KACtDC,EAAcC,GAAmBF,EAAAA,SAA6B,KAC9DnC,EAAOsC,GAAYH,EAAAA,SAAwB,OAC3CI,EAAkBC,GAAuBL,EAAAA,UAAS,GAGnDM,EAAUC,EAAMA,OAA0B,MAC1CC,EAAqBD,EAAAA,OAAO,IAAIE,KAChCC,EAAyBH,EAAMA,OAAqB,MACpDI,EAAqBJ,EAAMA,OAAwB,MACnDK,EAAsBL,EAAMA,OAAqB,IACjDM,EAAmBN,EAAMA,QAAC,GAG1B7E,EAASoF,EAAAA,SAAQ,IAAMxB,GFtES,OAAOlE,OEsEoB,CAACkE,IAC5DyB,EAAgBD,EAAAA,SACpB,KAAO,CACLE,oBAAqBpE,EACnBoC,EACAlC,EACAC,GAEFkE,KAAMrE,EAAuBoC,EAA6BlC,EAAaC,GACvEmE,KAAMtE,EAAuBoC,EAA6BlC,EAAaC,MAEzE,CAACD,EAAaC,IAGVoE,EAAsBL,EAAAA,SAAQ,IAE3B/D,EAAY,GAAGD,KAAeC,IAAcD,GAClD,CAACA,EAAaC,IAEXqE,EAAwBN,EAAOA,SAAC,IAAMrB,GAAiB,CAAC4B,KAAKC,UAAU7B,KAEvE8B,EAAiBC,EAAAA,aAAY,KACjCzB,GAAY0B,GAAQA,EAAKC,QAAOC,IAAQ5F,EAAiB4F,SACxD,IAEGC,EAAmBrB,EAAAA,OAIvBZ,EAAoB,EFpCAkC,EACtBC,EACAC,KAKA,IAEIC,EAFAC,EAAkD,KAClDC,EAAiC,KAGrC,MAAMC,EAAYA,IAAIC,KACpBF,EAAWE,EACO,OAAdH,GACFI,aAAaJ,GAEfA,EAAYK,YAAW,KACrBL,EAAY,KACK,OAAbC,IACFF,EAASF,KAAMI,GACfA,EAAW,QAEZH,IAuBL,OApBAI,EAAUI,OAAS,KACC,OAAdN,IACFI,aAAaJ,GACbA,EAAY,KACZC,EAAW,OAIfC,EAAUK,MAAQ,KACE,OAAdP,IACFI,aAAaJ,GACbA,EAAY,KACK,OAAbC,IACFF,EAASF,KAAMI,GACfA,EAAW,OAGRF,GAGFG,GERDN,CAASN,EAAgB5B,GACzB8C,OAAOC,OAAOnB,EAAgB,CAAEgB,OAAQA,UAC5CI,QAEIC,EAAkBpB,EAAWA,aAAE3D,IACnCsC,EAAStC,GACTyE,YAAW,IAAMnC,EAAS,OAAO,OAChC,IAEG0C,EAAOrB,EAAAA,aACX,CAACsB,EAAoB,OACnB,GAAI1C,EAEF,OADAtC,EAAWc,aACJmE,QAAQC,QAAQ,IAGzB,IAAK1C,EAAQqC,QAAS,CACpB,MAAM9E,EACJ,yFAGF,OAFAC,EAAYD,GACZ+E,EAAgB/E,GACTkF,QAAQC,QAAQ,GACzB,CAGI/D,EACFA,GAAY,IAAMoB,GAAoB,KAEtCA,GAAoB,GAEtB,MAAM4C,EAAY,IAAIC,IAKtB,OAJAxC,EAAuBiC,QAAUM,EAEjC3C,EAAQqC,QAAQQ,YAAY/G,EAAc2E,EAAcE,KAAM,KAAMvF,IAE7D,IAAIqH,SAAQC,IACjBV,YAAW,KACTjC,GAAoB,GAChBK,EAAuBiC,UAAYM,IACrCvC,EAAuBiC,QAAU,MAEnCK,EAAQI,MAAMC,KAAKJ,MAClBH,QAGP,CAAC/B,EAAcE,KAAMvF,EAAQkH,EAAiBxC,EAAkBnB,IAG5DkE,EAAc3B,EAAAA,aAClB,CAAC7C,EAAqB2E,EAAqB/G,EAA8B,MACvE,MAAMgH,EAAiBjD,EAAQqC,QAC/B,IAAKY,EAAgB,CACnB,MAAM1F,EACJ,yFAGF,OAFAC,EAAYD,QACZ+E,EAAgB/E,EAElB,CAEA,MAAM7B,EAAUI,EAAcuC,EAAa2E,EAAgB5H,EAAQa,GAInE,IADGqD,GAAmBA,EAAkB,GAAKC,EAA0B2D,SAAS7E,GAE9E,IACE4E,EAAeJ,YAAYnH,EAC5B,CAAC,MAAOyH,GACP,MAAM5F,EAAQ,yBACdC,EAAYD,GACZ+E,EAAgB/E,GAChBgD,EAAiB8B,SAAU,CAC7B,MAEA/B,EAAoB+B,QAAQe,KAAK1H,GAC5B2E,EAAmBgC,UACtBhC,EAAmBgC,QAAUL,YAAW,KACtC,GAAIzB,EAAiB8B,QAGnB,OAFA/B,EAAoB+B,QAAU,QAC9BhC,EAAmBgC,QAAU,MAG/B,IACEY,EAAeJ,YAAYvC,EAAoB+B,QAChD,CAAC,MAAOc,GACP,MAAM5F,EAAQ,yBACdC,EAAYD,GACZ+E,EAAgB/E,GAChBgD,EAAiB8B,SAAU,CAC7B,CACA/B,EAAoB+B,QAAU,GAC9BhC,EAAmBgC,QAAU,OAC5B/C,IAGP9B,EAAcI,KAAKlC,GACnBkE,GAAgBuB,GAAQ,IAAIA,EAAMzF,OAEpC,CAACN,EAAQkH,EAAiBhD,EAAiBC,IAGvC8D,EAAwBnC,EAAAA,aAAY,CAACjF,EAAwC,CAAA,KACjF,MAAMqH,EAAaC,QAChBtH,EAAQuH,KAAOvH,EAAQuH,IAAIC,QACzBxH,EAAQyH,OAASzH,EAAQyH,MAAMD,QAC/BxH,EAAQ0H,SAAW1H,EAAQ0H,QAAQF,QAGxChE,GAAY0B,GACVmC,EACInC,EAAKC,QACHC,KACIpF,EAAQuH,KAAOvH,EAAQuH,IAAIN,SAAS7B,EAAInF,KACxCD,EAAQyH,OAASzH,EAAQyH,MAAMR,SAAS7B,EAAItF,OAC5CE,EAAQ0H,SAAW1H,EAAQ0H,QAAQT,SAAS7B,EAAIjG,WAEtD,OAEL,IAEGwI,EAAoB1C,EAAAA,aAAY,CAACjF,EAAoC,CAAA,eACzE,MAAMuH,IAAEA,EAAM,GAAEE,MAAEA,EAAQ,GAAEG,KAAEA,GAAO,GAAU5H,QAAAA,EAAW,CAAE,EAC5D2D,GAAgBuB,GACdqC,EAAIC,OAAS,GAAKC,EAAMD,OAAS,EAC7BtC,EAAKC,QAAOC,IAEV,GAAIA,EAAIjG,SAAWA,EAAQ,OAAO,EAKlC,MAAM0I,EAA2B,IAAfN,EAAIC,QAAgBD,EAAIN,SAAS7B,EAAInF,IACjD6H,EAA+B,IAAjBL,EAAMD,QAAgBC,EAAMR,SAAS7B,EAAItF,MAG7D,QAAS+H,GAAaC,MAExB,KAEFF,IACa,QAAf1H,EAAA6D,EAAQqC,eAAO,IAAAlG,GAAAA,EAAE0G,YACf/G,EACE2E,EAAcC,oBACd,CAAE8C,YAAKQ,EAAA/H,EAAQuH,mBAAO,GAAIE,MAAoB,UAAbzH,EAAQyH,aAAK,IAAAO,EAAAA,EAAI,IAClD7I,OAIL,IAEG8I,EAAmBhD,EAAAA,aACvB,CAACjF,EAAmC,CAAA,KAClC,MAAMb,OAAEA,EAAMW,KAAEA,GAASE,EAEzB,IAAK,IAAIkI,EAAI3E,EAASiE,OAAS,EAAGU,GAAK,EAAGA,IAAK,CAC7C,MAAM9C,EAAM7B,EAAS2E,GACfC,GAAiBhJ,GAAUiG,EAAIjG,SAAWA,EAC1C2I,GAAehI,GAAQsF,EAAItF,OAASA,EAC1C,GAAIqI,GAAiBL,EACnB,OAAO1C,CAEX,CAEA,OAAO,OAET,CAAC7B,IAGG6E,EAAgBnD,EAAWA,aAC9BoD,UACC,IACE,MAAM5I,EAA4B4I,EAAMvH,KAGxC,GAFAS,EAAcK,SAASnC,IFtQAA,IACtB6H,QAAQ7H,GAA8B,iBAAZA,GAAwB,OAAQA,GEuQtD6I,CAAe7I,GAAU,OAC9B,GAAIA,EAAQN,SAAWA,EAAQ,OAC/B,GAAIuB,EAA4BjB,GAAU,CACxC,GAAIA,EAAQK,OAAS0E,EAAcC,oBAAqB,CACtD,MAAM8C,IAAEA,EAAM,GAAEE,MAAEA,EAAQ,IAAQhI,EAAgBA,SAAW,CAAE,EAiB/D,YAfA+D,GAAY0B,GAAQ,IACfA,EAAKC,QAAOC,IAEb,GAAIA,EAAIjG,SAAWM,EAAQN,OAAQ,OAAO,EAK1C,MAAM0I,EAA2B,IAAfN,EAAIC,QAAgBD,EAAIN,SAAS7B,EAAInF,IACjD6H,EAA+B,IAAjBL,EAAMD,QAAgBC,EAAMR,SAAS7B,EAAItF,MAE7D,QAAS+H,GAAaC,QAK5B,CACA,GAAIrI,EAAQK,OAAS0E,EAAcE,KAEjC,YADiB,QAAjBxE,EAAA6D,EAAQqC,eAAS,IAAAlG,GAAAA,EAAA0G,YAAY/G,EAAc2E,EAAcG,KAAM,KAAMxF,KAIvE,GAAIM,EAAQK,OAAS0E,EAAcG,KAAM,CACvC,MAAM4D,EAAa9I,EAAQN,OACrBuH,EAAYvC,EAAuBiC,QAMzC,YAJIM,IAA2C,IAA9BA,EAAU8B,IAAID,IAC7B7B,EAAU+B,IAAIF,GAIlB,CACF,CACA,GAAI1D,EAAsB2C,OAAS,IAAM3C,EAAsBoC,SAASxH,EAAQK,MAE9E,YADAyB,EAAcY,QAAQ1C,EAAQK,MAGhC,GAAIN,EAAiBC,GAEnB,YADA8B,EAAcQ,QAAQtC,EAAQQ,IAIhC,MAAML,EAAMD,KAAKC,MACX8I,EAAazE,EAAmBmC,QAAQuC,IAAIlJ,EAAQQ,IAC1D,GAAIyI,GAAc9I,EAAM8I,EAAavF,EAEnC,YADA5B,EAAcS,UAAUvC,EAAQQ,IAIlCgE,EAAmBmC,QAAQwC,IAAInJ,EAAQQ,GAAIL,GAC3C4D,GAAY0B,GAASjC,EAAoB,CAACxD,GAAW,IAAIyF,EAAMzF,IAChE,CAAC,MAAOyH,GACP,MAAM5F,EAAQ,qCACdC,EAAYD,GACZ+E,EAAgB/E,EAClB,IAEF,CACEnC,EACA0F,EACA5B,EACAoD,EACA7B,EACArB,IAIE0F,EAAe5D,EAAAA,aAAY,KAC/B,MAAM6D,EAAK/E,EAAQqC,QACf0C,GAA0B,mBAAbA,EAAGC,QAClBD,EAAGE,oBAAoB,UAAWZ,GAClCU,EAAGC,QACHxH,EAAcG,OAAOkD,GACrBb,EAAQqC,QAAU,QAEnB,CAACgC,EAAexD,IAqFnB,OAnFAqE,EAAAA,WAAU,KACR,GAAgC,oBAArBC,iBAAkC,CAC3C,MAAM5H,EACJ,yFAGF,OAFAC,EAAYD,QACZ+E,EAAgB/E,EAElB,CAEA,MAAMwH,EAAK,IAAII,iBAAiBtE,GAchC,OAbAb,EAAQqC,QAAU0C,EAClBvH,EAAcC,QAAQoD,GAEtBkE,EAAGK,iBAAiB,WAAYd,IAE1BxB,MAAMuC,QAAQf,EAAMvH,MACtBuH,EAAMvH,KAAKuI,SAAS5J,IAClB2I,EAAc,CAAEtH,KAAMrB,OAGxB2I,EAAcC,MAGX,KACLQ,OAED,CAACjE,EAAqBwD,EAAe/B,IAExC4C,EAAAA,WAAU,KACR,GAAIjG,GAAoB,EAAG,OAE3B,MAAMsG,EAAWC,aAAY,KAC3BhI,EAAce,UACd,MAAMkH,EAASjG,EAASiE,OACxBnC,IACA9D,EAAcgB,UAAUiH,EAASjG,EAASiE,UACzCxE,GAEH,MAAO,WACLyG,cAAcH,GAEVlG,EAAoB,IACC,QAAvBlD,EAAAmF,EAAiBW,cAAM,IAAA9F,GAAAA,EAAAwJ,KAAArE,OAG1B,CAACrC,EAAkBqC,EAAkBjC,IAExC6F,EAAAA,WAAU,KACR,MAAMK,EAAWC,aAAY,KAC3B,MAAM3J,EAAMD,KAAKC,MACjB,IAAK,MAAO+J,EAAKvK,KAAc6E,EAAmBmC,QAAQwD,UACpDhK,EAAMR,GAAa+D,GACrBc,EAAmBmC,QAAQyD,OAAOF,KAGrC,KAEH,MAAO,IAAMF,cAAcH,KAC1B,CAACnG,IAEJ8F,EAAAA,WAAU,IACD,KAEL,GAAI5E,EAAoB+B,QAAQoB,OAAS,GAAKzD,EAAQqC,UAAY9B,EAAiB8B,QAAS,CAC1F,IACErC,EAAQqC,QAAQQ,YAAYvC,EAAoB+B,QACjD,CAAC,MAAOc,GACP,MAAM5F,EAAQ,yBACdC,EAAYD,GACZ+E,EAAgB/E,EAClB,CACA+C,EAAoB+B,QAAU,GAE9BL,YAAW,QAAU,EACvB,CACI3B,EAAmBgC,UACrBN,aAAa1B,EAAmBgC,SAChChC,EAAmBgC,QAAU,MAE/B9B,EAAiB8B,SAAU,IAE5B,IAEI,CACL7F,YAAaqE,EACbrB,WACAG,eACAG,mBACAyC,OACAM,cACAQ,wBACAO,oBACAM,mBACA3G,QACAuH,iBCjcEiB,EAA0BC,EAAaA,mBAAoC3J,GAMjF,MAAM4J,UAAsBC,EAAMC,UAAlCC,WAAAA,uBACEC,KAAAC,MAAQ,CAAEC,UAAU,EAgBtB,CAdE,+BAAOC,GACL,MAAO,CAAED,UAAU,EACrB,CAEAE,iBAAAA,CAAkBlJ,GAChBF,QAAQE,MAAM,0BAA2BA,EAC3C,CAEAmJ,MAAAA,GACE,OAAIL,KAAKC,MAAMC,SACNI,EAAAA,4DAEFN,KAAKO,MAAMC,QACpB,4BAQiEC,EAAGD,WAAUrK,kBAC9E,MAAMgD,SAAEA,EAAUjC,MAAOwJ,GAAchI,EAAoBvC,IAEpDe,EAAOsC,GAAYqG,EAAMxG,SAAwB,MAClDM,EAAUC,EAAMA,OAA0B,MAEhDiF,EAAAA,WAAU,KACR,GAAgC,oBAArBC,iBAIT,YAHAtF,EACE,0FAIJ,MAAMkF,EAAK,IAAII,iBAAiB3I,GAGhC,OAFAwD,EAAQqC,QAAU0C,EAEX,KACLA,EAAGC,WAEJ,CAACxI,IAEJ,MAAMwK,EAAQxG,EAAAA,SACZ,KAAO,CAAEhB,WAAUjC,MAAOA,GAASwJ,EAAW/G,QAASA,EAAQqC,WAC/D,CAAC7C,EAAUjC,EAAOwJ,IAGpB,OACEJ,EAAAA,IAACV,EACC,CAAAY,SAAAF,EAAAA,IAACZ,EAAwBkB,SAAS,CAAAD,MAAOA,EAAKH,SAAGA,kEAKnBK,KAClC,MAAMC,EAAUC,EAAUA,WAACrB,GAC3B,IAAKoB,EACH,MAAM,IAAIE,MAAM,gEAElB,OAAOF"}
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 e,{useState as r,useRef as t,useMemo as n,useCallback as s,useEffect as o,createContext as c,useContext as a}from"react";import{jsx as i}from"react/jsx-runtime";const l="__INTERNAL__",u=()=>Math.random().toString(36).substr(2,9),d=(e,r)=>{const t=`${u()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},p=e=>!!e.expirationDate&&e.expirationDate<Date.now(),g=(e,r,t,n={})=>{var s;const o=Date.now();return{id:d(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(s=n.expirationDate)&&void 0!==s?s:n.expirationDuration?o+n.expirationDuration:void 0}},h=(e,r,t="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${t}`}`);return`${l}:${e}:${n}`},f=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${l}:`)&&"string"==typeof e.source,m=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const n=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(n,r,t||"");break;case"warn":console.warn(n,r,t||"");break;case"error":console.error(n,r,t||"")}},y={created:e=>m("info","Channel created:",e),closed:e=>m("info","Channel closed:",e)},v={sent:e=>m("info","Message sent:",e),received:e=>m("info","Message received:",e),cleared:e=>m("info","Message cleared:",e),expired:e=>m("info","Message expired:",e),duplicate:e=>m("warn","Duplicate message ignored:",e),allSentCleared:()=>m("info","All sent messages cleared"),allReceivedCleared:()=>m("info","All received messages cleared"),ignored:e=>m("info","Message ignored due to type filter:",e)},E={inProgress:()=>m("warn","Ping already in progress. Skipping call.")},S={started:()=>m("info","Cleanup started"),completed:e=>m("info","Cleanup completed:",{removedCount:e})},b=e=>m("error","Error:",e),P="CLEAR_SENT_MESSAGES",w="PING",M="PONG";let C;if("test"===process.env.NODE_ENV)try{C=require("react-dom").flushSync}catch(e){}const N=(e,c={})=>{const{sourceName:a,cleaningInterval:i=1e3,keepLatestMessage:l=!1,registeredTypes:d=[],namespace:m="",deduplicationTTL:N=3e5,cleanupDebounceMs:T=0,batchingDelayMs:D=20,excludedBatchMessageTypes:A=[]}=c,[B,$]=r([]),[_,G]=r([]),[x,I]=r(null),[L,O]=r(!1),R=t(null),k=t(new Map),j=t(null),F=t(null),q=t([]),J=t(!1),U=n((()=>a||`tab-${u()}`),[a]),V=n((()=>({CLEAR_SENT_MESSAGES:h(P,e,m),PING:h(w,e,m),PONG:h(M,e,m)})),[e,m]),W=n((()=>m?`${e}-${m}`:e),[e,m]),z=n((()=>d),[JSON.stringify(d)]),H=s((()=>{$((e=>e.filter((e=>!p(e)))))}),[]),K=t(T>0?((e,r)=>{let t,n=null,s=null;const o=(...o)=>{s=o,null!==n&&clearTimeout(n),n=setTimeout((()=>{n=null,null!==s&&(t=e(...s),s=null)}),r)};return o.cancel=()=>{null!==n&&(clearTimeout(n),n=null,s=null)},o.flush=()=>(null!==n&&(clearTimeout(n),n=null,null!==s&&(t=e(...s),s=null)),t),o})(H,T):Object.assign(H,{cancel:()=>{}})).current,Q=s((e=>{I(e),setTimeout((()=>I(null)),3e3)}),[]),X=s(((e=300)=>{if(L)return E.inProgress(),Promise.resolve([]);if(!R.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),Q(e),Promise.resolve([])}C?C((()=>O(!0))):O(!0);const r=new Set;return j.current=r,R.current.postMessage(g(V.PING,null,U)),new Promise((t=>{setTimeout((()=>{O(!1),j.current===r&&(j.current=null),t(Array.from(r))}),e)}))}),[V.PING,U,Q,L,C]),Y=s(((e,r,t={})=>{const n=R.current;if(!n){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),void Q(e)}const s=g(e,r,U,t);if(!D||D<0||A.includes(e))try{n.postMessage(s)}catch(e){const r="Failed to send message";b(r),Q(r),J.current=!0}else q.current.push(s),F.current||(F.current=setTimeout((()=>{if(J.current)return q.current=[],void(F.current=null);try{n.postMessage(q.current)}catch(e){const r="Failed to send message";b(r),Q(r),J.current=!0}q.current=[],F.current=null}),D));v.sent(s),G((e=>[...e,s]))}),[U,Q,D,A]),Z=s(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);$((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[]))}),[]),ee=s(((e={})=>{var r,t,n;const{ids:s=[],types:o=[],sync:c=!1}=null!=e?e:{};G((e=>s.length>0||o.length>0?e.filter((e=>{if(e.source!==U)return!0;const r=0===s.length||s.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),c&&(null===(r=R.current)||void 0===r||r.postMessage(g(V.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},U)))}),[]),re=s(((e={})=>{const{source:r,type:t}=e;for(let e=B.length-1;e>=0;e--){const n=B[e],s=!r||n.source===r,o=!t||n.type===t;if(s&&o)return n}return null}),[B]),te=s((e=>{var r;try{const t=e.data;if(v.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===U)return;if(f(t)){if(t.type===V.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void $((n=>[...n.filter((n=>{if(n.source!==t.source)return!0;const s=0===e.length||e.includes(n.id),o=0===r.length||r.includes(n.type);return!(s&&o)}))]))}if(t.type===V.PING)return void(null===(r=R.current)||void 0===r||r.postMessage(g(V.PONG,null,U)));if(t.type===V.PONG){const e=t.source,r=j.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(z.length>0&&!z.includes(t.type))return void v.ignored(t.type);if(p(t))return void v.expired(t.id);const n=Date.now(),s=k.current.get(t.id);if(s&&n-s<N)return void v.duplicate(t.id);k.current.set(t.id,n),$((e=>l?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";b(r),Q(r)}}),[U,z,l,Q,V,N]),ne=s((()=>{const e=R.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",te),e.close(),y.closed(W),R.current=null)}),[te,W]);return o((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),void Q(e)}const e=new BroadcastChannel(W);return R.current=e,y.created(W),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{te({data:e})})):te(e)})),()=>{ne()}}),[W,te,Q]),o((()=>{if(i<=0)return;const e=setInterval((()=>{S.started();const e=B.length;K(),S.completed(e-B.length)}),i);return()=>{var r;clearInterval(e),T>0&&(null===(r=K.cancel)||void 0===r||r.call(K))}}),[i,K,T]),o((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of k.current.entries())e-t>=N&&k.current.delete(r)}),6e4);return()=>clearInterval(e)}),[N]),o((()=>()=>{if(q.current.length>0&&R.current&&!J.current){try{R.current.postMessage(q.current)}catch(e){const r="Failed to send message";b(r),Q(r)}q.current=[],setTimeout((()=>{}),0)}F.current&&(clearTimeout(F.current),F.current=null),J.current=!1}),[]),{channelName:W,messages:B,sentMessages:_,isPingInProgress:L,ping:X,postMessage:Y,clearReceivedMessages:Z,clearSentMessages:ee,getLatestMessage:re,error:x,closeChannel:ne}},T=c(void 0);class D extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?i("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}const A=({children:r,channelName:s})=>{const{messages:c,error:a}=N(s),[l,u]=e.useState(null),d=t(null);o((()=>{if("undefined"==typeof BroadcastChannel)return void u("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return d.current=e,()=>{e.close()}}),[s]);const p=n((()=>({messages:c,error:l||a,channel:d.current})),[c,l,a]);return i(D,{children:i(T.Provider,{value:p,children:r})})},B=()=>{const e=a(T);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{A as BroadcastProvider,N as useBroadcastChannel,B as useBroadcastProvider};
1
+ import{useState as e,useRef as r,useMemo as t,useCallback as n,useEffect as s,createContext as 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
@@ -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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"}
@@ -20,5 +20,11 @@ export declare const debug: {
20
20
  started: () => void;
21
21
  completed: (removedCount: number) => void;
22
22
  };
23
- error: (error: string) => void;
23
+ error: (context: {
24
+ action: string;
25
+ channelName?: string;
26
+ type?: string;
27
+ source?: string;
28
+ originalError?: unknown;
29
+ }) => void;
24
30
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-broadcast-sync",
3
- "version": "1.5.1",
3
+ "version": "1.6.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",
@@ -1,37 +1,8 @@
1
- import React, { createContext, useContext, useEffect, useMemo, useRef } from 'react';
1
+ import React, { createContext, useContext } from 'react';
2
2
  import { useBroadcastChannel } from './hooks/useBroadcastChannel';
3
- import { BroadcastMessage } from './types/types';
3
+ import { BroadcastActions } from './types/types';
4
4
 
5
- interface BroadcastContextValue {
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 { messages, error: hookError } = useBroadcastChannel(channelName);
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
- <ErrorBoundary>
69
- <BroadcastChannelContext.Provider value={value}>{children}</BroadcastChannelContext.Provider>
70
- </ErrorBoundary>
16
+ <BroadcastChannelContext.Provider value={BroadcastChannelActions}>
17
+ {children}
18
+ </BroadcastChannelContext.Provider>
71
19
  );
72
20
  };
73
21
 
74
- export const useBroadcastProvider = (): BroadcastContextValue => {
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(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(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(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(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(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(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
- const bc = new BroadcastChannel(resolvedChannelName);
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(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 creates two channels - one in the provider and one in useBroadcastChannel
67
- expect(mockChannels).toHaveLength(2);
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('handles error boundary when child component throws', () => {
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
- const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {});
141
-
142
- render(
143
- <BroadcastProvider channelName="test-channel">
144
- <ThrowComponent />
145
- </BroadcastProvider>
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', () => {
@@ -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
- { removedCount: 5 }
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
- { removedCount: 2 }
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
  });
@@ -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:', { removedCount }),
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
  };