tinybase 9.0.0-beta.0 → 9.0.0-beta.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 (219) hide show
  1. package/@types/mergeable-store/index.d.ts +4 -4
  2. package/@types/mergeable-store/with-schemas/index.d.ts +41 -17
  3. package/@types/persisters/index.d.ts +2 -1
  4. package/@types/persisters/with-schemas/index.d.ts +16 -10
  5. package/@types/queries/index.d.ts +4 -0
  6. package/@types/queries/with-schemas/index.d.ts +4 -0
  7. package/index.js +46 -6
  8. package/mergeable-store/index.js +46 -6
  9. package/mergeable-store/with-schemas/index.js +46 -6
  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/omni/index.js +1 -1
  17. package/min/omni/index.js.gz +0 -0
  18. package/min/omni/with-schemas/index.js +1 -1
  19. package/min/omni/with-schemas/index.js.gz +0 -0
  20. package/min/persisters/index.js +1 -1
  21. package/min/persisters/index.js.gz +0 -0
  22. package/min/persisters/persister-automerge/index.js +1 -1
  23. package/min/persisters/persister-automerge/index.js.gz +0 -0
  24. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  25. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  26. package/min/persisters/persister-browser/index.js +1 -1
  27. package/min/persisters/persister-browser/index.js.gz +0 -0
  28. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  29. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  30. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  31. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  32. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  33. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  34. package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
  35. package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
  36. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
  37. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
  38. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  39. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  40. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  41. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  42. package/min/persisters/persister-electric-sql/index.js +1 -1
  43. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  44. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  45. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  46. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  47. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  48. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  49. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  50. package/min/persisters/persister-file/index.js +1 -1
  51. package/min/persisters/persister-file/index.js.gz +0 -0
  52. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  53. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  54. package/min/persisters/persister-indexed-db/index.js +1 -1
  55. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  56. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  57. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  58. package/min/persisters/persister-libsql/index.js +1 -1
  59. package/min/persisters/persister-libsql/index.js.gz +0 -0
  60. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  61. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  62. package/min/persisters/persister-partykit-client/index.js +1 -1
  63. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  64. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  65. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  66. package/min/persisters/persister-pglite/index.js +1 -1
  67. package/min/persisters/persister-pglite/index.js.gz +0 -0
  68. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  69. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  70. package/min/persisters/persister-postgres/index.js +1 -1
  71. package/min/persisters/persister-postgres/index.js.gz +0 -0
  72. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  73. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  74. package/min/persisters/persister-powersync/index.js +1 -1
  75. package/min/persisters/persister-powersync/index.js.gz +0 -0
  76. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  77. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  78. package/min/persisters/persister-react-native-mmkv/index.js +1 -1
  79. package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
  80. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
  81. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
  82. package/min/persisters/persister-react-native-sqlite/index.js +1 -1
  83. package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
  84. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
  85. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
  86. package/min/persisters/persister-remote/index.js +1 -1
  87. package/min/persisters/persister-remote/index.js.gz +0 -0
  88. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  89. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  90. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  91. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  92. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  93. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  94. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  95. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  96. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  97. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  98. package/min/persisters/persister-sqlite3/index.js +1 -1
  99. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  100. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  101. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  102. package/min/persisters/persister-yjs/index.js +1 -1
  103. package/min/persisters/persister-yjs/index.js.gz +0 -0
  104. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  105. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  106. package/min/persisters/with-schemas/index.js +1 -1
  107. package/min/persisters/with-schemas/index.js.gz +0 -0
  108. package/min/store/index.js +1 -1
  109. package/min/store/index.js.gz +0 -0
  110. package/min/store/with-schemas/index.js +1 -1
  111. package/min/store/with-schemas/index.js.gz +0 -0
  112. package/min/synchronizers/index.js +1 -1
  113. package/min/synchronizers/index.js.gz +0 -0
  114. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  115. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  116. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  117. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  118. package/min/synchronizers/synchronizer-local/index.js +1 -1
  119. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  120. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  121. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  122. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  123. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  124. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  125. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  126. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  127. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  128. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  129. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  130. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  131. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  132. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  133. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  134. package/min/synchronizers/with-schemas/index.js +1 -1
  135. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  136. package/min/ui-react-inspector/index.js +1 -1
  137. package/min/ui-react-inspector/index.js.gz +0 -0
  138. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  139. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  140. package/min/ui-solid-inspector/index.js +1 -1
  141. package/min/ui-solid-inspector/index.js.gz +0 -0
  142. package/min/ui-solid-inspector/with-schemas/index.js +1 -1
  143. package/min/ui-solid-inspector/with-schemas/index.js.gz +0 -0
  144. package/min/ui-svelte-inspector/index.js +1 -1
  145. package/min/ui-svelte-inspector/index.js.gz +0 -0
  146. package/min/ui-svelte-inspector/with-schemas/index.js +1 -1
  147. package/min/ui-svelte-inspector/with-schemas/index.js.gz +0 -0
  148. package/min/with-schemas/index.js +1 -1
  149. package/min/with-schemas/index.js.gz +0 -0
  150. package/omni/index.js +53 -14
  151. package/omni/with-schemas/index.js +53 -14
  152. package/package.json +3 -3
  153. package/persisters/index.js +4 -3
  154. package/persisters/persister-automerge/index.js +4 -3
  155. package/persisters/persister-automerge/with-schemas/index.js +4 -3
  156. package/persisters/persister-browser/index.js +4 -3
  157. package/persisters/persister-browser/with-schemas/index.js +4 -3
  158. package/persisters/persister-cr-sqlite-wasm/index.js +4 -3
  159. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +4 -3
  160. package/persisters/persister-durable-object-sql-storage/index.js +4 -3
  161. package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +4 -3
  162. package/persisters/persister-durable-object-storage/index.js +4 -3
  163. package/persisters/persister-durable-object-storage/with-schemas/index.js +4 -3
  164. package/persisters/persister-electric-sql/index.js +4 -3
  165. package/persisters/persister-electric-sql/with-schemas/index.js +4 -3
  166. package/persisters/persister-expo-sqlite/index.js +4 -3
  167. package/persisters/persister-expo-sqlite/with-schemas/index.js +4 -3
  168. package/persisters/persister-file/index.js +4 -3
  169. package/persisters/persister-file/with-schemas/index.js +4 -3
  170. package/persisters/persister-indexed-db/index.js +4 -3
  171. package/persisters/persister-indexed-db/with-schemas/index.js +4 -3
  172. package/persisters/persister-libsql/index.js +4 -3
  173. package/persisters/persister-libsql/with-schemas/index.js +4 -3
  174. package/persisters/persister-partykit-client/index.js +4 -3
  175. package/persisters/persister-partykit-client/with-schemas/index.js +4 -3
  176. package/persisters/persister-pglite/index.js +4 -3
  177. package/persisters/persister-pglite/with-schemas/index.js +4 -3
  178. package/persisters/persister-postgres/index.js +4 -3
  179. package/persisters/persister-postgres/with-schemas/index.js +4 -3
  180. package/persisters/persister-powersync/index.js +4 -3
  181. package/persisters/persister-powersync/with-schemas/index.js +4 -3
  182. package/persisters/persister-react-native-mmkv/index.js +4 -3
  183. package/persisters/persister-react-native-mmkv/with-schemas/index.js +4 -3
  184. package/persisters/persister-react-native-sqlite/index.js +4 -3
  185. package/persisters/persister-react-native-sqlite/with-schemas/index.js +4 -3
  186. package/persisters/persister-remote/index.js +4 -3
  187. package/persisters/persister-remote/with-schemas/index.js +4 -3
  188. package/persisters/persister-sqlite-bun/index.js +4 -3
  189. package/persisters/persister-sqlite-bun/with-schemas/index.js +4 -3
  190. package/persisters/persister-sqlite-wasm/index.js +4 -3
  191. package/persisters/persister-sqlite-wasm/with-schemas/index.js +4 -3
  192. package/persisters/persister-sqlite3/index.js +4 -3
  193. package/persisters/persister-sqlite3/with-schemas/index.js +4 -3
  194. package/persisters/persister-yjs/index.js +4 -3
  195. package/persisters/persister-yjs/with-schemas/index.js +4 -3
  196. package/persisters/with-schemas/index.js +4 -3
  197. package/readme.md +3 -3
  198. package/releases.md +16 -1
  199. package/store/index.js +33 -2
  200. package/store/with-schemas/index.js +33 -2
  201. package/synchronizers/index.js +4 -3
  202. package/synchronizers/synchronizer-broadcast-channel/index.js +4 -3
  203. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +4 -3
  204. package/synchronizers/synchronizer-local/index.js +4 -3
  205. package/synchronizers/synchronizer-local/with-schemas/index.js +4 -3
  206. package/synchronizers/synchronizer-ws-client/index.js +4 -3
  207. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +4 -3
  208. package/synchronizers/synchronizer-ws-server/index.js +7 -8
  209. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +7 -8
  210. package/synchronizers/synchronizer-ws-server-durable-object/index.js +3 -3
  211. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +3 -3
  212. package/synchronizers/with-schemas/index.js +4 -3
  213. package/ui-react-inspector/index.js +36 -5
  214. package/ui-react-inspector/with-schemas/index.js +36 -5
  215. package/ui-solid-inspector/index.js +36 -5
  216. package/ui-solid-inspector/with-schemas/index.js +36 -5
  217. package/ui-svelte-inspector/index.js +36 -5
  218. package/ui-svelte-inspector/with-schemas/index.js +36 -5
  219. package/with-schemas/index.js +46 -6
package/omni/index.js CHANGED
@@ -1278,8 +1278,10 @@ const createStore = () => {
1278
1278
  const changedRowIds = mapNew();
1279
1279
  const changedCellIds = mapNew();
1280
1280
  const changedCells = mapNew();
1281
+ const defaultedCells = mapNew();
1281
1282
  const changedValueIds = mapNew();
1282
1283
  const changedValues = mapNew();
1284
+ const defaultedValues = setNew();
1283
1285
  const invalidCells = mapNew();
1284
1286
  const invalidValues = mapNew();
1285
1287
  const tablesSchemaMap = mapNew();
@@ -1453,6 +1455,16 @@ const createStore = () => {
1453
1455
  collForEach(rowDefaulted, (cell, cellId) => {
1454
1456
  if (!objHas(row, cellId)) {
1455
1457
  row[cellId] = cell;
1458
+ ifNotUndefined(rowId, (rowId2) =>
1459
+ setAdd(
1460
+ mapEnsure(
1461
+ mapEnsure(defaultedCells, tableId, mapNew),
1462
+ rowId2,
1463
+ setNew,
1464
+ ),
1465
+ cellId,
1466
+ ),
1467
+ );
1456
1468
  }
1457
1469
  });
1458
1470
  collForEach(rowNonDefaulted, (cellId) => {
@@ -1469,6 +1481,7 @@ const createStore = () => {
1469
1481
  collForEach(valuesDefaulted, (value, valueId) => {
1470
1482
  if (!objHas(values, valueId)) {
1471
1483
  values[valueId] = value;
1484
+ setAdd(defaultedValues, valueId);
1472
1485
  }
1473
1486
  });
1474
1487
  collForEach(valuesNonDefaulted, (valueId) => {
@@ -1872,18 +1885,34 @@ const createStore = () => {
1872
1885
  );
1873
1886
  };
1874
1887
  const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
1888
+ const defaulted =
1889
+ collHas(mapGet(mapGet(defaultedCells, tableId), rowId), cellId) &&
1890
+ isUndefined(oldCell)
1891
+ ? 1
1892
+ : 0;
1875
1893
  mapEnsure(
1876
1894
  mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
1877
1895
  cellId,
1878
1896
  () => [oldCell, 0],
1879
1897
  )[1] = newCell;
1880
- internalListeners[3]?.(tableId, rowId, cellId, newCell, mutating);
1898
+ internalListeners[3]?.(
1899
+ tableId,
1900
+ rowId,
1901
+ cellId,
1902
+ newCell,
1903
+ mutating,
1904
+ defaulted,
1905
+ );
1906
+ collDel(mapGet(mapGet(defaultedCells, tableId), rowId), cellId);
1881
1907
  };
1882
1908
  const valueIdsChanged = (valueId, addedOrRemoved) =>
1883
1909
  idsChanged(changedValueIds, valueId, addedOrRemoved);
1884
1910
  const valueChanged = (valueId, oldValue, newValue) => {
1911
+ const defaulted =
1912
+ collHas(defaultedValues, valueId) && isUndefined(oldValue) ? 1 : 0;
1885
1913
  mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
1886
- internalListeners[4]?.(valueId, newValue, mutating);
1914
+ internalListeners[4]?.(valueId, newValue, mutating, defaulted);
1915
+ collDel(defaultedValues, valueId);
1887
1916
  };
1888
1917
  const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
1889
1918
  arrayPush(
@@ -2671,9 +2700,11 @@ const createStore = () => {
2671
2700
  changedRowIds,
2672
2701
  changedCellIds,
2673
2702
  changedCells,
2703
+ defaultedCells,
2674
2704
  invalidCells,
2675
2705
  changedValueIds,
2676
2706
  changedValues,
2707
+ defaultedValues,
2677
2708
  invalidValues,
2678
2709
  ],
2679
2710
  collClear,
@@ -3178,7 +3209,14 @@ const createMergeableStore = (uniqueId, getNow) => {
3178
3209
  collClear(touchedCells);
3179
3210
  collClear(touchedValues);
3180
3211
  };
3181
- const cellChanged = (tableId, rowId, cellId, newCell, mutating) => {
3212
+ const cellChanged = (
3213
+ tableId,
3214
+ rowId,
3215
+ cellId,
3216
+ newCell,
3217
+ mutating,
3218
+ defaulted,
3219
+ ) => {
3182
3220
  setAdd(
3183
3221
  mapEnsure(mapEnsure(touchedCells, tableId, mapNew), rowId, setNew),
3184
3222
  cellId,
@@ -3196,7 +3234,9 @@ const createMergeableStore = (uniqueId, getNow) => {
3196
3234
  {
3197
3235
  [cellId]: [
3198
3236
  newCell,
3199
- defaultingContent ? EMPTY_STRING : getNextHlc(),
3237
+ defaultingContent || defaulted
3238
+ ? EMPTY_STRING
3239
+ : getNextHlc(),
3200
3240
  ],
3201
3241
  },
3202
3242
  ],
@@ -3209,7 +3249,7 @@ const createMergeableStore = (uniqueId, getNow) => {
3209
3249
  ]);
3210
3250
  }
3211
3251
  };
3212
- const valueChanged = (valueId, newValue, mutating) => {
3252
+ const valueChanged = (valueId, newValue, mutating, defaulted) => {
3213
3253
  setAdd(touchedValues, valueId);
3214
3254
  if (listeningToRawStoreChanges || mutating) {
3215
3255
  if (mutating) {
@@ -3221,7 +3261,7 @@ const createMergeableStore = (uniqueId, getNow) => {
3221
3261
  {
3222
3262
  [valueId]: [
3223
3263
  newValue,
3224
- defaultingContent ? EMPTY_STRING : getNextHlc(),
3264
+ defaultingContent || defaulted ? EMPTY_STRING : getNextHlc(),
3225
3265
  ],
3226
3266
  },
3227
3267
  ],
@@ -3910,13 +3950,14 @@ const createCustomPersister = (
3910
3950
  const content = await getPersisted();
3911
3951
  if (isArray(content)) {
3912
3952
  setContentOrChanges(content);
3913
- } else if (initialContent) {
3953
+ } else if (isUndefined(content) && initialContent) {
3914
3954
  setDefaultContent(initialContent);
3915
- } else {
3955
+ } else if (!isUndefined(content)) {
3916
3956
  errorNew(`Content is not an array: ${content}`);
3917
3957
  }
3918
3958
  },
3919
- () => {
3959
+ (error) => {
3960
+ onIgnoredError?.(error);
3920
3961
  if (initialContent) {
3921
3962
  setDefaultContent(initialContent);
3922
3963
  }
@@ -7974,11 +8015,9 @@ const createWsServer = (
7974
8015
  );
7975
8016
  const startServerClient = async (serverClient) => {
7976
8017
  serverClient[0 /* State */] = 2; /* Starting */
7977
- await serverClient[1 /* Persister */].schedule(
7978
- serverClient[1 /* Persister */].startAutoLoad,
7979
- serverClient[1 /* Persister */].startAutoSave,
7980
- serverClient[2 /* Synchronizer */].startSync,
7981
- );
8018
+ await serverClient[1 /* Persister */].startAutoLoad();
8019
+ await serverClient[1 /* Persister */].startAutoSave();
8020
+ await serverClient[2 /* Synchronizer */].startSync();
7982
8021
  serverClient[5 /* Then */](serverClient[1 /* Persister */].getStore());
7983
8022
  serverClient[0 /* State */] = 0; /* Ready */
7984
8023
  };
@@ -1278,8 +1278,10 @@ const createStore = () => {
1278
1278
  const changedRowIds = mapNew();
1279
1279
  const changedCellIds = mapNew();
1280
1280
  const changedCells = mapNew();
1281
+ const defaultedCells = mapNew();
1281
1282
  const changedValueIds = mapNew();
1282
1283
  const changedValues = mapNew();
1284
+ const defaultedValues = setNew();
1283
1285
  const invalidCells = mapNew();
1284
1286
  const invalidValues = mapNew();
1285
1287
  const tablesSchemaMap = mapNew();
@@ -1453,6 +1455,16 @@ const createStore = () => {
1453
1455
  collForEach(rowDefaulted, (cell, cellId) => {
1454
1456
  if (!objHas(row, cellId)) {
1455
1457
  row[cellId] = cell;
1458
+ ifNotUndefined(rowId, (rowId2) =>
1459
+ setAdd(
1460
+ mapEnsure(
1461
+ mapEnsure(defaultedCells, tableId, mapNew),
1462
+ rowId2,
1463
+ setNew,
1464
+ ),
1465
+ cellId,
1466
+ ),
1467
+ );
1456
1468
  }
1457
1469
  });
1458
1470
  collForEach(rowNonDefaulted, (cellId) => {
@@ -1469,6 +1481,7 @@ const createStore = () => {
1469
1481
  collForEach(valuesDefaulted, (value, valueId) => {
1470
1482
  if (!objHas(values, valueId)) {
1471
1483
  values[valueId] = value;
1484
+ setAdd(defaultedValues, valueId);
1472
1485
  }
1473
1486
  });
1474
1487
  collForEach(valuesNonDefaulted, (valueId) => {
@@ -1872,18 +1885,34 @@ const createStore = () => {
1872
1885
  );
1873
1886
  };
1874
1887
  const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
1888
+ const defaulted =
1889
+ collHas(mapGet(mapGet(defaultedCells, tableId), rowId), cellId) &&
1890
+ isUndefined(oldCell)
1891
+ ? 1
1892
+ : 0;
1875
1893
  mapEnsure(
1876
1894
  mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
1877
1895
  cellId,
1878
1896
  () => [oldCell, 0],
1879
1897
  )[1] = newCell;
1880
- internalListeners[3]?.(tableId, rowId, cellId, newCell, mutating);
1898
+ internalListeners[3]?.(
1899
+ tableId,
1900
+ rowId,
1901
+ cellId,
1902
+ newCell,
1903
+ mutating,
1904
+ defaulted,
1905
+ );
1906
+ collDel(mapGet(mapGet(defaultedCells, tableId), rowId), cellId);
1881
1907
  };
1882
1908
  const valueIdsChanged = (valueId, addedOrRemoved) =>
1883
1909
  idsChanged(changedValueIds, valueId, addedOrRemoved);
1884
1910
  const valueChanged = (valueId, oldValue, newValue) => {
1911
+ const defaulted =
1912
+ collHas(defaultedValues, valueId) && isUndefined(oldValue) ? 1 : 0;
1885
1913
  mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
1886
- internalListeners[4]?.(valueId, newValue, mutating);
1914
+ internalListeners[4]?.(valueId, newValue, mutating, defaulted);
1915
+ collDel(defaultedValues, valueId);
1887
1916
  };
1888
1917
  const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
1889
1918
  arrayPush(
@@ -2671,9 +2700,11 @@ const createStore = () => {
2671
2700
  changedRowIds,
2672
2701
  changedCellIds,
2673
2702
  changedCells,
2703
+ defaultedCells,
2674
2704
  invalidCells,
2675
2705
  changedValueIds,
2676
2706
  changedValues,
2707
+ defaultedValues,
2677
2708
  invalidValues,
2678
2709
  ],
2679
2710
  collClear,
@@ -3178,7 +3209,14 @@ const createMergeableStore = (uniqueId, getNow) => {
3178
3209
  collClear(touchedCells);
3179
3210
  collClear(touchedValues);
3180
3211
  };
3181
- const cellChanged = (tableId, rowId, cellId, newCell, mutating) => {
3212
+ const cellChanged = (
3213
+ tableId,
3214
+ rowId,
3215
+ cellId,
3216
+ newCell,
3217
+ mutating,
3218
+ defaulted,
3219
+ ) => {
3182
3220
  setAdd(
3183
3221
  mapEnsure(mapEnsure(touchedCells, tableId, mapNew), rowId, setNew),
3184
3222
  cellId,
@@ -3196,7 +3234,9 @@ const createMergeableStore = (uniqueId, getNow) => {
3196
3234
  {
3197
3235
  [cellId]: [
3198
3236
  newCell,
3199
- defaultingContent ? EMPTY_STRING : getNextHlc(),
3237
+ defaultingContent || defaulted
3238
+ ? EMPTY_STRING
3239
+ : getNextHlc(),
3200
3240
  ],
3201
3241
  },
3202
3242
  ],
@@ -3209,7 +3249,7 @@ const createMergeableStore = (uniqueId, getNow) => {
3209
3249
  ]);
3210
3250
  }
3211
3251
  };
3212
- const valueChanged = (valueId, newValue, mutating) => {
3252
+ const valueChanged = (valueId, newValue, mutating, defaulted) => {
3213
3253
  setAdd(touchedValues, valueId);
3214
3254
  if (listeningToRawStoreChanges || mutating) {
3215
3255
  if (mutating) {
@@ -3221,7 +3261,7 @@ const createMergeableStore = (uniqueId, getNow) => {
3221
3261
  {
3222
3262
  [valueId]: [
3223
3263
  newValue,
3224
- defaultingContent ? EMPTY_STRING : getNextHlc(),
3264
+ defaultingContent || defaulted ? EMPTY_STRING : getNextHlc(),
3225
3265
  ],
3226
3266
  },
3227
3267
  ],
@@ -3910,13 +3950,14 @@ const createCustomPersister = (
3910
3950
  const content = await getPersisted();
3911
3951
  if (isArray(content)) {
3912
3952
  setContentOrChanges(content);
3913
- } else if (initialContent) {
3953
+ } else if (isUndefined(content) && initialContent) {
3914
3954
  setDefaultContent(initialContent);
3915
- } else {
3955
+ } else if (!isUndefined(content)) {
3916
3956
  errorNew(`Content is not an array: ${content}`);
3917
3957
  }
3918
3958
  },
3919
- () => {
3959
+ (error) => {
3960
+ onIgnoredError?.(error);
3920
3961
  if (initialContent) {
3921
3962
  setDefaultContent(initialContent);
3922
3963
  }
@@ -7974,11 +8015,9 @@ const createWsServer = (
7974
8015
  );
7975
8016
  const startServerClient = async (serverClient) => {
7976
8017
  serverClient[0 /* State */] = 2; /* Starting */
7977
- await serverClient[1 /* Persister */].schedule(
7978
- serverClient[1 /* Persister */].startAutoLoad,
7979
- serverClient[1 /* Persister */].startAutoSave,
7980
- serverClient[2 /* Synchronizer */].startSync,
7981
- );
8018
+ await serverClient[1 /* Persister */].startAutoLoad();
8019
+ await serverClient[1 /* Persister */].startAutoSave();
8020
+ await serverClient[2 /* Synchronizer */].startSync();
7982
8021
  serverClient[5 /* Then */](serverClient[1 /* Persister */].getStore());
7983
8022
  serverClient[0 /* State */] = 0; /* Ready */
7984
8023
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinybase",
3
- "version": "9.0.0-beta.0",
3
+ "version": "9.0.0-beta.1",
4
4
  "author": "jamesgpearce",
5
5
  "repository": "github:tinyplex/tinybase",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  "sideEffects": false,
25
25
  "peerDependencies": {
26
26
  "@automerge/automerge-repo": "^2.5.6",
27
- "@cloudflare/workers-types": "^4.20260630.1",
27
+ "@cloudflare/workers-types": "^4.20260701.1",
28
28
  "@electric-sql/pglite": "^0.5.3",
29
29
  "@libsql/client": "^0.17.4",
30
30
  "@powersync/common": "^1.57.0",
@@ -35,7 +35,7 @@
35
35
  "bun": "^1.3.14",
36
36
  "effect": "^3.21.4",
37
37
  "electric-sql": "^0.12.1",
38
- "expo": "^56.0.12",
38
+ "expo": "^57.0.1",
39
39
  "expo-sqlite": "^56.0.5",
40
40
  "partykit": "^0.0.115",
41
41
  "partysocket": "^1.3.0",
@@ -341,13 +341,14 @@ const createCustomPersister = (
341
341
  const content = await getPersisted();
342
342
  if (isArray(content)) {
343
343
  setContentOrChanges(content);
344
- } else if (initialContent) {
344
+ } else if (isUndefined(content) && initialContent) {
345
345
  setDefaultContent(initialContent);
346
- } else {
346
+ } else if (!isUndefined(content)) {
347
347
  errorNew(`Content is not an array: ${content}`);
348
348
  }
349
349
  },
350
- () => {
350
+ (error) => {
351
+ onIgnoredError?.(error);
351
352
  if (initialContent) {
352
353
  setDefaultContent(initialContent);
353
354
  }
@@ -303,13 +303,14 @@ const createCustomPersister = (
303
303
  const content = await getPersisted();
304
304
  if (isArray(content)) {
305
305
  setContentOrChanges(content);
306
- } else if (initialContent) {
306
+ } else if (isUndefined(content) && initialContent) {
307
307
  setDefaultContent(initialContent);
308
- } else {
308
+ } else if (!isUndefined(content)) {
309
309
  errorNew(`Content is not an array: ${content}`);
310
310
  }
311
311
  },
312
- () => {
312
+ (error) => {
313
+ onIgnoredError?.(error);
313
314
  if (initialContent) {
314
315
  setDefaultContent(initialContent);
315
316
  }
@@ -303,13 +303,14 @@ const createCustomPersister = (
303
303
  const content = await getPersisted();
304
304
  if (isArray(content)) {
305
305
  setContentOrChanges(content);
306
- } else if (initialContent) {
306
+ } else if (isUndefined(content) && initialContent) {
307
307
  setDefaultContent(initialContent);
308
- } else {
308
+ } else if (!isUndefined(content)) {
309
309
  errorNew(`Content is not an array: ${content}`);
310
310
  }
311
311
  },
312
- () => {
312
+ (error) => {
313
+ onIgnoredError?.(error);
313
314
  if (initialContent) {
314
315
  setDefaultContent(initialContent);
315
316
  }
@@ -309,13 +309,14 @@ const createCustomPersister = (
309
309
  const content = await getPersisted();
310
310
  if (isArray(content)) {
311
311
  setContentOrChanges(content);
312
- } else if (initialContent) {
312
+ } else if (isUndefined(content) && initialContent) {
313
313
  setDefaultContent(initialContent);
314
- } else {
314
+ } else if (!isUndefined(content)) {
315
315
  errorNew(`Content is not an array: ${content}`);
316
316
  }
317
317
  },
318
- () => {
318
+ (error) => {
319
+ onIgnoredError?.(error);
319
320
  if (initialContent) {
320
321
  setDefaultContent(initialContent);
321
322
  }
@@ -309,13 +309,14 @@ const createCustomPersister = (
309
309
  const content = await getPersisted();
310
310
  if (isArray(content)) {
311
311
  setContentOrChanges(content);
312
- } else if (initialContent) {
312
+ } else if (isUndefined(content) && initialContent) {
313
313
  setDefaultContent(initialContent);
314
- } else {
314
+ } else if (!isUndefined(content)) {
315
315
  errorNew(`Content is not an array: ${content}`);
316
316
  }
317
317
  },
318
- () => {
318
+ (error) => {
319
+ onIgnoredError?.(error);
319
320
  if (initialContent) {
320
321
  setDefaultContent(initialContent);
321
322
  }
@@ -512,13 +512,14 @@ const createCustomPersister = (
512
512
  const content = await getPersisted();
513
513
  if (isArray(content)) {
514
514
  setContentOrChanges(content);
515
- } else if (initialContent) {
515
+ } else if (isUndefined(content) && initialContent) {
516
516
  setDefaultContent(initialContent);
517
- } else {
517
+ } else if (!isUndefined(content)) {
518
518
  errorNew(`Content is not an array: ${content}`);
519
519
  }
520
520
  },
521
- () => {
521
+ (error) => {
522
+ onIgnoredError?.(error);
522
523
  if (initialContent) {
523
524
  setDefaultContent(initialContent);
524
525
  }
@@ -512,13 +512,14 @@ const createCustomPersister = (
512
512
  const content = await getPersisted();
513
513
  if (isArray(content)) {
514
514
  setContentOrChanges(content);
515
- } else if (initialContent) {
515
+ } else if (isUndefined(content) && initialContent) {
516
516
  setDefaultContent(initialContent);
517
- } else {
517
+ } else if (!isUndefined(content)) {
518
518
  errorNew(`Content is not an array: ${content}`);
519
519
  }
520
520
  },
521
- () => {
521
+ (error) => {
522
+ onIgnoredError?.(error);
522
523
  if (initialContent) {
523
524
  setDefaultContent(initialContent);
524
525
  }
@@ -365,13 +365,14 @@ const createCustomPersister = (
365
365
  const content = await getPersisted();
366
366
  if (isArray(content)) {
367
367
  setContentOrChanges(content);
368
- } else if (initialContent) {
368
+ } else if (isUndefined(content) && initialContent) {
369
369
  setDefaultContent(initialContent);
370
- } else {
370
+ } else if (!isUndefined(content)) {
371
371
  errorNew(`Content is not an array: ${content}`);
372
372
  }
373
373
  },
374
- () => {
374
+ (error) => {
375
+ onIgnoredError?.(error);
375
376
  if (initialContent) {
376
377
  setDefaultContent(initialContent);
377
378
  }
@@ -365,13 +365,14 @@ const createCustomPersister = (
365
365
  const content = await getPersisted();
366
366
  if (isArray(content)) {
367
367
  setContentOrChanges(content);
368
- } else if (initialContent) {
368
+ } else if (isUndefined(content) && initialContent) {
369
369
  setDefaultContent(initialContent);
370
- } else {
370
+ } else if (!isUndefined(content)) {
371
371
  errorNew(`Content is not an array: ${content}`);
372
372
  }
373
373
  },
374
- () => {
374
+ (error) => {
375
+ onIgnoredError?.(error);
375
376
  if (initialContent) {
376
377
  setDefaultContent(initialContent);
377
378
  }
@@ -323,13 +323,14 @@ const createCustomPersister = (
323
323
  const content = await getPersisted();
324
324
  if (isArray(content)) {
325
325
  setContentOrChanges(content);
326
- } else if (initialContent) {
326
+ } else if (isUndefined(content) && initialContent) {
327
327
  setDefaultContent(initialContent);
328
- } else {
328
+ } else if (!isUndefined(content)) {
329
329
  errorNew(`Content is not an array: ${content}`);
330
330
  }
331
331
  },
332
- () => {
332
+ (error) => {
333
+ onIgnoredError?.(error);
333
334
  if (initialContent) {
334
335
  setDefaultContent(initialContent);
335
336
  }
@@ -323,13 +323,14 @@ const createCustomPersister = (
323
323
  const content = await getPersisted();
324
324
  if (isArray(content)) {
325
325
  setContentOrChanges(content);
326
- } else if (initialContent) {
326
+ } else if (isUndefined(content) && initialContent) {
327
327
  setDefaultContent(initialContent);
328
- } else {
328
+ } else if (!isUndefined(content)) {
329
329
  errorNew(`Content is not an array: ${content}`);
330
330
  }
331
331
  },
332
- () => {
332
+ (error) => {
333
+ onIgnoredError?.(error);
333
334
  if (initialContent) {
334
335
  setDefaultContent(initialContent);
335
336
  }
@@ -512,13 +512,14 @@ const createCustomPersister = (
512
512
  const content = await getPersisted();
513
513
  if (isArray(content)) {
514
514
  setContentOrChanges(content);
515
- } else if (initialContent) {
515
+ } else if (isUndefined(content) && initialContent) {
516
516
  setDefaultContent(initialContent);
517
- } else {
517
+ } else if (!isUndefined(content)) {
518
518
  errorNew(`Content is not an array: ${content}`);
519
519
  }
520
520
  },
521
- () => {
521
+ (error) => {
522
+ onIgnoredError?.(error);
522
523
  if (initialContent) {
523
524
  setDefaultContent(initialContent);
524
525
  }
@@ -512,13 +512,14 @@ const createCustomPersister = (
512
512
  const content = await getPersisted();
513
513
  if (isArray(content)) {
514
514
  setContentOrChanges(content);
515
- } else if (initialContent) {
515
+ } else if (isUndefined(content) && initialContent) {
516
516
  setDefaultContent(initialContent);
517
- } else {
517
+ } else if (!isUndefined(content)) {
518
518
  errorNew(`Content is not an array: ${content}`);
519
519
  }
520
520
  },
521
- () => {
521
+ (error) => {
522
+ onIgnoredError?.(error);
522
523
  if (initialContent) {
523
524
  setDefaultContent(initialContent);
524
525
  }
@@ -514,13 +514,14 @@ const createCustomPersister = (
514
514
  const content = await getPersisted();
515
515
  if (isArray(content)) {
516
516
  setContentOrChanges(content);
517
- } else if (initialContent) {
517
+ } else if (isUndefined(content) && initialContent) {
518
518
  setDefaultContent(initialContent);
519
- } else {
519
+ } else if (!isUndefined(content)) {
520
520
  errorNew(`Content is not an array: ${content}`);
521
521
  }
522
522
  },
523
- () => {
523
+ (error) => {
524
+ onIgnoredError?.(error);
524
525
  if (initialContent) {
525
526
  setDefaultContent(initialContent);
526
527
  }
@@ -514,13 +514,14 @@ const createCustomPersister = (
514
514
  const content = await getPersisted();
515
515
  if (isArray(content)) {
516
516
  setContentOrChanges(content);
517
- } else if (initialContent) {
517
+ } else if (isUndefined(content) && initialContent) {
518
518
  setDefaultContent(initialContent);
519
- } else {
519
+ } else if (!isUndefined(content)) {
520
520
  errorNew(`Content is not an array: ${content}`);
521
521
  }
522
522
  },
523
- () => {
523
+ (error) => {
524
+ onIgnoredError?.(error);
524
525
  if (initialContent) {
525
526
  setDefaultContent(initialContent);
526
527
  }
@@ -311,13 +311,14 @@ const createCustomPersister = (
311
311
  const content = await getPersisted();
312
312
  if (isArray(content)) {
313
313
  setContentOrChanges(content);
314
- } else if (initialContent) {
314
+ } else if (isUndefined(content) && initialContent) {
315
315
  setDefaultContent(initialContent);
316
- } else {
316
+ } else if (!isUndefined(content)) {
317
317
  errorNew(`Content is not an array: ${content}`);
318
318
  }
319
319
  },
320
- () => {
320
+ (error) => {
321
+ onIgnoredError?.(error);
321
322
  if (initialContent) {
322
323
  setDefaultContent(initialContent);
323
324
  }
@@ -311,13 +311,14 @@ const createCustomPersister = (
311
311
  const content = await getPersisted();
312
312
  if (isArray(content)) {
313
313
  setContentOrChanges(content);
314
- } else if (initialContent) {
314
+ } else if (isUndefined(content) && initialContent) {
315
315
  setDefaultContent(initialContent);
316
- } else {
316
+ } else if (!isUndefined(content)) {
317
317
  errorNew(`Content is not an array: ${content}`);
318
318
  }
319
319
  },
320
- () => {
320
+ (error) => {
321
+ onIgnoredError?.(error);
321
322
  if (initialContent) {
322
323
  setDefaultContent(initialContent);
323
324
  }