tinybase 6.1.0-beta.5 → 6.1.1

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.
Files changed (191) hide show
  1. package/@types/persisters/index.d.ts +82 -0
  2. package/@types/persisters/with-schemas/index.d.ts +91 -0
  3. package/@types/store/index.d.ts +123 -1
  4. package/@types/store/with-schemas/index.d.ts +159 -24
  5. package/@types/ui-react/index.d.ts +575 -7
  6. package/@types/ui-react/with-schemas/index.d.ts +184 -40
  7. package/index.js +73 -53
  8. package/mergeable-store/index.js +73 -53
  9. package/mergeable-store/with-schemas/index.js +73 -53
  10. package/min/index.js +1 -1
  11. package/min/index.js.gz +0 -0
  12. package/min/mergeable-store/index.js +1 -1
  13. package/min/mergeable-store/index.js.gz +0 -0
  14. package/min/mergeable-store/with-schemas/index.js +1 -1
  15. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  16. package/min/persisters/index.js +1 -1
  17. package/min/persisters/index.js.gz +0 -0
  18. package/min/persisters/persister-automerge/index.js +1 -1
  19. package/min/persisters/persister-automerge/index.js.gz +0 -0
  20. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  21. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  22. package/min/persisters/persister-browser/index.js +1 -1
  23. package/min/persisters/persister-browser/index.js.gz +0 -0
  24. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  25. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  26. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  27. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  28. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  29. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  30. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  31. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  32. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  33. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  34. package/min/persisters/persister-electric-sql/index.js +1 -1
  35. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  36. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  37. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  38. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  39. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  40. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  41. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  42. package/min/persisters/persister-file/index.js +1 -1
  43. package/min/persisters/persister-file/index.js.gz +0 -0
  44. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  45. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  46. package/min/persisters/persister-indexed-db/index.js +1 -1
  47. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  48. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  49. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  50. package/min/persisters/persister-libsql/index.js +1 -1
  51. package/min/persisters/persister-libsql/index.js.gz +0 -0
  52. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  53. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  54. package/min/persisters/persister-partykit-client/index.js +1 -1
  55. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  56. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  57. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  58. package/min/persisters/persister-pglite/index.js +1 -1
  59. package/min/persisters/persister-pglite/index.js.gz +0 -0
  60. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  61. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  62. package/min/persisters/persister-postgres/index.js +1 -1
  63. package/min/persisters/persister-postgres/index.js.gz +0 -0
  64. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  65. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  66. package/min/persisters/persister-powersync/index.js +1 -1
  67. package/min/persisters/persister-powersync/index.js.gz +0 -0
  68. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  69. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  70. package/min/persisters/persister-remote/index.js +1 -1
  71. package/min/persisters/persister-remote/index.js.gz +0 -0
  72. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  73. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  74. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  75. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  76. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  77. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  78. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  79. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  80. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  81. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  82. package/min/persisters/persister-sqlite3/index.js +1 -1
  83. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  84. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  85. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  86. package/min/persisters/persister-yjs/index.js +1 -1
  87. package/min/persisters/persister-yjs/index.js.gz +0 -0
  88. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  89. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  90. package/min/persisters/with-schemas/index.js +1 -1
  91. package/min/persisters/with-schemas/index.js.gz +0 -0
  92. package/min/store/index.js +1 -1
  93. package/min/store/index.js.gz +0 -0
  94. package/min/store/with-schemas/index.js +1 -1
  95. package/min/store/with-schemas/index.js.gz +0 -0
  96. package/min/synchronizers/index.js +1 -1
  97. package/min/synchronizers/index.js.gz +0 -0
  98. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  99. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  100. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  101. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  102. package/min/synchronizers/synchronizer-local/index.js +1 -1
  103. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  104. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  105. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  106. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  107. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  108. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  109. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  110. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  111. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  112. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  113. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  114. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  115. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  116. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  117. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  118. package/min/synchronizers/with-schemas/index.js +1 -1
  119. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  120. package/min/ui-react/index.js +1 -1
  121. package/min/ui-react/index.js.gz +0 -0
  122. package/min/ui-react/with-schemas/index.js +1 -1
  123. package/min/ui-react/with-schemas/index.js.gz +0 -0
  124. package/min/ui-react-inspector/index.js +1 -1
  125. package/min/ui-react-inspector/index.js.gz +0 -0
  126. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  127. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  128. package/min/with-schemas/index.js +1 -1
  129. package/min/with-schemas/index.js.gz +0 -0
  130. package/package.json +6 -6
  131. package/persisters/index.js +33 -8
  132. package/persisters/persister-automerge/index.js +23 -3
  133. package/persisters/persister-automerge/with-schemas/index.js +23 -3
  134. package/persisters/persister-browser/index.js +23 -3
  135. package/persisters/persister-browser/with-schemas/index.js +23 -3
  136. package/persisters/persister-cr-sqlite-wasm/index.js +33 -8
  137. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +33 -8
  138. package/persisters/persister-durable-object-storage/index.js +23 -3
  139. package/persisters/persister-durable-object-storage/with-schemas/index.js +23 -3
  140. package/persisters/persister-electric-sql/index.js +33 -8
  141. package/persisters/persister-electric-sql/with-schemas/index.js +33 -8
  142. package/persisters/persister-expo-sqlite/index.js +33 -8
  143. package/persisters/persister-expo-sqlite/with-schemas/index.js +33 -8
  144. package/persisters/persister-file/index.js +23 -3
  145. package/persisters/persister-file/with-schemas/index.js +23 -3
  146. package/persisters/persister-indexed-db/index.js +23 -3
  147. package/persisters/persister-indexed-db/with-schemas/index.js +23 -3
  148. package/persisters/persister-libsql/index.js +33 -8
  149. package/persisters/persister-libsql/with-schemas/index.js +33 -8
  150. package/persisters/persister-partykit-client/index.js +23 -3
  151. package/persisters/persister-partykit-client/with-schemas/index.js +23 -3
  152. package/persisters/persister-pglite/index.js +33 -8
  153. package/persisters/persister-pglite/with-schemas/index.js +33 -8
  154. package/persisters/persister-postgres/index.js +33 -8
  155. package/persisters/persister-postgres/with-schemas/index.js +33 -8
  156. package/persisters/persister-powersync/index.js +33 -8
  157. package/persisters/persister-powersync/with-schemas/index.js +33 -8
  158. package/persisters/persister-remote/index.js +23 -3
  159. package/persisters/persister-remote/with-schemas/index.js +23 -3
  160. package/persisters/persister-sqlite-bun/index.js +33 -8
  161. package/persisters/persister-sqlite-bun/with-schemas/index.js +33 -8
  162. package/persisters/persister-sqlite-wasm/index.js +33 -8
  163. package/persisters/persister-sqlite-wasm/with-schemas/index.js +33 -8
  164. package/persisters/persister-sqlite3/index.js +33 -8
  165. package/persisters/persister-sqlite3/with-schemas/index.js +33 -8
  166. package/persisters/persister-yjs/index.js +23 -3
  167. package/persisters/persister-yjs/with-schemas/index.js +23 -3
  168. package/persisters/with-schemas/index.js +33 -8
  169. package/readme.md +17 -17
  170. package/releases.md +60 -36
  171. package/store/index.js +73 -53
  172. package/store/with-schemas/index.js +73 -53
  173. package/synchronizers/index.js +27 -9
  174. package/synchronizers/synchronizer-broadcast-channel/index.js +27 -9
  175. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +27 -9
  176. package/synchronizers/synchronizer-local/index.js +27 -9
  177. package/synchronizers/synchronizer-local/with-schemas/index.js +27 -9
  178. package/synchronizers/synchronizer-ws-client/index.js +27 -9
  179. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +27 -9
  180. package/synchronizers/synchronizer-ws-server/index.js +27 -9
  181. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +27 -9
  182. package/synchronizers/synchronizer-ws-server-durable-object/index.js +27 -9
  183. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +27 -9
  184. package/synchronizers/with-schemas/index.js +27 -9
  185. package/ui-react/index.js +84 -20
  186. package/ui-react/with-schemas/index.js +84 -20
  187. package/ui-react-dom/index.js +1 -1
  188. package/ui-react-dom/with-schemas/index.js +1 -1
  189. package/ui-react-inspector/index.js +97 -57
  190. package/ui-react-inspector/with-schemas/index.js +97 -57
  191. package/with-schemas/index.js +73 -53
package/store/index.js CHANGED
@@ -986,6 +986,27 @@ const createStore = () => {
986
986
  transaction(() => actions(...arrayMap(args, id)));
987
987
  return store;
988
988
  };
989
+ const addSortedRowIdsListenerImpl = (
990
+ tableId,
991
+ cellId,
992
+ otherArgs,
993
+ listener,
994
+ mutator,
995
+ ) => {
996
+ let sortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
997
+ return addListener(
998
+ () => {
999
+ const newSortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
1000
+ if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
1001
+ sortedRowIds = newSortedRowIds;
1002
+ listener(store, tableId, cellId, ...otherArgs, sortedRowIds);
1003
+ }
1004
+ },
1005
+ sortedRowIdsListeners[mutator ? 1 : 0],
1006
+ [tableId, cellId],
1007
+ [getTableIds],
1008
+ );
1009
+ };
989
1010
  const getContent = () => [getTables(), getValues()];
990
1011
  const getTables = () => mapToObj3(tablesMap);
991
1012
  const getTableIds = () => mapKeys(tablesMap);
@@ -994,22 +1015,36 @@ const createStore = () => {
994
1015
  mapKeys(mapGet(tableCellIds, id(tableId)));
995
1016
  const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
996
1017
  const getRowIds = (tableId) => mapKeys(mapGet(tablesMap, id(tableId)));
997
- const getSortedRowIds = (tableId, cellId, descending, offset = 0, limit) =>
998
- arrayMap(
999
- slice(
1000
- arraySort(
1001
- mapMap(mapGet(tablesMap, id(tableId)), (row, rowId) => [
1002
- isUndefined(cellId) ? rowId : mapGet(row, id(cellId)),
1003
- rowId,
1004
- ]),
1005
- ([cell1], [cell2]) =>
1006
- defaultSorter(cell1, cell2) * (descending ? -1 : 1),
1007
- ),
1008
- offset,
1009
- isUndefined(limit) ? limit : offset + limit,
1010
- ),
1011
- ([, rowId]) => rowId,
1012
- );
1018
+ const getSortedRowIds = (
1019
+ tableIdOrArgs,
1020
+ cellId,
1021
+ descending,
1022
+ offset = 0,
1023
+ limit,
1024
+ ) =>
1025
+ isObject(tableIdOrArgs)
1026
+ ? getSortedRowIds(
1027
+ tableIdOrArgs.tableId,
1028
+ tableIdOrArgs.cellId,
1029
+ tableIdOrArgs.descending,
1030
+ tableIdOrArgs.offset,
1031
+ tableIdOrArgs.limit,
1032
+ )
1033
+ : arrayMap(
1034
+ slice(
1035
+ arraySort(
1036
+ mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
1037
+ isUndefined(cellId) ? rowId : mapGet(row, id(cellId)),
1038
+ rowId,
1039
+ ]),
1040
+ ([cell1], [cell2]) =>
1041
+ defaultSorter(cell1, cell2) * (descending ? -1 : 1),
1042
+ ),
1043
+ offset,
1044
+ isUndefined(limit) ? limit : offset + limit,
1045
+ ),
1046
+ ([, rowId]) => rowId,
1047
+ );
1013
1048
  const getRow = (tableId, rowId) =>
1014
1049
  mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
1015
1050
  const getCellIds = (tableId, rowId) =>
@@ -1401,48 +1436,33 @@ const createStore = () => {
1401
1436
  mapForEach(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), cellCallback);
1402
1437
  const forEachValue = (valueCallback) => mapForEach(valuesMap, valueCallback);
1403
1438
  const addSortedRowIdsListener = (
1404
- tableId,
1405
- cellId,
1406
- descending,
1439
+ tableIdOrArgs,
1440
+ cellIdOrListener,
1441
+ descendingOrMutator,
1407
1442
  offset,
1408
1443
  limit,
1409
1444
  listener,
1410
1445
  mutator,
1411
- ) => {
1412
- let sortedRowIds = getSortedRowIds(
1413
- tableId,
1414
- cellId,
1415
- descending,
1416
- offset,
1417
- limit,
1418
- );
1419
- return addListener(
1420
- () => {
1421
- const newSortedRowIds = getSortedRowIds(
1422
- tableId,
1423
- cellId,
1424
- descending,
1425
- offset,
1426
- limit,
1446
+ ) =>
1447
+ isObject(tableIdOrArgs)
1448
+ ? addSortedRowIdsListenerImpl(
1449
+ tableIdOrArgs.tableId,
1450
+ tableIdOrArgs.cellId,
1451
+ [
1452
+ tableIdOrArgs.descending ?? false,
1453
+ tableIdOrArgs.offset ?? 0,
1454
+ tableIdOrArgs.limit,
1455
+ ],
1456
+ cellIdOrListener,
1457
+ descendingOrMutator,
1458
+ )
1459
+ : addSortedRowIdsListenerImpl(
1460
+ tableIdOrArgs,
1461
+ cellIdOrListener,
1462
+ [descendingOrMutator, offset, limit],
1463
+ listener,
1464
+ mutator,
1427
1465
  );
1428
- if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
1429
- sortedRowIds = newSortedRowIds;
1430
- listener(
1431
- store,
1432
- tableId,
1433
- cellId,
1434
- descending,
1435
- offset,
1436
- limit,
1437
- sortedRowIds,
1438
- );
1439
- }
1440
- },
1441
- sortedRowIdsListeners[mutator ? 1 : 0],
1442
- [tableId, cellId],
1443
- [getTableIds],
1444
- );
1445
- };
1446
1466
  const addStartTransactionListener = (listener) =>
1447
1467
  addListener(listener, startTransactionListeners);
1448
1468
  const addWillFinishTransactionListener = (listener) =>
@@ -986,6 +986,27 @@ const createStore = () => {
986
986
  transaction(() => actions(...arrayMap(args, id)));
987
987
  return store;
988
988
  };
989
+ const addSortedRowIdsListenerImpl = (
990
+ tableId,
991
+ cellId,
992
+ otherArgs,
993
+ listener,
994
+ mutator,
995
+ ) => {
996
+ let sortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
997
+ return addListener(
998
+ () => {
999
+ const newSortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
1000
+ if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
1001
+ sortedRowIds = newSortedRowIds;
1002
+ listener(store, tableId, cellId, ...otherArgs, sortedRowIds);
1003
+ }
1004
+ },
1005
+ sortedRowIdsListeners[mutator ? 1 : 0],
1006
+ [tableId, cellId],
1007
+ [getTableIds],
1008
+ );
1009
+ };
989
1010
  const getContent = () => [getTables(), getValues()];
990
1011
  const getTables = () => mapToObj3(tablesMap);
991
1012
  const getTableIds = () => mapKeys(tablesMap);
@@ -994,22 +1015,36 @@ const createStore = () => {
994
1015
  mapKeys(mapGet(tableCellIds, id(tableId)));
995
1016
  const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
996
1017
  const getRowIds = (tableId) => mapKeys(mapGet(tablesMap, id(tableId)));
997
- const getSortedRowIds = (tableId, cellId, descending, offset = 0, limit) =>
998
- arrayMap(
999
- slice(
1000
- arraySort(
1001
- mapMap(mapGet(tablesMap, id(tableId)), (row, rowId) => [
1002
- isUndefined(cellId) ? rowId : mapGet(row, id(cellId)),
1003
- rowId,
1004
- ]),
1005
- ([cell1], [cell2]) =>
1006
- defaultSorter(cell1, cell2) * (descending ? -1 : 1),
1007
- ),
1008
- offset,
1009
- isUndefined(limit) ? limit : offset + limit,
1010
- ),
1011
- ([, rowId]) => rowId,
1012
- );
1018
+ const getSortedRowIds = (
1019
+ tableIdOrArgs,
1020
+ cellId,
1021
+ descending,
1022
+ offset = 0,
1023
+ limit,
1024
+ ) =>
1025
+ isObject(tableIdOrArgs)
1026
+ ? getSortedRowIds(
1027
+ tableIdOrArgs.tableId,
1028
+ tableIdOrArgs.cellId,
1029
+ tableIdOrArgs.descending,
1030
+ tableIdOrArgs.offset,
1031
+ tableIdOrArgs.limit,
1032
+ )
1033
+ : arrayMap(
1034
+ slice(
1035
+ arraySort(
1036
+ mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
1037
+ isUndefined(cellId) ? rowId : mapGet(row, id(cellId)),
1038
+ rowId,
1039
+ ]),
1040
+ ([cell1], [cell2]) =>
1041
+ defaultSorter(cell1, cell2) * (descending ? -1 : 1),
1042
+ ),
1043
+ offset,
1044
+ isUndefined(limit) ? limit : offset + limit,
1045
+ ),
1046
+ ([, rowId]) => rowId,
1047
+ );
1013
1048
  const getRow = (tableId, rowId) =>
1014
1049
  mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
1015
1050
  const getCellIds = (tableId, rowId) =>
@@ -1401,48 +1436,33 @@ const createStore = () => {
1401
1436
  mapForEach(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), cellCallback);
1402
1437
  const forEachValue = (valueCallback) => mapForEach(valuesMap, valueCallback);
1403
1438
  const addSortedRowIdsListener = (
1404
- tableId,
1405
- cellId,
1406
- descending,
1439
+ tableIdOrArgs,
1440
+ cellIdOrListener,
1441
+ descendingOrMutator,
1407
1442
  offset,
1408
1443
  limit,
1409
1444
  listener,
1410
1445
  mutator,
1411
- ) => {
1412
- let sortedRowIds = getSortedRowIds(
1413
- tableId,
1414
- cellId,
1415
- descending,
1416
- offset,
1417
- limit,
1418
- );
1419
- return addListener(
1420
- () => {
1421
- const newSortedRowIds = getSortedRowIds(
1422
- tableId,
1423
- cellId,
1424
- descending,
1425
- offset,
1426
- limit,
1446
+ ) =>
1447
+ isObject(tableIdOrArgs)
1448
+ ? addSortedRowIdsListenerImpl(
1449
+ tableIdOrArgs.tableId,
1450
+ tableIdOrArgs.cellId,
1451
+ [
1452
+ tableIdOrArgs.descending ?? false,
1453
+ tableIdOrArgs.offset ?? 0,
1454
+ tableIdOrArgs.limit,
1455
+ ],
1456
+ cellIdOrListener,
1457
+ descendingOrMutator,
1458
+ )
1459
+ : addSortedRowIdsListenerImpl(
1460
+ tableIdOrArgs,
1461
+ cellIdOrListener,
1462
+ [descendingOrMutator, offset, limit],
1463
+ listener,
1464
+ mutator,
1427
1465
  );
1428
- if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
1429
- sortedRowIds = newSortedRowIds;
1430
- listener(
1431
- store,
1432
- tableId,
1433
- cellId,
1434
- descending,
1435
- offset,
1436
- limit,
1437
- sortedRowIds,
1438
- );
1439
- }
1440
- },
1441
- sortedRowIdsListeners[mutator ? 1 : 0],
1442
- [tableId, cellId],
1443
- [getTableIds],
1444
- );
1445
- };
1446
1466
  const addStartTransactionListener = (listener) =>
1447
1467
  addListener(listener, startTransactionListeners);
1448
1468
  const addWillFinishTransactionListener = (listener) =>
@@ -1,4 +1,5 @@
1
1
  const EMPTY_STRING = '';
2
+ const DOT = '.';
2
3
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
3
4
  str.split(separator, limit);
4
5
 
@@ -399,6 +400,25 @@ const createCustomPersister = (
399
400
  return persister;
400
401
  };
401
402
  const isAutoSaving = () => !isUndefined(autoSaveListenerId);
403
+ const startAutoPersisting = async (
404
+ initialContent,
405
+ startSaveFirst = false,
406
+ ) => {
407
+ const [call1, call2] = startSaveFirst
408
+ ? [startAutoSave, startAutoLoad]
409
+ : [startAutoLoad, startAutoSave];
410
+ await call1(initialContent);
411
+ await call2(initialContent);
412
+ return persister;
413
+ };
414
+ const stopAutoPersisting = async (stopSaveFirst = false) => {
415
+ const [call1, call2] = stopSaveFirst
416
+ ? [stopAutoSave, stopAutoLoad]
417
+ : [stopAutoLoad, stopAutoSave];
418
+ await call1();
419
+ await call2();
420
+ return persister;
421
+ };
402
422
  const getStatus = () => status;
403
423
  const addStatusListener = (listener) =>
404
424
  addListener(listener, statusListeners);
@@ -412,10 +432,9 @@ const createCustomPersister = (
412
432
  return persister;
413
433
  };
414
434
  const getStore = () => store;
415
- const destroy = async () => {
435
+ const destroy = () => {
416
436
  arrayClear(mapGet(scheduleActions, scheduleId));
417
- await persister.stopAutoLoad();
418
- return await persister.stopAutoSave();
437
+ return stopAutoPersisting();
419
438
  };
420
439
  const getStats = () => ({loads, saves});
421
440
  const persister = {
@@ -427,6 +446,8 @@ const createCustomPersister = (
427
446
  startAutoSave,
428
447
  stopAutoSave,
429
448
  isAutoSaving,
449
+ startAutoPersisting,
450
+ stopAutoPersisting,
430
451
  getStatus,
431
452
  addStatusListener,
432
453
  delListener,
@@ -473,7 +494,7 @@ const createCustomSynchronizer = (
473
494
  };
474
495
  const request = async (toClientId, message, body, transactionId) =>
475
496
  promiseNew((resolve, reject) => {
476
- const requestId = transactionId + '.' + getUniqueId(4);
497
+ const requestId = transactionId + DOT + getUniqueId(4);
477
498
  const timeout = startTimeout(() => {
478
499
  collDel(pendingRequests, requestId);
479
500
  reject(
@@ -591,14 +612,11 @@ const createCustomSynchronizer = (
591
612
  const delPersisterListener = () => (persisterListener = void 0);
592
613
  const startSync = async (initialContent) => {
593
614
  syncing = 1;
594
- return await (
595
- await persister.startAutoLoad(initialContent)
596
- ).startAutoSave();
615
+ return await persister.startAutoPersisting(initialContent);
597
616
  };
598
617
  const stopSync = async () => {
599
618
  syncing = 0;
600
- await persister.stopAutoLoad();
601
- await persister.stopAutoSave();
619
+ await persister.stopAutoPersisting();
602
620
  return persister;
603
621
  };
604
622
  const destroy = async () => {
@@ -1,4 +1,5 @@
1
1
  const EMPTY_STRING = '';
2
+ const DOT = '.';
2
3
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
3
4
  str.split(separator, limit);
4
5
 
@@ -399,6 +400,25 @@ const createCustomPersister = (
399
400
  return persister;
400
401
  };
401
402
  const isAutoSaving = () => !isUndefined(autoSaveListenerId);
403
+ const startAutoPersisting = async (
404
+ initialContent,
405
+ startSaveFirst = false,
406
+ ) => {
407
+ const [call1, call2] = startSaveFirst
408
+ ? [startAutoSave, startAutoLoad]
409
+ : [startAutoLoad, startAutoSave];
410
+ await call1(initialContent);
411
+ await call2(initialContent);
412
+ return persister;
413
+ };
414
+ const stopAutoPersisting = async (stopSaveFirst = false) => {
415
+ const [call1, call2] = stopSaveFirst
416
+ ? [stopAutoSave, stopAutoLoad]
417
+ : [stopAutoLoad, stopAutoSave];
418
+ await call1();
419
+ await call2();
420
+ return persister;
421
+ };
402
422
  const getStatus = () => status;
403
423
  const addStatusListener = (listener) =>
404
424
  addListener(listener, statusListeners);
@@ -412,10 +432,9 @@ const createCustomPersister = (
412
432
  return persister;
413
433
  };
414
434
  const getStore = () => store;
415
- const destroy = async () => {
435
+ const destroy = () => {
416
436
  arrayClear(mapGet(scheduleActions, scheduleId));
417
- await persister.stopAutoLoad();
418
- return await persister.stopAutoSave();
437
+ return stopAutoPersisting();
419
438
  };
420
439
  const getStats = () => ({loads, saves});
421
440
  const persister = {
@@ -427,6 +446,8 @@ const createCustomPersister = (
427
446
  startAutoSave,
428
447
  stopAutoSave,
429
448
  isAutoSaving,
449
+ startAutoPersisting,
450
+ stopAutoPersisting,
430
451
  getStatus,
431
452
  addStatusListener,
432
453
  delListener,
@@ -463,7 +484,7 @@ const createCustomSynchronizer = (
463
484
  };
464
485
  const request = async (toClientId, message, body, transactionId) =>
465
486
  promiseNew((resolve, reject) => {
466
- const requestId = transactionId + '.' + getUniqueId(4);
487
+ const requestId = transactionId + DOT + getUniqueId(4);
467
488
  const timeout = startTimeout(() => {
468
489
  collDel(pendingRequests, requestId);
469
490
  reject(
@@ -581,14 +602,11 @@ const createCustomSynchronizer = (
581
602
  const delPersisterListener = () => (persisterListener = void 0);
582
603
  const startSync = async (initialContent) => {
583
604
  syncing = 1;
584
- return await (
585
- await persister.startAutoLoad(initialContent)
586
- ).startAutoSave();
605
+ return await persister.startAutoPersisting(initialContent);
587
606
  };
588
607
  const stopSync = async () => {
589
608
  syncing = 0;
590
- await persister.stopAutoLoad();
591
- await persister.stopAutoSave();
609
+ await persister.stopAutoPersisting();
592
610
  return persister;
593
611
  };
594
612
  const destroy = async () => {
@@ -1,4 +1,5 @@
1
1
  const EMPTY_STRING = '';
2
+ const DOT = '.';
2
3
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
3
4
  str.split(separator, limit);
4
5
 
@@ -399,6 +400,25 @@ const createCustomPersister = (
399
400
  return persister;
400
401
  };
401
402
  const isAutoSaving = () => !isUndefined(autoSaveListenerId);
403
+ const startAutoPersisting = async (
404
+ initialContent,
405
+ startSaveFirst = false,
406
+ ) => {
407
+ const [call1, call2] = startSaveFirst
408
+ ? [startAutoSave, startAutoLoad]
409
+ : [startAutoLoad, startAutoSave];
410
+ await call1(initialContent);
411
+ await call2(initialContent);
412
+ return persister;
413
+ };
414
+ const stopAutoPersisting = async (stopSaveFirst = false) => {
415
+ const [call1, call2] = stopSaveFirst
416
+ ? [stopAutoSave, stopAutoLoad]
417
+ : [stopAutoLoad, stopAutoSave];
418
+ await call1();
419
+ await call2();
420
+ return persister;
421
+ };
402
422
  const getStatus = () => status;
403
423
  const addStatusListener = (listener) =>
404
424
  addListener(listener, statusListeners);
@@ -412,10 +432,9 @@ const createCustomPersister = (
412
432
  return persister;
413
433
  };
414
434
  const getStore = () => store;
415
- const destroy = async () => {
435
+ const destroy = () => {
416
436
  arrayClear(mapGet(scheduleActions, scheduleId));
417
- await persister.stopAutoLoad();
418
- return await persister.stopAutoSave();
437
+ return stopAutoPersisting();
419
438
  };
420
439
  const getStats = () => ({loads, saves});
421
440
  const persister = {
@@ -427,6 +446,8 @@ const createCustomPersister = (
427
446
  startAutoSave,
428
447
  stopAutoSave,
429
448
  isAutoSaving,
449
+ startAutoPersisting,
450
+ stopAutoPersisting,
430
451
  getStatus,
431
452
  addStatusListener,
432
453
  delListener,
@@ -463,7 +484,7 @@ const createCustomSynchronizer = (
463
484
  };
464
485
  const request = async (toClientId, message, body, transactionId) =>
465
486
  promiseNew((resolve, reject) => {
466
- const requestId = transactionId + '.' + getUniqueId(4);
487
+ const requestId = transactionId + DOT + getUniqueId(4);
467
488
  const timeout = startTimeout(() => {
468
489
  collDel(pendingRequests, requestId);
469
490
  reject(
@@ -581,14 +602,11 @@ const createCustomSynchronizer = (
581
602
  const delPersisterListener = () => (persisterListener = void 0);
582
603
  const startSync = async (initialContent) => {
583
604
  syncing = 1;
584
- return await (
585
- await persister.startAutoLoad(initialContent)
586
- ).startAutoSave();
605
+ return await persister.startAutoPersisting(initialContent);
587
606
  };
588
607
  const stopSync = async () => {
589
608
  syncing = 0;
590
- await persister.stopAutoLoad();
591
- await persister.stopAutoSave();
609
+ await persister.stopAutoPersisting();
592
610
  return persister;
593
611
  };
594
612
  const destroy = async () => {
@@ -1,4 +1,5 @@
1
1
  const EMPTY_STRING = '';
2
+ const DOT = '.';
2
3
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
3
4
  str.split(separator, limit);
4
5
 
@@ -401,6 +402,25 @@ const createCustomPersister = (
401
402
  return persister;
402
403
  };
403
404
  const isAutoSaving = () => !isUndefined(autoSaveListenerId);
405
+ const startAutoPersisting = async (
406
+ initialContent,
407
+ startSaveFirst = false,
408
+ ) => {
409
+ const [call1, call2] = startSaveFirst
410
+ ? [startAutoSave, startAutoLoad]
411
+ : [startAutoLoad, startAutoSave];
412
+ await call1(initialContent);
413
+ await call2(initialContent);
414
+ return persister;
415
+ };
416
+ const stopAutoPersisting = async (stopSaveFirst = false) => {
417
+ const [call1, call2] = stopSaveFirst
418
+ ? [stopAutoSave, stopAutoLoad]
419
+ : [stopAutoLoad, stopAutoSave];
420
+ await call1();
421
+ await call2();
422
+ return persister;
423
+ };
404
424
  const getStatus = () => status;
405
425
  const addStatusListener = (listener) =>
406
426
  addListener(listener, statusListeners);
@@ -414,10 +434,9 @@ const createCustomPersister = (
414
434
  return persister;
415
435
  };
416
436
  const getStore = () => store;
417
- const destroy = async () => {
437
+ const destroy = () => {
418
438
  arrayClear(mapGet(scheduleActions, scheduleId));
419
- await persister.stopAutoLoad();
420
- return await persister.stopAutoSave();
439
+ return stopAutoPersisting();
421
440
  };
422
441
  const getStats = () => ({loads, saves});
423
442
  const persister = {
@@ -429,6 +448,8 @@ const createCustomPersister = (
429
448
  startAutoSave,
430
449
  stopAutoSave,
431
450
  isAutoSaving,
451
+ startAutoPersisting,
452
+ stopAutoPersisting,
432
453
  getStatus,
433
454
  addStatusListener,
434
455
  delListener,
@@ -465,7 +486,7 @@ const createCustomSynchronizer = (
465
486
  };
466
487
  const request = async (toClientId, message, body, transactionId) =>
467
488
  promiseNew((resolve, reject) => {
468
- const requestId = transactionId + '.' + getUniqueId(4);
489
+ const requestId = transactionId + DOT + getUniqueId(4);
469
490
  const timeout = startTimeout(() => {
470
491
  collDel(pendingRequests, requestId);
471
492
  reject(
@@ -583,14 +604,11 @@ const createCustomSynchronizer = (
583
604
  const delPersisterListener = () => (persisterListener = void 0);
584
605
  const startSync = async (initialContent) => {
585
606
  syncing = 1;
586
- return await (
587
- await persister.startAutoLoad(initialContent)
588
- ).startAutoSave();
607
+ return await persister.startAutoPersisting(initialContent);
589
608
  };
590
609
  const stopSync = async () => {
591
610
  syncing = 0;
592
- await persister.stopAutoLoad();
593
- await persister.stopAutoSave();
611
+ await persister.stopAutoPersisting();
594
612
  return persister;
595
613
  };
596
614
  const destroy = async () => {
@@ -1,4 +1,5 @@
1
1
  const EMPTY_STRING = '';
2
+ const DOT = '.';
2
3
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
3
4
  str.split(separator, limit);
4
5
 
@@ -401,6 +402,25 @@ const createCustomPersister = (
401
402
  return persister;
402
403
  };
403
404
  const isAutoSaving = () => !isUndefined(autoSaveListenerId);
405
+ const startAutoPersisting = async (
406
+ initialContent,
407
+ startSaveFirst = false,
408
+ ) => {
409
+ const [call1, call2] = startSaveFirst
410
+ ? [startAutoSave, startAutoLoad]
411
+ : [startAutoLoad, startAutoSave];
412
+ await call1(initialContent);
413
+ await call2(initialContent);
414
+ return persister;
415
+ };
416
+ const stopAutoPersisting = async (stopSaveFirst = false) => {
417
+ const [call1, call2] = stopSaveFirst
418
+ ? [stopAutoSave, stopAutoLoad]
419
+ : [stopAutoLoad, stopAutoSave];
420
+ await call1();
421
+ await call2();
422
+ return persister;
423
+ };
404
424
  const getStatus = () => status;
405
425
  const addStatusListener = (listener) =>
406
426
  addListener(listener, statusListeners);
@@ -414,10 +434,9 @@ const createCustomPersister = (
414
434
  return persister;
415
435
  };
416
436
  const getStore = () => store;
417
- const destroy = async () => {
437
+ const destroy = () => {
418
438
  arrayClear(mapGet(scheduleActions, scheduleId));
419
- await persister.stopAutoLoad();
420
- return await persister.stopAutoSave();
439
+ return stopAutoPersisting();
421
440
  };
422
441
  const getStats = () => ({loads, saves});
423
442
  const persister = {
@@ -429,6 +448,8 @@ const createCustomPersister = (
429
448
  startAutoSave,
430
449
  stopAutoSave,
431
450
  isAutoSaving,
451
+ startAutoPersisting,
452
+ stopAutoPersisting,
432
453
  getStatus,
433
454
  addStatusListener,
434
455
  delListener,
@@ -465,7 +486,7 @@ const createCustomSynchronizer = (
465
486
  };
466
487
  const request = async (toClientId, message, body, transactionId) =>
467
488
  promiseNew((resolve, reject) => {
468
- const requestId = transactionId + '.' + getUniqueId(4);
489
+ const requestId = transactionId + DOT + getUniqueId(4);
469
490
  const timeout = startTimeout(() => {
470
491
  collDel(pendingRequests, requestId);
471
492
  reject(
@@ -583,14 +604,11 @@ const createCustomSynchronizer = (
583
604
  const delPersisterListener = () => (persisterListener = void 0);
584
605
  const startSync = async (initialContent) => {
585
606
  syncing = 1;
586
- return await (
587
- await persister.startAutoLoad(initialContent)
588
- ).startAutoSave();
607
+ return await persister.startAutoPersisting(initialContent);
589
608
  };
590
609
  const stopSync = async () => {
591
610
  syncing = 0;
592
- await persister.stopAutoLoad();
593
- await persister.stopAutoSave();
611
+ await persister.stopAutoPersisting();
594
612
  return persister;
595
613
  };
596
614
  const destroy = async () => {