react-broadcast-sync 1.1.4 → 1.2.1

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,17 @@
1
+ ## [1.2.1](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.2.0...v1.2.1) (2025-06-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * added unit testing for same tab scenarios ([5e3df1d](https://github.com/IdanShalem/react-broadcast-sync/commit/5e3df1deab456565a09f0dfda84b21b526f157ba))
7
+
8
+ # [1.2.0](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.1.4...v1.2.0) (2025-06-08)
9
+
10
+
11
+ ### Features
12
+
13
+ * clearReceivedMessages and clearSentMessages improved logic ([92916d8](https://github.com/IdanShalem/react-broadcast-sync/commit/92916d80f3a79cadb2f34c11f3f9759f6d74f8b2))
14
+
1
15
  ## [1.1.4](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.1.3...v1.1.4) (2025-06-03)
2
16
 
3
17
 
package/README.md CHANGED
@@ -40,23 +40,23 @@ Easily sync UI state or user events across browser tabs in React apps — notifi
40
40
 
41
41
  ## Table of Contents
42
42
 
43
- - [Features](#-features)
44
- - [Demo App](#-demo-app)
45
- - [Installation](#-installation)
46
- - [Quick Start](#-quick-start)
47
- - [Advanced Usage](#️-advanced-usage)
48
- - [BroadcastProvider](#-using-broadcastprovider)
49
- - [API Reference](#-api-reference)
50
- - [Best Practices](#-best-practices)
51
- - [Common Use Cases](#-common-use-cases)
52
- - [Performance Considerations](#-performance-considerations)
53
- - [Troubleshooting](#-troubleshooting)
54
- - [Testing](#-testing)
55
- - [Browser Support](#-browser-support)
56
- - [Coming Soon](#-coming-soon)
57
- - [Versioning & Releases](#-versioning--releases)
58
- - [Contributing](#-contributing)
59
- - [License](#-license)
43
+ - [Features](#features)
44
+ - [Demo App](#demo-app)
45
+ - [Installation](#installation)
46
+ - [Quick Start](#quick-start)
47
+ - [Advanced Usage](#️advanced-usage)
48
+ - [BroadcastProvider](#using-broadcastprovider)
49
+ - [API Reference](#api-reference)
50
+ - [Best Practices](#best-practices)
51
+ - [Common Use Cases](#common-use-cases)
52
+ - [Performance Considerations](#performance-considerations)
53
+ - [Troubleshooting](#-roubleshooting)
54
+ - [Testing](#testing)
55
+ - [Browser Support](#browser-support)
56
+ - [Coming Soon](#coming-soon)
57
+ - [Versioning & Releases](#versioning--releases)
58
+ - [Contributing](#contributing)
59
+ - [License](#license)
60
60
 
61
61
  ## Features
62
62
 
@@ -118,7 +118,7 @@ pnpm add react-broadcast-sync
118
118
  import { useBroadcastChannel } from 'react-broadcast-sync';
119
119
 
120
120
  function MyComponent() {
121
- const { messages, postMessage, clearMessage } = useBroadcastChannel('my-channel');
121
+ const { messages, postMessage, clearReceivedMessages } = useBroadcastChannel('my-channel');
122
122
 
123
123
  const handleSend = () => {
124
124
  postMessage('greeting', { text: 'Hello from another tab!' });
@@ -130,7 +130,7 @@ function MyComponent() {
130
130
  {messages.map(msg => (
131
131
  <div key={msg.id}>
132
132
  {msg.message.text}
133
- <button onClick={() => clearMessage(msg.id)}>Clear</button>
133
+ <button onClick={() => clearReceivedMessages({ ids: [msg.id] })}>Clear</button>
134
134
  </div>
135
135
  ))}
136
136
  </>
@@ -148,9 +148,8 @@ const {
148
148
  messages,
149
149
  sentMessages,
150
150
  postMessage,
151
- clearMessage,
152
- clearAllMessages,
153
- clearSentMessage,
151
+ clearReceivedMessages,
152
+ clearSentMessages,
154
153
  error,
155
154
  } = useBroadcastChannel('my-channel', {
156
155
  sourceName: 'my-tab',
@@ -211,9 +210,8 @@ const {
211
210
  messages,
212
211
  sentMessages,
213
212
  postMessage,
214
- clearMessage,
215
- clearAllMessages,
216
- clearSentMessage,
213
+ clearReceivedMessages,
214
+ clearSentMessages,
217
215
  error,
218
216
  } = useBroadcastChannel(channelName, options);
219
217
  ```
@@ -252,9 +250,8 @@ interface BroadcastActions {
252
250
  messages: BroadcastMessage[]; // Received messages
253
251
  sentMessages: BroadcastMessage[]; // Messages sent by this instance
254
252
  postMessage: (type: string, content: any, options?: SendMessageOptions) => void;
255
- clearMessage: (id: string) => void;
256
- clearAllMessages: () => void;
257
- clearSentMessage: (id: string) => void;
253
+ clearReceivedMessages: (opts?: { ids?: string[]; types?: string[]; sources?: string[] }) => void;
254
+ clearSentMessages: (opts?: { ids?: string[]; types?: string[]; sync?: boolean }) => void;
258
255
  error: string | null; // Current error state
259
256
  }
260
257
  ```
@@ -263,16 +260,33 @@ interface BroadcastActions {
263
260
 
264
261
  Returns an object with:
265
262
 
266
- | Property | Type | Description |
267
- | -------------------- | -------------------- | ------------------------------------------------------ |
268
- | `channelName` | `string` | The resolved channel name (includes namespace) |
269
- | `messages` | `BroadcastMessage[]` | All received messages from other tabs |
270
- | `sentMessages` | `BroadcastMessage[]` | Messages sent from this tab |
271
- | `postMessage()` | `function` | Send a message to all tabs |
272
- | `clearMessage()` | `function` | Remove a message locally and notify others to clear it |
273
- | `clearAllMessages()` | `function` | Remove all messages locally and notify others |
274
- | `clearSentMessage()` | `function` | Remove a sent message without affecting others |
275
- | `error` | `string \| null` | Any runtime error from the channel |
263
+ | Property | Type | Description |
264
+ | ------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
265
+ | `channelName` | `string` | The resolved channel name (includes namespace) |
266
+ | `messages` | `BroadcastMessage[]` | All received messages from other tabs |
267
+ | `sentMessages` | `BroadcastMessage[]` | Messages sent from this tab |
268
+ | `postMessage()` | `function` | Send a message to all tabs |
269
+ | `clearReceivedMessages()` | `function` | Clear received messages. No filters ⇒ clear all. With filters, a message is deleted only if it matches **every** provided filter (`ids`, `types`, `sources`). Empty arrays act as wildcards. |
270
+ | `clearSentMessages()` | `function` | Clear messages this tab sent (same matching rules). Pass `sync: true` to broadcast the clear to other tabs. |
271
+ | `error` | `string \| null` | Any runtime error from the channel |
272
+
273
+ #### Clearing examples
274
+
275
+ ```tsx
276
+ // Clear everything we've received
277
+ clearReceivedMessages();
278
+
279
+ // Clear all messages we sent and broadcast the clear to other tabs
280
+ clearSentMessages({ sync: true });
281
+
282
+ // Clear by id or by type (OR inside each array)
283
+ clearReceivedMessages({ ids: ['123'] }); // id match
284
+ clearReceivedMessages({ types: ['alert', 'chat'] }); // type match
285
+
286
+ // Combine filters (logical AND between filters)
287
+ // Removes messages whose id is '123' AND type is 'alert'
288
+ clearSentMessages({ ids: ['123'], types: ['alert'] });
289
+ ```
276
290
 
277
291
  #### Send Options:
278
292
 
@@ -378,9 +392,9 @@ function TabStatus() {
378
392
  - Implement debouncing for rapid state changes
379
393
  - Consider using `expirationDuration` for temporary messages
380
394
 
381
- ### Memory Management\*\*
395
+ ### Memory Management
382
396
 
383
- - Clear messages when they're no longer needed
397
+ - Clear messages when they're no longer needed using `clearReceivedMessages` / `clearSentMessages`
384
398
  - Use `cleaningInterval` to automatically remove expired messages
385
399
  - Implement proper cleanup in component unmount
386
400
 
@@ -421,12 +435,6 @@ function ChatComponent() {
421
435
  - For infrequent updates: 0ms (no debounce)
422
436
  - Adjust `cleaningInterval` based on your message expiration needs
423
437
 
424
- ### Memory Management
425
-
426
- - Clear messages when they're no longer needed using `clearMessage` or `clearAllMessages`
427
- - Use message expiration for temporary data
428
- - Consider using `keepLatestMessage: true` for status updates to prevent memory buildup
429
-
430
438
  ## Troubleshooting
431
439
 
432
440
  ### Common Issues
@@ -22,7 +22,7 @@
22
22
  "@mui/material": "^5.15.10",
23
23
  "framer-motion": "^11.0.5",
24
24
  "react": "^18.2.0",
25
- "react-broadcast-sync": "1.0.0",
25
+ "react-broadcast-sync": "^1.1.3",
26
26
  "react-dom": "^18.2.0"
27
27
  },
28
28
  "devDependencies": {
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(/=+$/,"")},a=e=>!!e.expirationDate&&e.expirationDate<Date.now(),o=(e,r,s="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${s}`}`);return`${t}:${e}:${n}`},c=e=>e.startsWith(`${t}:`),i=(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||"")}},l={created:e=>i("info","Channel created:",e),closed:e=>i("info","Channel closed:",e)},u={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)},d={started:()=>i("info","Cleanup started"),completed:e=>i("info","Cleanup completed:",{removedCount:e})},p=e=>i("error","Error:",e),f="CLEAR_MESSAGE",E="CLEAR_ALL_MESSAGES",v=(r,t={})=>{const{sourceName:i,cleaningInterval:v=1e3,keepLatestMessage:S=!1,registeredTypes:h=[],namespace:C="",deduplicationTTL:g=3e5,cleanupDebounceMs:A=0}=t,[m,M]=e.useState([]),[L,b]=e.useState([]),[_,y]=e.useState(null),R=e.useRef(null),w=e.useRef(new Map),x=e.useRef(i||`tab-${s()}`).current,D=e.useRef({CLEAR_MESSAGE:o(f,r,C),CLEAR_ALL_MESSAGES:o(E,r,C)}).current,B=e.useMemo((()=>`${r}-${C}`),[r,C]),$=e.useCallback((()=>{M((e=>e.filter((e=>!a(e)))))}),[]),G=e.useRef(A>0?((e,r)=>{let t,s=null,n=null;const a=(...a)=>{n=a,null!==s&&clearTimeout(s),s=setTimeout((()=>{s=null,null!==n&&(t=e(...n),n=null)}),r)};return a.cancel=()=>{null!==s&&(clearTimeout(s),s=null,n=null)},a.flush=()=>(null!==s&&(clearTimeout(s),s=null,null!==n&&(t=e(...n),n=null)),t),a})($,A):Object.assign($,{cancel:()=>{}})).current,k=e.useCallback((e=>{y(e),setTimeout((()=>y(null)),3e3)}),[]),T=e.useCallback((e=>{var r;M((r=>r.filter((r=>r.id!==e)))),b((r=>r.filter((r=>r.id!==e)))),null===(r=R.current)||void 0===r||r.postMessage({id:e,type:D.CLEAR_MESSAGE,source:x}),u.cleared(e)}),[x,D.CLEAR_MESSAGE]),P=e.useCallback((()=>{var e;M([]),b([]),null===(e=R.current)||void 0===e||e.postMessage({id:D.CLEAR_ALL_MESSAGES,type:D.CLEAR_ALL_MESSAGES,source:x})}),[x,D.CLEAR_ALL_MESSAGES]),j=e.useCallback((e=>{var r;b((r=>r.filter((r=>r.id!==e)))),null===(r=R.current)||void 0===r||r.postMessage({id:e,type:D.CLEAR_MESSAGE,source:x})}),[x,D.CLEAR_MESSAGE]),I=e.useCallback(((e,r,t={})=>{const s=R.current;if(!s){const e="Channel not available";return p(e),void k(e)}try{const a=((e,r,t,s={})=>{var a;const o=Date.now();return{id:n(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(a=s.expirationDate)&&void 0!==a?a:s.expirationDuration?o+s.expirationDuration:void 0}})(e,r,x,t);s.postMessage(a),u.sent(a),b((e=>[...e,a]))}catch(e){const r="Failed to send message";p(r),k(r)}}),[x,k]),N=e.useCallback((e=>{try{const r=e.data;if(u.received(r),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(r))return;if(r.source===x)return;if(!c(r.type)&&h.length>0&&!h.includes(r.type))return;if(a(r))return void u.expired(r.id);if((e=>e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.source&&"string"==typeof e.type&&c(e.type))(r)){if(r.type===D.CLEAR_MESSAGE)return void M((e=>e.filter((e=>!(e.id===r.id&&e.source===r.source)))));if(r.type===D.CLEAR_ALL_MESSAGES)return void M((e=>e.filter((e=>e.source!==r.source))))}const t=Date.now(),s=w.current.get(r.id);if(s&&t-s<g)return void u.duplicate(r.id);w.current.set(r.id,t),M((e=>S?[r]:[...e,r]))}catch(e){const r="Error processing broadcast message";p(r),k(r)}}),[x,h,S,k,D,g]);return e.useEffect((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return p(e),void k(e)}const e=new BroadcastChannel(B);return R.current=e,l.created(B),e.addEventListener("message",N),()=>{e.removeEventListener("message",N),e.close(),l.closed(B)}}),[B,N,k]),e.useEffect((()=>{if(v<=0)return;const e=setInterval((()=>{d.started();const e=m.length;G(),d.completed(e-m.length)}),v);return()=>{var r;clearInterval(e),A>0&&(null===(r=G.cancel)||void 0===r||r.call(G))}}),[v,G,A]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of w.current.entries())e-t>=g&&w.current.delete(r)}),6e4);return()=>clearInterval(e)}),[g]),{channelName:B,messages:m,sentMessages:L,postMessage:I,clearMessage:T,clearAllMessages:P,clearSentMessage:j,error:_}},S=e.createContext(void 0);class h 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:a}=v(s),[o,c]=e.useState(null),i=e.useRef(null);e.useEffect((()=>{if("undefined"==typeof BroadcastChannel)return void c("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return i.current=e,()=>{e.close()}}),[s]);const l=e.useMemo((()=>({messages:n,error:o||a,channel:i.current})),[n,o,a]);return r.jsx(h,{children:r.jsx(S.Provider,{value:l,children:t})})},exports.useBroadcastChannel=v,exports.useBroadcastProvider=()=>{const r=e.useContext(S);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__",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(),a=(e,r,t,s={})=>{var o;const a=Date.now();return{id:n(t,a),type:e,message:r,timestamp:a,source:t,expirationDate:null!==(o=s.expirationDate)&&void 0!==o?o:s.expirationDuration?a+s.expirationDuration:void 0}},c=(e,r,s="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${s}`}`);return`${t}:${e}:${n}`},l=e=>e.startsWith(`${t}:`),i=(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||"")}},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")},p={started:()=>i("info","Cleanup started"),completed:e=>i("info","Cleanup completed:",{removedCount:e})},f=e=>i("error","Error:",e),h="CLEAR_SENT_MESSAGES",g=(r,t={})=>{const{sourceName:n,cleaningInterval:i=1e3,keepLatestMessage:g=!1,registeredTypes:v=[],namespace:m="",deduplicationTTL:E=3e5,cleanupDebounceMs:y=0}=t,[C,b]=e.useState([]),[S,M]=e.useState([]),[w,x]=e.useState(null),B=e.useRef(null),D=e.useRef(new Map),$=e.useRef(n||`tab-${s()}`).current,A=e.useRef({CLEAR_SENT_MESSAGES:c(h,r,m)}).current,R=e.useMemo((()=>`${r}-${m}`),[r,m]),T=e.useCallback((()=>{b((e=>e.filter((e=>!o(e)))))}),[]),_=e.useRef(y>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})(T,y):Object.assign(T,{cancel:()=>{}})).current,k=e.useCallback((e=>{x(e),setTimeout((()=>x(null)),3e3)}),[]),P=e.useCallback(((e,r,t={})=>{const s=B.current;if(!s){const e="Channel not available";return f(e),void k(e)}try{const n=a(e,r,$,t);s.postMessage(n),d.sent(n),M((e=>[...e,n]))}catch(e){const r="Failed to send message";f(r),k(r)}}),[$,k]),L=e.useCallback(((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)))):[]))}),[]),N=e.useCallback(((e={})=>{var r,t,s;const{ids:n=[],types:o=[],sync:c=!1}=null!=e?e:{};M((e=>n.length>0||o.length>0?e.filter((e=>{if(e.source!==$)return!0;const r=0===n.length||n.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),c&&(null===(r=B.current)||void 0===r||r.postMessage(a(A.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(s=e.types)&&void 0!==s?s:[]},$)))}),[]),j=e.useCallback((e=>{try{const r=e.data;if(d.received(r),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(r))return;if(r.source===$)return;if(!l(r.type)&&v.length>0&&!v.includes(r.type))return;if(o(r))return void d.expired(r.id);if((e=>e&&"object"==typeof e&&"string"==typeof e.type&&l(e.type)&&"string"==typeof e.source)(r)&&r.type===A.CLEAR_SENT_MESSAGES){const{ids:e=[],types:t=[]}=r.message||{};return void b((s=>s.filter((s=>{if(s.source!==r.source)return!0;const n=0===e.length||e.includes(s.id),o=0===t.length||t.includes(s.type);return!(n&&o)}))))}const t=Date.now(),s=D.current.get(r.id);if(s&&t-s<E)return void d.duplicate(r.id);D.current.set(r.id,t),b((e=>g?[r]:[...e,r]))}catch(e){const r="Error processing broadcast message";f(r),k(r)}}),[$,v,g,k,A,E]);return e.useEffect((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return f(e),void k(e)}const e=new BroadcastChannel(R);return B.current=e,u.created(R),e.addEventListener("message",j),()=>{e.removeEventListener("message",j),e.close(),u.closed(R)}}),[R,j,k]),e.useEffect((()=>{if(i<=0)return;const e=setInterval((()=>{p.started();const e=C.length;_(),p.completed(e-C.length)}),i);return()=>{var r;clearInterval(e),y>0&&(null===(r=_.cancel)||void 0===r||r.call(_))}}),[i,_,y]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of D.current.entries())e-t>=E&&D.current.delete(r)}),6e4);return()=>clearInterval(e)}),[E]),{channelName:R,messages:C,sentMessages:S,postMessage:P,clearReceivedMessages:L,clearSentMessages:N,error:w}},v=e.createContext(void 0);class m 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}=g(s),[a,c]=e.useState(null),l=e.useRef(null);e.useEffect((()=>{if("undefined"==typeof BroadcastChannel)return void c("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return l.current=e,()=>{e.close()}}),[s]);const i=e.useMemo((()=>({messages:n,error:a||o,channel:l.current})),[n,a,o]);return r.jsx(m,{children:r.jsx(v.Provider,{value:i,children:t})})},exports.useBroadcastChannel=g,exports.useBroadcastProvider=()=>{const r=e.useContext(v);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","getInternalMessageType","baseType","channelName","namespace","hash","isInternalType","type","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","closed","sent","received","cleared","messageId","expired","duplicate","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","useBroadcastChannel","options","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","messages","setMessages","useState","sentMessages","setSentMessages","setError","channel","useRef","receivedMessageIds","Map","current","internalTypes","CLEAR_MESSAGE","CLEAR_ALL_MESSAGES","resolvedChannelName","useMemo","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","setErrorMessage","clearMessage","id","_a","postMessage","clearAllMessages","clearSentMessage","messageType","messageContent","channelCurrent","createMessage","content","expirationDuration","undefined","e","handleMessage","event","Boolean","isValidMessage","length","includes","isValidInternalClearMessage","receivedAt","get","set","useEffect","BroadcastChannel","bc","addEventListener","removeEventListener","close","interval","setInterval","before","clearInterval","call","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","isInternalType","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","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","messages","setMessages","useState","sentMessages","setSentMessages","setError","channel","useRef","receivedMessageIds","Map","current","internalTypes","CLEAR_SENT_MESSAGES","resolvedChannelName","useMemo","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","setErrorMessage","postMessage","messageType","messageContent","channelCurrent","e","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","includes","clearSentMessages","sync","idMatches","typeMatches","_b","_c","handleMessage","event","isValidMessage","isValidInternalClearMessage","receivedAt","get","set","useEffect","BroadcastChannel","bc","addEventListener","removeEventListener","close","interval","setInterval","before","clearInterval","call","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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"}
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 a,useContext as c}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(),E=(e,r,t="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${t}`}`);return`${l}:${e}:${n}`},f=e=>e.startsWith(`${l}:`),v=(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||"")}},h={created:e=>v("info","Channel created:",e),closed:e=>v("info","Channel closed:",e)},g={sent:e=>v("info","Message sent:",e),received:e=>v("info","Message received:",e),cleared:e=>v("info","Message cleared:",e),expired:e=>v("info","Message expired:",e),duplicate:e=>v("warn","Duplicate message ignored:",e)},S={started:()=>v("info","Cleanup started"),completed:e=>v("info","Cleanup completed:",{removedCount:e})},A=e=>v("error","Error:",e),m="CLEAR_MESSAGE",C="CLEAR_ALL_MESSAGES",L=(e,a={})=>{const{sourceName:c,cleaningInterval:i=1e3,keepLatestMessage:l=!1,registeredTypes:v=[],namespace:L="",deduplicationTTL:M=3e5,cleanupDebounceMs:_=0}=a,[y,b]=r([]),[w,D]=r([]),[R,$]=r(null),G=t(null),B=t(new Map),x=t(c||`tab-${u()}`).current,T=t({CLEAR_MESSAGE:E(m,e,L),CLEAR_ALL_MESSAGES:E(C,e,L)}).current,P=n((()=>`${e}-${L}`),[e,L]),I=s((()=>{b((e=>e.filter((e=>!p(e)))))}),[]),k=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})(I,_):Object.assign(I,{cancel:()=>{}})).current,N=s((e=>{$(e),setTimeout((()=>$(null)),3e3)}),[]),j=s((e=>{var r;b((r=>r.filter((r=>r.id!==e)))),D((r=>r.filter((r=>r.id!==e)))),null===(r=G.current)||void 0===r||r.postMessage({id:e,type:T.CLEAR_MESSAGE,source:x}),g.cleared(e)}),[x,T.CLEAR_MESSAGE]),O=s((()=>{var e;b([]),D([]),null===(e=G.current)||void 0===e||e.postMessage({id:T.CLEAR_ALL_MESSAGES,type:T.CLEAR_ALL_MESSAGES,source:x})}),[x,T.CLEAR_ALL_MESSAGES]),F=s((e=>{var r;D((r=>r.filter((r=>r.id!==e)))),null===(r=G.current)||void 0===r||r.postMessage({id:e,type:T.CLEAR_MESSAGE,source:x})}),[x,T.CLEAR_MESSAGE]),U=s(((e,r,t={})=>{const n=G.current;if(!n){const e="Channel not available";return A(e),void N(e)}try{const s=((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}})(e,r,x,t);n.postMessage(s),g.sent(s),D((e=>[...e,s]))}catch(e){const r="Failed to send message";A(r),N(r)}}),[x,N]),W=s((e=>{try{const r=e.data;if(g.received(r),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(r))return;if(r.source===x)return;if(!f(r.type)&&v.length>0&&!v.includes(r.type))return;if(p(r))return void g.expired(r.id);if((e=>e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.source&&"string"==typeof e.type&&f(e.type))(r)){if(r.type===T.CLEAR_MESSAGE)return void b((e=>e.filter((e=>!(e.id===r.id&&e.source===r.source)))));if(r.type===T.CLEAR_ALL_MESSAGES)return void b((e=>e.filter((e=>e.source!==r.source))))}const t=Date.now(),n=B.current.get(r.id);if(n&&t-n<M)return void g.duplicate(r.id);B.current.set(r.id,t),b((e=>l?[r]:[...e,r]))}catch(e){const r="Error processing broadcast message";A(r),N(r)}}),[x,v,l,N,T,M]);return o((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return A(e),void N(e)}const e=new BroadcastChannel(P);return G.current=e,h.created(P),e.addEventListener("message",W),()=>{e.removeEventListener("message",W),e.close(),h.closed(P)}}),[P,W,N]),o((()=>{if(i<=0)return;const e=setInterval((()=>{S.started();const e=y.length;k(),S.completed(e-y.length)}),i);return()=>{var r;clearInterval(e),_>0&&(null===(r=k.cancel)||void 0===r||r.call(k))}}),[i,k,_]),o((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of B.current.entries())e-t>=M&&B.current.delete(r)}),6e4);return()=>clearInterval(e)}),[M]),{channelName:P,messages:y,sentMessages:w,postMessage:U,clearMessage:j,clearAllMessages:O,clearSentMessage:F,error:R}},M=a(void 0);class _ 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 y=({children:r,channelName:s})=>{const{messages:a,error:c}=L(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:a,error:l||c,channel:d.current})),[a,l,c]);return i(_,{children:i(M.Provider,{value:p,children:r})})},b=()=>{const e=c(M);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{y as BroadcastProvider,L as useBroadcastChannel,b as useBroadcastProvider};
1
+ import e,{useState as r,useRef as t,useMemo as n,useCallback as s,useEffect as o,createContext as a,useContext as c}from"react";import{jsx as l}from"react/jsx-runtime";const i="__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(),h=(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}},g=(e,r,t="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${t}`}`);return`${i}:${e}:${n}`},f=e=>e.startsWith(`${i}:`),v=(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||"")}},m={created:e=>v("info","Channel created:",e),closed:e=>v("info","Channel closed:",e)},y={sent:e=>v("info","Message sent:",e),received:e=>v("info","Message received:",e),cleared:e=>v("info","Message cleared:",e),expired:e=>v("info","Message expired:",e),duplicate:e=>v("warn","Duplicate message ignored:",e),allSentCleared:()=>v("info","All sent messages cleared"),allReceivedCleared:()=>v("info","All received messages cleared")},E={started:()=>v("info","Cleanup started"),completed:e=>v("info","Cleanup completed:",{removedCount:e})},S=e=>v("error","Error:",e),C="CLEAR_SENT_MESSAGES",b=(e,a={})=>{const{sourceName:c,cleaningInterval:l=1e3,keepLatestMessage:i=!1,registeredTypes:d=[],namespace:v="",deduplicationTTL:b=3e5,cleanupDebounceMs:w=0}=a,[M,D]=r([]),[$,A]=r([]),[T,_]=r(null),B=t(null),x=t(new Map),L=t(c||`tab-${u()}`).current,N=t({CLEAR_SENT_MESSAGES:g(C,e,v)}).current,R=n((()=>`${e}-${v}`),[e,v]),P=s((()=>{D((e=>e.filter((e=>!p(e)))))}),[]),I=t(w>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})(P,w):Object.assign(P,{cancel:()=>{}})).current,k=s((e=>{_(e),setTimeout((()=>_(null)),3e3)}),[]),G=s(((e,r,t={})=>{const n=B.current;if(!n){const e="Channel not available";return S(e),void k(e)}try{const s=h(e,r,L,t);n.postMessage(s),y.sent(s),A((e=>[...e,s]))}catch(e){const r="Failed to send message";S(r),k(r)}}),[L,k]),j=s(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);D((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)))):[]))}),[]),O=s(((e={})=>{var r,t,n;const{ids:s=[],types:o=[],sync:a=!1}=null!=e?e:{};A((e=>s.length>0||o.length>0?e.filter((e=>{if(e.source!==L)return!0;const r=0===s.length||s.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),a&&(null===(r=B.current)||void 0===r||r.postMessage(h(N.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},L)))}),[]),F=s((e=>{try{const r=e.data;if(y.received(r),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(r))return;if(r.source===L)return;if(!f(r.type)&&d.length>0&&!d.includes(r.type))return;if(p(r))return void y.expired(r.id);if((e=>e&&"object"==typeof e&&"string"==typeof e.type&&f(e.type)&&"string"==typeof e.source)(r)&&r.type===N.CLEAR_SENT_MESSAGES){const{ids:e=[],types:t=[]}=r.message||{};return void D((n=>n.filter((n=>{if(n.source!==r.source)return!0;const s=0===e.length||e.includes(n.id),o=0===t.length||t.includes(n.type);return!(s&&o)}))))}const t=Date.now(),n=x.current.get(r.id);if(n&&t-n<b)return void y.duplicate(r.id);x.current.set(r.id,t),D((e=>i?[r]:[...e,r]))}catch(e){const r="Error processing broadcast message";S(r),k(r)}}),[L,d,i,k,N,b]);return o((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return S(e),void k(e)}const e=new BroadcastChannel(R);return B.current=e,m.created(R),e.addEventListener("message",F),()=>{e.removeEventListener("message",F),e.close(),m.closed(R)}}),[R,F,k]),o((()=>{if(l<=0)return;const e=setInterval((()=>{E.started();const e=M.length;I(),E.completed(e-M.length)}),l);return()=>{var r;clearInterval(e),w>0&&(null===(r=I.cancel)||void 0===r||r.call(I))}}),[l,I,w]),o((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of x.current.entries())e-t>=b&&x.current.delete(r)}),6e4);return()=>clearInterval(e)}),[b]),{channelName:R,messages:M,sentMessages:$,postMessage:G,clearReceivedMessages:j,clearSentMessages:O,error:T}},w=a(void 0);class M 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?l("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}const D=({children:r,channelName:s})=>{const{messages:a,error:c}=b(s),[i,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:a,error:i||c,channel:d.current})),[a,i,c]);return l(M,{children:l(w.Provider,{value:p,children:r})})},$=()=>{const e=c(w);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{D as BroadcastProvider,b as useBroadcastChannel,$ 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","getInternalMessageType","baseType","channelName","namespace","hash","isInternalType","type","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","closed","sent","received","cleared","messageId","expired","duplicate","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","useBroadcastChannel","options","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","messages","setMessages","useState","sentMessages","setSentMessages","setError","channel","useRef","receivedMessageIds","Map","current","internalTypes","CLEAR_MESSAGE","CLEAR_ALL_MESSAGES","resolvedChannelName","useMemo","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","setErrorMessage","clearMessage","id","_a","postMessage","clearAllMessages","clearSentMessage","messageType","messageContent","channelCurrent","createMessage","content","expirationDuration","undefined","e","handleMessage","event","Boolean","isValidMessage","length","includes","isValidInternalClearMessage","receivedAt","get","set","useEffect","BroadcastChannel","bc","addEventListener","removeEventListener","close","interval","setInterval","before","clearInterval","call","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","isInternalType","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","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","messages","setMessages","useState","sentMessages","setSentMessages","setError","channel","useRef","receivedMessageIds","Map","current","internalTypes","CLEAR_SENT_MESSAGES","resolvedChannelName","useMemo","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","setErrorMessage","postMessage","messageType","messageContent","channelCurrent","e","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","includes","clearSentMessages","sync","idMatches","typeMatches","_b","_c","handleMessage","event","isValidMessage","isValidInternalClearMessage","receivedAt","get","set","useEffect","BroadcastChannel","bc","addEventListener","removeEventListener","close","interval","setInterval","before","clearInterval","call","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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"}
@@ -43,6 +43,16 @@ export interface BroadcastMessage {
43
43
  /** Optional expiration timestamp */
44
44
  expirationDate?: number;
45
45
  }
46
+ export interface ClearOptions {
47
+ ids?: string[];
48
+ types?: string[];
49
+ }
50
+ export interface ClearReceivedMessagesOptions extends ClearOptions {
51
+ sources?: string[];
52
+ }
53
+ export interface ClearSentMessagesOptions extends ClearOptions {
54
+ sync?: boolean;
55
+ }
46
56
  /**
47
57
  * Actions and state provided by the broadcast channel hook
48
58
  */
@@ -55,12 +65,11 @@ export interface BroadcastActions {
55
65
  sentMessages: BroadcastMessage[];
56
66
  /** Function to send a message */
57
67
  postMessage: (messageType: string, messageContent: any, options?: SendMessageOptions) => void;
58
- /** Function to clear a specific message */
59
- clearMessage: (id: string) => void;
60
- /** Function to clear all messages */
61
- clearAllMessages: () => void;
62
- /** Function to clear a specific sent message */
63
- clearSentMessage: (id: string) => void;
68
+ /** Function to clear received messages */
69
+ clearReceivedMessages: (options?: ClearReceivedMessagesOptions) => void;
70
+ /** Function to clear sent messages */
71
+ clearSentMessages: (options?: ClearSentMessagesOptions) => void;
64
72
  /** Current error state */
65
73
  error: string | null;
66
74
  }
75
+ export type ClearMessage = 'CLEAR_SENT_MESSAGES';
@@ -1,7 +1,7 @@
1
1
  export declare const debug: {
2
2
  channel: {
3
- created: (channelName: string) => void;
4
- closed: (channelName: string) => void;
3
+ created: (name: string) => void;
4
+ closed: (name: string) => void;
5
5
  };
6
6
  message: {
7
7
  sent: (message: any) => void;
@@ -9,6 +9,8 @@ export declare const debug: {
9
9
  cleared: (messageId: string) => void;
10
10
  expired: (messageId: string) => void;
11
11
  duplicate: (messageId: string) => void;
12
+ allSentCleared: () => void;
13
+ allReceivedCleared: () => void;
12
14
  };
13
15
  cleanup: {
14
16
  started: () => void;
@@ -1,3 +1,4 @@
1
+ import { ClearMessage } from '../types/types';
1
2
  export declare const generateRandomPart: () => string;
2
3
  export declare const generateSourceName: () => string;
3
4
  export declare const generateMessageId: (source: string, timestamp: number) => string;
@@ -9,13 +10,9 @@ export declare const createMessage: (type: string, content: any, source: string,
9
10
  expirationDate?: number;
10
11
  expirationDuration?: number;
11
12
  }) => any;
12
- export declare const getInternalMessageType: (baseType: "CLEAR_MESSAGE" | "CLEAR_ALL_MESSAGES", channelName: string, namespace?: string) => string;
13
+ export declare const getInternalMessageType: (baseType: ClearMessage, channelName: string, namespace?: string) => string;
13
14
  export declare const isInternalType: (type: string) => boolean;
14
- export declare const isValidInternalClearMessage: (message: any) => message is {
15
- id: string;
16
- type: string;
17
- source: string;
18
- };
15
+ export declare const isValidInternalClearMessage: (message: any) => boolean;
19
16
  export declare const debounce: <T extends (...args: any[]) => any>(fn: T, wait: number) => ((...args: Parameters<T>) => void) & {
20
17
  cancel: () => void;
21
18
  flush: () => ReturnType<T> | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-broadcast-sync",
3
- "version": "1.1.4",
3
+ "version": "1.2.1",
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",