@motiadev/stream-client-react 0.0.7-build.20250529212805

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Motia
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,214 @@
1
+ # @motiadev/stream-client-react
2
+
3
+ Motia Stream Client React Package – Responsible for managing streams of data in React applications.
4
+
5
+ For more information about Motia Streams, please refer to the [Motia Streams documentation](https://motia.dev/docs).
6
+
7
+ ## Overview
8
+
9
+ `@motiadev/stream-client-react` provides a set of React utilities and hooks for integrating Motia's real-time streaming capabilities into your React applications. It enables you to subscribe to individual stream items, groups, and handle real-time events with idiomatic React patterns.
10
+
11
+ ---
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install @motiadev/stream-client-react
17
+ ```
18
+
19
+ ## Exports
20
+
21
+ - **Stream, StreamItemSubscription, StreamGroupSubscription**
22
+ (Re-exported from `@motiadev/stream-client-browser`)
23
+ - **MotiaStreamProvider**
24
+ React provider for initializing and supplying the stream context.
25
+ - **useMotiaStream**
26
+ Hook to access the current stream instance from context.
27
+ - **useStreamItem**
28
+ Hook to subscribe to a single stream item.
29
+ - **useStreamGroup**
30
+ Hook to subscribe to a group of stream items.
31
+ - **useStreamEventHandler**
32
+ Hook to attach event listeners to stream subscriptions.
33
+
34
+ ## Usage
35
+
36
+ ### 1. MotiaStreamProvider
37
+
38
+ Wrap your application (or a subtree) with `MotiaStreamProvider` to initialize the stream and provide it via context.
39
+
40
+ ```tsx
41
+ import { MotiaStreamProvider } from '@motiadev/stream-client-react'
42
+
43
+ const App = () => {
44
+ return (
45
+ <MotiaStreamProvider address="wss://your-stream-server">
46
+ <App />
47
+ </MotiaStreamProvider>
48
+ )
49
+ }
50
+ ```
51
+
52
+ **Props:**
53
+
54
+ - `address` (string): The WebSocket address of your Motia stream server.
55
+
56
+ ---
57
+
58
+ ### 2. useMotiaStream
59
+
60
+ Access the current stream instance anywhere within the provider.
61
+
62
+ ```tsx
63
+ import { useMotiaStream } from '@motiadev/stream-client-react'
64
+
65
+ const { stream } = useMotiaStream()
66
+ ```
67
+
68
+ ---
69
+
70
+ ### 3. useStreamItem
71
+
72
+ Subscribe to a single item in a stream and receive real-time updates.
73
+
74
+ ```tsx
75
+ import { useStreamItem } from '@motiadev/stream-client-react'
76
+
77
+ const { data, event } = useStreamItem<{ name: string }>({
78
+ /**
79
+ * The stream name from motia Server
80
+ */
81
+ streamName: 'users',
82
+ /**
83
+ * The id of the item to subscribe to
84
+ */
85
+ id: 'user-123',
86
+ })
87
+ ```
88
+
89
+ - `data`: The current value of the item (typed).
90
+ - `event`: The subscription object to subscribe to custom events. Check `useStreamEventHandler` for more information.
91
+
92
+ ---
93
+
94
+ ### 4. useStreamGroup
95
+
96
+ Subscribe to a group of items in a stream.
97
+
98
+ ```tsx
99
+ import { useStreamGroup } from '@motiadev/stream-client-react'
100
+
101
+ const { data, event } = useStreamGroup<{ name: string }>({
102
+ /**
103
+ * The stream name from motia Server
104
+ */
105
+ streamName: 'users',
106
+ /**
107
+ * The group id to subscribe to
108
+ */
109
+ groupId: 'admins',
110
+ })
111
+ ```
112
+
113
+ - `data`: Array of current group items.
114
+ - `event`: The group subscription object.
115
+
116
+ ---
117
+
118
+ ### 5. useStreamEventHandler
119
+
120
+ Attach custom event listeners to a stream subscription.
121
+
122
+ ```tsx
123
+ import { useStreamEventHandler } from '@motiadev/stream-client-react'
124
+
125
+ useStreamEventHandler(
126
+ {
127
+ event, // from useStreamItem or useStreamGroup
128
+ type: 'custom-event',
129
+ listener: (eventData) => {
130
+ // handle event
131
+ },
132
+ },
133
+ [
134
+ /* dependencies */
135
+ ],
136
+ )
137
+ ```
138
+
139
+ ---
140
+
141
+ ## API Reference
142
+
143
+ ### MotiaStreamProvider
144
+
145
+ - **Props:**
146
+ - `address: string` – WebSocket address for the stream server.
147
+ - `children: React.ReactNode`
148
+
149
+ ### useMotiaStream
150
+
151
+ - Returns `{ stream }` from context.
152
+
153
+ ### useStreamItem<TData>
154
+
155
+ - **Args:** `{ streamName: string, id: string }`
156
+ - **Returns:** `{ data: TData | null, event: StreamSubscription | null }`
157
+
158
+ ### useStreamGroup<TData>
159
+
160
+ - **Args:** `{ streamName: string, groupId: string }`
161
+ - **Returns:** `{ data: TData[], event: StreamSubscription | null }`
162
+
163
+ ### useStreamEventHandler
164
+
165
+ - **Args:**
166
+ - `{ event, type, listener }`
167
+ - `dependencies` (array): React dependency list
168
+
169
+ ---
170
+
171
+ ## Example
172
+
173
+ ```tsx
174
+ import { MotiaStreamProvider, useStreamItem, useStreamEventHandler } from '@motiadev/stream-client-react'
175
+
176
+ function UserComponent({ userId }) {
177
+ const { data, event } = useStreamItem<{ name: string }>({
178
+ streamName: 'users',
179
+ id: userId,
180
+ })
181
+
182
+ useStreamEventHandler(
183
+ {
184
+ event,
185
+ type: 'user-updated',
186
+ listener: (e) => alert('User updated!'),
187
+ },
188
+ [event],
189
+ )
190
+
191
+ if (!data) return <div>Loading...</div>
192
+ return <div>{data.name}</div>
193
+ }
194
+
195
+ export default function App() {
196
+ return (
197
+ <MotiaStreamProvider address="wss://your-stream-server">
198
+ <UserComponent userId="user-123" />
199
+ </MotiaStreamProvider>
200
+ )
201
+ }
202
+ ```
203
+
204
+ ---
205
+
206
+ ## Notes
207
+
208
+ - All hooks must be used within a `MotiaStreamProvider`.
209
+ - The library is designed to work seamlessly with Motia's event-driven architecture.
210
+ - For advanced stream management, refer to the [@motiadev/stream-client-browser](https://www.npmjs.com/package/@motiadev/stream-client-browser) documentation.
211
+
212
+ ## License
213
+
214
+ MIT
@@ -0,0 +1,8 @@
1
+ export { Stream } from '@motiadev/stream-client-browser';
2
+ export { StreamItemSubscription } from '@motiadev/stream-client-browser';
3
+ export { StreamGroupSubscription } from '@motiadev/stream-client-browser';
4
+ export { MotiaStreamProvider } from './src/motia-stream-provider';
5
+ export { useMotiaStream } from './src/use-motia-stream';
6
+ export { useStreamItem, type StreamItemArgs } from './src/use-stream-item';
7
+ export { useStreamGroup, type StreamGroupArgs } from './src/use-stream-group';
8
+ export { useStreamEventHandler } from './src/use-stream-event-handler';
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { Stream } from '@motiadev/stream-client-browser';
2
+ export { StreamItemSubscription } from '@motiadev/stream-client-browser';
3
+ export { StreamGroupSubscription } from '@motiadev/stream-client-browser';
4
+ export { MotiaStreamProvider } from './src/motia-stream-provider';
5
+ export { useMotiaStream } from './src/use-motia-stream';
6
+ export { useStreamItem } from './src/use-stream-item';
7
+ export { useStreamGroup } from './src/use-stream-group';
8
+ export { useStreamEventHandler } from './src/use-stream-event-handler';
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { Stream } from '@motiadev/stream-client-browser';
3
+ type MotiaStreamContextType = {
4
+ stream: Stream;
5
+ };
6
+ export declare const MotiaStreamContext: React.Context<MotiaStreamContextType>;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export const MotiaStreamContext = React.createContext({
3
+ stream: null,
4
+ });
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ type Props = React.PropsWithChildren<{
3
+ /**
4
+ * The address of the stream server.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * <MotiaStreamProvider address="ws://localhost:3000">
9
+ * <App />
10
+ * </MotiaStreamProvider>
11
+ */
12
+ address: string;
13
+ }>;
14
+ export declare const MotiaStreamProvider: React.FC<Props>;
15
+ export {};
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Stream } from '@motiadev/stream-client-browser';
3
+ import { useEffect, useState } from 'react';
4
+ import { MotiaStreamContext } from './motia-stream-context';
5
+ export const MotiaStreamProvider = ({ children, address }) => {
6
+ const [stream, setStream] = useState(null);
7
+ useEffect(() => {
8
+ const stream = new Stream(address);
9
+ setStream(stream);
10
+ return () => stream.close();
11
+ }, [address]);
12
+ if (!stream)
13
+ return null;
14
+ return _jsx(MotiaStreamContext.Provider, { value: { stream }, children: children });
15
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * A hook to get the stream context.
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * const { stream } = useMotiaStream()
7
+ * ```
8
+ */
9
+ export declare const useMotiaStream: () => {
10
+ stream: import("@motiadev/stream-client-browser").Stream;
11
+ };
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { MotiaStreamContext } from './motia-stream-context';
3
+ /**
4
+ * A hook to get the stream context.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const { stream } = useMotiaStream()
9
+ * ```
10
+ */
11
+ export const useMotiaStream = () => {
12
+ const context = React.useContext(MotiaStreamContext);
13
+ if (!context) {
14
+ throw new Error('useMotiaStream must be used within a MotiaStreamProvider');
15
+ }
16
+ return context;
17
+ };
@@ -0,0 +1,24 @@
1
+ import { StreamSubscription } from '@motiadev/stream-client-browser';
2
+ import { DependencyList } from 'react';
3
+ type UseStreamEventHandler = {
4
+ event: StreamSubscription | null;
5
+ type: string;
6
+ listener: (event: any) => void;
7
+ };
8
+ /**
9
+ * A hook to handle custom stream events.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const { event } = useStreamItem({ streamName: 'my-stream', id: '123' })
14
+ *
15
+ * const onEventHandled = (event: any) => {
16
+ * // this is going to be called whenever 'on-custom-event' is sent from the server
17
+ * console.log(event)
18
+ * }
19
+ *
20
+ * useStreamEventHandler({ event, type: 'on-custom-event', listener: onEventHandled }, [])
21
+ * ```
22
+ */
23
+ export declare const useStreamEventHandler: ({ event, type, listener }: UseStreamEventHandler, dependencies: DependencyList) => void;
24
+ export {};
@@ -0,0 +1,24 @@
1
+ import { useEffect } from 'react';
2
+ /**
3
+ * A hook to handle custom stream events.
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * const { event } = useStreamItem({ streamName: 'my-stream', id: '123' })
8
+ *
9
+ * const onEventHandled = (event: any) => {
10
+ * // this is going to be called whenever 'on-custom-event' is sent from the server
11
+ * console.log(event)
12
+ * }
13
+ *
14
+ * useStreamEventHandler({ event, type: 'on-custom-event', listener: onEventHandled }, [])
15
+ * ```
16
+ */
17
+ export const useStreamEventHandler = ({ event, type, listener }, dependencies) => {
18
+ useEffect(() => {
19
+ if (event) {
20
+ event.onEvent(type, listener);
21
+ return () => event.offEvent(type, listener);
22
+ }
23
+ }, [event, type, ...dependencies]);
24
+ };
@@ -0,0 +1,28 @@
1
+ import { StreamSubscription } from '@motiadev/stream-client-browser';
2
+ export type StreamGroupArgs = {
3
+ streamName: string;
4
+ groupId: string;
5
+ };
6
+ /**
7
+ * A hook to get a group of items from a stream.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * const { data } = useStreamGroup<{ id:string; name: string }>({
12
+ * streamName: 'my-stream',
13
+ * groupId: '123',
14
+ * })
15
+ *
16
+ * return (
17
+ * <div>
18
+ * {data.map((item) => (
19
+ * <div key={item.id}>{item.name}</div>
20
+ * ))}
21
+ * </div>
22
+ * )
23
+ * ```
24
+ */
25
+ export declare const useStreamGroup: <TData>(args?: StreamGroupArgs) => {
26
+ data: TData[];
27
+ event: StreamSubscription<unknown, unknown> | null;
28
+ };
@@ -0,0 +1,39 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { useMotiaStream } from './use-motia-stream';
3
+ /**
4
+ * A hook to get a group of items from a stream.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const { data } = useStreamGroup<{ id:string; name: string }>({
9
+ * streamName: 'my-stream',
10
+ * groupId: '123',
11
+ * })
12
+ *
13
+ * return (
14
+ * <div>
15
+ * {data.map((item) => (
16
+ * <div key={item.id}>{item.name}</div>
17
+ * ))}
18
+ * </div>
19
+ * )
20
+ * ```
21
+ */
22
+ export const useStreamGroup = (args) => {
23
+ const { stream } = useMotiaStream();
24
+ const [data, setData] = useState([]);
25
+ const [event, setEvent] = useState(null);
26
+ useEffect(() => {
27
+ if (!args?.streamName || !args?.groupId)
28
+ return;
29
+ const subscription = stream.subscribeGroup(args.streamName, args.groupId);
30
+ subscription.addChangeListener((data) => setData(data));
31
+ setEvent(subscription);
32
+ return () => {
33
+ setData([]);
34
+ setEvent(null);
35
+ subscription.close();
36
+ };
37
+ }, [stream, args?.streamName, args?.groupId]);
38
+ return { data, event };
39
+ };
@@ -0,0 +1,26 @@
1
+ import { StreamSubscription } from '@motiadev/stream-client-browser';
2
+ export type StreamItemArgs = {
3
+ streamName: string;
4
+ groupId: string;
5
+ id: string;
6
+ };
7
+ /**
8
+ * A hook to get a single item from a stream.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const { data } = useStreamItem<{ id:string; name: string }>({
13
+ * streamName: 'my-stream',
14
+ * groupId: '123',
15
+ * id: '123',
16
+ * })
17
+ *
18
+ * return (
19
+ * <div>{data?.name}</div>
20
+ * )
21
+ * ```
22
+ */
23
+ export declare const useStreamItem: <TData>(args?: StreamItemArgs) => {
24
+ data: TData | null;
25
+ event: StreamSubscription<unknown, unknown> | null;
26
+ };
@@ -0,0 +1,36 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { useMotiaStream } from './use-motia-stream';
3
+ /**
4
+ * A hook to get a single item from a stream.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const { data } = useStreamItem<{ id:string; name: string }>({
9
+ * streamName: 'my-stream',
10
+ * groupId: '123',
11
+ * id: '123',
12
+ * })
13
+ *
14
+ * return (
15
+ * <div>{data?.name}</div>
16
+ * )
17
+ * ```
18
+ */
19
+ export const useStreamItem = (args) => {
20
+ const { stream } = useMotiaStream();
21
+ const [data, setData] = useState(null);
22
+ const [event, setEvent] = useState(null);
23
+ useEffect(() => {
24
+ if (!args?.streamName || !args?.groupId || !args?.id)
25
+ return;
26
+ const subscription = stream.subscribeItem(args.streamName, args.groupId, args.id);
27
+ subscription.addChangeListener((data) => setData(data));
28
+ setEvent(subscription);
29
+ return () => {
30
+ setData(null);
31
+ setEvent(null);
32
+ subscription.close();
33
+ };
34
+ }, [stream, args?.streamName, args?.groupId, args?.id]);
35
+ return { data, event };
36
+ };
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@types+react@19.1.4/node_modules/@types/react/global.d.ts","../../../node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","../../../node_modules/.pnpm/@types+react@19.1.4/node_modules/@types/react/index.d.ts","../../../node_modules/.pnpm/@types+react@19.1.4/node_modules/@types/react/jsx-runtime.d.ts","../../stream-client-browser/dist/src/stream.types.d.ts","../../stream-client-browser/dist/src/stream-subscription.d.ts","../../stream-client-browser/dist/src/stream-group.d.ts","../../stream-client-browser/dist/src/stream-item.d.ts","../../stream-client-browser/dist/src/stream.d.ts","../../stream-client-browser/dist/index.d.ts","../src/motia-stream-context.ts","../src/use-motia-stream.ts","../src/use-stream-event-handler.ts","../src/use-stream-group.ts","../src/use-stream-item.ts","../src/motia-stream-provider.tsx","../index.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/index.d.ts"],"fileIdsList":[[70,110,113],[70,112,113],[113],[70,113,118,148],[70,113,114,119,125,126,133,145,156],[70,113,114,115,125,133],[70,113],[65,66,67,70,113],[70,113,116,157],[70,113,117,118,126,134],[70,113,118,145,153],[70,113,119,121,125,133],[70,112,113,120],[70,113,121,122],[70,113,125],[70,113,123,125],[70,112,113,125],[70,113,125,126,127,145,156],[70,113,125,126,127,140,145,148],[70,108,113,161],[70,108,113,121,125,128,133,145,156],[70,113,125,126,128,129,133,145,153,156],[70,113,128,130,145,153,156],[68,69,70,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],[70,113,125,131],[70,113,132,156],[70,113,121,125,133,145],[70,113,134],[70,113,135],[70,112,113,136],[70,110,111,112,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],[70,113,138],[70,113,139],[70,113,125,140,141],[70,113,140,142,157,159],[70,113,125,145,146,148],[70,113,147,148],[70,113,145,146],[70,113,148],[70,113,149],[70,110,113,145],[70,113,125,151,152],[70,113,151,152],[70,113,118,133,145,153],[70,113,154],[70,113,133,155],[70,113,128,139,156],[70,113,118,157],[70,113,145,158],[70,113,132,159],[70,113,160],[70,113,118,125,127,136,145,156,159,161],[70,113,145,162],[48,49,70,113],[50,70,113],[70,80,84,113,156],[70,80,113,145,156],[70,75,113],[70,77,80,113,153,156],[70,113,133,153],[70,113,163],[70,75,113,163],[70,77,80,113,133,156],[70,72,73,76,79,113,125,145,156],[70,80,87,113],[70,72,78,113],[70,80,101,102,113],[70,76,80,113,148,156,163],[70,101,113,163],[70,74,75,113,163],[70,80,113],[70,74,75,76,77,78,79,80,81,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,102,103,104,105,106,107,113],[70,80,95,113],[70,80,87,88,113],[70,78,80,88,89,113],[70,79,113],[70,72,75,80,113],[70,80,84,88,89,113],[70,84,113],[70,78,80,83,113,156],[70,72,77,80,87,113],[70,113,145],[70,75,80,101,113,161,163],[53,54,55,56,70,113],[52,53,70,113],[52,70,113],[54,55,70,113],[51,57,59,60,61,62,63,70,113],[50,51,57,70,113],[50,51,57,58,70,113],[50,51,58,70,113],[50,51,57,59,70,113]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"742d4b7b02ffc3ba3c4258a3d196457da2b3fec0125872fd0776c50302a11b9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"03566a51ebc848dec449a4ed69518e9f20caa6ac123fa32676aaaabe64adae8e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},"93f285846fd6501bb9310baa13821bd9fb4d709ec4b2ab30544ab11dc51bf869","49b138e621dc166e678f21f9afcfeb1bdbfc3810a5944030670c826b3bfb084e","6ea3acc0e7354d4f28fb935f19962f756c959fa0d975122af33d9f211e91c811","0816cd78eaf15b722679a20f21a29c0a9b8790b9a06c5eb123940894339241a7","96d9099372b5715558fc275d8722d181ab93824f3e629827d09378fe985e1829","5d30608101a1f15bb79325e877023b946aac1e9ad8ff4185894ba2d1d9cadd9f",{"version":"d216108c3c9315f90d187633f75a99703478a0297592cd91889fa22c6332109b","signature":"622f8af58a1b5edd521020b61ad2582b75c5ea6f77f17d97e157af796c253257"},{"version":"948b3eecb08ed5a67859de2b9c90c4efe4212a1ffd9bcf3cbae5c3bf4fa6c226","signature":"8cc77c494ff82de8872d26d2c42accff31bcfd95ccc030544218bb1bf46da749"},{"version":"f76e099b5a2939471a1147a3eae17285426af1320f816f2df01c2df2433bee95","signature":"0e8c8a31952b466159e42b414ad4e4b3dd214920a61581a7ff82c242bd37687d"},{"version":"1399e85c7862574e7b132013066f9bb54e062617933c50229f1a72070b096e02","signature":"4b05a596af016a4f16ab7c8c715e4bb33dc242b5322006d99223838f005e2000"},{"version":"512d7b95935ed38771853115b9386df9721eaf662f6ce67d357a908a4024b7a0","signature":"083c63c10517ac511f72c9a9d4f3b9c61a7def43dbe39357874e9d1e2de46985"},{"version":"644d8da377f3323fa75f4933eebd0df99c1a26412a96d1ee5e074d2dfd4f96b7","signature":"68ce2081a7d23011d22e824f2a469460fa9b5450b8fa28396cdb8ec14ecd25b0"},{"version":"e5c82050b5a6963b2bbcf4bb7600860c8575026802eda14e76968b85d8ef8955","signature":"cb4915aef5ae784e00563313453a32db92acc7ae70cb786e31c0c2f03dd5dc17"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"3b724a66c071d616203133f8d099a0cb881b0b43fd42e8621e611243c5f30cd6","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3fe4022ba1e738034e38ad9afacbf0f1f16b458ed516326f5bf9e4a31e9be1dc","impliedFormat":1},{"version":"a957197054b074bcdf5555d26286e8461680c7c878040d0f4e2d5509a7524944","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"b200675fd112ffef97c166d0341fb33f6e29e9f27660adde7868e95c5bc98beb","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a0a1dda070290b92da5a50113b73ecc4dd6bcbffad66e3c86503d483eafbadcf","impliedFormat":1},{"version":"59dcad36c4549175a25998f6a8b33c1df8e18df9c12ebad1dfb25af13fd4b1ce","impliedFormat":1},{"version":"9ba5b6a30cb7961b68ad4fb18dca148db151c2c23b8d0a260fc18b83399d19d3","impliedFormat":1},{"version":"3f3edb8e44e3b9df3b7ca3219ab539710b6a7f4fe16bd884d441af207e03cd57","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","impliedFormat":1},{"version":"8cf7e92bdb2862c2d28ba4535c43dc599cfbc0025db5ed9973d9b708dcbe3d98","affectsGlobalScope":true,"impliedFormat":1},{"version":"278e70975bd456bba5874eaee17692355432e8d379b809a97f6af0eee2b702d8","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"1dc73f8854e5c4506131c4d95b3a6c24d0c80336d3758e95110f4c7b5cb16397","affectsGlobalScope":true,"impliedFormat":1},{"version":"636302a00dfd1f9fe6e8e91e4e9350c6518dcc8d51a474e4fc3a9ba07135100b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"e1ce1d622f1e561f6cdf246372ead3bbc07ce0342024d0e9c7caf3136f712698","impliedFormat":1},{"version":"c878f74b6d10b267f6075c51ac1d8becd15b4aa6a58f79c0cfe3b24908357f60","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"27e4532aaaa1665d0dd19023321e4dc12a35a741d6b8e1ca3517fcc2544e0efe","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"8c2ad42d5d1a2e8e6112625767f8794d9537f1247907378543106f7ba6c7df90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"12e8ce658dd17662d82fb0509d2057afc5e6ee30369a2e9e0957eff725b1f11d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74736930d108365d7bbe740c7154706ccfb1b2a3855a897963ab3e5c07ecbf19","impliedFormat":1},{"version":"858f999b3e4a45a4e74766d43030941466460bf8768361d254234d5870480a53","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"63b05afa6121657f25e99e1519596b0826cda026f09372c9100dfe21417f4bd6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1}],"root":[[58,64]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"target":7,"useDefineForClassFields":true},"referencedMap":[[110,1],[111,1],[112,2],[70,3],[113,4],[114,5],[115,6],[65,7],[68,8],[66,7],[67,7],[116,9],[117,10],[118,11],[119,12],[120,13],[121,14],[122,14],[124,15],[123,16],[125,17],[126,18],[127,19],[109,20],[69,7],[128,21],[129,22],[130,23],[163,24],[131,25],[132,26],[133,27],[134,28],[135,29],[136,30],[137,31],[138,32],[139,33],[140,34],[141,34],[142,35],[143,7],[144,7],[145,36],[147,37],[146,38],[148,39],[149,40],[150,41],[151,42],[152,43],[153,44],[154,45],[155,46],[156,47],[157,48],[158,49],[159,50],[160,51],[161,52],[162,53],[48,7],[50,54],[51,55],[71,7],[49,7],[46,7],[47,7],[8,7],[9,7],[11,7],[10,7],[2,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[3,7],[20,7],[21,7],[4,7],[22,7],[26,7],[23,7],[24,7],[25,7],[27,7],[28,7],[29,7],[5,7],[30,7],[31,7],[32,7],[33,7],[6,7],[37,7],[34,7],[35,7],[36,7],[38,7],[7,7],[39,7],[44,7],[45,7],[40,7],[41,7],[42,7],[43,7],[1,7],[87,56],[97,57],[86,56],[107,58],[78,59],[77,60],[106,61],[100,62],[105,63],[80,64],[94,65],[79,66],[103,67],[75,68],[74,61],[104,69],[76,70],[81,71],[82,7],[85,71],[72,7],[108,72],[98,73],[89,74],[90,75],[92,76],[88,77],[91,78],[101,61],[83,79],[84,80],[93,81],[73,82],[96,73],[95,71],[99,7],[102,83],[57,84],[54,85],[55,85],[53,86],[56,87],[52,7],[64,88],[58,89],[63,90],[59,91],[60,89],[61,92],[62,92]],"latestChangedDtsFile":"./index.d.ts","version":"5.8.3"}
package/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ export { Stream } from '@motiadev/stream-client-browser'
2
+ export { StreamItemSubscription } from '@motiadev/stream-client-browser'
3
+ export { StreamGroupSubscription } from '@motiadev/stream-client-browser'
4
+ export { MotiaStreamProvider } from './src/motia-stream-provider'
5
+ export { useMotiaStream } from './src/use-motia-stream'
6
+ export { useStreamItem, type StreamItemArgs } from './src/use-stream-item'
7
+ export { useStreamGroup, type StreamGroupArgs } from './src/use-stream-group'
8
+ export { useStreamEventHandler } from './src/use-stream-event-handler'
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@motiadev/stream-client-react",
3
+ "description": "Motia Stream Client React Package – Responsible for managing streams of data.",
4
+ "version": "0.0.7-build.20250529212805",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "peerDependencies": {
9
+ "react": "^19.1.0"
10
+ },
11
+ "dependencies": {
12
+ "@motiadev/stream-client-browser": "0.0.7-build.20250529212805"
13
+ },
14
+ "devDependencies": {
15
+ "@types/react": "^19.0.7",
16
+ "typescript": "^5.7.2"
17
+ },
18
+ "scripts": {
19
+ "build": "rm -rf dist && tsc",
20
+ "lint": "eslint --config ../../eslint.config.js"
21
+ }
22
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react'
2
+ import { Stream } from '@motiadev/stream-client-browser'
3
+
4
+ type MotiaStreamContextType = {
5
+ stream: Stream
6
+ }
7
+
8
+ export const MotiaStreamContext = React.createContext<MotiaStreamContextType>({
9
+ stream: null as never,
10
+ })
@@ -0,0 +1,31 @@
1
+ import { Stream } from '@motiadev/stream-client-browser'
2
+ import React, { useEffect, useState } from 'react'
3
+ import { MotiaStreamContext } from './motia-stream-context'
4
+
5
+ type Props = React.PropsWithChildren<{
6
+ /**
7
+ * The address of the stream server.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * <MotiaStreamProvider address="ws://localhost:3000">
12
+ * <App />
13
+ * </MotiaStreamProvider>
14
+ */
15
+ address: string
16
+ }>
17
+
18
+ export const MotiaStreamProvider: React.FC<Props> = ({ children, address }) => {
19
+ const [stream, setStream] = useState<Stream | null>(null)
20
+
21
+ useEffect(() => {
22
+ const stream = new Stream(address)
23
+ setStream(stream)
24
+
25
+ return () => stream.close()
26
+ }, [address])
27
+
28
+ if (!stream) return null
29
+
30
+ return <MotiaStreamContext.Provider value={{ stream }}>{children}</MotiaStreamContext.Provider>
31
+ }
@@ -0,0 +1,20 @@
1
+ import React from 'react'
2
+ import { MotiaStreamContext } from './motia-stream-context'
3
+
4
+ /**
5
+ * A hook to get the stream context.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const { stream } = useMotiaStream()
10
+ * ```
11
+ */
12
+ export const useMotiaStream = () => {
13
+ const context = React.useContext(MotiaStreamContext)
14
+
15
+ if (!context) {
16
+ throw new Error('useMotiaStream must be used within a MotiaStreamProvider')
17
+ }
18
+
19
+ return context
20
+ }
@@ -0,0 +1,36 @@
1
+ import { StreamSubscription } from '@motiadev/stream-client-browser'
2
+ import { DependencyList, useEffect } from 'react'
3
+
4
+ type UseStreamEventHandler = {
5
+ event: StreamSubscription | null
6
+ type: string
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ listener: (event: any) => void
9
+ }
10
+
11
+ /**
12
+ * A hook to handle custom stream events.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const { event } = useStreamItem({ streamName: 'my-stream', id: '123' })
17
+ *
18
+ * const onEventHandled = (event: any) => {
19
+ * // this is going to be called whenever 'on-custom-event' is sent from the server
20
+ * console.log(event)
21
+ * }
22
+ *
23
+ * useStreamEventHandler({ event, type: 'on-custom-event', listener: onEventHandled }, [])
24
+ * ```
25
+ */
26
+ export const useStreamEventHandler = (
27
+ { event, type, listener }: UseStreamEventHandler,
28
+ dependencies: DependencyList,
29
+ ) => {
30
+ useEffect(() => {
31
+ if (event) {
32
+ event.onEvent(type, listener)
33
+ return () => event.offEvent(type, listener)
34
+ }
35
+ }, [event, type, ...dependencies])
36
+ }
@@ -0,0 +1,50 @@
1
+ import { useEffect, useState } from 'react'
2
+ import { useMotiaStream } from './use-motia-stream'
3
+ import { StreamSubscription } from '@motiadev/stream-client-browser'
4
+
5
+ export type StreamGroupArgs = {
6
+ streamName: string
7
+ groupId: string
8
+ }
9
+
10
+ /**
11
+ * A hook to get a group of items from a stream.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const { data } = useStreamGroup<{ id:string; name: string }>({
16
+ * streamName: 'my-stream',
17
+ * groupId: '123',
18
+ * })
19
+ *
20
+ * return (
21
+ * <div>
22
+ * {data.map((item) => (
23
+ * <div key={item.id}>{item.name}</div>
24
+ * ))}
25
+ * </div>
26
+ * )
27
+ * ```
28
+ */
29
+ export const useStreamGroup = <TData>(args?: StreamGroupArgs) => {
30
+ const { stream } = useMotiaStream()
31
+ const [data, setData] = useState<TData[]>([])
32
+ const [event, setEvent] = useState<StreamSubscription | null>(null)
33
+
34
+ useEffect(() => {
35
+ if (!args?.streamName || !args?.groupId) return
36
+
37
+ const subscription = stream.subscribeGroup(args.streamName, args.groupId)
38
+
39
+ subscription.addChangeListener((data) => setData(data as TData[]))
40
+ setEvent(subscription)
41
+
42
+ return () => {
43
+ setData([])
44
+ setEvent(null)
45
+ subscription.close()
46
+ }
47
+ }, [stream, args?.streamName, args?.groupId])
48
+
49
+ return { data, event }
50
+ }
@@ -0,0 +1,48 @@
1
+ import { StreamSubscription } from '@motiadev/stream-client-browser'
2
+ import { useEffect, useState } from 'react'
3
+ import { useMotiaStream } from './use-motia-stream'
4
+
5
+ export type StreamItemArgs = {
6
+ streamName: string
7
+ groupId: string
8
+ id: string
9
+ }
10
+
11
+ /**
12
+ * A hook to get a single item from a stream.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const { data } = useStreamItem<{ id:string; name: string }>({
17
+ * streamName: 'my-stream',
18
+ * groupId: '123',
19
+ * id: '123',
20
+ * })
21
+ *
22
+ * return (
23
+ * <div>{data?.name}</div>
24
+ * )
25
+ * ```
26
+ */
27
+ export const useStreamItem = <TData>(args?: StreamItemArgs) => {
28
+ const { stream } = useMotiaStream()
29
+ const [data, setData] = useState<TData | null>(null)
30
+ const [event, setEvent] = useState<StreamSubscription | null>(null)
31
+
32
+ useEffect(() => {
33
+ if (!args?.streamName || !args?.groupId || !args?.id) return
34
+
35
+ const subscription = stream.subscribeItem(args.streamName, args.groupId, args.id)
36
+
37
+ subscription.addChangeListener((data) => setData(data as TData))
38
+ setEvent(subscription)
39
+
40
+ return () => {
41
+ setData(null)
42
+ setEvent(null)
43
+ subscription.close()
44
+ }
45
+ }, [stream, args?.streamName, args?.groupId, args?.id])
46
+
47
+ return { data, event }
48
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": ".",
4
+ "paths": {
5
+ "@/*": [
6
+ "./src/*"
7
+ ]
8
+ },
9
+ "target": "ES2020",
10
+ "useDefineForClassFields": true,
11
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
12
+ "module": "ESNext",
13
+ "moduleResolution": "bundler",
14
+ "skipLibCheck": true,
15
+ "esModuleInterop": true,
16
+
17
+ "composite": true,
18
+ "declaration": true,
19
+ "isolatedModules": true,
20
+ "moduleDetection": "force",
21
+ "jsx": "react-jsx",
22
+ "outDir": "dist",
23
+
24
+ /* Linting */
25
+ "strict": true,
26
+ "noUnusedLocals": true,
27
+ "noUnusedParameters": true,
28
+ "noFallthroughCasesInSwitch": true
29
+ },
30
+ "include": ["src/**/*.ts", "src/**/*.tsx", "index.ts"]
31
+ }