@risingwave/wavelet-sdk 0.1.4 → 0.2.4

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.
@@ -0,0 +1,170 @@
1
+ import { WaveletError } from './types.js';
2
+ export class WaveletClient {
3
+ options;
4
+ baseUrl;
5
+ wsBaseUrl;
6
+ tokenProvider;
7
+ constructor(options) {
8
+ this.options = options;
9
+ // Normalize URLs
10
+ this.baseUrl = options.url.replace(/\/$/, '').replace(/^ws/, 'http');
11
+ this.wsBaseUrl = options.url.replace(/\/$/, '').replace(/^http/, 'ws');
12
+ if (typeof options.token === 'function') {
13
+ const fn = options.token;
14
+ this.tokenProvider = async () => {
15
+ const t = fn();
16
+ return t instanceof Promise ? t : t;
17
+ };
18
+ }
19
+ else if (typeof options.token === 'string') {
20
+ const t = options.token;
21
+ this.tokenProvider = async () => t;
22
+ }
23
+ else {
24
+ this.tokenProvider = null;
25
+ }
26
+ }
27
+ query(name) {
28
+ return {
29
+ get: (params) => this.getQuery(name, params),
30
+ subscribe: (handlers) => this.subscribeQuery(name, handlers),
31
+ };
32
+ }
33
+ /** @deprecated Use query() instead */
34
+ view(name) {
35
+ return this.query(name);
36
+ }
37
+ event(name) {
38
+ return {
39
+ emit: (data) => this.emitEvent(name, data),
40
+ emitBatch: (data) => this.emitBatch(name, data),
41
+ };
42
+ }
43
+ /** @deprecated Use event() instead */
44
+ stream(name) {
45
+ return this.event(name);
46
+ }
47
+ async getQuery(name, params) {
48
+ const url = new URL(`${this.baseUrl}/v1/queries/${name}`);
49
+ if (params) {
50
+ for (const [k, v] of Object.entries(params)) {
51
+ url.searchParams.set(k, v);
52
+ }
53
+ }
54
+ const headers = { 'Content-Type': 'application/json' };
55
+ if (this.tokenProvider) {
56
+ headers['Authorization'] = `Bearer ${await this.tokenProvider()}`;
57
+ }
58
+ const res = await fetch(url.toString(), { headers });
59
+ if (!res.ok) {
60
+ const body = await res.json().catch(() => ({}));
61
+ if (res.status === 404)
62
+ throw new WaveletError(body.error ?? `Query '${name}' not found`, 'QUERY_NOT_FOUND');
63
+ if (res.status === 401)
64
+ throw new WaveletError(body.error ?? 'Authentication required', 'AUTH_ERROR');
65
+ throw new WaveletError(body.error ?? `Server error: ${res.status}`, 'SERVER_ERROR');
66
+ }
67
+ const data = await res.json();
68
+ return data.rows;
69
+ }
70
+ subscribeQuery(name, handlers) {
71
+ let ws = null;
72
+ let closed = false;
73
+ let reconnectAttempt = 0;
74
+ const maxReconnectDelay = 30000;
75
+ let lastCursor = null;
76
+ const connect = async () => {
77
+ if (closed)
78
+ return;
79
+ let url = `${this.wsBaseUrl}/subscribe/${name}`;
80
+ if (this.tokenProvider) {
81
+ const token = await this.tokenProvider();
82
+ url += `?token=${encodeURIComponent(token)}`;
83
+ }
84
+ if (lastCursor) {
85
+ url += `${url.includes('?') ? '&' : '?'}cursor=${encodeURIComponent(lastCursor)}`;
86
+ }
87
+ ws = new WebSocket(url);
88
+ ws.onopen = () => {
89
+ reconnectAttempt = 0;
90
+ handlers.onOpen?.();
91
+ };
92
+ ws.onmessage = (event) => {
93
+ try {
94
+ const msg = JSON.parse(typeof event.data === 'string' ? event.data : '');
95
+ if (msg.type === 'snapshot') {
96
+ handlers.onSnapshot?.({
97
+ rows: msg.rows ?? [],
98
+ });
99
+ }
100
+ else if (msg.type === 'diff') {
101
+ lastCursor = msg.cursor;
102
+ handlers.onData({
103
+ cursor: msg.cursor,
104
+ inserted: msg.inserted ?? [],
105
+ updated: msg.updated ?? [],
106
+ deleted: msg.deleted ?? [],
107
+ });
108
+ }
109
+ }
110
+ catch (err) {
111
+ handlers.onError?.(new WaveletError(err.message, 'SERVER_ERROR'));
112
+ }
113
+ };
114
+ ws.onerror = () => {
115
+ // onclose will fire next
116
+ };
117
+ ws.onclose = (event) => {
118
+ if (closed)
119
+ return;
120
+ if (event.code === 4000) {
121
+ // Server rejected connection (auth error, view not found)
122
+ handlers.onError?.(new WaveletError(event.reason, 'AUTH_ERROR'));
123
+ return;
124
+ }
125
+ // Reconnect with exponential backoff
126
+ const delay = Math.min(1000 * Math.pow(2, reconnectAttempt), maxReconnectDelay);
127
+ reconnectAttempt++;
128
+ setTimeout(() => {
129
+ handlers.onReconnect?.();
130
+ connect();
131
+ }, delay);
132
+ };
133
+ };
134
+ connect();
135
+ return () => {
136
+ closed = true;
137
+ ws?.close();
138
+ };
139
+ }
140
+ async emitEvent(eventName, data) {
141
+ const headers = { 'Content-Type': 'application/json' };
142
+ if (this.tokenProvider) {
143
+ headers['Authorization'] = `Bearer ${await this.tokenProvider()}`;
144
+ }
145
+ const res = await fetch(`${this.baseUrl}/v1/events/${eventName}`, {
146
+ method: 'POST',
147
+ headers,
148
+ body: JSON.stringify(data),
149
+ });
150
+ if (!res.ok) {
151
+ const body = await res.json().catch(() => ({}));
152
+ throw new WaveletError(body.error ?? `Failed to emit to '${eventName}'`, 'SERVER_ERROR');
153
+ }
154
+ }
155
+ async emitBatch(eventName, data) {
156
+ const headers = { 'Content-Type': 'application/json' };
157
+ if (this.tokenProvider) {
158
+ headers['Authorization'] = `Bearer ${await this.tokenProvider()}`;
159
+ }
160
+ const res = await fetch(`${this.baseUrl}/v1/events/${eventName}/batch`, {
161
+ method: 'POST',
162
+ headers,
163
+ body: JSON.stringify(data),
164
+ });
165
+ if (!res.ok) {
166
+ const body = await res.json().catch(() => ({}));
167
+ throw new WaveletError(body.error ?? `Failed to batch emit to '${eventName}'`, 'SERVER_ERROR');
168
+ }
169
+ }
170
+ }
@@ -0,0 +1 @@
1
+ export { WaveletClient } from './client.js';
@@ -0,0 +1,186 @@
1
+ import { useState, useEffect, useRef, useCallback } from 'react';
2
+ import { WaveletClient } from './client.js';
3
+ import { WaveletError } from './types.js';
4
+ let globalClient = null;
5
+ export function initWavelet(options) {
6
+ globalClient = new WaveletClient(options);
7
+ }
8
+ export function getClient() {
9
+ if (!globalClient) {
10
+ throw new WaveletError('Wavelet client not initialized. Call initWavelet({ url: "..." }) first.', 'CONNECTION_ERROR');
11
+ }
12
+ return globalClient;
13
+ }
14
+ export function useWavelet(queryName, options) {
15
+ const [data, setData] = useState([]);
16
+ const [isLoading, setIsLoading] = useState(true);
17
+ const [error, setError] = useState(null);
18
+ const dataRef = useRef([]);
19
+ const keyBy = options?.keyBy;
20
+ const params = options?.params;
21
+ useEffect(() => {
22
+ const client = getClient();
23
+ let cancelled = false;
24
+ const useSnapshotHydration = !params;
25
+ if (!useSnapshotHydration) {
26
+ client.query(queryName).get(params).then((rows) => {
27
+ if (cancelled)
28
+ return;
29
+ dataRef.current = rows;
30
+ setData(rows);
31
+ setIsLoading(false);
32
+ }).catch((err) => {
33
+ if (cancelled)
34
+ return;
35
+ setError(err instanceof WaveletError ? err : new WaveletError(err.message, 'SERVER_ERROR'));
36
+ setIsLoading(false);
37
+ });
38
+ }
39
+ // Subscribe to updates
40
+ const unsub = client.query(queryName).subscribe({
41
+ onSnapshot: (snapshot) => {
42
+ if (cancelled || !useSnapshotHydration)
43
+ return;
44
+ dataRef.current = snapshot.rows;
45
+ setData(snapshot.rows);
46
+ setIsLoading(false);
47
+ },
48
+ onData: (diff) => {
49
+ if (cancelled)
50
+ return;
51
+ if (keyBy) {
52
+ dataRef.current = mergeByKey(dataRef.current, diff, keyBy);
53
+ }
54
+ else {
55
+ dataRef.current = mergeNaive(dataRef.current, diff);
56
+ }
57
+ setData([...dataRef.current]);
58
+ },
59
+ onError: (err) => {
60
+ if (cancelled)
61
+ return;
62
+ setError(err);
63
+ },
64
+ });
65
+ return () => {
66
+ cancelled = true;
67
+ unsub();
68
+ };
69
+ }, [queryName, keyBy, JSON.stringify(params)]);
70
+ return { data, isLoading, error };
71
+ }
72
+ /**
73
+ * Like useWavelet, but tracks which rows changed in the last diff cycle.
74
+ * `changes` is a Map from keyBy value to change type, cleared after `changeDuration` ms.
75
+ * `keyBy` is required.
76
+ */
77
+ export function useWaveletDiff(queryName, options) {
78
+ const { keyBy, params, changeDuration = 500 } = options;
79
+ const [data, setData] = useState([]);
80
+ const [changes, setChanges] = useState(new Map());
81
+ const [isLoading, setIsLoading] = useState(true);
82
+ const [error, setError] = useState(null);
83
+ const dataRef = useRef([]);
84
+ const clearTimerRef = useRef(undefined);
85
+ const applyDiff = useCallback((diff) => {
86
+ const newChanges = new Map();
87
+ dataRef.current = mergeByKey(dataRef.current, diff, keyBy);
88
+ for (const row of diff.inserted) {
89
+ newChanges.set(row[keyBy], 'inserted');
90
+ }
91
+ for (const row of diff.updated) {
92
+ newChanges.set(row[keyBy], 'updated');
93
+ }
94
+ for (const row of diff.deleted) {
95
+ newChanges.set(row[keyBy], 'deleted');
96
+ }
97
+ setData([...dataRef.current]);
98
+ setChanges(newChanges);
99
+ if (clearTimerRef.current)
100
+ clearTimeout(clearTimerRef.current);
101
+ clearTimerRef.current = setTimeout(() => setChanges(new Map()), changeDuration);
102
+ }, [keyBy, changeDuration]);
103
+ useEffect(() => {
104
+ const client = getClient();
105
+ let cancelled = false;
106
+ const useSnapshotHydration = !params;
107
+ if (!useSnapshotHydration) {
108
+ client.query(queryName).get(params).then((rows) => {
109
+ if (cancelled)
110
+ return;
111
+ dataRef.current = rows;
112
+ setData(rows);
113
+ setIsLoading(false);
114
+ }).catch((err) => {
115
+ if (cancelled)
116
+ return;
117
+ setError(err instanceof WaveletError ? err : new WaveletError(err.message, 'SERVER_ERROR'));
118
+ setIsLoading(false);
119
+ });
120
+ }
121
+ const unsub = client.query(queryName).subscribe({
122
+ onSnapshot: (snapshot) => {
123
+ if (cancelled || !useSnapshotHydration)
124
+ return;
125
+ dataRef.current = snapshot.rows;
126
+ setData(snapshot.rows);
127
+ setChanges(new Map());
128
+ setIsLoading(false);
129
+ },
130
+ onData: (diff) => {
131
+ if (cancelled)
132
+ return;
133
+ applyDiff(diff);
134
+ },
135
+ onError: (err) => {
136
+ if (cancelled)
137
+ return;
138
+ setError(err);
139
+ },
140
+ });
141
+ return () => {
142
+ cancelled = true;
143
+ unsub();
144
+ if (clearTimerRef.current)
145
+ clearTimeout(clearTimerRef.current);
146
+ };
147
+ }, [queryName, keyBy, JSON.stringify(params), applyDiff]);
148
+ return { data, changes, isLoading, error };
149
+ }
150
+ /**
151
+ * Key-based merge: uses a specified field as primary key.
152
+ * O(n) using a Map, no JSON.stringify needed.
153
+ */
154
+ function mergeByKey(current, diff, keyBy) {
155
+ const map = new Map();
156
+ for (const row of current) {
157
+ map.set(row[keyBy], row);
158
+ }
159
+ // Remove deleted rows
160
+ for (const row of diff.deleted) {
161
+ map.delete(row[keyBy]);
162
+ }
163
+ // Apply updates (replace existing rows by key)
164
+ for (const row of diff.updated) {
165
+ map.set(row[keyBy], row);
166
+ }
167
+ // Add inserted rows
168
+ for (const row of diff.inserted) {
169
+ map.set(row[keyBy], row);
170
+ }
171
+ return Array.from(map.values());
172
+ }
173
+ /**
174
+ * Naive merge: uses JSON.stringify for equality.
175
+ * Fallback when no keyBy is specified.
176
+ */
177
+ function mergeNaive(current, diff) {
178
+ let result = [...current];
179
+ if (diff.deleted.length > 0) {
180
+ const deletedJson = new Set(diff.deleted.map(r => JSON.stringify(r)));
181
+ result = result.filter(r => !deletedJson.has(JSON.stringify(r)));
182
+ }
183
+ result.push(...diff.inserted);
184
+ result.push(...diff.updated);
185
+ return result;
186
+ }
@@ -0,0 +1,8 @@
1
+ export class WaveletError extends Error {
2
+ code;
3
+ constructor(message, code) {
4
+ super(message);
5
+ this.code = code;
6
+ this.name = 'WaveletError';
7
+ }
8
+ }
@@ -51,7 +51,7 @@ const types_js_1 = require("../types.js");
51
51
  (0, vitest_1.expect)(client.tokenProvider).toBeNull();
52
52
  });
53
53
  });
54
- (0, vitest_1.describe)('view().get()', () => {
54
+ (0, vitest_1.describe)('query().get()', () => {
55
55
  let fetchSpy;
56
56
  (0, vitest_1.beforeEach)(() => {
57
57
  fetchSpy = vitest_1.vi.fn();
@@ -60,17 +60,17 @@ const types_js_1 = require("../types.js");
60
60
  (0, vitest_1.afterEach)(() => {
61
61
  vitest_1.vi.unstubAllGlobals();
62
62
  });
63
- (0, vitest_1.it)('fetches view data', async () => {
63
+ (0, vitest_1.it)('fetches query data', async () => {
64
64
  fetchSpy.mockResolvedValue({
65
65
  ok: true,
66
66
  json: async () => ({ rows: [{ id: 1, name: 'test' }] }),
67
67
  });
68
68
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
69
- const result = await client.view('leaderboard').get();
69
+ const result = await client.query('leaderboard').get();
70
70
  (0, vitest_1.expect)(result).toEqual([{ id: 1, name: 'test' }]);
71
71
  (0, vitest_1.expect)(fetchSpy).toHaveBeenCalledOnce();
72
72
  const calledUrl = fetchSpy.mock.calls[0][0];
73
- (0, vitest_1.expect)(calledUrl).toBe('http://localhost:8080/v1/views/leaderboard');
73
+ (0, vitest_1.expect)(calledUrl).toBe('http://localhost:8080/v1/queries/leaderboard');
74
74
  });
75
75
  (0, vitest_1.it)('passes query params as filters', async () => {
76
76
  fetchSpy.mockResolvedValue({
@@ -78,7 +78,7 @@ const types_js_1 = require("../types.js");
78
78
  json: async () => ({ rows: [] }),
79
79
  });
80
80
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
81
- await client.view('usage').get({ tenant_id: 't1' });
81
+ await client.query('usage').get({ tenant_id: 't1' });
82
82
  const calledUrl = fetchSpy.mock.calls[0][0];
83
83
  (0, vitest_1.expect)(calledUrl).toContain('tenant_id=t1');
84
84
  });
@@ -88,20 +88,20 @@ const types_js_1 = require("../types.js");
88
88
  json: async () => ({ rows: [] }),
89
89
  });
90
90
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080', token: 'my-jwt' });
91
- await client.view('leaderboard').get();
91
+ await client.query('leaderboard').get();
92
92
  const headers = fetchSpy.mock.calls[0][1].headers;
93
93
  (0, vitest_1.expect)(headers['Authorization']).toBe('Bearer my-jwt');
94
94
  });
95
- (0, vitest_1.it)('throws VIEW_NOT_FOUND on 404', async () => {
95
+ (0, vitest_1.it)('throws QUERY_NOT_FOUND on 404', async () => {
96
96
  fetchSpy.mockResolvedValue({
97
97
  ok: false,
98
98
  status: 404,
99
- json: async () => ({ error: "View 'nope' not found" }),
99
+ json: async () => ({ error: "Query 'nope' not found" }),
100
100
  });
101
101
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
102
- await (0, vitest_1.expect)(client.view('nope').get()).rejects.toThrow(types_js_1.WaveletError);
103
- await (0, vitest_1.expect)(client.view('nope').get()).rejects.toMatchObject({
104
- code: 'VIEW_NOT_FOUND',
102
+ await (0, vitest_1.expect)(client.query('nope').get()).rejects.toThrow(types_js_1.WaveletError);
103
+ await (0, vitest_1.expect)(client.query('nope').get()).rejects.toMatchObject({
104
+ code: 'QUERY_NOT_FOUND',
105
105
  });
106
106
  });
107
107
  (0, vitest_1.it)('throws AUTH_ERROR on 401', async () => {
@@ -111,7 +111,7 @@ const types_js_1 = require("../types.js");
111
111
  json: async () => ({ error: 'Unauthorized' }),
112
112
  });
113
113
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
114
- await (0, vitest_1.expect)(client.view('leaderboard').get()).rejects.toMatchObject({
114
+ await (0, vitest_1.expect)(client.query('leaderboard').get()).rejects.toMatchObject({
115
115
  code: 'AUTH_ERROR',
116
116
  });
117
117
  });
@@ -122,12 +122,86 @@ const types_js_1 = require("../types.js");
122
122
  json: async () => ({ error: 'Internal error' }),
123
123
  });
124
124
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
125
- await (0, vitest_1.expect)(client.view('leaderboard').get()).rejects.toMatchObject({
125
+ await (0, vitest_1.expect)(client.query('leaderboard').get()).rejects.toMatchObject({
126
126
  code: 'SERVER_ERROR',
127
127
  });
128
128
  });
129
129
  });
130
- (0, vitest_1.describe)('stream().emit()', () => {
130
+ (0, vitest_1.describe)('query().subscribe()', () => {
131
+ class MockWebSocket {
132
+ static instances = [];
133
+ url;
134
+ onopen = null;
135
+ onmessage = null;
136
+ onclose = null;
137
+ onerror = null;
138
+ constructor(url) {
139
+ this.url = url;
140
+ MockWebSocket.instances.push(this);
141
+ }
142
+ emitOpen() {
143
+ this.onopen?.();
144
+ }
145
+ emitMessage(message) {
146
+ this.onmessage?.({ data: JSON.stringify(message) });
147
+ }
148
+ close(code = 1000, reason = '') {
149
+ this.onclose?.({ code, reason });
150
+ }
151
+ }
152
+ (0, vitest_1.beforeEach)(() => {
153
+ MockWebSocket.instances = [];
154
+ vitest_1.vi.stubGlobal('WebSocket', MockWebSocket);
155
+ });
156
+ (0, vitest_1.afterEach)(() => {
157
+ vitest_1.vi.unstubAllGlobals();
158
+ vitest_1.vi.useRealTimers();
159
+ });
160
+ (0, vitest_1.it)('delivers snapshot frames to onSnapshot', () => {
161
+ const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
162
+ const onSnapshot = vitest_1.vi.fn();
163
+ const onData = vitest_1.vi.fn();
164
+ client.query('leaderboard').subscribe({
165
+ onSnapshot,
166
+ onData,
167
+ });
168
+ const ws = MockWebSocket.instances[0];
169
+ ws.emitOpen();
170
+ ws.emitMessage({
171
+ type: 'snapshot',
172
+ query: 'leaderboard',
173
+ rows: [{ player_id: 'alice', score: 42 }],
174
+ });
175
+ (0, vitest_1.expect)(onSnapshot).toHaveBeenCalledWith({
176
+ rows: [{ player_id: 'alice', score: 42 }],
177
+ });
178
+ (0, vitest_1.expect)(onData).not.toHaveBeenCalled();
179
+ });
180
+ (0, vitest_1.it)('keeps diff delivery unchanged', () => {
181
+ const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
182
+ const onData = vitest_1.vi.fn();
183
+ client.query('leaderboard').subscribe({
184
+ onData,
185
+ });
186
+ const ws = MockWebSocket.instances[0];
187
+ ws.emitOpen();
188
+ ws.emitMessage({
189
+ type: 'diff',
190
+ query: 'leaderboard',
191
+ cursor: '123',
192
+ inserted: [{ player_id: 'alice', score: 42 }],
193
+ updated: [],
194
+ deleted: [],
195
+ });
196
+ (0, vitest_1.expect)(onData).toHaveBeenCalledWith({
197
+ cursor: '123',
198
+ inserted: [{ player_id: 'alice', score: 42 }],
199
+ updated: [],
200
+ deleted: [],
201
+ });
202
+ });
203
+ });
204
+ (0, vitest_1.describe)('event().emit()', () => {
131
205
  let fetchSpy;
132
206
  (0, vitest_1.beforeEach)(() => {
133
207
  fetchSpy = vitest_1.vi.fn();
@@ -139,28 +213,28 @@ const types_js_1 = require("../types.js");
139
213
  (0, vitest_1.it)('posts event to correct URL', async () => {
140
214
  fetchSpy.mockResolvedValue({ ok: true, json: async () => ({ ok: true }) });
141
215
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
142
- await client.stream('events').emit({ user_id: 'u1', score: 42 });
216
+ await client.event('game_events').emit({ user_id: 'u1', score: 42 });
143
217
  (0, vitest_1.expect)(fetchSpy).toHaveBeenCalledOnce();
144
218
  const [url, opts] = fetchSpy.mock.calls[0];
145
- (0, vitest_1.expect)(url).toBe('http://localhost:8080/v1/streams/events');
219
+ (0, vitest_1.expect)(url).toBe('http://localhost:8080/v1/events/game_events');
146
220
  (0, vitest_1.expect)(opts.method).toBe('POST');
147
221
  (0, vitest_1.expect)(JSON.parse(opts.body)).toEqual({ user_id: 'u1', score: 42 });
148
222
  });
149
223
  (0, vitest_1.it)('posts batch to correct URL', async () => {
150
224
  fetchSpy.mockResolvedValue({ ok: true, json: async () => ({ ok: true, count: 2 }) });
151
225
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
152
- await client.stream('events').emitBatch([{ a: 1 }, { a: 2 }]);
226
+ await client.event('game_events').emitBatch([{ a: 1 }, { a: 2 }]);
153
227
  const [url, opts] = fetchSpy.mock.calls[0];
154
- (0, vitest_1.expect)(url).toBe('http://localhost:8080/v1/streams/events/batch');
228
+ (0, vitest_1.expect)(url).toBe('http://localhost:8080/v1/events/game_events/batch');
155
229
  (0, vitest_1.expect)(JSON.parse(opts.body)).toEqual([{ a: 1 }, { a: 2 }]);
156
230
  });
157
231
  (0, vitest_1.it)('throws on error response', async () => {
158
232
  fetchSpy.mockResolvedValue({
159
233
  ok: false,
160
- json: async () => ({ error: "Stream 'nope' not found" }),
234
+ json: async () => ({ error: "Event 'nope' not found" }),
161
235
  });
162
236
  const client = new client_js_1.WaveletClient({ url: 'http://localhost:8080' });
163
- await (0, vitest_1.expect)(client.stream('nope').emit({ x: 1 })).rejects.toThrow(types_js_1.WaveletError);
237
+ await (0, vitest_1.expect)(client.event('nope').emit({ x: 1 })).rejects.toThrow(types_js_1.WaveletError);
164
238
  });
165
239
  });
166
240
  });
@@ -1 +1 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,14 +1,18 @@
1
- import type { WaveletClientOptions, ViewHandle, StreamHandle } from './types.js';
1
+ import type { WaveletClientOptions, QueryHandle, EventHandle } from './types.js';
2
2
  export declare class WaveletClient {
3
3
  private options;
4
4
  private baseUrl;
5
5
  private wsBaseUrl;
6
6
  private tokenProvider;
7
7
  constructor(options: WaveletClientOptions);
8
- view<T = Record<string, unknown>>(name: string): ViewHandle<T>;
9
- stream<T = Record<string, unknown>>(name: string): StreamHandle<T>;
10
- private getView;
11
- private subscribeView;
8
+ query<T = Record<string, unknown>>(name: string): QueryHandle<T>;
9
+ /** @deprecated Use query() instead */
10
+ view<T = Record<string, unknown>>(name: string): QueryHandle<T>;
11
+ event<T = Record<string, unknown>>(name: string): EventHandle<T>;
12
+ /** @deprecated Use event() instead */
13
+ stream<T = Record<string, unknown>>(name: string): EventHandle<T>;
14
+ private getQuery;
15
+ private subscribeQuery;
12
16
  private emitEvent;
13
17
  private emitBatch;
14
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAwC,MAAM,YAAY,CAAA;AAGtH,qBAAa,aAAa;IAKZ,OAAO,CAAC,OAAO;IAJ3B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,aAAa,CAAgC;gBAEjC,OAAO,EAAE,oBAAoB;IAmBjD,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAO9D,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;YAOpD,OAAO;IA0BrB,OAAO,CAAC,aAAa;YAyEP,SAAS;YAkBT,SAAS;CAiBxB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAwC,MAAM,YAAY,CAAA;AAGtH,qBAAa,aAAa;IAKZ,OAAO,CAAC,OAAO;IAJ3B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,aAAa,CAAgC;gBAEjC,OAAO,EAAE,oBAAoB;IAmBjD,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAOhE,sCAAsC;IACtC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAI/D,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAOhE,sCAAsC;IACtC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;YAInD,QAAQ;IA0BtB,OAAO,CAAC,cAAc;YA8ER,SAAS;YAkBT,SAAS;CAiBxB"}
package/dist/client.js CHANGED
@@ -27,20 +27,28 @@ class WaveletClient {
27
27
  this.tokenProvider = null;
28
28
  }
29
29
  }
30
- view(name) {
30
+ query(name) {
31
31
  return {
32
- get: (params) => this.getView(name, params),
33
- subscribe: (handlers) => this.subscribeView(name, handlers),
32
+ get: (params) => this.getQuery(name, params),
33
+ subscribe: (handlers) => this.subscribeQuery(name, handlers),
34
34
  };
35
35
  }
36
- stream(name) {
36
+ /** @deprecated Use query() instead */
37
+ view(name) {
38
+ return this.query(name);
39
+ }
40
+ event(name) {
37
41
  return {
38
42
  emit: (data) => this.emitEvent(name, data),
39
43
  emitBatch: (data) => this.emitBatch(name, data),
40
44
  };
41
45
  }
42
- async getView(name, params) {
43
- const url = new URL(`${this.baseUrl}/v1/views/${name}`);
46
+ /** @deprecated Use event() instead */
47
+ stream(name) {
48
+ return this.event(name);
49
+ }
50
+ async getQuery(name, params) {
51
+ const url = new URL(`${this.baseUrl}/v1/queries/${name}`);
44
52
  if (params) {
45
53
  for (const [k, v] of Object.entries(params)) {
46
54
  url.searchParams.set(k, v);
@@ -54,7 +62,7 @@ class WaveletClient {
54
62
  if (!res.ok) {
55
63
  const body = await res.json().catch(() => ({}));
56
64
  if (res.status === 404)
57
- throw new types_js_1.WaveletError(body.error ?? `View '${name}' not found`, 'VIEW_NOT_FOUND');
65
+ throw new types_js_1.WaveletError(body.error ?? `Query '${name}' not found`, 'QUERY_NOT_FOUND');
58
66
  if (res.status === 401)
59
67
  throw new types_js_1.WaveletError(body.error ?? 'Authentication required', 'AUTH_ERROR');
60
68
  throw new types_js_1.WaveletError(body.error ?? `Server error: ${res.status}`, 'SERVER_ERROR');
@@ -62,7 +70,7 @@ class WaveletClient {
62
70
  const data = await res.json();
63
71
  return data.rows;
64
72
  }
65
- subscribeView(name, handlers) {
73
+ subscribeQuery(name, handlers) {
66
74
  let ws = null;
67
75
  let closed = false;
68
76
  let reconnectAttempt = 0;
@@ -82,11 +90,17 @@ class WaveletClient {
82
90
  ws = new WebSocket(url);
83
91
  ws.onopen = () => {
84
92
  reconnectAttempt = 0;
93
+ handlers.onOpen?.();
85
94
  };
86
95
  ws.onmessage = (event) => {
87
96
  try {
88
97
  const msg = JSON.parse(typeof event.data === 'string' ? event.data : '');
89
- if (msg.type === 'diff') {
98
+ if (msg.type === 'snapshot') {
99
+ handlers.onSnapshot?.({
100
+ rows: msg.rows ?? [],
101
+ });
102
+ }
103
+ else if (msg.type === 'diff') {
90
104
  lastCursor = msg.cursor;
91
105
  handlers.onData({
92
106
  cursor: msg.cursor,
@@ -126,34 +140,34 @@ class WaveletClient {
126
140
  ws?.close();
127
141
  };
128
142
  }
129
- async emitEvent(streamName, data) {
143
+ async emitEvent(eventName, data) {
130
144
  const headers = { 'Content-Type': 'application/json' };
131
145
  if (this.tokenProvider) {
132
146
  headers['Authorization'] = `Bearer ${await this.tokenProvider()}`;
133
147
  }
134
- const res = await fetch(`${this.baseUrl}/v1/streams/${streamName}`, {
148
+ const res = await fetch(`${this.baseUrl}/v1/events/${eventName}`, {
135
149
  method: 'POST',
136
150
  headers,
137
151
  body: JSON.stringify(data),
138
152
  });
139
153
  if (!res.ok) {
140
154
  const body = await res.json().catch(() => ({}));
141
- throw new types_js_1.WaveletError(body.error ?? `Failed to emit to '${streamName}'`, 'SERVER_ERROR');
155
+ throw new types_js_1.WaveletError(body.error ?? `Failed to emit to '${eventName}'`, 'SERVER_ERROR');
142
156
  }
143
157
  }
144
- async emitBatch(streamName, data) {
158
+ async emitBatch(eventName, data) {
145
159
  const headers = { 'Content-Type': 'application/json' };
146
160
  if (this.tokenProvider) {
147
161
  headers['Authorization'] = `Bearer ${await this.tokenProvider()}`;
148
162
  }
149
- const res = await fetch(`${this.baseUrl}/v1/streams/${streamName}/batch`, {
163
+ const res = await fetch(`${this.baseUrl}/v1/events/${eventName}/batch`, {
150
164
  method: 'POST',
151
165
  headers,
152
166
  body: JSON.stringify(data),
153
167
  });
154
168
  if (!res.ok) {
155
169
  const body = await res.json().catch(() => ({}));
156
- throw new types_js_1.WaveletError(body.error ?? `Failed to batch emit to '${streamName}'`, 'SERVER_ERROR');
170
+ throw new types_js_1.WaveletError(body.error ?? `Failed to batch emit to '${eventName}'`, 'SERVER_ERROR');
157
171
  }
158
172
  }
159
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AACA,yCAAyC;AAEzC,MAAa,aAAa;IAKJ;IAJZ,OAAO,CAAQ;IACf,SAAS,CAAQ;IACjB,aAAa,CAAgC;IAErD,YAAoB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QAC/C,iBAAiB;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACpE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAEtE,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;YACxB,IAAI,CAAC,aAAa,GAAG,KAAK,IAAI,EAAE;gBAC9B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;gBACd,OAAO,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC,CAAA;QACH,CAAC;aAAM,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAA;YACvB,IAAI,CAAC,aAAa,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,CAA8B,IAAY;QAC5C,OAAO;YACL,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,MAAM,CAAC;YAC9C,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAI,IAAI,EAAE,QAAQ,CAAC;SAC/D,CAAA;IACH,CAAC;IAED,MAAM,CAA8B,IAAY;QAC9C,OAAO;YACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;YAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;SAChD,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,MAA+B;QACpE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,IAAI,EAAE,CAAC,CAAA;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA;QAC9E,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,CAAA;QACnE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAEpD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC/C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,uBAAY,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,aAAa,EAAE,gBAAgB,CAAC,CAAA;YAC1G,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,uBAAY,CAAC,IAAI,CAAC,KAAK,IAAI,yBAAyB,EAAE,YAAY,CAAC,CAAA;YACrG,MAAM,IAAI,uBAAY,CAAC,IAAI,CAAC,KAAK,IAAI,iBAAiB,GAAG,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAA;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,OAAO,IAAI,CAAC,IAAW,CAAA;IACzB,CAAC;IAEO,aAAa,CAAI,IAAY,EAAE,QAA8B;QACnE,IAAI,EAAE,GAAqB,IAAI,CAAA;QAC/B,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,gBAAgB,GAAG,CAAC,CAAA;QACxB,MAAM,iBAAiB,GAAG,KAAK,CAAA;QAC/B,IAAI,UAAU,GAAkB,IAAI,CAAA;QAEpC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,MAAM;gBAAE,OAAM;YAElB,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,cAAc,IAAI,EAAE,CAAA;YAC/C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;gBACxC,GAAG,IAAI,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAA;YAC9C,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,GAAG,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAA;YACnF,CAAC;YAED,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAA;YAEvB,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;gBACf,gBAAgB,GAAG,CAAC,CAAA;YACtB,CAAC,CAAA;YAED,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;gBACvB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;oBACxE,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACxB,UAAU,GAAG,GAAG,CAAC,MAAM,CAAA;wBACvB,QAAQ,CAAC,MAAM,CAAC;4BACd,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;4BAC5B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;4BAC1B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;yBAChB,CAAC,CAAA;oBACf,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,uBAAY,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;gBACnE,CAAC;YACH,CAAC,CAAA;YAED,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;gBAChB,yBAAyB;YAC3B,CAAC,CAAA;YAED,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;gBACrB,IAAI,MAAM;oBAAE,OAAM;gBAElB,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACxB,0DAA0D;oBAC1D,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,uBAAY,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;oBAChE,OAAM;gBACR,CAAC;gBAED,qCAAqC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,CAAA;gBAC/E,gBAAgB,EAAE,CAAA;gBAClB,UAAU,CAAC,GAAG,EAAE;oBACd,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAA;oBACxB,OAAO,EAAE,CAAA;gBACX,CAAC,EAAE,KAAK,CAAC,CAAA;YACX,CAAC,CAAA;QACH,CAAC,CAAA;QAED,OAAO,EAAE,CAAA;QAET,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,IAAI,CAAA;YACb,EAAE,EAAE,KAAK,EAAE,CAAA;QACb,CAAC,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,IAAa;QACvD,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA;QAC9E,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,CAAA;QACnE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,eAAe,UAAU,EAAE,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC/C,MAAM,IAAI,uBAAY,CAAC,IAAI,CAAC,KAAK,IAAI,sBAAsB,UAAU,GAAG,EAAE,cAAc,CAAC,CAAA;QAC3F,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,IAAe;QACzD,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA;QAC9E,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,CAAA;QACnE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,eAAe,UAAU,QAAQ,EAAE;YACxE,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC/C,MAAM,IAAI,uBAAY,CAAC,IAAI,CAAC,KAAK,IAAI,4BAA4B,UAAU,GAAG,EAAE,cAAc,CAAC,CAAA;QACjG,CAAC;IACH,CAAC;CACF;AA5KD,sCA4KC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { WaveletClient } from './client.js';
2
+ export type { WaveletClientOptions, QueryHandle, EventHandle, ViewHandle, StreamHandle, Diff, Snapshot, Unsubscribe } from './types.js';
3
+ //# sourceMappingURL=index.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaveletClient = void 0;
4
+ var client_js_1 = require("./client.js");
5
+ Object.defineProperty(exports, "WaveletClient", { enumerable: true, get: function () { return client_js_1.WaveletClient; } });
6
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":";;;AAAA,yCAA2C;AAAlC,0GAAA,aAAa,OAAA"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { WaveletClient } from './client.js';
2
- export type { WaveletClientOptions, ViewHandle, StreamHandle, Diff, Unsubscribe } from './types.js';
2
+ export type { WaveletClientOptions, QueryHandle, EventHandle, ViewHandle, StreamHandle, Diff, Snapshot, Unsubscribe } from './types.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
package/dist/react.d.ts CHANGED
@@ -12,5 +12,24 @@ export interface UseWaveletResult<T> {
12
12
  isLoading: boolean;
13
13
  error: WaveletError | null;
14
14
  }
15
- export declare function useWavelet<T = Record<string, unknown>>(viewName: string, options?: UseWaveletOptions): UseWaveletResult<T>;
15
+ export declare function useWavelet<T = Record<string, unknown>>(queryName: string, options?: UseWaveletOptions): UseWaveletResult<T>;
16
+ export type ChangeType = 'inserted' | 'updated' | 'deleted';
17
+ export interface UseWaveletDiffOptions {
18
+ keyBy: string;
19
+ params?: Record<string, string>;
20
+ /** How long change markers persist in ms (default 500) */
21
+ changeDuration?: number;
22
+ }
23
+ export interface UseWaveletDiffResult<T> {
24
+ data: T[];
25
+ changes: Map<unknown, ChangeType>;
26
+ isLoading: boolean;
27
+ error: WaveletError | null;
28
+ }
29
+ /**
30
+ * Like useWavelet, but tracks which rows changed in the last diff cycle.
31
+ * `changes` is a Map from keyBy value to change type, cleared after `changeDuration` ms.
32
+ * `keyBy` is required.
33
+ */
34
+ export declare function useWaveletDiff<T = Record<string, unknown>>(queryName: string, options: UseWaveletDiffOptions): UseWaveletDiffResult<T>;
16
35
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAQ,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAE/D;AAED,wBAAgB,SAAS,IAAI,aAAa,CAQzC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;CAC3B;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAAC,CAAC,CAAC,CAkDrB"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAQ,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAE/D;AAED,wBAAgB,SAAS,IAAI,aAAa,CAQzC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;CAC3B;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAAC,CAAC,CAAC,CA0DrB;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AAE3D,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IACjC,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAAC,CAAC,CAAC,CA4EzB"}
package/dist/react.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initWavelet = initWavelet;
4
4
  exports.getClient = getClient;
5
5
  exports.useWavelet = useWavelet;
6
+ exports.useWaveletDiff = useWaveletDiff;
6
7
  const react_1 = require("react");
7
8
  const client_js_1 = require("./client.js");
8
9
  const types_js_1 = require("./types.js");
@@ -16,7 +17,7 @@ function getClient() {
16
17
  }
17
18
  return globalClient;
18
19
  }
19
- function useWavelet(viewName, options) {
20
+ function useWavelet(queryName, options) {
20
21
  const [data, setData] = (0, react_1.useState)([]);
21
22
  const [isLoading, setIsLoading] = (0, react_1.useState)(true);
22
23
  const [error, setError] = (0, react_1.useState)(null);
@@ -26,21 +27,30 @@ function useWavelet(viewName, options) {
26
27
  (0, react_1.useEffect)(() => {
27
28
  const client = getClient();
28
29
  let cancelled = false;
29
- // Initial fetch
30
- client.view(viewName).get(params).then((rows) => {
31
- if (cancelled)
32
- return;
33
- dataRef.current = rows;
34
- setData(rows);
35
- setIsLoading(false);
36
- }).catch((err) => {
37
- if (cancelled)
38
- return;
39
- setError(err instanceof types_js_1.WaveletError ? err : new types_js_1.WaveletError(err.message, 'SERVER_ERROR'));
40
- setIsLoading(false);
41
- });
30
+ const useSnapshotHydration = !params;
31
+ if (!useSnapshotHydration) {
32
+ client.query(queryName).get(params).then((rows) => {
33
+ if (cancelled)
34
+ return;
35
+ dataRef.current = rows;
36
+ setData(rows);
37
+ setIsLoading(false);
38
+ }).catch((err) => {
39
+ if (cancelled)
40
+ return;
41
+ setError(err instanceof types_js_1.WaveletError ? err : new types_js_1.WaveletError(err.message, 'SERVER_ERROR'));
42
+ setIsLoading(false);
43
+ });
44
+ }
42
45
  // Subscribe to updates
43
- const unsub = client.view(viewName).subscribe({
46
+ const unsub = client.query(queryName).subscribe({
47
+ onSnapshot: (snapshot) => {
48
+ if (cancelled || !useSnapshotHydration)
49
+ return;
50
+ dataRef.current = snapshot.rows;
51
+ setData(snapshot.rows);
52
+ setIsLoading(false);
53
+ },
44
54
  onData: (diff) => {
45
55
  if (cancelled)
46
56
  return;
@@ -62,9 +72,87 @@ function useWavelet(viewName, options) {
62
72
  cancelled = true;
63
73
  unsub();
64
74
  };
65
- }, [viewName, keyBy, JSON.stringify(params)]);
75
+ }, [queryName, keyBy, JSON.stringify(params)]);
66
76
  return { data, isLoading, error };
67
77
  }
78
+ /**
79
+ * Like useWavelet, but tracks which rows changed in the last diff cycle.
80
+ * `changes` is a Map from keyBy value to change type, cleared after `changeDuration` ms.
81
+ * `keyBy` is required.
82
+ */
83
+ function useWaveletDiff(queryName, options) {
84
+ const { keyBy, params, changeDuration = 500 } = options;
85
+ const [data, setData] = (0, react_1.useState)([]);
86
+ const [changes, setChanges] = (0, react_1.useState)(new Map());
87
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
88
+ const [error, setError] = (0, react_1.useState)(null);
89
+ const dataRef = (0, react_1.useRef)([]);
90
+ const clearTimerRef = (0, react_1.useRef)(undefined);
91
+ const applyDiff = (0, react_1.useCallback)((diff) => {
92
+ const newChanges = new Map();
93
+ dataRef.current = mergeByKey(dataRef.current, diff, keyBy);
94
+ for (const row of diff.inserted) {
95
+ newChanges.set(row[keyBy], 'inserted');
96
+ }
97
+ for (const row of diff.updated) {
98
+ newChanges.set(row[keyBy], 'updated');
99
+ }
100
+ for (const row of diff.deleted) {
101
+ newChanges.set(row[keyBy], 'deleted');
102
+ }
103
+ setData([...dataRef.current]);
104
+ setChanges(newChanges);
105
+ if (clearTimerRef.current)
106
+ clearTimeout(clearTimerRef.current);
107
+ clearTimerRef.current = setTimeout(() => setChanges(new Map()), changeDuration);
108
+ }, [keyBy, changeDuration]);
109
+ (0, react_1.useEffect)(() => {
110
+ const client = getClient();
111
+ let cancelled = false;
112
+ const useSnapshotHydration = !params;
113
+ if (!useSnapshotHydration) {
114
+ client.query(queryName).get(params).then((rows) => {
115
+ if (cancelled)
116
+ return;
117
+ dataRef.current = rows;
118
+ setData(rows);
119
+ setIsLoading(false);
120
+ }).catch((err) => {
121
+ if (cancelled)
122
+ return;
123
+ setError(err instanceof types_js_1.WaveletError ? err : new types_js_1.WaveletError(err.message, 'SERVER_ERROR'));
124
+ setIsLoading(false);
125
+ });
126
+ }
127
+ const unsub = client.query(queryName).subscribe({
128
+ onSnapshot: (snapshot) => {
129
+ if (cancelled || !useSnapshotHydration)
130
+ return;
131
+ dataRef.current = snapshot.rows;
132
+ setData(snapshot.rows);
133
+ setChanges(new Map());
134
+ setIsLoading(false);
135
+ },
136
+ onData: (diff) => {
137
+ if (cancelled)
138
+ return;
139
+ applyDiff(diff);
140
+ },
141
+ onError: (err) => {
142
+ if (cancelled)
143
+ return;
144
+ setError(err);
145
+ },
146
+ });
147
+ return () => {
148
+ cancelled = true;
149
+ unsub();
150
+ if (clearTimerRef.current)
151
+ clearTimeout(clearTimerRef.current);
152
+ };
153
+ }, [queryName, keyBy, JSON.stringify(params), applyDiff]);
154
+ return { data, changes, isLoading, error };
155
+ }
68
156
  /**
69
157
  * Key-based merge: uses a specified field as primary key.
70
158
  * O(n) using a Map, no JSON.stringify needed.
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -8,21 +8,30 @@ export interface Diff<T = Record<string, unknown>> {
8
8
  updated: T[];
9
9
  deleted: T[];
10
10
  }
11
- export interface ViewHandle<T = Record<string, unknown>> {
11
+ export interface Snapshot<T = Record<string, unknown>> {
12
+ rows: T[];
13
+ }
14
+ export interface QueryHandle<T = Record<string, unknown>> {
12
15
  get(params?: Record<string, string>): Promise<T[]>;
13
16
  subscribe(handlers: SubscribeHandlers<T>): Unsubscribe;
14
17
  }
15
- export interface StreamHandle<T = Record<string, unknown>> {
18
+ /** @deprecated Use QueryHandle instead */
19
+ export type ViewHandle<T = Record<string, unknown>> = QueryHandle<T>;
20
+ export interface EventHandle<T = Record<string, unknown>> {
16
21
  emit(data: T): Promise<void>;
17
22
  emitBatch(data: T[]): Promise<void>;
18
23
  }
24
+ /** @deprecated Use EventHandle instead */
25
+ export type StreamHandle<T = Record<string, unknown>> = EventHandle<T>;
19
26
  export interface SubscribeHandlers<T> {
27
+ onOpen?: () => void;
28
+ onSnapshot?: (snapshot: Snapshot<T>) => void;
20
29
  onData: (diff: Diff<T>) => void;
21
30
  onError?: (error: WaveletError) => void;
22
31
  onReconnect?: () => void;
23
32
  }
24
33
  export type Unsubscribe = () => void;
25
- export type WaveletErrorCode = 'AUTH_ERROR' | 'VIEW_NOT_FOUND' | 'CONNECTION_ERROR' | 'SERVER_ERROR';
34
+ export type WaveletErrorCode = 'AUTH_ERROR' | 'QUERY_NOT_FOUND' | 'VIEW_NOT_FOUND' | 'CONNECTION_ERROR' | 'SERVER_ERROR';
26
35
  export declare class WaveletError extends Error {
27
36
  readonly code: WaveletErrorCode;
28
37
  constructor(message: string, code: WaveletErrorCode);
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,EAAE,CAAA;IACb,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,OAAO,EAAE,CAAC,EAAE,CAAA;CACb;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrD,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IAClD,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;CACvD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA;AAEpC,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,CAAA;AAEpG,qBAAa,YAAa,SAAQ,KAAK;aAGnB,IAAI,EAAE,gBAAgB;gBADtC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,gBAAgB;CAKzC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,EAAE,CAAA;IACb,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,OAAO,EAAE,CAAC,EAAE,CAAA;CACb;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD,IAAI,EAAE,CAAC,EAAE,CAAA;CACV;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IAClD,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;CACvD;AAED,0CAA0C;AAC1C,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;AAEpE,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,0CAA0C;AAC1C,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;AAEtE,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA;AAEpC,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,CAAA;AAExH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,IAAI,EAAE,gBAAgB;gBADtC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,gBAAgB;CAKzC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAgCA,MAAa,YAAa,SAAQ,KAAK;IAGnB;IAFlB,YACE,OAAe,EACC,IAAsB;QAEtC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,SAAI,GAAJ,IAAI,CAAkB;QAGtC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AARD,oCAQC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4CA,MAAa,YAAa,SAAQ,KAAK;IAGnB;IAFlB,YACE,OAAe,EACC,IAAsB;QAEtC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,SAAI,GAAJ,IAAI,CAAkB;QAGtC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AARD,oCAQC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@risingwave/wavelet-sdk",
3
- "version": "0.1.4",
3
+ "version": "0.2.4",
4
4
  "description": "Wavelet TypeScript SDK - subscribe to computed results",
5
5
  "homepage": "https://github.com/risingwavelabs/wavelet",
6
6
  "repository": {
@@ -15,16 +15,21 @@
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.js"
17
17
  },
18
+ "./browser": {
19
+ "import": "./browser/index.browser.js",
20
+ "default": "./browser/index.browser.js"
21
+ },
18
22
  "./react": {
19
23
  "types": "./dist/react.d.ts",
20
24
  "import": "./dist/react.js"
21
25
  }
22
26
  },
23
27
  "files": [
24
- "dist"
28
+ "dist",
29
+ "browser"
25
30
  ],
26
31
  "scripts": {
27
- "build": "tsc",
32
+ "build": "tsc && tsc -p tsconfig.browser.json",
28
33
  "dev": "tsc --watch"
29
34
  },
30
35
  "peerDependencies": {