spacetimedb 2.0.3 → 2.0.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/LICENSE.txt +2 -2
- package/dist/angular/index.cjs +3 -0
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.mjs +3 -0
- package/dist/angular/index.mjs.map +1 -1
- package/dist/browser/angular/index.mjs +3 -0
- package/dist/browser/angular/index.mjs.map +1 -1
- package/dist/browser/react/index.mjs +3 -0
- package/dist/browser/react/index.mjs.map +1 -1
- package/dist/browser/svelte/index.mjs +3 -0
- package/dist/browser/svelte/index.mjs.map +1 -1
- package/dist/browser/vue/index.mjs +3 -0
- package/dist/browser/vue/index.mjs.map +1 -1
- package/dist/index.browser.mjs +126 -92
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.cjs +126 -92
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +126 -92
- package/dist/index.mjs.map +1 -1
- package/dist/lib/binary_writer.d.ts +1 -0
- package/dist/lib/binary_writer.d.ts.map +1 -1
- package/dist/lib/indexes.d.ts +1 -1
- package/dist/lib/indexes.d.ts.map +1 -1
- package/dist/lib/query.d.ts +4 -2
- package/dist/lib/query.d.ts.map +1 -1
- package/dist/lib/schema.d.ts +2 -0
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/table.d.ts +19 -1
- package/dist/lib/table.d.ts.map +1 -1
- package/dist/min/index.browser.mjs +1 -1
- package/dist/min/index.browser.mjs.map +1 -1
- package/dist/min/react/index.mjs +1 -1
- package/dist/min/react/index.mjs.map +1 -1
- package/dist/min/sdk/index.browser.mjs +1 -1
- package/dist/min/sdk/index.browser.mjs.map +1 -1
- package/dist/react/index.cjs +3 -0
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.mjs +3 -0
- package/dist/react/index.mjs.map +1 -1
- package/dist/sdk/db_connection_impl.d.ts.map +1 -1
- package/dist/sdk/index.browser.mjs +126 -92
- package/dist/sdk/index.browser.mjs.map +1 -1
- package/dist/sdk/index.cjs +126 -92
- package/dist/sdk/index.cjs.map +1 -1
- package/dist/sdk/index.mjs +126 -92
- package/dist/sdk/index.mjs.map +1 -1
- package/dist/sdk/table_cache.d.ts.map +1 -1
- package/dist/sdk/websocket_decompress_adapter.d.ts +17 -7
- package/dist/sdk/websocket_decompress_adapter.d.ts.map +1 -1
- package/dist/sdk/websocket_test_adapter.d.ts +3 -2
- package/dist/sdk/websocket_test_adapter.d.ts.map +1 -1
- package/dist/server/index.mjs +65 -21
- package/dist/server/index.mjs.map +1 -1
- package/dist/svelte/index.cjs +3 -0
- package/dist/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.mjs +3 -0
- package/dist/svelte/index.mjs.map +1 -1
- package/dist/tanstack/SpacetimeDBQueryClient.d.ts +1 -0
- package/dist/tanstack/SpacetimeDBQueryClient.d.ts.map +1 -1
- package/dist/tanstack/index.cjs +24 -0
- package/dist/tanstack/index.cjs.map +1 -1
- package/dist/tanstack/index.mjs +24 -0
- package/dist/tanstack/index.mjs.map +1 -1
- package/dist/vue/index.cjs +3 -0
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.mjs +3 -0
- package/dist/vue/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/binary_writer.ts +4 -0
- package/src/lib/indexes.ts +1 -1
- package/src/lib/query.ts +30 -6
- package/src/lib/schema.ts +66 -24
- package/src/lib/table.ts +41 -9
- package/src/sdk/db_connection_impl.ts +38 -43
- package/src/sdk/table_cache.ts +14 -11
- package/src/sdk/websocket_decompress_adapter.ts +42 -45
- package/src/sdk/websocket_test_adapter.ts +3 -2
- package/src/server/runtime.ts +7 -3
- package/src/server/schema.test-d.ts +37 -0
- package/src/server/view.test-d.ts +2 -0
- package/src/tanstack/SpacetimeDBQueryClient.ts +24 -0
|
@@ -60,3 +60,40 @@ spacetimedb.init(ctx => {
|
|
|
60
60
|
// @ts-expect-error update() is NOT allowed on non-PK unique indexes
|
|
61
61
|
const _update = ctx.db.person.name2.update;
|
|
62
62
|
});
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Regression coverage for the declared-vs-resolved index split:
|
|
66
|
+
* - declared table-level indexes must still produce typed accessors
|
|
67
|
+
* - field-level indexes must still produce typed accessors
|
|
68
|
+
* - non-indexed fields must not accidentally become index accessors
|
|
69
|
+
*/
|
|
70
|
+
const account = table(
|
|
71
|
+
{
|
|
72
|
+
indexes: [
|
|
73
|
+
{
|
|
74
|
+
accessor: 'byEmailAndOrg',
|
|
75
|
+
algorithm: 'btree',
|
|
76
|
+
columns: ['email', 'orgId'] as const,
|
|
77
|
+
},
|
|
78
|
+
] as const,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
accountId: t.u32(),
|
|
82
|
+
email: t.string().index('hash'),
|
|
83
|
+
orgId: t.u32(),
|
|
84
|
+
nickname: t.string(),
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const spacetimedbIndexSplit = schema({ account });
|
|
89
|
+
|
|
90
|
+
spacetimedbIndexSplit.init(ctx => {
|
|
91
|
+
// Explicit table-level index accessor from `table({ indexes: [...] })`.
|
|
92
|
+
ctx.db.account.byEmailAndOrg.filter(['a@example.com', 1]);
|
|
93
|
+
|
|
94
|
+
// Field-level index accessor derived from column metadata.
|
|
95
|
+
ctx.db.account.email.filter('a@example.com');
|
|
96
|
+
|
|
97
|
+
// @ts-expect-error `nickname` is not indexed, so no index accessor should exist.
|
|
98
|
+
const _nickname = ctx.db.account.nickname;
|
|
99
|
+
});
|
|
@@ -7,6 +7,7 @@ const person = table(
|
|
|
7
7
|
name: 'person',
|
|
8
8
|
indexes: [
|
|
9
9
|
{
|
|
10
|
+
accessor: 'name_id_idx',
|
|
10
11
|
name: 'name_id_idx',
|
|
11
12
|
algorithm: 'btree',
|
|
12
13
|
columns: ['name', 'id'] as const,
|
|
@@ -48,6 +49,7 @@ const order = table(
|
|
|
48
49
|
name: 'order',
|
|
49
50
|
indexes: [
|
|
50
51
|
{
|
|
52
|
+
accessor: 'id_person_id',
|
|
51
53
|
name: 'id_person_id', // We are adding this to make sure `person_id` still isn't considered indexed.
|
|
52
54
|
algorithm: 'btree',
|
|
53
55
|
columns: ['id', 'person_id'] as const,
|
|
@@ -96,6 +96,7 @@ export class SpacetimeDBQueryClient {
|
|
|
96
96
|
setConnection(connection: SpacetimeConnection): void {
|
|
97
97
|
this.connection = connection;
|
|
98
98
|
this.processPendingQueries();
|
|
99
|
+
this.hydrateSubscriptions();
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
connect(queryClient: QueryClient): void {
|
|
@@ -289,6 +290,29 @@ export class SpacetimeDBQueryClient {
|
|
|
289
290
|
}
|
|
290
291
|
}
|
|
291
292
|
|
|
293
|
+
// subscribe to queries with SSR cached data but no active subscription
|
|
294
|
+
private hydrateSubscriptions(): void {
|
|
295
|
+
if (!this.connection || !this.queryClient) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
for (const [querySql, { accessorName, whereExpr }] of queryRegistry) {
|
|
300
|
+
const queryKey = ['spacetimedb', accessorName, querySql] as const;
|
|
301
|
+
const keyStr = JSON.stringify(queryKey);
|
|
302
|
+
|
|
303
|
+
if (this.subscriptions.has(keyStr)) {
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
if (this.queryClient.getQueryData(queryKey) === undefined) {
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
this.setupSubscription(queryKey, accessorName, querySql, whereExpr).catch(
|
|
311
|
+
() => {}
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
292
316
|
// clean up all subscriptions and disconnect
|
|
293
317
|
disconnect(): void {
|
|
294
318
|
if (this.cacheUnsubscribe) {
|