spacetimedb 2.5.0 → 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 -211
- 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 +120 -50
- package/dist/browser/solid/index.mjs.map +1 -1
- 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/index.cjs +120 -50
- package/dist/solid/index.cjs.map +1 -1
- package/dist/solid/index.mjs +120 -50
- package/dist/solid/index.mjs.map +1 -1
- 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 +1 -1
- 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 -97
- package/src/solid/connection_state.ts +6 -6
- package/src/solid/index.ts +5 -5
- package/src/solid/useProcedure.ts +57 -57
- package/src/solid/useReducer.ts +50 -50
- package/src/solid/useSpacetimeDB.ts +18 -18
- package/src/solid/useTable.ts +203 -203
- 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/dist/react/index.cjs
CHANGED
|
@@ -1508,6 +1508,14 @@ function useSpacetimeDB() {
|
|
|
1508
1508
|
}
|
|
1509
1509
|
|
|
1510
1510
|
// src/sdk/connection_manager.ts
|
|
1511
|
+
var CONNECTION_MANAGER_RECONNECT_BASE_DELAY_MS = 1e3;
|
|
1512
|
+
var CONNECTION_MANAGER_RECONNECT_MAX_DELAY_MS = 3e4;
|
|
1513
|
+
function connectionManagerReconnectDelayMs(attempt) {
|
|
1514
|
+
return Math.min(
|
|
1515
|
+
CONNECTION_MANAGER_RECONNECT_BASE_DELAY_MS * 2 ** attempt,
|
|
1516
|
+
CONNECTION_MANAGER_RECONNECT_MAX_DELAY_MS
|
|
1517
|
+
);
|
|
1518
|
+
}
|
|
1511
1519
|
function defaultState() {
|
|
1512
1520
|
return {
|
|
1513
1521
|
isActive: false,
|
|
@@ -1534,10 +1542,13 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1534
1542
|
}
|
|
1535
1543
|
const managed = {
|
|
1536
1544
|
connection: void 0,
|
|
1545
|
+
builder: void 0,
|
|
1537
1546
|
refCount: 0,
|
|
1538
1547
|
state: defaultState(),
|
|
1539
1548
|
listeners: /* @__PURE__ */ new Set(),
|
|
1540
|
-
pendingRelease: null
|
|
1549
|
+
pendingRelease: null,
|
|
1550
|
+
reconnectTimer: null,
|
|
1551
|
+
reconnectAttempt: 0
|
|
1541
1552
|
};
|
|
1542
1553
|
this.#connections.set(key, managed);
|
|
1543
1554
|
return managed;
|
|
@@ -1547,40 +1558,20 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1547
1558
|
listener();
|
|
1548
1559
|
}
|
|
1549
1560
|
}
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
* @returns The managed connection instance
|
|
1558
|
-
*/
|
|
1559
|
-
retain(key, builder) {
|
|
1560
|
-
const managed = this.#ensureEntry(key);
|
|
1561
|
-
if (managed.pendingRelease) {
|
|
1562
|
-
clearTimeout(managed.pendingRelease);
|
|
1563
|
-
managed.pendingRelease = null;
|
|
1564
|
-
}
|
|
1565
|
-
managed.refCount += 1;
|
|
1566
|
-
if (managed.connection) {
|
|
1567
|
-
return managed.connection;
|
|
1561
|
+
#updateState(managed, updates) {
|
|
1562
|
+
managed.state = { ...managed.state, ...updates };
|
|
1563
|
+
this.#notify(managed);
|
|
1564
|
+
}
|
|
1565
|
+
#ensureCallbacks(managed) {
|
|
1566
|
+
if (managed.onConnect) {
|
|
1567
|
+
return;
|
|
1568
1568
|
}
|
|
1569
|
-
const connection = builder.build();
|
|
1570
|
-
managed.connection = connection;
|
|
1571
|
-
const updateState = (updates) => {
|
|
1572
|
-
managed.state = { ...managed.state, ...updates };
|
|
1573
|
-
this.#notify(managed);
|
|
1574
|
-
};
|
|
1575
|
-
updateState({
|
|
1576
|
-
isActive: connection.isActive,
|
|
1577
|
-
identity: connection.identity,
|
|
1578
|
-
token: connection.token,
|
|
1579
|
-
connectionId: connection.connectionId,
|
|
1580
|
-
connectionError: void 0
|
|
1581
|
-
});
|
|
1582
1569
|
managed.onConnect = (conn) => {
|
|
1583
|
-
|
|
1570
|
+
if (conn !== managed.connection) {
|
|
1571
|
+
return;
|
|
1572
|
+
}
|
|
1573
|
+
managed.reconnectAttempt = 0;
|
|
1574
|
+
this.#updateState(managed, {
|
|
1584
1575
|
isActive: conn.isActive,
|
|
1585
1576
|
identity: conn.identity,
|
|
1586
1577
|
token: conn.token,
|
|
@@ -1589,22 +1580,105 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1589
1580
|
});
|
|
1590
1581
|
};
|
|
1591
1582
|
managed.onDisconnect = (ctx, error) => {
|
|
1592
|
-
|
|
1593
|
-
|
|
1583
|
+
if (ctx !== managed.connection) {
|
|
1584
|
+
return;
|
|
1585
|
+
}
|
|
1586
|
+
this.#updateState(managed, {
|
|
1587
|
+
isActive: false,
|
|
1594
1588
|
connectionError: error ?? void 0
|
|
1595
1589
|
});
|
|
1590
|
+
this.#scheduleReconnect(managed);
|
|
1596
1591
|
};
|
|
1597
1592
|
managed.onConnectError = (ctx, error) => {
|
|
1598
|
-
|
|
1599
|
-
|
|
1593
|
+
if (ctx !== managed.connection) {
|
|
1594
|
+
return;
|
|
1595
|
+
}
|
|
1596
|
+
this.#updateState(managed, {
|
|
1597
|
+
isActive: false,
|
|
1600
1598
|
connectionError: error
|
|
1601
1599
|
});
|
|
1600
|
+
this.#scheduleReconnect(managed);
|
|
1602
1601
|
};
|
|
1602
|
+
}
|
|
1603
|
+
#attachCallbacks(managed, builder) {
|
|
1604
|
+
this.#ensureCallbacks(managed);
|
|
1603
1605
|
builder.onConnect(managed.onConnect);
|
|
1604
1606
|
builder.onDisconnect(managed.onDisconnect);
|
|
1605
1607
|
builder.onConnectError(managed.onConnectError);
|
|
1608
|
+
}
|
|
1609
|
+
#detachCallbacks(managed, connection) {
|
|
1610
|
+
if (managed.onConnect) {
|
|
1611
|
+
connection.removeOnConnect(managed.onConnect);
|
|
1612
|
+
}
|
|
1613
|
+
if (managed.onDisconnect) {
|
|
1614
|
+
connection.removeOnDisconnect(managed.onDisconnect);
|
|
1615
|
+
}
|
|
1616
|
+
if (managed.onConnectError) {
|
|
1617
|
+
connection.removeOnConnectError(managed.onConnectError);
|
|
1618
|
+
}
|
|
1619
|
+
}
|
|
1620
|
+
#buildManagedConnection(managed, builder) {
|
|
1621
|
+
managed.builder = builder;
|
|
1622
|
+
const connection = builder.build();
|
|
1623
|
+
managed.connection = connection;
|
|
1624
|
+
this.#attachCallbacks(managed, builder);
|
|
1625
|
+
this.#updateState(managed, {
|
|
1626
|
+
isActive: connection.isActive,
|
|
1627
|
+
identity: connection.identity,
|
|
1628
|
+
token: connection.token,
|
|
1629
|
+
connectionId: connection.connectionId,
|
|
1630
|
+
connectionError: void 0
|
|
1631
|
+
});
|
|
1606
1632
|
return connection;
|
|
1607
1633
|
}
|
|
1634
|
+
#scheduleReconnect(managed) {
|
|
1635
|
+
if (managed.refCount <= 0 || managed.pendingRelease || managed.reconnectTimer || !managed.builder) {
|
|
1636
|
+
return;
|
|
1637
|
+
}
|
|
1638
|
+
const connection = managed.connection;
|
|
1639
|
+
if (connection) {
|
|
1640
|
+
this.#detachCallbacks(managed, connection);
|
|
1641
|
+
}
|
|
1642
|
+
managed.connection = void 0;
|
|
1643
|
+
if (connection?.isDisconnectRequested) {
|
|
1644
|
+
return;
|
|
1645
|
+
}
|
|
1646
|
+
const delay = connectionManagerReconnectDelayMs(managed.reconnectAttempt);
|
|
1647
|
+
managed.reconnectAttempt += 1;
|
|
1648
|
+
managed.reconnectTimer = setTimeout(() => {
|
|
1649
|
+
managed.reconnectTimer = null;
|
|
1650
|
+
if (managed.refCount <= 0 || managed.pendingRelease || managed.connection || !managed.builder) {
|
|
1651
|
+
return;
|
|
1652
|
+
}
|
|
1653
|
+
this.#buildManagedConnection(managed, managed.builder);
|
|
1654
|
+
}, delay);
|
|
1655
|
+
}
|
|
1656
|
+
/**
|
|
1657
|
+
* Retains a connection, incrementing its reference count.
|
|
1658
|
+
* Creates the connection on first call; returns existing connection on subsequent calls.
|
|
1659
|
+
* Cancels any pending release if the connection was about to be cleaned up.
|
|
1660
|
+
*
|
|
1661
|
+
* @param key - Unique identifier for the connection (use getKey to generate)
|
|
1662
|
+
* @param builder - Connection builder to create the connection if needed
|
|
1663
|
+
* @returns The managed connection instance
|
|
1664
|
+
*/
|
|
1665
|
+
retain(key, builder) {
|
|
1666
|
+
const managed = this.#ensureEntry(key);
|
|
1667
|
+
if (managed.pendingRelease) {
|
|
1668
|
+
clearTimeout(managed.pendingRelease);
|
|
1669
|
+
managed.pendingRelease = null;
|
|
1670
|
+
}
|
|
1671
|
+
if (managed.reconnectTimer) {
|
|
1672
|
+
clearTimeout(managed.reconnectTimer);
|
|
1673
|
+
managed.reconnectTimer = null;
|
|
1674
|
+
}
|
|
1675
|
+
managed.refCount += 1;
|
|
1676
|
+
managed.builder = builder;
|
|
1677
|
+
if (managed.connection) {
|
|
1678
|
+
return managed.connection;
|
|
1679
|
+
}
|
|
1680
|
+
return this.#buildManagedConnection(managed, builder);
|
|
1681
|
+
}
|
|
1608
1682
|
release(key) {
|
|
1609
1683
|
const managed = this.#connections.get(key);
|
|
1610
1684
|
if (!managed) {
|
|
@@ -1614,24 +1688,20 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1614
1688
|
if (managed.refCount > 0 || managed.pendingRelease) {
|
|
1615
1689
|
return;
|
|
1616
1690
|
}
|
|
1691
|
+
if (managed.reconnectTimer) {
|
|
1692
|
+
clearTimeout(managed.reconnectTimer);
|
|
1693
|
+
managed.reconnectTimer = null;
|
|
1694
|
+
}
|
|
1617
1695
|
managed.pendingRelease = setTimeout(() => {
|
|
1618
1696
|
managed.pendingRelease = null;
|
|
1619
1697
|
if (managed.refCount > 0) {
|
|
1620
1698
|
return;
|
|
1621
1699
|
}
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
managed.connection.removeOnDisconnect(managed.onDisconnect);
|
|
1628
|
-
}
|
|
1629
|
-
if (managed.onConnectError) {
|
|
1630
|
-
managed.connection.removeOnConnectError(
|
|
1631
|
-
managed.onConnectError
|
|
1632
|
-
);
|
|
1633
|
-
}
|
|
1634
|
-
managed.connection.disconnect();
|
|
1700
|
+
const connection = managed.connection;
|
|
1701
|
+
managed.connection = void 0;
|
|
1702
|
+
if (connection) {
|
|
1703
|
+
this.#detachCallbacks(managed, connection);
|
|
1704
|
+
connection.disconnect();
|
|
1635
1705
|
}
|
|
1636
1706
|
this.#connections.delete(key);
|
|
1637
1707
|
}, 0);
|
|
@@ -1758,14 +1828,16 @@ function useTable(query, callbacks) {
|
|
|
1758
1828
|
return;
|
|
1759
1829
|
}
|
|
1760
1830
|
const connection = connectionState.getConnection();
|
|
1761
|
-
if (connectionState.isActive
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
}).subscribe(querySql);
|
|
1765
|
-
return () => {
|
|
1766
|
-
cancel.unsubscribe();
|
|
1767
|
-
};
|
|
1831
|
+
if (!connectionState.isActive || !connection) {
|
|
1832
|
+
setSubscribeApplied(false);
|
|
1833
|
+
return;
|
|
1768
1834
|
}
|
|
1835
|
+
const cancel = connection.subscriptionBuilder().onApplied(() => {
|
|
1836
|
+
setSubscribeApplied(true);
|
|
1837
|
+
}).subscribe(querySql);
|
|
1838
|
+
return () => {
|
|
1839
|
+
cancel.unsubscribe();
|
|
1840
|
+
};
|
|
1769
1841
|
}, [querySql, connectionState.isActive, connectionState, enabled]);
|
|
1770
1842
|
const subscribe = React.useCallback(
|
|
1771
1843
|
(onStoreChange) => {
|