tinybase 7.0.0-beta.2 → 7.0.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.
Files changed (292) hide show
  1. package/@types/common/index.d.ts +1 -1
  2. package/@types/mergeable-store/index.d.ts +1 -1
  3. package/@types/mergeable-store/with-schemas/index.d.ts +1 -1
  4. package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +4 -0
  5. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +4 -0
  6. package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +4 -0
  7. package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +4 -0
  8. package/@types/persisters/persister-electric-sql/index.d.ts +4 -0
  9. package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +4 -0
  10. package/@types/persisters/persister-expo-sqlite/index.d.ts +4 -0
  11. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +4 -0
  12. package/@types/persisters/persister-libsql/index.d.ts +4 -0
  13. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +4 -0
  14. package/@types/persisters/persister-pglite/index.d.ts +5 -1
  15. package/@types/persisters/persister-pglite/with-schemas/index.d.ts +5 -1
  16. package/@types/persisters/persister-postgres/index.d.ts +4 -0
  17. package/@types/persisters/persister-postgres/with-schemas/index.d.ts +4 -0
  18. package/@types/persisters/persister-powersync/index.d.ts +4 -0
  19. package/@types/persisters/persister-powersync/with-schemas/index.d.ts +4 -0
  20. package/@types/persisters/persister-react-native-sqlite/index.d.ts +4 -0
  21. package/@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts +4 -0
  22. package/@types/persisters/persister-sqlite-bun/index.d.ts +4 -0
  23. package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +4 -0
  24. package/@types/persisters/persister-sqlite-wasm/index.d.ts +4 -0
  25. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +4 -0
  26. package/@types/persisters/persister-sqlite3/index.d.ts +4 -0
  27. package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +4 -0
  28. package/@types/queries/index.d.ts +1 -1
  29. package/@types/store/index.d.ts +21 -19
  30. package/@types/store/with-schemas/index.d.ts +15 -13
  31. package/agents.md +62 -0
  32. package/checkpoints/index.js +8 -6
  33. package/checkpoints/with-schemas/index.js +8 -6
  34. package/common/index.js +4 -3
  35. package/common/with-schemas/index.js +4 -3
  36. package/index.js +60 -30
  37. package/indexes/index.js +7 -5
  38. package/indexes/with-schemas/index.js +7 -5
  39. package/mergeable-store/index.js +51 -21
  40. package/mergeable-store/with-schemas/index.js +51 -21
  41. package/metrics/index.js +7 -5
  42. package/metrics/with-schemas/index.js +7 -5
  43. package/min/checkpoints/index.js +1 -1
  44. package/min/checkpoints/index.js.gz +0 -0
  45. package/min/checkpoints/with-schemas/index.js +1 -1
  46. package/min/checkpoints/with-schemas/index.js.gz +0 -0
  47. package/min/common/index.js +1 -1
  48. package/min/common/index.js.gz +0 -0
  49. package/min/common/with-schemas/index.js +1 -1
  50. package/min/common/with-schemas/index.js.gz +0 -0
  51. package/min/index.js +1 -1
  52. package/min/index.js.gz +0 -0
  53. package/min/indexes/index.js +1 -1
  54. package/min/indexes/index.js.gz +0 -0
  55. package/min/indexes/with-schemas/index.js +1 -1
  56. package/min/indexes/with-schemas/index.js.gz +0 -0
  57. package/min/mergeable-store/index.js +1 -1
  58. package/min/mergeable-store/index.js.gz +0 -0
  59. package/min/mergeable-store/with-schemas/index.js +1 -1
  60. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  61. package/min/metrics/index.js +1 -1
  62. package/min/metrics/index.js.gz +0 -0
  63. package/min/metrics/with-schemas/index.js +1 -1
  64. package/min/metrics/with-schemas/index.js.gz +0 -0
  65. package/min/omni/index.js +1 -1
  66. package/min/omni/index.js.gz +0 -0
  67. package/min/omni/with-schemas/index.js +1 -1
  68. package/min/omni/with-schemas/index.js.gz +0 -0
  69. package/min/persisters/index.js +1 -1
  70. package/min/persisters/index.js.gz +0 -0
  71. package/min/persisters/persister-automerge/index.js +1 -1
  72. package/min/persisters/persister-automerge/index.js.gz +0 -0
  73. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  74. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  75. package/min/persisters/persister-browser/index.js +1 -1
  76. package/min/persisters/persister-browser/index.js.gz +0 -0
  77. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  78. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  79. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  80. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  81. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  82. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  83. package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
  84. package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
  85. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
  86. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
  87. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  88. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  89. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  90. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  91. package/min/persisters/persister-electric-sql/index.js +1 -1
  92. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  93. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  94. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  95. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  96. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  97. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  98. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  99. package/min/persisters/persister-file/index.js +1 -1
  100. package/min/persisters/persister-file/index.js.gz +0 -0
  101. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  102. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  103. package/min/persisters/persister-indexed-db/index.js +1 -1
  104. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  105. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  106. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  107. package/min/persisters/persister-libsql/index.js +1 -1
  108. package/min/persisters/persister-libsql/index.js.gz +0 -0
  109. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  110. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  111. package/min/persisters/persister-partykit-client/index.js +1 -1
  112. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  113. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  114. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  115. package/min/persisters/persister-partykit-server/index.js +1 -1
  116. package/min/persisters/persister-partykit-server/index.js.gz +0 -0
  117. package/min/persisters/persister-partykit-server/with-schemas/index.js +1 -1
  118. package/min/persisters/persister-partykit-server/with-schemas/index.js.gz +0 -0
  119. package/min/persisters/persister-pglite/index.js +1 -1
  120. package/min/persisters/persister-pglite/index.js.gz +0 -0
  121. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  122. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  123. package/min/persisters/persister-postgres/index.js +1 -1
  124. package/min/persisters/persister-postgres/index.js.gz +0 -0
  125. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  126. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  127. package/min/persisters/persister-powersync/index.js +1 -1
  128. package/min/persisters/persister-powersync/index.js.gz +0 -0
  129. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  130. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  131. package/min/persisters/persister-react-native-mmkv/index.js +1 -1
  132. package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
  133. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
  134. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
  135. package/min/persisters/persister-react-native-sqlite/index.js +1 -1
  136. package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
  137. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
  138. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
  139. package/min/persisters/persister-remote/index.js +1 -1
  140. package/min/persisters/persister-remote/index.js.gz +0 -0
  141. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  142. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  143. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  144. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  145. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  146. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  147. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  148. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  149. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  150. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  151. package/min/persisters/persister-sqlite3/index.js +1 -1
  152. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  153. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  154. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  155. package/min/persisters/persister-yjs/index.js +1 -1
  156. package/min/persisters/persister-yjs/index.js.gz +0 -0
  157. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  158. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  159. package/min/persisters/with-schemas/index.js +1 -1
  160. package/min/persisters/with-schemas/index.js.gz +0 -0
  161. package/min/queries/index.js +1 -1
  162. package/min/queries/index.js.gz +0 -0
  163. package/min/queries/with-schemas/index.js +1 -1
  164. package/min/queries/with-schemas/index.js.gz +0 -0
  165. package/min/relationships/index.js +1 -1
  166. package/min/relationships/index.js.gz +0 -0
  167. package/min/relationships/with-schemas/index.js +1 -1
  168. package/min/relationships/with-schemas/index.js.gz +0 -0
  169. package/min/store/index.js +1 -1
  170. package/min/store/index.js.gz +0 -0
  171. package/min/store/with-schemas/index.js +1 -1
  172. package/min/store/with-schemas/index.js.gz +0 -0
  173. package/min/synchronizers/index.js +1 -1
  174. package/min/synchronizers/index.js.gz +0 -0
  175. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  176. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  177. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  178. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  179. package/min/synchronizers/synchronizer-local/index.js +1 -1
  180. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  181. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  182. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  183. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  184. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  185. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  186. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  187. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  188. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  189. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  190. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  191. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  192. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  193. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  194. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  195. package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  196. package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
  197. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  198. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
  199. package/min/synchronizers/with-schemas/index.js +1 -1
  200. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  201. package/min/ui-react/index.js +1 -1
  202. package/min/ui-react/index.js.gz +0 -0
  203. package/min/ui-react/with-schemas/index.js +1 -1
  204. package/min/ui-react/with-schemas/index.js.gz +0 -0
  205. package/min/ui-react-dom/index.js +1 -1
  206. package/min/ui-react-dom/index.js.gz +0 -0
  207. package/min/ui-react-dom/with-schemas/index.js +1 -1
  208. package/min/ui-react-dom/with-schemas/index.js.gz +0 -0
  209. package/min/ui-react-inspector/index.js +1 -1
  210. package/min/ui-react-inspector/index.js.gz +0 -0
  211. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  212. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  213. package/min/with-schemas/index.js +1 -1
  214. package/min/with-schemas/index.js.gz +0 -0
  215. package/omni/index.js +78 -46
  216. package/omni/with-schemas/index.js +78 -46
  217. package/package.json +3 -3
  218. package/persisters/index.js +14 -10
  219. package/persisters/persister-automerge/index.js +12 -8
  220. package/persisters/persister-automerge/with-schemas/index.js +12 -8
  221. package/persisters/persister-browser/index.js +12 -8
  222. package/persisters/persister-browser/with-schemas/index.js +12 -8
  223. package/persisters/persister-cr-sqlite-wasm/index.js +14 -10
  224. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +14 -10
  225. package/persisters/persister-durable-object-sql-storage/index.js +14 -10
  226. package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +14 -10
  227. package/persisters/persister-durable-object-storage/index.js +12 -8
  228. package/persisters/persister-durable-object-storage/with-schemas/index.js +12 -8
  229. package/persisters/persister-electric-sql/index.js +14 -10
  230. package/persisters/persister-electric-sql/with-schemas/index.js +14 -10
  231. package/persisters/persister-expo-sqlite/index.js +14 -10
  232. package/persisters/persister-expo-sqlite/with-schemas/index.js +14 -10
  233. package/persisters/persister-file/index.js +12 -8
  234. package/persisters/persister-file/with-schemas/index.js +12 -8
  235. package/persisters/persister-indexed-db/index.js +12 -8
  236. package/persisters/persister-indexed-db/with-schemas/index.js +12 -8
  237. package/persisters/persister-libsql/index.js +14 -10
  238. package/persisters/persister-libsql/with-schemas/index.js +14 -10
  239. package/persisters/persister-partykit-client/index.js +12 -8
  240. package/persisters/persister-partykit-client/with-schemas/index.js +12 -8
  241. package/persisters/persister-partykit-server/index.js +4 -3
  242. package/persisters/persister-partykit-server/with-schemas/index.js +4 -3
  243. package/persisters/persister-pglite/index.js +13 -9
  244. package/persisters/persister-pglite/with-schemas/index.js +13 -9
  245. package/persisters/persister-postgres/index.js +13 -9
  246. package/persisters/persister-postgres/with-schemas/index.js +13 -9
  247. package/persisters/persister-powersync/index.js +14 -10
  248. package/persisters/persister-powersync/with-schemas/index.js +14 -10
  249. package/persisters/persister-react-native-mmkv/index.js +12 -8
  250. package/persisters/persister-react-native-mmkv/with-schemas/index.js +12 -8
  251. package/persisters/persister-react-native-sqlite/index.js +14 -10
  252. package/persisters/persister-react-native-sqlite/with-schemas/index.js +14 -10
  253. package/persisters/persister-remote/index.js +14 -10
  254. package/persisters/persister-remote/with-schemas/index.js +14 -10
  255. package/persisters/persister-sqlite-bun/index.js +14 -10
  256. package/persisters/persister-sqlite-bun/with-schemas/index.js +14 -10
  257. package/persisters/persister-sqlite-wasm/index.js +14 -10
  258. package/persisters/persister-sqlite-wasm/with-schemas/index.js +14 -10
  259. package/persisters/persister-sqlite3/index.js +14 -10
  260. package/persisters/persister-sqlite3/with-schemas/index.js +14 -10
  261. package/persisters/persister-yjs/index.js +18 -12
  262. package/persisters/persister-yjs/with-schemas/index.js +18 -12
  263. package/persisters/with-schemas/index.js +14 -10
  264. package/queries/index.js +17 -12
  265. package/queries/with-schemas/index.js +17 -12
  266. package/readme.md +2 -2
  267. package/relationships/index.js +7 -5
  268. package/relationships/with-schemas/index.js +7 -5
  269. package/releases.md +100 -12
  270. package/store/index.js +48 -18
  271. package/store/with-schemas/index.js +48 -18
  272. package/synchronizers/index.js +13 -9
  273. package/synchronizers/synchronizer-broadcast-channel/index.js +14 -10
  274. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +14 -10
  275. package/synchronizers/synchronizer-local/index.js +14 -10
  276. package/synchronizers/synchronizer-local/with-schemas/index.js +14 -10
  277. package/synchronizers/synchronizer-ws-client/index.js +13 -9
  278. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +13 -9
  279. package/synchronizers/synchronizer-ws-server/index.js +13 -9
  280. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +13 -9
  281. package/synchronizers/synchronizer-ws-server-durable-object/index.js +13 -9
  282. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +13 -9
  283. package/synchronizers/synchronizer-ws-server-simple/index.js +5 -4
  284. package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +5 -4
  285. package/synchronizers/with-schemas/index.js +13 -9
  286. package/ui-react/index.js +9 -6
  287. package/ui-react/with-schemas/index.js +9 -6
  288. package/ui-react-dom/index.js +14 -7
  289. package/ui-react-dom/with-schemas/index.js +14 -7
  290. package/ui-react-inspector/index.js +53 -23
  291. package/ui-react-inspector/with-schemas/index.js +53 -23
  292. package/with-schemas/index.js +60 -30
@@ -4,15 +4,19 @@ const strSplit = (str, separator = EMPTY_STRING, limit) =>
4
4
  str.split(separator, limit);
5
5
 
6
6
  const promise = Promise;
7
+ const getIfNotFunction = (predicate) => (value, then, otherwise) =>
8
+ predicate(value) ? otherwise?.() : then(value);
7
9
  const GLOBAL = globalThis;
8
10
  const THOUSAND = 1e3;
9
11
  const startTimeout = (callback, sec = 0) =>
10
12
  setTimeout(callback, sec * THOUSAND);
11
13
  const math = Math;
12
14
  const mathFloor = math.floor;
13
- const isUndefined = (thing) => thing == void 0;
14
- const ifNotUndefined = (value, then, otherwise) =>
15
- isUndefined(value) ? otherwise?.() : then(value);
15
+ const isNullish = (thing) => thing == null;
16
+ const isUndefined = (thing) => thing === void 0;
17
+ const isNull = (thing) => thing === null;
18
+ const ifNotNullish = getIfNotFunction(isNullish);
19
+ const ifNotUndefined = getIfNotFunction(isUndefined);
16
20
  const isArray = (thing) => Array.isArray(thing);
17
21
  const size = (arrayOrString) => arrayOrString.length;
18
22
  const test = (regex, subject) => regex.test(subject);
@@ -46,12 +50,12 @@ const object = Object;
46
50
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
47
51
  const objEntries = object.entries;
48
52
  const isObject = (obj) =>
49
- !isUndefined(obj) &&
50
- ifNotUndefined(
53
+ !isNullish(obj) &&
54
+ ifNotNullish(
51
55
  getPrototypeOf(obj),
52
56
  (objPrototype) =>
53
57
  objPrototype == object.prototype ||
54
- isUndefined(getPrototypeOf(objPrototype)),
58
+ isNullish(getPrototypeOf(objPrototype)),
55
59
 
56
60
  /* istanbul ignore next */
57
61
  () => true,
@@ -74,7 +78,7 @@ const objEnsure = (obj, id, getDefaultValue) => {
74
78
  const mapNew = (entries) => new Map(entries);
75
79
  const mapGet = (map, key) => map?.get(key);
76
80
  const mapSet = (map, key, value) =>
77
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
81
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
78
82
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
79
83
  if (!collHas(map, key)) {
80
84
  mapSet(map, key, getDefaultValue());
@@ -207,7 +211,7 @@ const getListenerFunctions = (getThing) => {
207
211
  const index = size(ids);
208
212
  if (index == size(path)) {
209
213
  listener(thing, ...ids, ...extraArgsGetter(ids));
210
- } else if (isUndefined(path[index])) {
214
+ } else if (isNull(path[index])) {
211
215
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
212
216
  callWithIds(...ids, id2),
213
217
  );
@@ -644,7 +648,7 @@ const createCustomSynchronizer = (
644
648
  ifNotUndefined(
645
649
  mapGet(pendingRequests, transactionOrRequestId),
646
650
  ([toClientId, handleResponse]) =>
647
- isUndefined(toClientId) || toClientId == fromClientId
651
+ isNull(toClientId) || toClientId == fromClientId
648
652
  ? handleResponse(body, fromClientId)
649
653
  : /* istanbul ignore next */
650
654
  0,
package/ui-react/index.js CHANGED
@@ -41,10 +41,13 @@ const LINKED = 'Linked';
41
41
  const QUERY = 'Query';
42
42
  const CHECKPOINT = 'Checkpoint';
43
43
 
44
+ const getIfNotFunction = (predicate) => (value, then, otherwise) =>
45
+ predicate(value) ? otherwise?.() : then(value);
44
46
  const GLOBAL = globalThis;
45
- const isUndefined = (thing) => thing == void 0;
46
- const ifNotUndefined = (value, then, otherwise) =>
47
- isUndefined(value) ? otherwise?.() : then(value);
47
+ const isNullish = (thing) => thing == null;
48
+ const isUndefined = (thing) => thing === void 0;
49
+ const ifNotNullish = getIfNotFunction(isNullish);
50
+ const ifNotUndefined = getIfNotFunction(isUndefined);
48
51
  const isString = (thing) => getTypeOf(thing) == STRING;
49
52
  const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
50
53
  const isArray = (thing) => Array.isArray(thing);
@@ -66,12 +69,12 @@ const object = Object;
66
69
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
67
70
  const objEntries = object.entries;
68
71
  const isObject = (obj) =>
69
- !isUndefined(obj) &&
70
- ifNotUndefined(
72
+ !isNullish(obj) &&
73
+ ifNotNullish(
71
74
  getPrototypeOf(obj),
72
75
  (objPrototype) =>
73
76
  objPrototype == object.prototype ||
74
- isUndefined(getPrototypeOf(objPrototype)),
77
+ isNullish(getPrototypeOf(objPrototype)),
75
78
 
76
79
  /* istanbul ignore next */
77
80
  () => true,
@@ -41,10 +41,13 @@ const LINKED = 'Linked';
41
41
  const QUERY = 'Query';
42
42
  const CHECKPOINT = 'Checkpoint';
43
43
 
44
+ const getIfNotFunction = (predicate) => (value, then, otherwise) =>
45
+ predicate(value) ? otherwise?.() : then(value);
44
46
  const GLOBAL = globalThis;
45
- const isUndefined = (thing) => thing == void 0;
46
- const ifNotUndefined = (value, then, otherwise) =>
47
- isUndefined(value) ? otherwise?.() : then(value);
47
+ const isNullish = (thing) => thing == null;
48
+ const isUndefined = (thing) => thing === void 0;
49
+ const ifNotNullish = getIfNotFunction(isNullish);
50
+ const ifNotUndefined = getIfNotFunction(isUndefined);
48
51
  const isString = (thing) => getTypeOf(thing) == STRING;
49
52
  const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
50
53
  const isArray = (thing) => Array.isArray(thing);
@@ -66,12 +69,12 @@ const object = Object;
66
69
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
67
70
  const objEntries = object.entries;
68
71
  const isObject = (obj) =>
69
- !isUndefined(obj) &&
70
- ifNotUndefined(
72
+ !isNullish(obj) &&
73
+ ifNotNullish(
71
74
  getPrototypeOf(obj),
72
75
  (objPrototype) =>
73
76
  objPrototype == object.prototype ||
74
- isUndefined(getPrototypeOf(objPrototype)),
77
+ isNullish(getPrototypeOf(objPrototype)),
75
78
 
76
79
  /* istanbul ignore next */
77
80
  () => true,
@@ -35,13 +35,17 @@ const EXTRA = 'extra';
35
35
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
36
36
  str.split(separator, limit);
37
37
 
38
+ const getIfNotFunction = (predicate) => (value, then, otherwise) =>
39
+ predicate(value) ? otherwise?.() : then(value);
38
40
  const GLOBAL = globalThis;
39
41
  const math = Math;
40
42
  const mathMin = math.min;
41
43
  const isFiniteNumber = isFinite;
42
- const isUndefined = (thing) => thing == void 0;
43
- const ifNotUndefined = (value, then, otherwise) =>
44
- isUndefined(value) ? otherwise?.() : then(value);
44
+ const isNullish = (thing) => thing == null;
45
+ const isUndefined = (thing) => thing === void 0;
46
+ const isNull = (thing) => thing === null;
47
+ const ifNotNullish = getIfNotFunction(isNullish);
48
+ const ifNotUndefined = getIfNotFunction(isUndefined);
45
49
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
46
50
  const isString = (thing) => getTypeOf(thing) == STRING;
47
51
  const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
@@ -60,12 +64,12 @@ const object = Object;
60
64
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
61
65
  const objEntries = object.entries;
62
66
  const isObject = (obj) =>
63
- !isUndefined(obj) &&
64
- ifNotUndefined(
67
+ !isNullish(obj) &&
68
+ ifNotNullish(
65
69
  getPrototypeOf(obj),
66
70
  (objPrototype) =>
67
71
  objPrototype == object.prototype ||
68
- isUndefined(getPrototypeOf(objPrototype)),
72
+ isNullish(getPrototypeOf(objPrototype)),
69
73
 
70
74
  /* istanbul ignore next */
71
75
  () => true,
@@ -395,6 +399,9 @@ const useResultSortedRowIds = (
395
399
  );
396
400
 
397
401
  const getCellOrValueType = (cellOrValue) => {
402
+ if (isNull(cellOrValue)) {
403
+ return 'null';
404
+ }
398
405
  const type = getTypeOf(cellOrValue);
399
406
  return isTypeStringOrBoolean(type) ||
400
407
  (type == NUMBER && isFiniteNumber(cellOrValue))
@@ -766,7 +773,7 @@ const RelationshipInHtmlRow = ({
766
773
  ? localRowId
767
774
  : tableId === remoteTableId
768
775
  ? remoteRowId
769
- : null;
776
+ : void 0;
770
777
  return isUndefined(rowId)
771
778
  ? null
772
779
  : /* @__PURE__ */ jsx(
@@ -35,13 +35,17 @@ const EXTRA = 'extra';
35
35
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
36
36
  str.split(separator, limit);
37
37
 
38
+ const getIfNotFunction = (predicate) => (value, then, otherwise) =>
39
+ predicate(value) ? otherwise?.() : then(value);
38
40
  const GLOBAL = globalThis;
39
41
  const math = Math;
40
42
  const mathMin = math.min;
41
43
  const isFiniteNumber = isFinite;
42
- const isUndefined = (thing) => thing == void 0;
43
- const ifNotUndefined = (value, then, otherwise) =>
44
- isUndefined(value) ? otherwise?.() : then(value);
44
+ const isNullish = (thing) => thing == null;
45
+ const isUndefined = (thing) => thing === void 0;
46
+ const isNull = (thing) => thing === null;
47
+ const ifNotNullish = getIfNotFunction(isNullish);
48
+ const ifNotUndefined = getIfNotFunction(isUndefined);
45
49
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
46
50
  const isString = (thing) => getTypeOf(thing) == STRING;
47
51
  const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
@@ -60,12 +64,12 @@ const object = Object;
60
64
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
61
65
  const objEntries = object.entries;
62
66
  const isObject = (obj) =>
63
- !isUndefined(obj) &&
64
- ifNotUndefined(
67
+ !isNullish(obj) &&
68
+ ifNotNullish(
65
69
  getPrototypeOf(obj),
66
70
  (objPrototype) =>
67
71
  objPrototype == object.prototype ||
68
- isUndefined(getPrototypeOf(objPrototype)),
72
+ isNullish(getPrototypeOf(objPrototype)),
69
73
 
70
74
  /* istanbul ignore next */
71
75
  () => true,
@@ -395,6 +399,9 @@ const useResultSortedRowIds = (
395
399
  );
396
400
 
397
401
  const getCellOrValueType = (cellOrValue) => {
402
+ if (isNull(cellOrValue)) {
403
+ return 'null';
404
+ }
398
405
  const type = getTypeOf(cellOrValue);
399
406
  return isTypeStringOrBoolean(type) ||
400
407
  (type == NUMBER && isFiniteNumber(cellOrValue))
@@ -766,7 +773,7 @@ const RelationshipInHtmlRow = ({
766
773
  ? localRowId
767
774
  : tableId === remoteTableId
768
775
  ? remoteRowId
769
- : null;
776
+ : void 0;
770
777
  return isUndefined(rowId)
771
778
  ? null
772
779
  : /* @__PURE__ */ jsx(
@@ -43,6 +43,7 @@ const NUMBER = getTypeOf(0);
43
43
  const FUNCTION = getTypeOf(getTypeOf);
44
44
  const TYPE = 'type';
45
45
  const DEFAULT = 'default';
46
+ const ALLOW_NULL = 'allowNull';
46
47
  const LISTENER = 'Listener';
47
48
  const RESULT = 'Result';
48
49
  const GET = 'get';
@@ -74,6 +75,8 @@ const id = (key) => EMPTY_STRING + key;
74
75
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
75
76
  str.split(separator, limit);
76
77
 
78
+ const getIfNotFunction = (predicate) => (value, then, otherwise) =>
79
+ predicate(value) ? otherwise?.() : then(value);
77
80
  const GLOBAL = globalThis;
78
81
  const WINDOW = GLOBAL.window;
79
82
  const math = Math;
@@ -81,9 +84,11 @@ const mathMin = math.min;
81
84
  const mathFloor = math.floor;
82
85
  const isFiniteNumber = isFinite;
83
86
  const isInstanceOf = (thing, cls) => thing instanceof cls;
84
- const isUndefined = (thing) => thing == void 0;
85
- const ifNotUndefined = (value, then, otherwise) =>
86
- isUndefined(value) ? otherwise?.() : then(value);
87
+ const isNullish = (thing) => thing == null;
88
+ const isUndefined = (thing) => thing === void 0;
89
+ const isNull = (thing) => thing === null;
90
+ const ifNotNullish = getIfNotFunction(isNullish);
91
+ const ifNotUndefined = getIfNotFunction(isUndefined);
87
92
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
88
93
  const isString = (thing) => getTypeOf(thing) == STRING;
89
94
  const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
@@ -125,12 +130,12 @@ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
125
130
  const objFrozen = object.isFrozen;
126
131
  const objEntries = object.entries;
127
132
  const isObject = (obj) =>
128
- !isUndefined(obj) &&
129
- ifNotUndefined(
133
+ !isNullish(obj) &&
134
+ ifNotNullish(
130
135
  getPrototypeOf(obj),
131
136
  (objPrototype) =>
132
137
  objPrototype == object.prototype ||
133
- isUndefined(getPrototypeOf(objPrototype)),
138
+ isNullish(getPrototypeOf(objPrototype)),
134
139
 
135
140
  /* istanbul ignore next */
136
141
  () => true,
@@ -167,7 +172,7 @@ const objIsEqual = (obj1, obj2) => {
167
172
  };
168
173
  const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
169
174
  if (
170
- isUndefined(obj) ||
175
+ isNullish(obj) ||
171
176
  !isObject(obj) ||
172
177
  (!emptyIsValid && objIsEmpty(obj)) ||
173
178
  objFrozen(obj)
@@ -215,7 +220,7 @@ const mapForEach = (map, cb) =>
215
220
  const mapMap = (coll, cb) =>
216
221
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
217
222
  const mapSet = (map, key, value) =>
218
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
223
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
219
224
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
220
225
  if (!collHas(map, key)) {
221
226
  mapSet(map, key, getDefaultValue());
@@ -364,7 +369,7 @@ const getListenerFunctions = (getThing) => {
364
369
  const index = size(ids);
365
370
  if (index == size(path)) {
366
371
  listener(thing, ...ids, ...extraArgsGetter(ids));
367
- } else if (isUndefined(path[index])) {
372
+ } else if (isNull(path[index])) {
368
373
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
369
374
  callWithIds(...ids, id2),
370
375
  );
@@ -657,6 +662,9 @@ const createSessionPersister = (store, storageName, onIgnoredError) =>
657
662
  createStoragePersister(store, storageName, sessionStorage, onIgnoredError);
658
663
 
659
664
  const getCellOrValueType = (cellOrValue) => {
665
+ if (isNull(cellOrValue)) {
666
+ return 'null';
667
+ }
660
668
  const type = getTypeOf(cellOrValue);
661
669
  return isTypeStringOrBoolean(type) ||
662
670
  (type == NUMBER && isFiniteNumber(cellOrValue))
@@ -752,14 +760,22 @@ const createStore = () => {
752
760
  const validateValuesSchema = (valuesSchema) =>
753
761
  objValidate(valuesSchema, validateCellOrValueSchema);
754
762
  const validateCellOrValueSchema = (schema) => {
755
- if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
763
+ if (
764
+ !objValidate(schema, (_child, id2) =>
765
+ arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
766
+ )
767
+ ) {
756
768
  return false;
757
769
  }
758
770
  const type = schema[TYPE];
759
771
  if (!isTypeStringOrBoolean(type) && type != NUMBER) {
760
772
  return false;
761
773
  }
762
- if (getCellOrValueType(schema[DEFAULT]) != type) {
774
+ const defaultValue = schema[DEFAULT];
775
+ if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
776
+ return false;
777
+ }
778
+ if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
763
779
  objDel(schema, DEFAULT);
764
780
  }
765
781
  return true;
@@ -796,9 +812,19 @@ const createStore = () => {
796
812
  ? ifNotUndefined(
797
813
  mapGet(mapGet(tablesSchemaMap, tableId), cellId),
798
814
  (cellSchema) =>
799
- getCellOrValueType(cell) != cellSchema[TYPE]
800
- ? cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
801
- : cell,
815
+ isNull(cell)
816
+ ? cellSchema[ALLOW_NULL]
817
+ ? cell
818
+ : cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
819
+ : getCellOrValueType(cell) == cellSchema[TYPE]
820
+ ? cell
821
+ : cellInvalid(
822
+ tableId,
823
+ rowId,
824
+ cellId,
825
+ cell,
826
+ cellSchema[DEFAULT],
827
+ ),
802
828
  () => cellInvalid(tableId, rowId, cellId, cell),
803
829
  )
804
830
  : isUndefined(getCellOrValueType(cell))
@@ -823,9 +849,13 @@ const createStore = () => {
823
849
  ? ifNotUndefined(
824
850
  mapGet(valuesSchemaMap, valueId),
825
851
  (valueSchema) =>
826
- getCellOrValueType(value) != valueSchema[TYPE]
827
- ? valueInvalid(valueId, value, valueSchema[DEFAULT])
828
- : value,
852
+ isNull(value)
853
+ ? valueSchema[ALLOW_NULL]
854
+ ? value
855
+ : valueInvalid(valueId, value, valueSchema[DEFAULT])
856
+ : getCellOrValueType(value) == valueSchema[TYPE]
857
+ ? value
858
+ : valueInvalid(valueId, value, valueSchema[DEFAULT]),
829
859
  () => valueInvalid(valueId, value),
830
860
  )
831
861
  : isUndefined(getCellOrValueType(value))
@@ -1068,7 +1098,7 @@ const createStore = () => {
1068
1098
  mapSet(
1069
1099
  cellIds,
1070
1100
  cellId,
1071
- count != -addedOrRemoved ? count + addedOrRemoved : null,
1101
+ count != -addedOrRemoved ? count + addedOrRemoved : void 0,
1072
1102
  );
1073
1103
  idsChanged(
1074
1104
  mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
@@ -2819,7 +2849,7 @@ const RelationshipInHtmlRow = ({
2819
2849
  ? localRowId
2820
2850
  : tableId === remoteTableId
2821
2851
  ? remoteRowId
2822
- : null;
2852
+ : void 0;
2823
2853
  return isUndefined(rowId)
2824
2854
  ? null
2825
2855
  : /* @__PURE__ */ jsx(
@@ -3481,11 +3511,11 @@ const getNewIdFromSuggestedId = (suggestedId, has) => {
3481
3511
  };
3482
3512
  const ConfirmableActions = ({actions, ...props}) => {
3483
3513
  const [confirming, setConfirming] = useState();
3484
- const handleDone = useCallback(() => setConfirming(null), []);
3514
+ const handleDone = useCallback(() => setConfirming(void 0), []);
3485
3515
  useEffect(() => {
3486
- if (confirming != null) {
3516
+ if (!isUndefined(confirming)) {
3487
3517
  const handleKeyDown = (e) => {
3488
- if (confirming != null && e.key === 'Escape') {
3518
+ if (!isUndefined(confirming) && e.key === 'Escape') {
3489
3519
  e.preventDefault();
3490
3520
  handleDone();
3491
3521
  }
@@ -3494,7 +3524,7 @@ const ConfirmableActions = ({actions, ...props}) => {
3494
3524
  return () => document.removeEventListener('keydown', handleKeyDown);
3495
3525
  }
3496
3526
  }, [confirming, handleDone]);
3497
- if (confirming != null) {
3527
+ if (!isUndefined(confirming)) {
3498
3528
  const [, , Component] = actions[confirming];
3499
3529
  return /* @__PURE__ */ jsxs(Fragment, {
3500
3530
  children: [
@@ -43,6 +43,7 @@ const NUMBER = getTypeOf(0);
43
43
  const FUNCTION = getTypeOf(getTypeOf);
44
44
  const TYPE = 'type';
45
45
  const DEFAULT = 'default';
46
+ const ALLOW_NULL = 'allowNull';
46
47
  const LISTENER = 'Listener';
47
48
  const RESULT = 'Result';
48
49
  const GET = 'get';
@@ -74,6 +75,8 @@ const id = (key) => EMPTY_STRING + key;
74
75
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
75
76
  str.split(separator, limit);
76
77
 
78
+ const getIfNotFunction = (predicate) => (value, then, otherwise) =>
79
+ predicate(value) ? otherwise?.() : then(value);
77
80
  const GLOBAL = globalThis;
78
81
  const WINDOW = GLOBAL.window;
79
82
  const math = Math;
@@ -81,9 +84,11 @@ const mathMin = math.min;
81
84
  const mathFloor = math.floor;
82
85
  const isFiniteNumber = isFinite;
83
86
  const isInstanceOf = (thing, cls) => thing instanceof cls;
84
- const isUndefined = (thing) => thing == void 0;
85
- const ifNotUndefined = (value, then, otherwise) =>
86
- isUndefined(value) ? otherwise?.() : then(value);
87
+ const isNullish = (thing) => thing == null;
88
+ const isUndefined = (thing) => thing === void 0;
89
+ const isNull = (thing) => thing === null;
90
+ const ifNotNullish = getIfNotFunction(isNullish);
91
+ const ifNotUndefined = getIfNotFunction(isUndefined);
87
92
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
88
93
  const isString = (thing) => getTypeOf(thing) == STRING;
89
94
  const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
@@ -125,12 +130,12 @@ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
125
130
  const objFrozen = object.isFrozen;
126
131
  const objEntries = object.entries;
127
132
  const isObject = (obj) =>
128
- !isUndefined(obj) &&
129
- ifNotUndefined(
133
+ !isNullish(obj) &&
134
+ ifNotNullish(
130
135
  getPrototypeOf(obj),
131
136
  (objPrototype) =>
132
137
  objPrototype == object.prototype ||
133
- isUndefined(getPrototypeOf(objPrototype)),
138
+ isNullish(getPrototypeOf(objPrototype)),
134
139
 
135
140
  /* istanbul ignore next */
136
141
  () => true,
@@ -167,7 +172,7 @@ const objIsEqual = (obj1, obj2) => {
167
172
  };
168
173
  const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
169
174
  if (
170
- isUndefined(obj) ||
175
+ isNullish(obj) ||
171
176
  !isObject(obj) ||
172
177
  (!emptyIsValid && objIsEmpty(obj)) ||
173
178
  objFrozen(obj)
@@ -215,7 +220,7 @@ const mapForEach = (map, cb) =>
215
220
  const mapMap = (coll, cb) =>
216
221
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
217
222
  const mapSet = (map, key, value) =>
218
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
223
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
219
224
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
220
225
  if (!collHas(map, key)) {
221
226
  mapSet(map, key, getDefaultValue());
@@ -364,7 +369,7 @@ const getListenerFunctions = (getThing) => {
364
369
  const index = size(ids);
365
370
  if (index == size(path)) {
366
371
  listener(thing, ...ids, ...extraArgsGetter(ids));
367
- } else if (isUndefined(path[index])) {
372
+ } else if (isNull(path[index])) {
368
373
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
369
374
  callWithIds(...ids, id2),
370
375
  );
@@ -657,6 +662,9 @@ const createSessionPersister = (store, storageName, onIgnoredError) =>
657
662
  createStoragePersister(store, storageName, sessionStorage, onIgnoredError);
658
663
 
659
664
  const getCellOrValueType = (cellOrValue) => {
665
+ if (isNull(cellOrValue)) {
666
+ return 'null';
667
+ }
660
668
  const type = getTypeOf(cellOrValue);
661
669
  return isTypeStringOrBoolean(type) ||
662
670
  (type == NUMBER && isFiniteNumber(cellOrValue))
@@ -752,14 +760,22 @@ const createStore = () => {
752
760
  const validateValuesSchema = (valuesSchema) =>
753
761
  objValidate(valuesSchema, validateCellOrValueSchema);
754
762
  const validateCellOrValueSchema = (schema) => {
755
- if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
763
+ if (
764
+ !objValidate(schema, (_child, id2) =>
765
+ arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
766
+ )
767
+ ) {
756
768
  return false;
757
769
  }
758
770
  const type = schema[TYPE];
759
771
  if (!isTypeStringOrBoolean(type) && type != NUMBER) {
760
772
  return false;
761
773
  }
762
- if (getCellOrValueType(schema[DEFAULT]) != type) {
774
+ const defaultValue = schema[DEFAULT];
775
+ if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
776
+ return false;
777
+ }
778
+ if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
763
779
  objDel(schema, DEFAULT);
764
780
  }
765
781
  return true;
@@ -796,9 +812,19 @@ const createStore = () => {
796
812
  ? ifNotUndefined(
797
813
  mapGet(mapGet(tablesSchemaMap, tableId), cellId),
798
814
  (cellSchema) =>
799
- getCellOrValueType(cell) != cellSchema[TYPE]
800
- ? cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
801
- : cell,
815
+ isNull(cell)
816
+ ? cellSchema[ALLOW_NULL]
817
+ ? cell
818
+ : cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
819
+ : getCellOrValueType(cell) == cellSchema[TYPE]
820
+ ? cell
821
+ : cellInvalid(
822
+ tableId,
823
+ rowId,
824
+ cellId,
825
+ cell,
826
+ cellSchema[DEFAULT],
827
+ ),
802
828
  () => cellInvalid(tableId, rowId, cellId, cell),
803
829
  )
804
830
  : isUndefined(getCellOrValueType(cell))
@@ -823,9 +849,13 @@ const createStore = () => {
823
849
  ? ifNotUndefined(
824
850
  mapGet(valuesSchemaMap, valueId),
825
851
  (valueSchema) =>
826
- getCellOrValueType(value) != valueSchema[TYPE]
827
- ? valueInvalid(valueId, value, valueSchema[DEFAULT])
828
- : value,
852
+ isNull(value)
853
+ ? valueSchema[ALLOW_NULL]
854
+ ? value
855
+ : valueInvalid(valueId, value, valueSchema[DEFAULT])
856
+ : getCellOrValueType(value) == valueSchema[TYPE]
857
+ ? value
858
+ : valueInvalid(valueId, value, valueSchema[DEFAULT]),
829
859
  () => valueInvalid(valueId, value),
830
860
  )
831
861
  : isUndefined(getCellOrValueType(value))
@@ -1068,7 +1098,7 @@ const createStore = () => {
1068
1098
  mapSet(
1069
1099
  cellIds,
1070
1100
  cellId,
1071
- count != -addedOrRemoved ? count + addedOrRemoved : null,
1101
+ count != -addedOrRemoved ? count + addedOrRemoved : void 0,
1072
1102
  );
1073
1103
  idsChanged(
1074
1104
  mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
@@ -2819,7 +2849,7 @@ const RelationshipInHtmlRow = ({
2819
2849
  ? localRowId
2820
2850
  : tableId === remoteTableId
2821
2851
  ? remoteRowId
2822
- : null;
2852
+ : void 0;
2823
2853
  return isUndefined(rowId)
2824
2854
  ? null
2825
2855
  : /* @__PURE__ */ jsx(
@@ -3481,11 +3511,11 @@ const getNewIdFromSuggestedId = (suggestedId, has) => {
3481
3511
  };
3482
3512
  const ConfirmableActions = ({actions, ...props}) => {
3483
3513
  const [confirming, setConfirming] = useState();
3484
- const handleDone = useCallback(() => setConfirming(null), []);
3514
+ const handleDone = useCallback(() => setConfirming(void 0), []);
3485
3515
  useEffect(() => {
3486
- if (confirming != null) {
3516
+ if (!isUndefined(confirming)) {
3487
3517
  const handleKeyDown = (e) => {
3488
- if (confirming != null && e.key === 'Escape') {
3518
+ if (!isUndefined(confirming) && e.key === 'Escape') {
3489
3519
  e.preventDefault();
3490
3520
  handleDone();
3491
3521
  }
@@ -3494,7 +3524,7 @@ const ConfirmableActions = ({actions, ...props}) => {
3494
3524
  return () => document.removeEventListener('keydown', handleKeyDown);
3495
3525
  }
3496
3526
  }, [confirming, handleDone]);
3497
- if (confirming != null) {
3527
+ if (!isUndefined(confirming)) {
3498
3528
  const [, , Component] = actions[confirming];
3499
3529
  return /* @__PURE__ */ jsxs(Fragment, {
3500
3530
  children: [