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/sdk/logger.ts
CHANGED
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import { stringify as ssStringify } from 'safe-stable-stringify';
|
|
2
|
-
import { u128ToHexString, u256ToHexString } from '../lib/util';
|
|
3
|
-
export type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'trace';
|
|
4
|
-
|
|
5
|
-
const LogLevelIdentifierIcon = {
|
|
6
|
-
component: '📦',
|
|
7
|
-
info: 'ℹ️',
|
|
8
|
-
warn: '⚠️',
|
|
9
|
-
error: '❌',
|
|
10
|
-
debug: '🐛',
|
|
11
|
-
trace: '🔍',
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const LogStyle = {
|
|
15
|
-
component:
|
|
16
|
-
'color: #fff; background-color: #8D6FDD; padding: 2px 5px; border-radius: 3px;',
|
|
17
|
-
info: 'color: #fff; background-color: #007bff; padding: 2px 5px; border-radius: 3px;',
|
|
18
|
-
warn: 'color: #fff; background-color: #ffc107; padding: 2px 5px; border-radius: 3px;',
|
|
19
|
-
error:
|
|
20
|
-
'color: #fff; background-color: #dc3545; padding: 2px 5px; border-radius: 3px;',
|
|
21
|
-
debug:
|
|
22
|
-
'color: #fff; background-color: #28a745; padding: 2px 5px; border-radius: 3px;',
|
|
23
|
-
trace:
|
|
24
|
-
'color: #fff; background-color: #17a2b8; padding: 2px 5px; border-radius: 3px;',
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const LogTextStyle = {
|
|
28
|
-
component: 'color: #8D6FDD;',
|
|
29
|
-
info: 'color: #007bff;',
|
|
30
|
-
warn: 'color: #ffc107;',
|
|
31
|
-
error: 'color: #dc3545;',
|
|
32
|
-
debug: 'color: #28a745;',
|
|
33
|
-
trace: 'color: #17a2b8;',
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const LogLevelRank: Record<LogLevel, number> = {
|
|
37
|
-
error: 0,
|
|
38
|
-
warn: 1,
|
|
39
|
-
info: 2,
|
|
40
|
-
debug: 3,
|
|
41
|
-
trace: 4,
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
let globalLogLevel: LogLevel = 'info';
|
|
45
|
-
|
|
46
|
-
export const setGlobalLogLevel = (level: LogLevel): void => {
|
|
47
|
-
globalLogLevel = level;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
export const getGlobalLogLevel = (): LogLevel => globalLogLevel;
|
|
51
|
-
|
|
52
|
-
const shouldLog = (level: LogLevel): boolean =>
|
|
53
|
-
LogLevelRank[level] <= LogLevelRank[globalLogLevel];
|
|
54
|
-
|
|
55
|
-
// Lazy can be a function or the actual thing, so we can make verbose logs cheap when disabled.
|
|
56
|
-
type Lazy<T> = T | (() => T);
|
|
57
|
-
const resolveLazy = <T>(v: Lazy<T>): T =>
|
|
58
|
-
typeof v === 'function' ? (v as () => T)() : v;
|
|
59
|
-
|
|
60
|
-
const toHex = (bytes: Uint8Array): string =>
|
|
61
|
-
Array.from(bytes)
|
|
62
|
-
.map(b => b.toString(16).padStart(2, '0'))
|
|
63
|
-
.join('');
|
|
64
|
-
const ARRAY_TRUNCATION_THRESHOLD = 25;
|
|
65
|
-
const ARRAY_PREVIEW_COUNT = 10;
|
|
66
|
-
|
|
67
|
-
const SENSITIVE_KEYS = new Set([
|
|
68
|
-
'token',
|
|
69
|
-
'authToken',
|
|
70
|
-
'authorization',
|
|
71
|
-
'accessToken',
|
|
72
|
-
'refreshToken',
|
|
73
|
-
]);
|
|
74
|
-
|
|
75
|
-
export const stringify = (value: unknown): string | undefined =>
|
|
76
|
-
ssStringify(value, (key: string, current: unknown) => {
|
|
77
|
-
if (SENSITIVE_KEYS.has(key)) {
|
|
78
|
-
return '[REDACTED]';
|
|
79
|
-
}
|
|
80
|
-
if (
|
|
81
|
-
current &&
|
|
82
|
-
typeof current === 'object' &&
|
|
83
|
-
'__identity__' in current &&
|
|
84
|
-
typeof (current as { __identity__: unknown }).__identity__ === 'bigint'
|
|
85
|
-
) {
|
|
86
|
-
return u256ToHexString(
|
|
87
|
-
(current as { __identity__: bigint }).__identity__
|
|
88
|
-
);
|
|
89
|
-
}
|
|
90
|
-
if (
|
|
91
|
-
current &&
|
|
92
|
-
typeof current === 'object' &&
|
|
93
|
-
'__connection_id__' in current &&
|
|
94
|
-
typeof (current as { __connection_id__: unknown }).__connection_id__ ===
|
|
95
|
-
'bigint'
|
|
96
|
-
) {
|
|
97
|
-
return u128ToHexString(
|
|
98
|
-
(current as { __connection_id__: bigint }).__connection_id__
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
if (current instanceof Uint8Array) {
|
|
102
|
-
if (current.length < 25) {
|
|
103
|
-
return `0x${toHex(current)}`;
|
|
104
|
-
}
|
|
105
|
-
const head = current.subarray(0, 10);
|
|
106
|
-
return `Uint8Array(len=${current.length}, head=0x${toHex(head)})`;
|
|
107
|
-
}
|
|
108
|
-
if (
|
|
109
|
-
Array.isArray(current) &&
|
|
110
|
-
current.length >= ARRAY_TRUNCATION_THRESHOLD
|
|
111
|
-
) {
|
|
112
|
-
const head = ssStringify(current.slice(0, ARRAY_PREVIEW_COUNT));
|
|
113
|
-
return `Array(len=${current.length}, head=${head ?? '[]'})`;
|
|
114
|
-
}
|
|
115
|
-
return current;
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
export const stdbLogger = (
|
|
119
|
-
level: LogLevel,
|
|
120
|
-
message: Lazy<any>,
|
|
121
|
-
...args: Lazy<any>
|
|
122
|
-
): void => {
|
|
123
|
-
if (!shouldLog(level)) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const resolvedMessage = resolveLazy(message);
|
|
127
|
-
const resolvedArgs = args.map(resolveLazy);
|
|
128
|
-
console.log(
|
|
129
|
-
`%c${LogLevelIdentifierIcon[level]} ${level.toUpperCase()}%c ${resolvedMessage}`,
|
|
130
|
-
LogStyle[level],
|
|
131
|
-
LogTextStyle[level],
|
|
132
|
-
...resolvedArgs
|
|
133
|
-
);
|
|
134
|
-
};
|
|
1
|
+
import { stringify as ssStringify } from 'safe-stable-stringify';
|
|
2
|
+
import { u128ToHexString, u256ToHexString } from '../lib/util';
|
|
3
|
+
export type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'trace';
|
|
4
|
+
|
|
5
|
+
const LogLevelIdentifierIcon = {
|
|
6
|
+
component: '📦',
|
|
7
|
+
info: 'ℹ️',
|
|
8
|
+
warn: '⚠️',
|
|
9
|
+
error: '❌',
|
|
10
|
+
debug: '🐛',
|
|
11
|
+
trace: '🔍',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const LogStyle = {
|
|
15
|
+
component:
|
|
16
|
+
'color: #fff; background-color: #8D6FDD; padding: 2px 5px; border-radius: 3px;',
|
|
17
|
+
info: 'color: #fff; background-color: #007bff; padding: 2px 5px; border-radius: 3px;',
|
|
18
|
+
warn: 'color: #fff; background-color: #ffc107; padding: 2px 5px; border-radius: 3px;',
|
|
19
|
+
error:
|
|
20
|
+
'color: #fff; background-color: #dc3545; padding: 2px 5px; border-radius: 3px;',
|
|
21
|
+
debug:
|
|
22
|
+
'color: #fff; background-color: #28a745; padding: 2px 5px; border-radius: 3px;',
|
|
23
|
+
trace:
|
|
24
|
+
'color: #fff; background-color: #17a2b8; padding: 2px 5px; border-radius: 3px;',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const LogTextStyle = {
|
|
28
|
+
component: 'color: #8D6FDD;',
|
|
29
|
+
info: 'color: #007bff;',
|
|
30
|
+
warn: 'color: #ffc107;',
|
|
31
|
+
error: 'color: #dc3545;',
|
|
32
|
+
debug: 'color: #28a745;',
|
|
33
|
+
trace: 'color: #17a2b8;',
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const LogLevelRank: Record<LogLevel, number> = {
|
|
37
|
+
error: 0,
|
|
38
|
+
warn: 1,
|
|
39
|
+
info: 2,
|
|
40
|
+
debug: 3,
|
|
41
|
+
trace: 4,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
let globalLogLevel: LogLevel = 'info';
|
|
45
|
+
|
|
46
|
+
export const setGlobalLogLevel = (level: LogLevel): void => {
|
|
47
|
+
globalLogLevel = level;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const getGlobalLogLevel = (): LogLevel => globalLogLevel;
|
|
51
|
+
|
|
52
|
+
const shouldLog = (level: LogLevel): boolean =>
|
|
53
|
+
LogLevelRank[level] <= LogLevelRank[globalLogLevel];
|
|
54
|
+
|
|
55
|
+
// Lazy can be a function or the actual thing, so we can make verbose logs cheap when disabled.
|
|
56
|
+
type Lazy<T> = T | (() => T);
|
|
57
|
+
const resolveLazy = <T>(v: Lazy<T>): T =>
|
|
58
|
+
typeof v === 'function' ? (v as () => T)() : v;
|
|
59
|
+
|
|
60
|
+
const toHex = (bytes: Uint8Array): string =>
|
|
61
|
+
Array.from(bytes)
|
|
62
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
63
|
+
.join('');
|
|
64
|
+
const ARRAY_TRUNCATION_THRESHOLD = 25;
|
|
65
|
+
const ARRAY_PREVIEW_COUNT = 10;
|
|
66
|
+
|
|
67
|
+
const SENSITIVE_KEYS = new Set([
|
|
68
|
+
'token',
|
|
69
|
+
'authToken',
|
|
70
|
+
'authorization',
|
|
71
|
+
'accessToken',
|
|
72
|
+
'refreshToken',
|
|
73
|
+
]);
|
|
74
|
+
|
|
75
|
+
export const stringify = (value: unknown): string | undefined =>
|
|
76
|
+
ssStringify(value, (key: string, current: unknown) => {
|
|
77
|
+
if (SENSITIVE_KEYS.has(key)) {
|
|
78
|
+
return '[REDACTED]';
|
|
79
|
+
}
|
|
80
|
+
if (
|
|
81
|
+
current &&
|
|
82
|
+
typeof current === 'object' &&
|
|
83
|
+
'__identity__' in current &&
|
|
84
|
+
typeof (current as { __identity__: unknown }).__identity__ === 'bigint'
|
|
85
|
+
) {
|
|
86
|
+
return u256ToHexString(
|
|
87
|
+
(current as { __identity__: bigint }).__identity__
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
if (
|
|
91
|
+
current &&
|
|
92
|
+
typeof current === 'object' &&
|
|
93
|
+
'__connection_id__' in current &&
|
|
94
|
+
typeof (current as { __connection_id__: unknown }).__connection_id__ ===
|
|
95
|
+
'bigint'
|
|
96
|
+
) {
|
|
97
|
+
return u128ToHexString(
|
|
98
|
+
(current as { __connection_id__: bigint }).__connection_id__
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
if (current instanceof Uint8Array) {
|
|
102
|
+
if (current.length < 25) {
|
|
103
|
+
return `0x${toHex(current)}`;
|
|
104
|
+
}
|
|
105
|
+
const head = current.subarray(0, 10);
|
|
106
|
+
return `Uint8Array(len=${current.length}, head=0x${toHex(head)})`;
|
|
107
|
+
}
|
|
108
|
+
if (
|
|
109
|
+
Array.isArray(current) &&
|
|
110
|
+
current.length >= ARRAY_TRUNCATION_THRESHOLD
|
|
111
|
+
) {
|
|
112
|
+
const head = ssStringify(current.slice(0, ARRAY_PREVIEW_COUNT));
|
|
113
|
+
return `Array(len=${current.length}, head=${head ?? '[]'})`;
|
|
114
|
+
}
|
|
115
|
+
return current;
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
export const stdbLogger = (
|
|
119
|
+
level: LogLevel,
|
|
120
|
+
message: Lazy<any>,
|
|
121
|
+
...args: Lazy<any>
|
|
122
|
+
): void => {
|
|
123
|
+
if (!shouldLog(level)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const resolvedMessage = resolveLazy(message);
|
|
127
|
+
const resolvedArgs = args.map(resolveLazy);
|
|
128
|
+
console.log(
|
|
129
|
+
`%c${LogLevelIdentifierIcon[level]} ${level.toUpperCase()}%c ${resolvedMessage}`,
|
|
130
|
+
LogStyle[level],
|
|
131
|
+
LogTextStyle[level],
|
|
132
|
+
...resolvedArgs
|
|
133
|
+
);
|
|
134
|
+
};
|
package/src/sdk/message_types.ts
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import type { TableUpdate } from './table_cache.ts';
|
|
2
|
-
import type { UntypedTableDef } from '../lib/table.ts';
|
|
3
|
-
import type { ReducerOutcome } from './client_api/types';
|
|
4
|
-
|
|
5
|
-
export type TransactionUpdateMessage = {
|
|
6
|
-
tag: 'TransactionUpdate';
|
|
7
|
-
tableUpdates: TableUpdate<UntypedTableDef>[];
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export type SubscribeAppliedMessage = {
|
|
11
|
-
tag: 'SubscribeApplied';
|
|
12
|
-
querySetId: number;
|
|
13
|
-
tableUpdates: TableUpdate<UntypedTableDef>[];
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export type UnsubscribeAppliedMessage = {
|
|
17
|
-
tag: 'UnsubscribeApplied';
|
|
18
|
-
querySetId: number;
|
|
19
|
-
tableUpdates: TableUpdate<UntypedTableDef>[];
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export type SubscriptionError = {
|
|
23
|
-
tag: 'SubscriptionError';
|
|
24
|
-
querySetId: number;
|
|
25
|
-
error: string;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export type ReducerResultMessage = {
|
|
29
|
-
tag: 'ReducerResult';
|
|
30
|
-
requestId: number;
|
|
31
|
-
result: ReducerOutcome;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export type ProcedureResultMessage = {
|
|
35
|
-
tag: 'ProcedureResult';
|
|
36
|
-
requestId: number;
|
|
37
|
-
result: { tag: 'Ok'; value: Uint8Array } | { tag: 'Err'; value: string };
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export type Message =
|
|
41
|
-
| TransactionUpdateMessage
|
|
42
|
-
| SubscribeAppliedMessage
|
|
43
|
-
| UnsubscribeAppliedMessage
|
|
44
|
-
| SubscriptionError
|
|
45
|
-
| ReducerResultMessage
|
|
46
|
-
| ProcedureResultMessage;
|
|
1
|
+
import type { TableUpdate } from './table_cache.ts';
|
|
2
|
+
import type { UntypedTableDef } from '../lib/table.ts';
|
|
3
|
+
import type { ReducerOutcome } from './client_api/types';
|
|
4
|
+
|
|
5
|
+
export type TransactionUpdateMessage = {
|
|
6
|
+
tag: 'TransactionUpdate';
|
|
7
|
+
tableUpdates: TableUpdate<UntypedTableDef>[];
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type SubscribeAppliedMessage = {
|
|
11
|
+
tag: 'SubscribeApplied';
|
|
12
|
+
querySetId: number;
|
|
13
|
+
tableUpdates: TableUpdate<UntypedTableDef>[];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type UnsubscribeAppliedMessage = {
|
|
17
|
+
tag: 'UnsubscribeApplied';
|
|
18
|
+
querySetId: number;
|
|
19
|
+
tableUpdates: TableUpdate<UntypedTableDef>[];
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type SubscriptionError = {
|
|
23
|
+
tag: 'SubscriptionError';
|
|
24
|
+
querySetId: number;
|
|
25
|
+
error: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type ReducerResultMessage = {
|
|
29
|
+
tag: 'ReducerResult';
|
|
30
|
+
requestId: number;
|
|
31
|
+
result: ReducerOutcome;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type ProcedureResultMessage = {
|
|
35
|
+
tag: 'ProcedureResult';
|
|
36
|
+
requestId: number;
|
|
37
|
+
result: { tag: 'Ok'; value: Uint8Array } | { tag: 'Err'; value: string };
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type Message =
|
|
41
|
+
| TransactionUpdateMessage
|
|
42
|
+
| SubscribeAppliedMessage
|
|
43
|
+
| UnsubscribeAppliedMessage
|
|
44
|
+
| SubscriptionError
|
|
45
|
+
| ReducerResultMessage
|
|
46
|
+
| ProcedureResultMessage;
|
package/src/sdk/procedures.ts
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
import type { ParamsObj } from '../lib/reducers';
|
|
2
|
-
import type { Infer, InferTypeOfRow, TypeBuilder } from '../lib/type_builders';
|
|
3
|
-
import type { CamelCase } from '../lib/type_util';
|
|
4
|
-
import { coerceParams, toCamelCase, type CoerceParams } from '../lib/util';
|
|
5
|
-
import type { UntypedRemoteModule } from './spacetime_module';
|
|
6
|
-
|
|
7
|
-
// Utility: detect 'any'
|
|
8
|
-
type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
|
|
9
|
-
|
|
10
|
-
// Loose shape that allows all three families even when key names are unknown
|
|
11
|
-
type ProceduresViewLoose = {
|
|
12
|
-
// call: camelCase(name)
|
|
13
|
-
[k: string]: (params: any) => Promise<any>;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export type ProceduresView<RemoteModule> = IfAny<
|
|
17
|
-
RemoteModule,
|
|
18
|
-
ProceduresViewLoose,
|
|
19
|
-
RemoteModule extends UntypedRemoteModule
|
|
20
|
-
? // x: camelCase(name)
|
|
21
|
-
{
|
|
22
|
-
[K in RemoteModule['procedures'][number] as K['accessorName']]: (
|
|
23
|
-
params: InferTypeOfRow<K['params']>
|
|
24
|
-
) => Promise<Infer<K['returnType']>>;
|
|
25
|
-
}
|
|
26
|
-
: never
|
|
27
|
-
>;
|
|
28
|
-
|
|
29
|
-
export type UntypedProcedureDef = {
|
|
30
|
-
name: string;
|
|
31
|
-
accessorName: string;
|
|
32
|
-
params: CoerceParams<ParamsObj>;
|
|
33
|
-
returnType: TypeBuilder<any, any>;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export type UntypedProceduresDef = {
|
|
37
|
-
procedures: readonly UntypedProcedureDef[];
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export function procedures<const H extends readonly UntypedProcedureDef[]>(
|
|
41
|
-
...handles: H
|
|
42
|
-
): { procedures: H };
|
|
43
|
-
|
|
44
|
-
export function procedures<const H extends readonly UntypedProcedureDef[]>(
|
|
45
|
-
handles: H
|
|
46
|
-
): { procedures: H };
|
|
47
|
-
|
|
48
|
-
export function procedures<const H extends readonly UntypedProcedureDef[]>(
|
|
49
|
-
...args: [H] | H
|
|
50
|
-
): { procedures: H } {
|
|
51
|
-
const procedures = (
|
|
52
|
-
args.length === 1 && Array.isArray(args[0]) ? args[0] : args
|
|
53
|
-
) as H;
|
|
54
|
-
return { procedures };
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
type ProcedureDef<
|
|
58
|
-
Name extends string,
|
|
59
|
-
Params extends ParamsObj,
|
|
60
|
-
ReturnType extends TypeBuilder<any, any>,
|
|
61
|
-
> = {
|
|
62
|
-
name: Name;
|
|
63
|
-
accessorName: CamelCase<Name>;
|
|
64
|
-
params: CoerceParams<Params>;
|
|
65
|
-
returnType: ReturnType;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export function procedureSchema<
|
|
69
|
-
ProcedureName extends string,
|
|
70
|
-
Params extends ParamsObj,
|
|
71
|
-
ReturnType extends TypeBuilder<any, any>,
|
|
72
|
-
>(
|
|
73
|
-
name: ProcedureName,
|
|
74
|
-
params: Params,
|
|
75
|
-
returnType: ReturnType
|
|
76
|
-
): ProcedureDef<ProcedureName, Params, ReturnType> {
|
|
77
|
-
return {
|
|
78
|
-
name,
|
|
79
|
-
accessorName: toCamelCase(name),
|
|
80
|
-
params: coerceParams(params),
|
|
81
|
-
returnType,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
1
|
+
import type { ParamsObj } from '../lib/reducers';
|
|
2
|
+
import type { Infer, InferTypeOfRow, TypeBuilder } from '../lib/type_builders';
|
|
3
|
+
import type { CamelCase } from '../lib/type_util';
|
|
4
|
+
import { coerceParams, toCamelCase, type CoerceParams } from '../lib/util';
|
|
5
|
+
import type { UntypedRemoteModule } from './spacetime_module';
|
|
6
|
+
|
|
7
|
+
// Utility: detect 'any'
|
|
8
|
+
type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
|
|
9
|
+
|
|
10
|
+
// Loose shape that allows all three families even when key names are unknown
|
|
11
|
+
type ProceduresViewLoose = {
|
|
12
|
+
// call: camelCase(name)
|
|
13
|
+
[k: string]: (params: any) => Promise<any>;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type ProceduresView<RemoteModule> = IfAny<
|
|
17
|
+
RemoteModule,
|
|
18
|
+
ProceduresViewLoose,
|
|
19
|
+
RemoteModule extends UntypedRemoteModule
|
|
20
|
+
? // x: camelCase(name)
|
|
21
|
+
{
|
|
22
|
+
[K in RemoteModule['procedures'][number] as K['accessorName']]: (
|
|
23
|
+
params: InferTypeOfRow<K['params']>
|
|
24
|
+
) => Promise<Infer<K['returnType']>>;
|
|
25
|
+
}
|
|
26
|
+
: never
|
|
27
|
+
>;
|
|
28
|
+
|
|
29
|
+
export type UntypedProcedureDef = {
|
|
30
|
+
name: string;
|
|
31
|
+
accessorName: string;
|
|
32
|
+
params: CoerceParams<ParamsObj>;
|
|
33
|
+
returnType: TypeBuilder<any, any>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type UntypedProceduresDef = {
|
|
37
|
+
procedures: readonly UntypedProcedureDef[];
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export function procedures<const H extends readonly UntypedProcedureDef[]>(
|
|
41
|
+
...handles: H
|
|
42
|
+
): { procedures: H };
|
|
43
|
+
|
|
44
|
+
export function procedures<const H extends readonly UntypedProcedureDef[]>(
|
|
45
|
+
handles: H
|
|
46
|
+
): { procedures: H };
|
|
47
|
+
|
|
48
|
+
export function procedures<const H extends readonly UntypedProcedureDef[]>(
|
|
49
|
+
...args: [H] | H
|
|
50
|
+
): { procedures: H } {
|
|
51
|
+
const procedures = (
|
|
52
|
+
args.length === 1 && Array.isArray(args[0]) ? args[0] : args
|
|
53
|
+
) as H;
|
|
54
|
+
return { procedures };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type ProcedureDef<
|
|
58
|
+
Name extends string,
|
|
59
|
+
Params extends ParamsObj,
|
|
60
|
+
ReturnType extends TypeBuilder<any, any>,
|
|
61
|
+
> = {
|
|
62
|
+
name: Name;
|
|
63
|
+
accessorName: CamelCase<Name>;
|
|
64
|
+
params: CoerceParams<Params>;
|
|
65
|
+
returnType: ReturnType;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export function procedureSchema<
|
|
69
|
+
ProcedureName extends string,
|
|
70
|
+
Params extends ParamsObj,
|
|
71
|
+
ReturnType extends TypeBuilder<any, any>,
|
|
72
|
+
>(
|
|
73
|
+
name: ProcedureName,
|
|
74
|
+
params: Params,
|
|
75
|
+
returnType: ReturnType
|
|
76
|
+
): ProcedureDef<ProcedureName, Params, ReturnType> {
|
|
77
|
+
return {
|
|
78
|
+
name,
|
|
79
|
+
accessorName: toCamelCase(name),
|
|
80
|
+
params: coerceParams(params),
|
|
81
|
+
returnType,
|
|
82
|
+
};
|
|
83
|
+
}
|
package/src/sdk/reducer_event.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Timestamp } from '../';
|
|
2
|
-
import type { ReducerOutcome } from './client_api/types';
|
|
3
|
-
import type { ReducerEventInfo } from './reducers.ts';
|
|
4
|
-
|
|
5
|
-
export type ReducerEvent<Reducer extends ReducerEventInfo> = {
|
|
6
|
-
/**
|
|
7
|
-
* The time when the reducer started running.
|
|
8
|
-
*
|
|
9
|
-
* @internal This is a number and not Date, as JSON.stringify with date in it gives number, but JSON.parse of the same string does not give date. TO avoid
|
|
10
|
-
* confusion in typing we'll keep it a number
|
|
11
|
-
*/
|
|
12
|
-
timestamp: Timestamp;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* The reducer outcome, including optional return value and updates.
|
|
16
|
-
*/
|
|
17
|
-
outcome: ReducerOutcome;
|
|
18
|
-
|
|
19
|
-
reducer: Reducer;
|
|
20
|
-
};
|
|
1
|
+
import { Timestamp } from '../';
|
|
2
|
+
import type { ReducerOutcome } from './client_api/types';
|
|
3
|
+
import type { ReducerEventInfo } from './reducers.ts';
|
|
4
|
+
|
|
5
|
+
export type ReducerEvent<Reducer extends ReducerEventInfo> = {
|
|
6
|
+
/**
|
|
7
|
+
* The time when the reducer started running.
|
|
8
|
+
*
|
|
9
|
+
* @internal This is a number and not Date, as JSON.stringify with date in it gives number, but JSON.parse of the same string does not give date. TO avoid
|
|
10
|
+
* confusion in typing we'll keep it a number
|
|
11
|
+
*/
|
|
12
|
+
timestamp: Timestamp;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The reducer outcome, including optional return value and updates.
|
|
16
|
+
*/
|
|
17
|
+
outcome: ReducerOutcome;
|
|
18
|
+
|
|
19
|
+
reducer: Reducer;
|
|
20
|
+
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export type ReducerHandle<ReducerName extends string> = {
|
|
2
|
-
/** Phantom reducer name */
|
|
3
|
-
readonly reducerName?: ReducerName;
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
export type ReducerNamesFromReducers<R> = R extends object
|
|
7
|
-
? {
|
|
8
|
-
[K in keyof R]: R[K] extends ReducerHandle<infer ReducerName>
|
|
9
|
-
? ReducerName
|
|
10
|
-
: never;
|
|
11
|
-
}[keyof R]
|
|
12
|
-
: never;
|
|
1
|
+
export type ReducerHandle<ReducerName extends string> = {
|
|
2
|
+
/** Phantom reducer name */
|
|
3
|
+
readonly reducerName?: ReducerName;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export type ReducerNamesFromReducers<R> = R extends object
|
|
7
|
+
? {
|
|
8
|
+
[K in keyof R]: R[K] extends ReducerHandle<infer ReducerName>
|
|
9
|
+
? ReducerName
|
|
10
|
+
: never;
|
|
11
|
+
}[keyof R]
|
|
12
|
+
: never;
|