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
|
@@ -1487,6 +1487,14 @@ function useSpacetimeDB() {
|
|
|
1487
1487
|
}
|
|
1488
1488
|
|
|
1489
1489
|
// src/sdk/connection_manager.ts
|
|
1490
|
+
var CONNECTION_MANAGER_RECONNECT_BASE_DELAY_MS = 1e3;
|
|
1491
|
+
var CONNECTION_MANAGER_RECONNECT_MAX_DELAY_MS = 3e4;
|
|
1492
|
+
function connectionManagerReconnectDelayMs(attempt) {
|
|
1493
|
+
return Math.min(
|
|
1494
|
+
CONNECTION_MANAGER_RECONNECT_BASE_DELAY_MS * 2 ** attempt,
|
|
1495
|
+
CONNECTION_MANAGER_RECONNECT_MAX_DELAY_MS
|
|
1496
|
+
);
|
|
1497
|
+
}
|
|
1490
1498
|
function defaultState() {
|
|
1491
1499
|
return {
|
|
1492
1500
|
isActive: false,
|
|
@@ -1513,10 +1521,13 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1513
1521
|
}
|
|
1514
1522
|
const managed = {
|
|
1515
1523
|
connection: void 0,
|
|
1524
|
+
builder: void 0,
|
|
1516
1525
|
refCount: 0,
|
|
1517
1526
|
state: defaultState(),
|
|
1518
1527
|
listeners: /* @__PURE__ */ new Set(),
|
|
1519
|
-
pendingRelease: null
|
|
1528
|
+
pendingRelease: null,
|
|
1529
|
+
reconnectTimer: null,
|
|
1530
|
+
reconnectAttempt: 0
|
|
1520
1531
|
};
|
|
1521
1532
|
this.#connections.set(key, managed);
|
|
1522
1533
|
return managed;
|
|
@@ -1526,40 +1537,20 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1526
1537
|
listener();
|
|
1527
1538
|
}
|
|
1528
1539
|
}
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
* @returns The managed connection instance
|
|
1537
|
-
*/
|
|
1538
|
-
retain(key, builder) {
|
|
1539
|
-
const managed = this.#ensureEntry(key);
|
|
1540
|
-
if (managed.pendingRelease) {
|
|
1541
|
-
clearTimeout(managed.pendingRelease);
|
|
1542
|
-
managed.pendingRelease = null;
|
|
1543
|
-
}
|
|
1544
|
-
managed.refCount += 1;
|
|
1545
|
-
if (managed.connection) {
|
|
1546
|
-
return managed.connection;
|
|
1540
|
+
#updateState(managed, updates) {
|
|
1541
|
+
managed.state = { ...managed.state, ...updates };
|
|
1542
|
+
this.#notify(managed);
|
|
1543
|
+
}
|
|
1544
|
+
#ensureCallbacks(managed) {
|
|
1545
|
+
if (managed.onConnect) {
|
|
1546
|
+
return;
|
|
1547
1547
|
}
|
|
1548
|
-
const connection = builder.build();
|
|
1549
|
-
managed.connection = connection;
|
|
1550
|
-
const updateState = (updates) => {
|
|
1551
|
-
managed.state = { ...managed.state, ...updates };
|
|
1552
|
-
this.#notify(managed);
|
|
1553
|
-
};
|
|
1554
|
-
updateState({
|
|
1555
|
-
isActive: connection.isActive,
|
|
1556
|
-
identity: connection.identity,
|
|
1557
|
-
token: connection.token,
|
|
1558
|
-
connectionId: connection.connectionId,
|
|
1559
|
-
connectionError: void 0
|
|
1560
|
-
});
|
|
1561
1548
|
managed.onConnect = (conn) => {
|
|
1562
|
-
|
|
1549
|
+
if (conn !== managed.connection) {
|
|
1550
|
+
return;
|
|
1551
|
+
}
|
|
1552
|
+
managed.reconnectAttempt = 0;
|
|
1553
|
+
this.#updateState(managed, {
|
|
1563
1554
|
isActive: conn.isActive,
|
|
1564
1555
|
identity: conn.identity,
|
|
1565
1556
|
token: conn.token,
|
|
@@ -1568,22 +1559,105 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1568
1559
|
});
|
|
1569
1560
|
};
|
|
1570
1561
|
managed.onDisconnect = (ctx, error) => {
|
|
1571
|
-
|
|
1572
|
-
|
|
1562
|
+
if (ctx !== managed.connection) {
|
|
1563
|
+
return;
|
|
1564
|
+
}
|
|
1565
|
+
this.#updateState(managed, {
|
|
1566
|
+
isActive: false,
|
|
1573
1567
|
connectionError: error ?? void 0
|
|
1574
1568
|
});
|
|
1569
|
+
this.#scheduleReconnect(managed);
|
|
1575
1570
|
};
|
|
1576
1571
|
managed.onConnectError = (ctx, error) => {
|
|
1577
|
-
|
|
1578
|
-
|
|
1572
|
+
if (ctx !== managed.connection) {
|
|
1573
|
+
return;
|
|
1574
|
+
}
|
|
1575
|
+
this.#updateState(managed, {
|
|
1576
|
+
isActive: false,
|
|
1579
1577
|
connectionError: error
|
|
1580
1578
|
});
|
|
1579
|
+
this.#scheduleReconnect(managed);
|
|
1581
1580
|
};
|
|
1581
|
+
}
|
|
1582
|
+
#attachCallbacks(managed, builder) {
|
|
1583
|
+
this.#ensureCallbacks(managed);
|
|
1582
1584
|
builder.onConnect(managed.onConnect);
|
|
1583
1585
|
builder.onDisconnect(managed.onDisconnect);
|
|
1584
1586
|
builder.onConnectError(managed.onConnectError);
|
|
1587
|
+
}
|
|
1588
|
+
#detachCallbacks(managed, connection) {
|
|
1589
|
+
if (managed.onConnect) {
|
|
1590
|
+
connection.removeOnConnect(managed.onConnect);
|
|
1591
|
+
}
|
|
1592
|
+
if (managed.onDisconnect) {
|
|
1593
|
+
connection.removeOnDisconnect(managed.onDisconnect);
|
|
1594
|
+
}
|
|
1595
|
+
if (managed.onConnectError) {
|
|
1596
|
+
connection.removeOnConnectError(managed.onConnectError);
|
|
1597
|
+
}
|
|
1598
|
+
}
|
|
1599
|
+
#buildManagedConnection(managed, builder) {
|
|
1600
|
+
managed.builder = builder;
|
|
1601
|
+
const connection = builder.build();
|
|
1602
|
+
managed.connection = connection;
|
|
1603
|
+
this.#attachCallbacks(managed, builder);
|
|
1604
|
+
this.#updateState(managed, {
|
|
1605
|
+
isActive: connection.isActive,
|
|
1606
|
+
identity: connection.identity,
|
|
1607
|
+
token: connection.token,
|
|
1608
|
+
connectionId: connection.connectionId,
|
|
1609
|
+
connectionError: void 0
|
|
1610
|
+
});
|
|
1585
1611
|
return connection;
|
|
1586
1612
|
}
|
|
1613
|
+
#scheduleReconnect(managed) {
|
|
1614
|
+
if (managed.refCount <= 0 || managed.pendingRelease || managed.reconnectTimer || !managed.builder) {
|
|
1615
|
+
return;
|
|
1616
|
+
}
|
|
1617
|
+
const connection = managed.connection;
|
|
1618
|
+
if (connection) {
|
|
1619
|
+
this.#detachCallbacks(managed, connection);
|
|
1620
|
+
}
|
|
1621
|
+
managed.connection = void 0;
|
|
1622
|
+
if (connection?.isDisconnectRequested) {
|
|
1623
|
+
return;
|
|
1624
|
+
}
|
|
1625
|
+
const delay = connectionManagerReconnectDelayMs(managed.reconnectAttempt);
|
|
1626
|
+
managed.reconnectAttempt += 1;
|
|
1627
|
+
managed.reconnectTimer = setTimeout(() => {
|
|
1628
|
+
managed.reconnectTimer = null;
|
|
1629
|
+
if (managed.refCount <= 0 || managed.pendingRelease || managed.connection || !managed.builder) {
|
|
1630
|
+
return;
|
|
1631
|
+
}
|
|
1632
|
+
this.#buildManagedConnection(managed, managed.builder);
|
|
1633
|
+
}, delay);
|
|
1634
|
+
}
|
|
1635
|
+
/**
|
|
1636
|
+
* Retains a connection, incrementing its reference count.
|
|
1637
|
+
* Creates the connection on first call; returns existing connection on subsequent calls.
|
|
1638
|
+
* Cancels any pending release if the connection was about to be cleaned up.
|
|
1639
|
+
*
|
|
1640
|
+
* @param key - Unique identifier for the connection (use getKey to generate)
|
|
1641
|
+
* @param builder - Connection builder to create the connection if needed
|
|
1642
|
+
* @returns The managed connection instance
|
|
1643
|
+
*/
|
|
1644
|
+
retain(key, builder) {
|
|
1645
|
+
const managed = this.#ensureEntry(key);
|
|
1646
|
+
if (managed.pendingRelease) {
|
|
1647
|
+
clearTimeout(managed.pendingRelease);
|
|
1648
|
+
managed.pendingRelease = null;
|
|
1649
|
+
}
|
|
1650
|
+
if (managed.reconnectTimer) {
|
|
1651
|
+
clearTimeout(managed.reconnectTimer);
|
|
1652
|
+
managed.reconnectTimer = null;
|
|
1653
|
+
}
|
|
1654
|
+
managed.refCount += 1;
|
|
1655
|
+
managed.builder = builder;
|
|
1656
|
+
if (managed.connection) {
|
|
1657
|
+
return managed.connection;
|
|
1658
|
+
}
|
|
1659
|
+
return this.#buildManagedConnection(managed, builder);
|
|
1660
|
+
}
|
|
1587
1661
|
release(key) {
|
|
1588
1662
|
const managed = this.#connections.get(key);
|
|
1589
1663
|
if (!managed) {
|
|
@@ -1593,24 +1667,20 @@ var ConnectionManagerImpl = class _ConnectionManagerImpl {
|
|
|
1593
1667
|
if (managed.refCount > 0 || managed.pendingRelease) {
|
|
1594
1668
|
return;
|
|
1595
1669
|
}
|
|
1670
|
+
if (managed.reconnectTimer) {
|
|
1671
|
+
clearTimeout(managed.reconnectTimer);
|
|
1672
|
+
managed.reconnectTimer = null;
|
|
1673
|
+
}
|
|
1596
1674
|
managed.pendingRelease = setTimeout(() => {
|
|
1597
1675
|
managed.pendingRelease = null;
|
|
1598
1676
|
if (managed.refCount > 0) {
|
|
1599
1677
|
return;
|
|
1600
1678
|
}
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
managed.connection.removeOnDisconnect(managed.onDisconnect);
|
|
1607
|
-
}
|
|
1608
|
-
if (managed.onConnectError) {
|
|
1609
|
-
managed.connection.removeOnConnectError(
|
|
1610
|
-
managed.onConnectError
|
|
1611
|
-
);
|
|
1612
|
-
}
|
|
1613
|
-
managed.connection.disconnect();
|
|
1679
|
+
const connection = managed.connection;
|
|
1680
|
+
managed.connection = void 0;
|
|
1681
|
+
if (connection) {
|
|
1682
|
+
this.#detachCallbacks(managed, connection);
|
|
1683
|
+
connection.disconnect();
|
|
1614
1684
|
}
|
|
1615
1685
|
this.#connections.delete(key);
|
|
1616
1686
|
}, 0);
|
|
@@ -1737,14 +1807,16 @@ function useTable(query, callbacks) {
|
|
|
1737
1807
|
return;
|
|
1738
1808
|
}
|
|
1739
1809
|
const connection = connectionState.getConnection();
|
|
1740
|
-
if (connectionState.isActive
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
}).subscribe(querySql);
|
|
1744
|
-
return () => {
|
|
1745
|
-
cancel.unsubscribe();
|
|
1746
|
-
};
|
|
1810
|
+
if (!connectionState.isActive || !connection) {
|
|
1811
|
+
setSubscribeApplied(false);
|
|
1812
|
+
return;
|
|
1747
1813
|
}
|
|
1814
|
+
const cancel = connection.subscriptionBuilder().onApplied(() => {
|
|
1815
|
+
setSubscribeApplied(true);
|
|
1816
|
+
}).subscribe(querySql);
|
|
1817
|
+
return () => {
|
|
1818
|
+
cancel.unsubscribe();
|
|
1819
|
+
};
|
|
1748
1820
|
}, [querySql, connectionState.isActive, connectionState, enabled]);
|
|
1749
1821
|
const subscribe = useCallback(
|
|
1750
1822
|
(onStoreChange) => {
|