spacetimedb 2.0.4 → 2.2.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 +2 -2
- package/dist/angular/index.cjs +9 -3
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.mjs +9 -3
- package/dist/angular/index.mjs.map +1 -1
- package/dist/browser/angular/index.mjs +9 -3
- package/dist/browser/angular/index.mjs.map +1 -1
- package/dist/browser/react/index.mjs +62 -7
- package/dist/browser/react/index.mjs.map +1 -1
- package/dist/browser/svelte/index.mjs +9 -3
- package/dist/browser/svelte/index.mjs.map +1 -1
- package/dist/browser/vue/index.mjs +9 -3
- package/dist/browser/vue/index.mjs.map +1 -1
- package/dist/index.browser.mjs +481 -146
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.cjs +481 -146
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +481 -146
- package/dist/index.mjs.map +1 -1
- package/dist/lib/algebraic_type.d.ts.map +1 -1
- package/dist/lib/binary_reader.d.ts +1 -1
- package/dist/lib/binary_reader.d.ts.map +1 -1
- package/dist/lib/binary_writer.d.ts +2 -1
- package/dist/lib/binary_writer.d.ts.map +1 -1
- package/dist/lib/filter.d.ts +2 -1
- package/dist/lib/filter.d.ts.map +1 -1
- package/dist/lib/query.d.ts +10 -5
- package/dist/lib/query.d.ts.map +1 -1
- package/dist/lib/table.d.ts +12 -1
- package/dist/lib/table.d.ts.map +1 -1
- package/dist/min/index.browser.mjs +1 -1
- package/dist/min/index.browser.mjs.map +1 -1
- package/dist/min/react/index.mjs +1 -1
- package/dist/min/react/index.mjs.map +1 -1
- package/dist/min/sdk/index.browser.mjs +1 -1
- package/dist/min/sdk/index.browser.mjs.map +1 -1
- package/dist/react/index.cjs +62 -6
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.mjs +62 -7
- package/dist/react/index.mjs.map +1 -1
- package/dist/react/useProcedure.d.ts +4 -0
- package/dist/react/useProcedure.d.ts.map +1 -0
- package/dist/react/useTable.d.ts +2 -0
- package/dist/react/useTable.d.ts.map +1 -1
- package/dist/sdk/db_connection_builder.d.ts +3 -3
- package/dist/sdk/db_connection_builder.d.ts.map +1 -1
- package/dist/sdk/db_connection_impl.d.ts +3 -3
- package/dist/sdk/db_connection_impl.d.ts.map +1 -1
- package/dist/sdk/decompress.d.ts +1 -1
- package/dist/sdk/decompress.d.ts.map +1 -1
- package/dist/sdk/index.browser.mjs +477 -144
- package/dist/sdk/index.browser.mjs.map +1 -1
- package/dist/sdk/index.cjs +477 -144
- package/dist/sdk/index.cjs.map +1 -1
- package/dist/sdk/index.mjs +477 -144
- package/dist/sdk/index.mjs.map +1 -1
- package/dist/sdk/table_cache.d.ts +1 -0
- package/dist/sdk/table_cache.d.ts.map +1 -1
- package/dist/sdk/type_utils.d.ts +4 -1
- package/dist/sdk/type_utils.d.ts.map +1 -1
- package/dist/sdk/websocket_decompress_adapter.d.ts +5 -21
- package/dist/sdk/websocket_decompress_adapter.d.ts.map +1 -1
- package/dist/sdk/websocket_protocols.d.ts +6 -0
- package/dist/sdk/websocket_protocols.d.ts.map +1 -0
- package/dist/sdk/websocket_test_adapter.d.ts +14 -18
- package/dist/sdk/websocket_test_adapter.d.ts.map +1 -1
- package/dist/sdk/websocket_v3_frames.d.ts +9 -0
- package/dist/sdk/websocket_v3_frames.d.ts.map +1 -0
- package/dist/sdk/ws.d.ts +26 -1
- package/dist/sdk/ws.d.ts.map +1 -1
- package/dist/server/http_internal.d.ts.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.mjs +76 -15
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/runtime.d.ts +29 -2
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/svelte/index.cjs +9 -3
- package/dist/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.mjs +9 -3
- package/dist/svelte/index.mjs.map +1 -1
- package/dist/tanstack/index.cjs +9 -3
- package/dist/tanstack/index.cjs.map +1 -1
- package/dist/tanstack/index.mjs +9 -3
- package/dist/tanstack/index.mjs.map +1 -1
- package/dist/vue/index.cjs +9 -3
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.mjs +9 -3
- package/dist/vue/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/lib/algebraic_type.ts +5 -1
- package/src/lib/binary_reader.ts +5 -2
- package/src/lib/binary_writer.ts +7 -1
- package/src/lib/filter.ts +12 -1
- package/src/lib/query.ts +60 -19
- package/src/lib/table.ts +15 -2
- package/src/react/index.ts +1 -0
- package/src/react/useProcedure.ts +60 -0
- package/src/react/useTable.ts +22 -2
- package/src/sdk/db_connection_builder.ts +16 -7
- package/src/sdk/db_connection_impl.ts +404 -89
- package/src/sdk/decompress.ts +7 -23
- package/src/sdk/table_cache.ts +5 -5
- package/src/sdk/type_utils.ts +10 -1
- package/src/sdk/websocket_decompress_adapter.ts +15 -77
- package/src/sdk/websocket_protocols.ts +25 -0
- package/src/sdk/websocket_test_adapter.ts +65 -29
- package/src/sdk/websocket_v3_frames.ts +126 -0
- package/src/sdk/ws.ts +81 -3
- package/src/server/http_internal.ts +10 -1
- package/src/server/index.ts +2 -1
- package/src/server/runtime.ts +39 -1
- package/src/server/sys.d.ts +4 -0
- package/src/server/view.test-d.ts +4 -0
package/dist/react/index.cjs
CHANGED
|
@@ -450,8 +450,8 @@ var BinaryReader = class {
|
|
|
450
450
|
this.view = input instanceof DataView ? input : new DataView(input.buffer, input.byteOffset, input.byteLength);
|
|
451
451
|
this.offset = 0;
|
|
452
452
|
}
|
|
453
|
-
reset(
|
|
454
|
-
this.view =
|
|
453
|
+
reset(input) {
|
|
454
|
+
this.view = input instanceof DataView ? input : new DataView(input.buffer, input.byteOffset, input.byteLength);
|
|
455
455
|
this.offset = 0;
|
|
456
456
|
}
|
|
457
457
|
get remaining() {
|
|
@@ -643,6 +643,11 @@ var BinaryWriter = class {
|
|
|
643
643
|
this.view.setUint8(this.offset, value);
|
|
644
644
|
this.offset += 1;
|
|
645
645
|
}
|
|
646
|
+
writeBytes(value) {
|
|
647
|
+
this.expandBuffer(value.length);
|
|
648
|
+
new Uint8Array(this.buffer.buffer, this.offset, value.length).set(value);
|
|
649
|
+
this.offset += value.length;
|
|
650
|
+
}
|
|
646
651
|
writeI8(value) {
|
|
647
652
|
this.expandBuffer(1);
|
|
648
653
|
this.view.setInt8(this.offset, value);
|
|
@@ -1168,7 +1173,8 @@ writer.offset += ${primitiveSizes[tag]};` : `writer.write${tag}(value.${name});`
|
|
|
1168
1173
|
const result = { ${ty.elements.map(getElementInitializer).join(", ")} };
|
|
1169
1174
|
const view = reader.view;
|
|
1170
1175
|
${ty.elements.map(
|
|
1171
|
-
({ name, algebraicType: { tag } }) => tag in primitiveJSName ? `result.${name} = view.
|
|
1176
|
+
({ name, algebraicType: { tag } }) => tag in primitiveJSName ? tag === "Bool" ? `result.${name} = view.getUint8(reader.offset) !== 0;
|
|
1177
|
+
reader.offset += 1;` : `result.${name} = view.get${primitiveJSName[tag]}(reader.offset, ${primitiveSizes[tag] > 1 ? "true" : ""});
|
|
1172
1178
|
reader.offset += ${primitiveSizes[tag]};` : `result.${name} = reader.read${tag}();`
|
|
1173
1179
|
).join("\n")}
|
|
1174
1180
|
return result;`;
|
|
@@ -1714,6 +1720,7 @@ function classifyMembership(whereExpr, oldRow, newRow) {
|
|
|
1714
1720
|
return "stayOut";
|
|
1715
1721
|
}
|
|
1716
1722
|
function useTable(query, callbacks) {
|
|
1723
|
+
const enabled = callbacks?.enabled ?? true;
|
|
1717
1724
|
const accessorName = getQueryAccessorName(query);
|
|
1718
1725
|
const whereExpr = getQueryWhereClause(query);
|
|
1719
1726
|
const [subscribeApplied, setSubscribeApplied] = React.useState(false);
|
|
@@ -1729,6 +1736,9 @@ function useTable(query, callbacks) {
|
|
|
1729
1736
|
const latestTransactionEventId = React.useRef(null);
|
|
1730
1737
|
const lastSnapshotRef = React.useRef(null);
|
|
1731
1738
|
const computeSnapshot = React.useCallback(() => {
|
|
1739
|
+
if (!enabled) {
|
|
1740
|
+
return [[], true];
|
|
1741
|
+
}
|
|
1732
1742
|
const connection = connectionState.getConnection();
|
|
1733
1743
|
if (!connection) {
|
|
1734
1744
|
return [[], false];
|
|
@@ -1738,11 +1748,15 @@ function useTable(query, callbacks) {
|
|
|
1738
1748
|
(row) => evaluateBooleanExpr(whereExpr, row)
|
|
1739
1749
|
) : Array.from(table.iter());
|
|
1740
1750
|
return [result, subscribeApplied];
|
|
1741
|
-
}, [connectionState, accessorName, querySql, subscribeApplied]);
|
|
1751
|
+
}, [connectionState, accessorName, querySql, subscribeApplied, enabled]);
|
|
1742
1752
|
React.useEffect(() => {
|
|
1743
1753
|
lastSnapshotRef.current = null;
|
|
1744
1754
|
}, [computeSnapshot]);
|
|
1745
1755
|
React.useEffect(() => {
|
|
1756
|
+
if (!enabled) {
|
|
1757
|
+
setSubscribeApplied(false);
|
|
1758
|
+
return;
|
|
1759
|
+
}
|
|
1746
1760
|
const connection = connectionState.getConnection();
|
|
1747
1761
|
if (connectionState.isActive && connection) {
|
|
1748
1762
|
const cancel = connection.subscriptionBuilder().onApplied(() => {
|
|
@@ -1752,9 +1766,13 @@ function useTable(query, callbacks) {
|
|
|
1752
1766
|
cancel.unsubscribe();
|
|
1753
1767
|
};
|
|
1754
1768
|
}
|
|
1755
|
-
}, [querySql, connectionState.isActive, connectionState]);
|
|
1769
|
+
}, [querySql, connectionState.isActive, connectionState, enabled]);
|
|
1756
1770
|
const subscribe = React.useCallback(
|
|
1757
1771
|
(onStoreChange) => {
|
|
1772
|
+
if (!enabled) {
|
|
1773
|
+
return () => {
|
|
1774
|
+
};
|
|
1775
|
+
}
|
|
1758
1776
|
const onInsert = (ctx, row) => {
|
|
1759
1777
|
if (whereExpr && !evaluateBooleanExpr(whereExpr, row)) {
|
|
1760
1778
|
return;
|
|
@@ -1813,14 +1831,18 @@ function useTable(query, callbacks) {
|
|
|
1813
1831
|
table.removeOnUpdate?.(onUpdate);
|
|
1814
1832
|
};
|
|
1815
1833
|
},
|
|
1834
|
+
// TODO: investigating refactoring so that this is no longer necessary, as we have had genuine bugs with missed deps.
|
|
1835
|
+
// See https://github.com/clockworklabs/SpacetimeDB/pull/4580.
|
|
1816
1836
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1817
1837
|
[
|
|
1818
1838
|
connectionState,
|
|
1819
1839
|
accessorName,
|
|
1820
1840
|
querySql,
|
|
1841
|
+
computeSnapshot,
|
|
1821
1842
|
callbacks?.onDelete,
|
|
1822
1843
|
callbacks?.onInsert,
|
|
1823
|
-
callbacks?.onUpdate
|
|
1844
|
+
callbacks?.onUpdate,
|
|
1845
|
+
enabled
|
|
1824
1846
|
]
|
|
1825
1847
|
);
|
|
1826
1848
|
const getSnapshot = React.useCallback(() => {
|
|
@@ -1862,8 +1884,42 @@ function useReducer(reducerDef) {
|
|
|
1862
1884
|
[getConnection, reducerName]
|
|
1863
1885
|
);
|
|
1864
1886
|
}
|
|
1887
|
+
function useProcedure(procedureDef) {
|
|
1888
|
+
const { getConnection, isActive } = useSpacetimeDB();
|
|
1889
|
+
const procedureName = procedureDef.accessorName;
|
|
1890
|
+
const queueRef = React.useRef([]);
|
|
1891
|
+
React.useEffect(() => {
|
|
1892
|
+
const conn = getConnection();
|
|
1893
|
+
if (!conn) {
|
|
1894
|
+
return;
|
|
1895
|
+
}
|
|
1896
|
+
const fn = conn.procedures[procedureName];
|
|
1897
|
+
if (queueRef.current.length) {
|
|
1898
|
+
const pending = queueRef.current.splice(0);
|
|
1899
|
+
for (const item of pending) {
|
|
1900
|
+
fn(...item.params).then(item.resolve, item.reject);
|
|
1901
|
+
}
|
|
1902
|
+
}
|
|
1903
|
+
}, [getConnection, procedureName, isActive]);
|
|
1904
|
+
return React.useCallback(
|
|
1905
|
+
(...params) => {
|
|
1906
|
+
const conn = getConnection();
|
|
1907
|
+
if (!conn) {
|
|
1908
|
+
return new Promise(
|
|
1909
|
+
(resolve, reject) => {
|
|
1910
|
+
queueRef.current.push({ params, resolve, reject });
|
|
1911
|
+
}
|
|
1912
|
+
);
|
|
1913
|
+
}
|
|
1914
|
+
const fn = conn.procedures[procedureName];
|
|
1915
|
+
return fn(...params);
|
|
1916
|
+
},
|
|
1917
|
+
[getConnection, procedureName]
|
|
1918
|
+
);
|
|
1919
|
+
}
|
|
1865
1920
|
|
|
1866
1921
|
exports.SpacetimeDBProvider = SpacetimeDBProvider;
|
|
1922
|
+
exports.useProcedure = useProcedure;
|
|
1867
1923
|
exports.useReducer = useReducer;
|
|
1868
1924
|
exports.useSpacetimeDB = useSpacetimeDB;
|
|
1869
1925
|
exports.useTable = useTable;
|