spacetimedb 2.4.1 → 2.6.0
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 +759 -759
- package/README.md +211 -120
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.mjs.map +1 -1
- package/dist/browser/angular/index.mjs.map +1 -1
- package/dist/browser/react/index.mjs +129 -57
- package/dist/browser/react/index.mjs.map +1 -1
- package/dist/browser/solid/index.mjs +1933 -0
- package/dist/browser/solid/index.mjs.map +1 -0
- package/dist/browser/svelte/index.mjs.map +1 -1
- package/dist/browser/vue/index.mjs.map +1 -1
- package/dist/index.browser.mjs +10 -2
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.cjs +10 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +10 -2
- package/dist/index.mjs.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 +129 -57
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.mjs +129 -57
- package/dist/react/index.mjs.map +1 -1
- package/dist/react/useTable.d.ts.map +1 -1
- package/dist/sdk/connection_manager.d.ts +8 -0
- package/dist/sdk/connection_manager.d.ts.map +1 -1
- package/dist/sdk/db_connection_impl.d.ts +7 -0
- package/dist/sdk/db_connection_impl.d.ts.map +1 -1
- package/dist/sdk/index.browser.mjs +10 -2
- package/dist/sdk/index.browser.mjs.map +1 -1
- package/dist/sdk/index.cjs +10 -2
- package/dist/sdk/index.cjs.map +1 -1
- package/dist/sdk/index.mjs +10 -2
- package/dist/sdk/index.mjs.map +1 -1
- package/dist/sdk/websocket_test_adapter.d.ts +2 -1
- package/dist/sdk/websocket_test_adapter.d.ts.map +1 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/solid/SpacetimeDBProvider.d.ts +7 -0
- package/dist/solid/SpacetimeDBProvider.d.ts.map +1 -0
- package/dist/solid/connection_state.d.ts +6 -0
- package/dist/solid/connection_state.d.ts.map +1 -0
- package/dist/solid/index.cjs +1939 -0
- package/dist/solid/index.cjs.map +1 -0
- package/dist/solid/index.d.ts +6 -0
- package/dist/solid/index.d.ts.map +1 -0
- package/dist/solid/index.mjs +1933 -0
- package/dist/solid/index.mjs.map +1 -0
- package/dist/solid/useProcedure.d.ts +4 -0
- package/dist/solid/useProcedure.d.ts.map +1 -0
- package/dist/solid/useReducer.d.ts +4 -0
- package/dist/solid/useReducer.d.ts.map +1 -0
- package/dist/solid/useSpacetimeDB.d.ts +4 -0
- package/dist/solid/useSpacetimeDB.d.ts.map +1 -0
- package/dist/solid/useTable.d.ts +32 -0
- package/dist/solid/useTable.d.ts.map +1 -0
- package/dist/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.mjs.map +1 -1
- package/dist/tanstack/index.cjs +120 -50
- package/dist/tanstack/index.cjs.map +1 -1
- package/dist/tanstack/index.mjs +120 -50
- package/dist/tanstack/index.mjs.map +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.mjs.map +1 -1
- package/package.json +13 -3
- package/src/angular/connection_state.ts +19 -19
- package/src/angular/index.ts +3 -3
- package/src/angular/injectors/index.ts +4 -4
- package/src/angular/injectors/inject-reducer.ts +62 -62
- package/src/angular/injectors/inject-spacetimedb-connected.ts +13 -13
- package/src/angular/injectors/inject-spacetimedb.ts +10 -10
- package/src/angular/injectors/inject-table.ts +234 -234
- package/src/angular/providers/index.ts +1 -1
- package/src/angular/providers/provide-spacetimedb.ts +96 -96
- package/src/index.ts +16 -16
- package/src/lib/algebraic_type.ts +819 -819
- package/src/lib/algebraic_type_variants.ts +26 -26
- package/src/lib/algebraic_value.ts +10 -10
- package/src/lib/autogen/types.ts +746 -746
- package/src/lib/binary_reader.ts +188 -188
- package/src/lib/binary_writer.ts +213 -213
- package/src/lib/connection_id.ts +102 -102
- package/src/lib/constraints.ts +48 -48
- package/src/lib/errors.ts +26 -26
- package/src/lib/filter.ts +195 -195
- package/src/lib/identity.ts +83 -83
- package/src/lib/indexes.ts +251 -251
- package/src/lib/option.ts +34 -34
- package/src/lib/query.ts +1019 -1019
- package/src/lib/reducer_schema.ts +38 -38
- package/src/lib/reducers.ts +116 -116
- package/src/lib/result.ts +36 -36
- package/src/lib/schedule_at.ts +86 -86
- package/src/lib/schema.ts +420 -420
- package/src/lib/table.ts +548 -548
- package/src/lib/table_schema.ts +64 -64
- package/src/lib/time_duration.ts +77 -77
- package/src/lib/timestamp.ts +148 -148
- package/src/lib/type_builders.test-d.ts +128 -128
- package/src/lib/type_builders.ts +4014 -4014
- package/src/lib/type_util.ts +124 -124
- package/src/lib/util.ts +196 -196
- package/src/lib/uuid.ts +337 -337
- package/src/react/SpacetimeDBProvider.ts +84 -84
- package/src/react/connection_state.ts +6 -6
- package/src/react/index.ts +5 -5
- package/src/react/useProcedure.ts +60 -60
- package/src/react/useReducer.ts +53 -53
- package/src/react/useSpacetimeDB.ts +18 -18
- package/src/react/useTable.ts +256 -251
- package/src/sdk/client_api/index.ts +114 -114
- package/src/sdk/client_api/types/procedures.ts +8 -8
- package/src/sdk/client_api/types/reducers.ts +8 -8
- package/src/sdk/client_api/types.ts +288 -288
- package/src/sdk/client_cache.ts +129 -129
- package/src/sdk/client_table.ts +179 -179
- package/src/sdk/connection_manager.ts +352 -237
- package/src/sdk/db_connection_builder.ts +290 -290
- package/src/sdk/db_connection_impl.ts +1356 -1347
- package/src/sdk/db_context.ts +28 -28
- package/src/sdk/db_view.ts +12 -12
- package/src/sdk/decompress.ts +51 -51
- package/src/sdk/event.ts +18 -18
- package/src/sdk/event_context.ts +51 -51
- package/src/sdk/event_emitter.ts +32 -32
- package/src/sdk/index.ts +14 -14
- package/src/sdk/internal.ts +2 -2
- package/src/sdk/json_api.ts +46 -46
- package/src/sdk/logger.ts +134 -134
- package/src/sdk/message_types.ts +46 -46
- package/src/sdk/procedures.ts +83 -83
- package/src/sdk/reducer_event.ts +20 -20
- package/src/sdk/reducer_handle.ts +12 -12
- package/src/sdk/reducers.ts +159 -159
- package/src/sdk/schema.ts +45 -45
- package/src/sdk/spacetime_module.ts +28 -28
- package/src/sdk/subscription_builder_impl.ts +275 -275
- package/src/sdk/table_cache.ts +581 -581
- package/src/sdk/type_utils.ts +19 -19
- package/src/sdk/version.ts +133 -133
- package/src/sdk/websocket_decompress_adapter.ts +63 -63
- package/src/sdk/websocket_protocols.ts +25 -25
- package/src/sdk/websocket_test_adapter.ts +107 -100
- package/src/sdk/websocket_v3_frames.ts +126 -126
- package/src/sdk/ws.ts +105 -105
- package/src/server/console.ts +81 -81
- package/src/server/db_view.ts +21 -21
- package/src/server/errors.ts +138 -138
- package/src/server/http.test-d.ts +80 -80
- package/src/server/http.ts +14 -14
- package/src/server/http_handlers.ts +413 -413
- package/src/server/http_internal.ts +79 -79
- package/src/server/http_shared.ts +186 -186
- package/src/server/index.ts +37 -37
- package/src/server/polyfills.ts +4 -4
- package/src/server/procedures.ts +239 -239
- package/src/server/query.ts +1 -1
- package/src/server/range.ts +53 -53
- package/src/server/reducers.ts +113 -113
- package/src/server/rng.ts +113 -113
- package/src/server/runtime.ts +1102 -1102
- package/src/server/schema.test-d.ts +99 -99
- package/src/server/schema.ts +663 -663
- package/src/server/sys.d.ts +125 -125
- package/src/server/view.test-d.ts +194 -194
- package/src/server/views.ts +340 -340
- package/src/solid/SpacetimeDBProvider.ts +97 -0
- package/src/solid/connection_state.ts +6 -0
- package/src/solid/index.ts +5 -0
- package/src/solid/useProcedure.ts +57 -0
- package/src/solid/useReducer.ts +50 -0
- package/src/solid/useSpacetimeDB.ts +18 -0
- package/src/solid/useTable.ts +203 -0
- package/src/svelte/SpacetimeDBProvider.ts +101 -101
- package/src/svelte/connection_state.ts +16 -16
- package/src/svelte/index.ts +4 -4
- package/src/svelte/useReducer.ts +61 -61
- package/src/svelte/useSpacetimeDB.ts +22 -22
- package/src/svelte/useTable.ts +218 -218
- package/src/tanstack/SpacetimeDBQueryClient.ts +330 -330
- package/src/tanstack/hooks.ts +83 -83
- package/src/tanstack/index.ts +16 -16
- package/src/util-stub.ts +1 -1
- package/src/vue/SpacetimeDBProvider.ts +157 -157
- package/src/vue/connection_state.ts +19 -19
- package/src/vue/index.ts +5 -5
- package/src/vue/useProcedure.ts +62 -62
- package/src/vue/useReducer.ts +55 -55
- package/src/vue/useSpacetimeDB.ts +18 -18
- package/src/vue/useTable.ts +229 -229
package/src/server/sys.d.ts
CHANGED
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
declare module 'spacetime:sys@2.0' {
|
|
2
|
-
export type u8 = number;
|
|
3
|
-
export type u16 = number;
|
|
4
|
-
export type u32 = number;
|
|
5
|
-
export type u64 = bigint;
|
|
6
|
-
export type u128 = bigint;
|
|
7
|
-
export type u256 = bigint;
|
|
8
|
-
|
|
9
|
-
export const moduleHooks: unique symbol;
|
|
10
|
-
|
|
11
|
-
interface ModuleDefaultExport {
|
|
12
|
-
[moduleHooks](exports: object): ModuleHooks;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface ModuleHooks {
|
|
16
|
-
__describe_module__(): Uint8Array;
|
|
17
|
-
|
|
18
|
-
__get_error_constructor__(code: number): new (msg: string) => Error;
|
|
19
|
-
__sender_error_class__: new (msg: string) => Error;
|
|
20
|
-
|
|
21
|
-
__call_reducer__(
|
|
22
|
-
reducerId: u32,
|
|
23
|
-
sender: u256,
|
|
24
|
-
connId: u128,
|
|
25
|
-
timestamp: bigint,
|
|
26
|
-
argsBuf: DataView
|
|
27
|
-
): void;
|
|
28
|
-
|
|
29
|
-
__call_view__(id: u32, sender: u256, args: Uint8Array): Uint8Array | object;
|
|
30
|
-
|
|
31
|
-
__call_view_anon__(id: u32, args: Uint8Array): Uint8Array | object;
|
|
32
|
-
|
|
33
|
-
__call_procedure__(
|
|
34
|
-
id: u32,
|
|
35
|
-
sender: u256,
|
|
36
|
-
connection_id: u128,
|
|
37
|
-
timestamp: bigint,
|
|
38
|
-
args: Uint8Array
|
|
39
|
-
): Uint8Array;
|
|
40
|
-
|
|
41
|
-
__call_http_handler__(
|
|
42
|
-
id: u32,
|
|
43
|
-
timestamp: bigint,
|
|
44
|
-
request: Uint8Array,
|
|
45
|
-
body: Uint8Array
|
|
46
|
-
): [response: Uint8Array, body: Uint8Array];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function register_hooks(hooks: ModuleHooks);
|
|
50
|
-
|
|
51
|
-
export function table_id_from_name(name: string): u32;
|
|
52
|
-
export function index_id_from_name(name: string): u32;
|
|
53
|
-
export function datastore_table_row_count(table_id: u32): u64;
|
|
54
|
-
export function datastore_table_scan_bsatn(table_id: u32): u32;
|
|
55
|
-
export function datastore_index_scan_range_bsatn(
|
|
56
|
-
index_id: u32,
|
|
57
|
-
buf: ArrayBuffer,
|
|
58
|
-
prefix_len: u32,
|
|
59
|
-
prefix_elems: u16,
|
|
60
|
-
rstart_len: u32,
|
|
61
|
-
rend_len: u32
|
|
62
|
-
): u32;
|
|
63
|
-
export function row_iter_bsatn_advance(iter: u32, buffer: ArrayBuffer): u32;
|
|
64
|
-
export function row_iter_bsatn_close(iter: u32): void;
|
|
65
|
-
export function datastore_insert_bsatn(
|
|
66
|
-
table_id: u32,
|
|
67
|
-
row: ArrayBuffer,
|
|
68
|
-
row_len: u32
|
|
69
|
-
): u32;
|
|
70
|
-
export function datastore_update_bsatn(
|
|
71
|
-
table_id: u32,
|
|
72
|
-
index_id: u32,
|
|
73
|
-
row: ArrayBuffer,
|
|
74
|
-
row_len: u32
|
|
75
|
-
): u32;
|
|
76
|
-
export function datastore_delete_by_index_scan_range_bsatn(
|
|
77
|
-
index_id: u32,
|
|
78
|
-
buf: ArrayBuffer,
|
|
79
|
-
prefix_len: u32,
|
|
80
|
-
prefix_elems: u16,
|
|
81
|
-
rstart_len: u32,
|
|
82
|
-
rend_len: u32
|
|
83
|
-
): u32;
|
|
84
|
-
export function datastore_delete_all_by_eq_bsatn(
|
|
85
|
-
table_id: u32,
|
|
86
|
-
relation: ArrayBuffer,
|
|
87
|
-
relation_len: u32
|
|
88
|
-
): u32;
|
|
89
|
-
export function volatile_nonatomic_schedule_immediate(
|
|
90
|
-
reducer_name: string,
|
|
91
|
-
args: Uint8Array
|
|
92
|
-
): void;
|
|
93
|
-
export function console_log(level: u8, message: string): void;
|
|
94
|
-
export function console_timer_start(name: string): u32;
|
|
95
|
-
export function console_timer_end(span_id: u32): void;
|
|
96
|
-
export function identity(): u256;
|
|
97
|
-
export function get_jwt_payload(connection_id: u128): Uint8Array;
|
|
98
|
-
|
|
99
|
-
export function procedure_http_request(
|
|
100
|
-
request: Uint8Array,
|
|
101
|
-
body: Uint8Array | string
|
|
102
|
-
): [response: Uint8Array, body: Uint8Array];
|
|
103
|
-
|
|
104
|
-
export function procedure_start_mut_tx(): bigint;
|
|
105
|
-
|
|
106
|
-
export function procedure_commit_mut_tx();
|
|
107
|
-
|
|
108
|
-
export function procedure_abort_mut_tx();
|
|
109
|
-
|
|
110
|
-
export function datastore_index_scan_point_bsatn(
|
|
111
|
-
index_id: u32,
|
|
112
|
-
point: ArrayBuffer,
|
|
113
|
-
point_len: u32
|
|
114
|
-
): u32;
|
|
115
|
-
|
|
116
|
-
export function datastore_delete_by_index_scan_point_bsatn(
|
|
117
|
-
index_id: u32,
|
|
118
|
-
point: ArrayBuffer,
|
|
119
|
-
point_len: u32
|
|
120
|
-
): u32;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
declare module 'spacetime:sys@2.1' {
|
|
124
|
-
export function datastore_clear(table_id: u32): u64;
|
|
125
|
-
}
|
|
1
|
+
declare module 'spacetime:sys@2.0' {
|
|
2
|
+
export type u8 = number;
|
|
3
|
+
export type u16 = number;
|
|
4
|
+
export type u32 = number;
|
|
5
|
+
export type u64 = bigint;
|
|
6
|
+
export type u128 = bigint;
|
|
7
|
+
export type u256 = bigint;
|
|
8
|
+
|
|
9
|
+
export const moduleHooks: unique symbol;
|
|
10
|
+
|
|
11
|
+
interface ModuleDefaultExport {
|
|
12
|
+
[moduleHooks](exports: object): ModuleHooks;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ModuleHooks {
|
|
16
|
+
__describe_module__(): Uint8Array;
|
|
17
|
+
|
|
18
|
+
__get_error_constructor__(code: number): new (msg: string) => Error;
|
|
19
|
+
__sender_error_class__: new (msg: string) => Error;
|
|
20
|
+
|
|
21
|
+
__call_reducer__(
|
|
22
|
+
reducerId: u32,
|
|
23
|
+
sender: u256,
|
|
24
|
+
connId: u128,
|
|
25
|
+
timestamp: bigint,
|
|
26
|
+
argsBuf: DataView
|
|
27
|
+
): void;
|
|
28
|
+
|
|
29
|
+
__call_view__(id: u32, sender: u256, args: Uint8Array): Uint8Array | object;
|
|
30
|
+
|
|
31
|
+
__call_view_anon__(id: u32, args: Uint8Array): Uint8Array | object;
|
|
32
|
+
|
|
33
|
+
__call_procedure__(
|
|
34
|
+
id: u32,
|
|
35
|
+
sender: u256,
|
|
36
|
+
connection_id: u128,
|
|
37
|
+
timestamp: bigint,
|
|
38
|
+
args: Uint8Array
|
|
39
|
+
): Uint8Array;
|
|
40
|
+
|
|
41
|
+
__call_http_handler__(
|
|
42
|
+
id: u32,
|
|
43
|
+
timestamp: bigint,
|
|
44
|
+
request: Uint8Array,
|
|
45
|
+
body: Uint8Array
|
|
46
|
+
): [response: Uint8Array, body: Uint8Array];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function register_hooks(hooks: ModuleHooks);
|
|
50
|
+
|
|
51
|
+
export function table_id_from_name(name: string): u32;
|
|
52
|
+
export function index_id_from_name(name: string): u32;
|
|
53
|
+
export function datastore_table_row_count(table_id: u32): u64;
|
|
54
|
+
export function datastore_table_scan_bsatn(table_id: u32): u32;
|
|
55
|
+
export function datastore_index_scan_range_bsatn(
|
|
56
|
+
index_id: u32,
|
|
57
|
+
buf: ArrayBuffer,
|
|
58
|
+
prefix_len: u32,
|
|
59
|
+
prefix_elems: u16,
|
|
60
|
+
rstart_len: u32,
|
|
61
|
+
rend_len: u32
|
|
62
|
+
): u32;
|
|
63
|
+
export function row_iter_bsatn_advance(iter: u32, buffer: ArrayBuffer): u32;
|
|
64
|
+
export function row_iter_bsatn_close(iter: u32): void;
|
|
65
|
+
export function datastore_insert_bsatn(
|
|
66
|
+
table_id: u32,
|
|
67
|
+
row: ArrayBuffer,
|
|
68
|
+
row_len: u32
|
|
69
|
+
): u32;
|
|
70
|
+
export function datastore_update_bsatn(
|
|
71
|
+
table_id: u32,
|
|
72
|
+
index_id: u32,
|
|
73
|
+
row: ArrayBuffer,
|
|
74
|
+
row_len: u32
|
|
75
|
+
): u32;
|
|
76
|
+
export function datastore_delete_by_index_scan_range_bsatn(
|
|
77
|
+
index_id: u32,
|
|
78
|
+
buf: ArrayBuffer,
|
|
79
|
+
prefix_len: u32,
|
|
80
|
+
prefix_elems: u16,
|
|
81
|
+
rstart_len: u32,
|
|
82
|
+
rend_len: u32
|
|
83
|
+
): u32;
|
|
84
|
+
export function datastore_delete_all_by_eq_bsatn(
|
|
85
|
+
table_id: u32,
|
|
86
|
+
relation: ArrayBuffer,
|
|
87
|
+
relation_len: u32
|
|
88
|
+
): u32;
|
|
89
|
+
export function volatile_nonatomic_schedule_immediate(
|
|
90
|
+
reducer_name: string,
|
|
91
|
+
args: Uint8Array
|
|
92
|
+
): void;
|
|
93
|
+
export function console_log(level: u8, message: string): void;
|
|
94
|
+
export function console_timer_start(name: string): u32;
|
|
95
|
+
export function console_timer_end(span_id: u32): void;
|
|
96
|
+
export function identity(): u256;
|
|
97
|
+
export function get_jwt_payload(connection_id: u128): Uint8Array;
|
|
98
|
+
|
|
99
|
+
export function procedure_http_request(
|
|
100
|
+
request: Uint8Array,
|
|
101
|
+
body: Uint8Array | string
|
|
102
|
+
): [response: Uint8Array, body: Uint8Array];
|
|
103
|
+
|
|
104
|
+
export function procedure_start_mut_tx(): bigint;
|
|
105
|
+
|
|
106
|
+
export function procedure_commit_mut_tx();
|
|
107
|
+
|
|
108
|
+
export function procedure_abort_mut_tx();
|
|
109
|
+
|
|
110
|
+
export function datastore_index_scan_point_bsatn(
|
|
111
|
+
index_id: u32,
|
|
112
|
+
point: ArrayBuffer,
|
|
113
|
+
point_len: u32
|
|
114
|
+
): u32;
|
|
115
|
+
|
|
116
|
+
export function datastore_delete_by_index_scan_point_bsatn(
|
|
117
|
+
index_id: u32,
|
|
118
|
+
point: ArrayBuffer,
|
|
119
|
+
point_len: u32
|
|
120
|
+
): u32;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
declare module 'spacetime:sys@2.1' {
|
|
124
|
+
export function datastore_clear(table_id: u32): u64;
|
|
125
|
+
}
|
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
import { schema } from './schema';
|
|
2
|
-
import { table } from '../lib/table';
|
|
3
|
-
import t from '../lib/type_builders';
|
|
4
|
-
|
|
5
|
-
const person = table(
|
|
6
|
-
{
|
|
7
|
-
name: 'person',
|
|
8
|
-
indexes: [
|
|
9
|
-
{
|
|
10
|
-
accessor: 'name_id_idx',
|
|
11
|
-
name: 'name_id_idx',
|
|
12
|
-
algorithm: 'btree',
|
|
13
|
-
columns: ['name', 'id'] as const,
|
|
14
|
-
},
|
|
15
|
-
],
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
id: t.u32().primaryKey(),
|
|
19
|
-
name: t.string(),
|
|
20
|
-
}
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
const personWithExtra = table(
|
|
24
|
-
{ name: 'personWithExtra' },
|
|
25
|
-
{
|
|
26
|
-
id: t.u32(),
|
|
27
|
-
name: t.string(),
|
|
28
|
-
extraField: t.string(),
|
|
29
|
-
}
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
const personWithMissing = table(
|
|
33
|
-
{ name: 'personWithMissing' },
|
|
34
|
-
{
|
|
35
|
-
id: t.u32(),
|
|
36
|
-
}
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const personReordered = table(
|
|
40
|
-
{ name: 'personReordered' },
|
|
41
|
-
{
|
|
42
|
-
name: t.string(),
|
|
43
|
-
id: t.u32(),
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
const order = table(
|
|
48
|
-
{
|
|
49
|
-
name: 'order',
|
|
50
|
-
indexes: [
|
|
51
|
-
{
|
|
52
|
-
accessor: 'id_person_id',
|
|
53
|
-
name: 'id_person_id', // We are adding this to make sure `person_id` still isn't considered indexed.
|
|
54
|
-
algorithm: 'btree',
|
|
55
|
-
columns: ['id', 'person_id'] as const,
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
id: t.u32().primaryKey(),
|
|
61
|
-
person_name: t.string().index(),
|
|
62
|
-
person_id: t.u32(),
|
|
63
|
-
}
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
const spacetime = schema({
|
|
67
|
-
person,
|
|
68
|
-
order,
|
|
69
|
-
personWithExtra,
|
|
70
|
-
personReordered,
|
|
71
|
-
personWithMissing,
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
const arrayRetValue = t.array(person.rowType);
|
|
75
|
-
const optionalPerson = t.option(person.rowType);
|
|
76
|
-
const multiplePrimaryKeyRows = t.array(
|
|
77
|
-
t.row('MultiplePrimaryKeyRows', {
|
|
78
|
-
id: t.u32().primaryKey(),
|
|
79
|
-
name: t.string().primaryKey(),
|
|
80
|
-
})
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
spacetime.anonymousView({ name: 'v1', public: true }, arrayRetValue, ctx => {
|
|
84
|
-
return ctx.from.person.build();
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
// @ts-expect-error views can have at most one primaryKey column on the returned row type.
|
|
88
|
-
spacetime.anonymousView(
|
|
89
|
-
{ name: 'multiplePrimaryRows', public: true },
|
|
90
|
-
multiplePrimaryKeyRows,
|
|
91
|
-
() => []
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
// @ts-expect-error the same multiple-primary-key check also applies to query-builder views.
|
|
95
|
-
spacetime.anonymousView(
|
|
96
|
-
{ name: 'multiplePrimaryRowsQuery', public: true },
|
|
97
|
-
multiplePrimaryKeyRows,
|
|
98
|
-
ctx => {
|
|
99
|
-
return ctx.from.person;
|
|
100
|
-
}
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
spacetime.anonymousView(
|
|
104
|
-
{ name: 'optionalPerson', public: true },
|
|
105
|
-
optionalPerson,
|
|
106
|
-
ctx => {
|
|
107
|
-
return ctx.db.person.iter().next().value;
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
spacetime.anonymousView(
|
|
112
|
-
{ name: 'optionalPersonWrong', public: true },
|
|
113
|
-
optionalPerson,
|
|
114
|
-
// @ts-expect-error returns a value of the wrong type.
|
|
115
|
-
ctx => {
|
|
116
|
-
return ctx.db.order.iter().next().value;
|
|
117
|
-
}
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
// Extra fields are only an issue for queries.
|
|
121
|
-
spacetime.anonymousView(
|
|
122
|
-
{ name: 'optionalPersonWithExtra', public: true },
|
|
123
|
-
optionalPerson,
|
|
124
|
-
ctx => {
|
|
125
|
-
return ctx.db.personWithExtra.iter().next().value;
|
|
126
|
-
}
|
|
127
|
-
);
|
|
128
|
-
|
|
129
|
-
spacetime.anonymousView(
|
|
130
|
-
{ name: 'v2', public: true },
|
|
131
|
-
arrayRetValue,
|
|
132
|
-
// @ts-expect-error returns a query of the wrong type.
|
|
133
|
-
ctx => {
|
|
134
|
-
return ctx.from.order.build();
|
|
135
|
-
}
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
// For queries, we can't return rows with extra fields.
|
|
139
|
-
spacetime.anonymousView(
|
|
140
|
-
{ name: 'v3', public: true },
|
|
141
|
-
arrayRetValue,
|
|
142
|
-
// @ts-expect-error returns a query of the wrong type.
|
|
143
|
-
ctx => {
|
|
144
|
-
return ctx.from.personWithExtra.build();
|
|
145
|
-
}
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
// Ideally this would fail, since we depend on the field ordering for serialization.
|
|
149
|
-
spacetime.anonymousView(
|
|
150
|
-
{ name: 'reorderedPerson', public: true },
|
|
151
|
-
arrayRetValue,
|
|
152
|
-
// Comment this out if we can fix the types.
|
|
153
|
-
// // @ts-expect-error returns a query of the wrong type.
|
|
154
|
-
ctx => {
|
|
155
|
-
return ctx.from.personReordered.build();
|
|
156
|
-
}
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
// Fails because it is missing a field.
|
|
160
|
-
spacetime.anonymousView(
|
|
161
|
-
{ name: 'missingField', public: true },
|
|
162
|
-
arrayRetValue,
|
|
163
|
-
// @ts-expect-error returns a query of the wrong type.
|
|
164
|
-
ctx => {
|
|
165
|
-
return ctx.from.personWithMissing.build();
|
|
166
|
-
}
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
spacetime.anonymousView({ name: 'v4', public: true }, arrayRetValue, ctx => {
|
|
170
|
-
// @ts-expect-error returns a query of the wrong type.
|
|
171
|
-
const _invalid = ctx.from.person.where(row => row.id.eq('string')).build();
|
|
172
|
-
const _columnEqs = ctx.from.person.where(row => row.id.eq(row.id)).build();
|
|
173
|
-
return ctx.from.person.where(row => row.id.eq(5)).build();
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
spacetime.anonymousView({ name: 'v5', public: true }, arrayRetValue, ctx => {
|
|
177
|
-
const _nonIndexedSemijoin = ctx.from.person
|
|
178
|
-
.where(row => row.id.eq(5))
|
|
179
|
-
// @ts-expect-error person_id is not indexed.
|
|
180
|
-
.leftSemijoin(ctx.from.order, (p, o) => p.id.eq(o.person_id))
|
|
181
|
-
.build();
|
|
182
|
-
const _fromCompositeIndex = ctx.from.person
|
|
183
|
-
.where(row => row.id.eq(5))
|
|
184
|
-
.leftSemijoin(ctx.from.order, (p, o) => p.name.eq(o.person_name))
|
|
185
|
-
.build();
|
|
186
|
-
const _mixedScopeAndInJoinPredicate = ctx.from.person
|
|
187
|
-
// @ts-expect-error semijoin on(...) only supports one table scope for and/or clauses.
|
|
188
|
-
.leftSemijoin(ctx.from.order, (p, o) => p.id.eq(o.id).and(o.id.eq(5)))
|
|
189
|
-
.build();
|
|
190
|
-
return ctx.from.person
|
|
191
|
-
.where(row => row.id.eq(5))
|
|
192
|
-
.leftSemijoin(ctx.from.order, (p, o) => p.id.eq(o.id))
|
|
193
|
-
.build();
|
|
194
|
-
});
|
|
1
|
+
import { schema } from './schema';
|
|
2
|
+
import { table } from '../lib/table';
|
|
3
|
+
import t from '../lib/type_builders';
|
|
4
|
+
|
|
5
|
+
const person = table(
|
|
6
|
+
{
|
|
7
|
+
name: 'person',
|
|
8
|
+
indexes: [
|
|
9
|
+
{
|
|
10
|
+
accessor: 'name_id_idx',
|
|
11
|
+
name: 'name_id_idx',
|
|
12
|
+
algorithm: 'btree',
|
|
13
|
+
columns: ['name', 'id'] as const,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: t.u32().primaryKey(),
|
|
19
|
+
name: t.string(),
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const personWithExtra = table(
|
|
24
|
+
{ name: 'personWithExtra' },
|
|
25
|
+
{
|
|
26
|
+
id: t.u32(),
|
|
27
|
+
name: t.string(),
|
|
28
|
+
extraField: t.string(),
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const personWithMissing = table(
|
|
33
|
+
{ name: 'personWithMissing' },
|
|
34
|
+
{
|
|
35
|
+
id: t.u32(),
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const personReordered = table(
|
|
40
|
+
{ name: 'personReordered' },
|
|
41
|
+
{
|
|
42
|
+
name: t.string(),
|
|
43
|
+
id: t.u32(),
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const order = table(
|
|
48
|
+
{
|
|
49
|
+
name: 'order',
|
|
50
|
+
indexes: [
|
|
51
|
+
{
|
|
52
|
+
accessor: 'id_person_id',
|
|
53
|
+
name: 'id_person_id', // We are adding this to make sure `person_id` still isn't considered indexed.
|
|
54
|
+
algorithm: 'btree',
|
|
55
|
+
columns: ['id', 'person_id'] as const,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: t.u32().primaryKey(),
|
|
61
|
+
person_name: t.string().index(),
|
|
62
|
+
person_id: t.u32(),
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const spacetime = schema({
|
|
67
|
+
person,
|
|
68
|
+
order,
|
|
69
|
+
personWithExtra,
|
|
70
|
+
personReordered,
|
|
71
|
+
personWithMissing,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const arrayRetValue = t.array(person.rowType);
|
|
75
|
+
const optionalPerson = t.option(person.rowType);
|
|
76
|
+
const multiplePrimaryKeyRows = t.array(
|
|
77
|
+
t.row('MultiplePrimaryKeyRows', {
|
|
78
|
+
id: t.u32().primaryKey(),
|
|
79
|
+
name: t.string().primaryKey(),
|
|
80
|
+
})
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
spacetime.anonymousView({ name: 'v1', public: true }, arrayRetValue, ctx => {
|
|
84
|
+
return ctx.from.person.build();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// @ts-expect-error views can have at most one primaryKey column on the returned row type.
|
|
88
|
+
spacetime.anonymousView(
|
|
89
|
+
{ name: 'multiplePrimaryRows', public: true },
|
|
90
|
+
multiplePrimaryKeyRows,
|
|
91
|
+
() => []
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
// @ts-expect-error the same multiple-primary-key check also applies to query-builder views.
|
|
95
|
+
spacetime.anonymousView(
|
|
96
|
+
{ name: 'multiplePrimaryRowsQuery', public: true },
|
|
97
|
+
multiplePrimaryKeyRows,
|
|
98
|
+
ctx => {
|
|
99
|
+
return ctx.from.person;
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
spacetime.anonymousView(
|
|
104
|
+
{ name: 'optionalPerson', public: true },
|
|
105
|
+
optionalPerson,
|
|
106
|
+
ctx => {
|
|
107
|
+
return ctx.db.person.iter().next().value;
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
spacetime.anonymousView(
|
|
112
|
+
{ name: 'optionalPersonWrong', public: true },
|
|
113
|
+
optionalPerson,
|
|
114
|
+
// @ts-expect-error returns a value of the wrong type.
|
|
115
|
+
ctx => {
|
|
116
|
+
return ctx.db.order.iter().next().value;
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
// Extra fields are only an issue for queries.
|
|
121
|
+
spacetime.anonymousView(
|
|
122
|
+
{ name: 'optionalPersonWithExtra', public: true },
|
|
123
|
+
optionalPerson,
|
|
124
|
+
ctx => {
|
|
125
|
+
return ctx.db.personWithExtra.iter().next().value;
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
spacetime.anonymousView(
|
|
130
|
+
{ name: 'v2', public: true },
|
|
131
|
+
arrayRetValue,
|
|
132
|
+
// @ts-expect-error returns a query of the wrong type.
|
|
133
|
+
ctx => {
|
|
134
|
+
return ctx.from.order.build();
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
// For queries, we can't return rows with extra fields.
|
|
139
|
+
spacetime.anonymousView(
|
|
140
|
+
{ name: 'v3', public: true },
|
|
141
|
+
arrayRetValue,
|
|
142
|
+
// @ts-expect-error returns a query of the wrong type.
|
|
143
|
+
ctx => {
|
|
144
|
+
return ctx.from.personWithExtra.build();
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
// Ideally this would fail, since we depend on the field ordering for serialization.
|
|
149
|
+
spacetime.anonymousView(
|
|
150
|
+
{ name: 'reorderedPerson', public: true },
|
|
151
|
+
arrayRetValue,
|
|
152
|
+
// Comment this out if we can fix the types.
|
|
153
|
+
// // @ts-expect-error returns a query of the wrong type.
|
|
154
|
+
ctx => {
|
|
155
|
+
return ctx.from.personReordered.build();
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
// Fails because it is missing a field.
|
|
160
|
+
spacetime.anonymousView(
|
|
161
|
+
{ name: 'missingField', public: true },
|
|
162
|
+
arrayRetValue,
|
|
163
|
+
// @ts-expect-error returns a query of the wrong type.
|
|
164
|
+
ctx => {
|
|
165
|
+
return ctx.from.personWithMissing.build();
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
spacetime.anonymousView({ name: 'v4', public: true }, arrayRetValue, ctx => {
|
|
170
|
+
// @ts-expect-error returns a query of the wrong type.
|
|
171
|
+
const _invalid = ctx.from.person.where(row => row.id.eq('string')).build();
|
|
172
|
+
const _columnEqs = ctx.from.person.where(row => row.id.eq(row.id)).build();
|
|
173
|
+
return ctx.from.person.where(row => row.id.eq(5)).build();
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
spacetime.anonymousView({ name: 'v5', public: true }, arrayRetValue, ctx => {
|
|
177
|
+
const _nonIndexedSemijoin = ctx.from.person
|
|
178
|
+
.where(row => row.id.eq(5))
|
|
179
|
+
// @ts-expect-error person_id is not indexed.
|
|
180
|
+
.leftSemijoin(ctx.from.order, (p, o) => p.id.eq(o.person_id))
|
|
181
|
+
.build();
|
|
182
|
+
const _fromCompositeIndex = ctx.from.person
|
|
183
|
+
.where(row => row.id.eq(5))
|
|
184
|
+
.leftSemijoin(ctx.from.order, (p, o) => p.name.eq(o.person_name))
|
|
185
|
+
.build();
|
|
186
|
+
const _mixedScopeAndInJoinPredicate = ctx.from.person
|
|
187
|
+
// @ts-expect-error semijoin on(...) only supports one table scope for and/or clauses.
|
|
188
|
+
.leftSemijoin(ctx.from.order, (p, o) => p.id.eq(o.id).and(o.id.eq(5)))
|
|
189
|
+
.build();
|
|
190
|
+
return ctx.from.person
|
|
191
|
+
.where(row => row.id.eq(5))
|
|
192
|
+
.leftSemijoin(ctx.from.order, (p, o) => p.id.eq(o.id))
|
|
193
|
+
.build();
|
|
194
|
+
});
|