@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.
- package/browser/client.js +170 -0
- package/browser/index.browser.js +1 -0
- package/browser/react.js +186 -0
- package/browser/types.js +8 -0
- package/dist/__tests__/client.test.js +94 -20
- package/dist/__tests__/client.test.js.map +1 -1
- package/dist/client.d.ts +9 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +29 -15
- package/dist/client.js.map +1 -1
- package/dist/index.browser.d.ts +3 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.browser.js +6 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/react.d.ts +20 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +104 -16
- package/dist/react.js.map +1 -1
- package/dist/types.d.ts +12 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +8 -3
|
@@ -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';
|
package/browser/react.js
ADDED
|
@@ -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
|
+
}
|
package/browser/types.js
ADDED
|
@@ -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)('
|
|
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
|
|
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.
|
|
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/
|
|
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.
|
|
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.
|
|
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
|
|
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: "
|
|
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.
|
|
103
|
-
await (0, vitest_1.expect)(client.
|
|
104
|
-
code: '
|
|
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.
|
|
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.
|
|
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)('
|
|
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.
|
|
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/
|
|
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.
|
|
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/
|
|
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: "
|
|
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.
|
|
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,
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,
|
|
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
|
-
|
|
30
|
+
query(name) {
|
|
31
31
|
return {
|
|
32
|
-
get: (params) => this.
|
|
33
|
-
subscribe: (handlers) => this.
|
|
32
|
+
get: (params) => this.getQuery(name, params),
|
|
33
|
+
subscribe: (handlers) => this.subscribeQuery(name, handlers),
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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 ?? `
|
|
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
|
-
|
|
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 === '
|
|
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(
|
|
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/
|
|
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 '${
|
|
155
|
+
throw new types_js_1.WaveletError(body.error ?? `Failed to emit to '${eventName}'`, 'SERVER_ERROR');
|
|
142
156
|
}
|
|
143
157
|
}
|
|
144
|
-
async emitBatch(
|
|
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/
|
|
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 '${
|
|
170
|
+
throw new types_js_1.WaveletError(body.error ?? `Failed to batch emit to '${eventName}'`, 'SERVER_ERROR');
|
|
157
171
|
}
|
|
158
172
|
}
|
|
159
173
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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>>(
|
|
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
|
package/dist/react.d.ts.map
CHANGED
|
@@ -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,
|
|
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(
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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.
|
|
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
|
-
}, [
|
|
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":";;AAOA,kCAEC;AAED,8BAQC;AAaD,
|
|
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
|
|
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
|
-
|
|
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);
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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,
|
|
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":";;;
|
|
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.
|
|
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": {
|