@fireproof/core 0.21.0-dev-preview-6 → 0.22.0-dev-preview

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 (428) hide show
  1. package/index.d.ts +2 -16
  2. package/index.js +2 -15
  3. package/index.js.map +1 -1
  4. package/index.ts +2 -0
  5. package/package.json +11 -70
  6. package/tsconfig.json +18 -0
  7. package/README.md +0 -269
  8. package/apply-head-queue.d.ts +0 -18
  9. package/apply-head-queue.d.ts.map +0 -1
  10. package/apply-head-queue.js +0 -47
  11. package/apply-head-queue.js.map +0 -1
  12. package/blockstore/attachable-store.d.ts +0 -19
  13. package/blockstore/attachable-store.d.ts.map +0 -1
  14. package/blockstore/attachable-store.js +0 -317
  15. package/blockstore/attachable-store.js.map +0 -1
  16. package/blockstore/commit-queue.d.ts +0 -17
  17. package/blockstore/commit-queue.d.ts.map +0 -1
  18. package/blockstore/commit-queue.js +0 -60
  19. package/blockstore/commit-queue.js.map +0 -1
  20. package/blockstore/commitor.d.ts +0 -21
  21. package/blockstore/commitor.d.ts.map +0 -1
  22. package/blockstore/commitor.js +0 -95
  23. package/blockstore/commitor.js.map +0 -1
  24. package/blockstore/connect-raw.d.ts +0 -2
  25. package/blockstore/connect-raw.d.ts.map +0 -1
  26. package/blockstore/connect-raw.js +0 -2
  27. package/blockstore/connect-raw.js.map +0 -1
  28. package/blockstore/connection-base.d.ts +0 -2
  29. package/blockstore/connection-base.d.ts.map +0 -1
  30. package/blockstore/connection-base.js +0 -2
  31. package/blockstore/connection-base.js.map +0 -1
  32. package/blockstore/encrypt-helpers.d.ts +0 -2
  33. package/blockstore/encrypt-helpers.d.ts.map +0 -1
  34. package/blockstore/encrypt-helpers.js +0 -2
  35. package/blockstore/encrypt-helpers.js.map +0 -1
  36. package/blockstore/fp-envelope.d.ts +0 -32
  37. package/blockstore/fp-envelope.d.ts.map +0 -1
  38. package/blockstore/fp-envelope.js +0 -14
  39. package/blockstore/fp-envelope.js.map +0 -1
  40. package/blockstore/gateway.d.ts +0 -20
  41. package/blockstore/gateway.d.ts.map +0 -1
  42. package/blockstore/gateway.js +0 -2
  43. package/blockstore/gateway.js.map +0 -1
  44. package/blockstore/index.d.ts +0 -16
  45. package/blockstore/index.d.ts.map +0 -1
  46. package/blockstore/index.js +0 -16
  47. package/blockstore/index.js.map +0 -1
  48. package/blockstore/interceptor-gateway.d.ts +0 -29
  49. package/blockstore/interceptor-gateway.d.ts.map +0 -1
  50. package/blockstore/interceptor-gateway.js +0 -137
  51. package/blockstore/interceptor-gateway.js.map +0 -1
  52. package/blockstore/loader-helpers.d.ts +0 -10
  53. package/blockstore/loader-helpers.d.ts.map +0 -1
  54. package/blockstore/loader-helpers.js +0 -115
  55. package/blockstore/loader-helpers.js.map +0 -1
  56. package/blockstore/loader.d.ts +0 -61
  57. package/blockstore/loader.d.ts.map +0 -1
  58. package/blockstore/loader.js +0 -493
  59. package/blockstore/loader.js.map +0 -1
  60. package/blockstore/register-store-protocol.d.ts +0 -22
  61. package/blockstore/register-store-protocol.d.ts.map +0 -1
  62. package/blockstore/register-store-protocol.js +0 -125
  63. package/blockstore/register-store-protocol.js.map +0 -1
  64. package/blockstore/serde-gateway.d.ts +0 -78
  65. package/blockstore/serde-gateway.d.ts.map +0 -1
  66. package/blockstore/serde-gateway.js +0 -2
  67. package/blockstore/serde-gateway.js.map +0 -1
  68. package/blockstore/store-factory.d.ts +0 -11
  69. package/blockstore/store-factory.d.ts.map +0 -1
  70. package/blockstore/store-factory.js +0 -104
  71. package/blockstore/store-factory.js.map +0 -1
  72. package/blockstore/store-remote.d.ts +0 -2
  73. package/blockstore/store-remote.d.ts.map +0 -1
  74. package/blockstore/store-remote.js +0 -2
  75. package/blockstore/store-remote.js.map +0 -1
  76. package/blockstore/store.d.ts +0 -86
  77. package/blockstore/store.d.ts.map +0 -1
  78. package/blockstore/store.js +0 -437
  79. package/blockstore/store.js.map +0 -1
  80. package/blockstore/task-manager.d.ts +0 -19
  81. package/blockstore/task-manager.d.ts.map +0 -1
  82. package/blockstore/task-manager.js +0 -50
  83. package/blockstore/task-manager.js.map +0 -1
  84. package/blockstore/transaction.d.ts +0 -62
  85. package/blockstore/transaction.d.ts.map +0 -1
  86. package/blockstore/transaction.js +0 -256
  87. package/blockstore/transaction.js.map +0 -1
  88. package/blockstore/types.d.ts +0 -510
  89. package/blockstore/types.d.ts.map +0 -1
  90. package/blockstore/types.js +0 -83
  91. package/blockstore/types.js.map +0 -1
  92. package/blockstore/uri-interceptor.d.ts +0 -19
  93. package/blockstore/uri-interceptor.d.ts.map +0 -1
  94. package/blockstore/uri-interceptor.js +0 -61
  95. package/blockstore/uri-interceptor.js.map +0 -1
  96. package/bundle-not-impl.d.ts +0 -2
  97. package/bundle-not-impl.d.ts.map +0 -1
  98. package/bundle-not-impl.js +0 -4
  99. package/bundle-not-impl.js.map +0 -1
  100. package/cli/main.js +0 -26613
  101. package/crdt-clock.d.ts +0 -26
  102. package/crdt-clock.d.ts.map +0 -1
  103. package/crdt-clock.js +0 -133
  104. package/crdt-clock.js.map +0 -1
  105. package/crdt-helpers.d.ts +0 -19
  106. package/crdt-helpers.d.ts.map +0 -1
  107. package/crdt-helpers.js +0 -332
  108. package/crdt-helpers.js.map +0 -1
  109. package/crdt.d.ts +0 -41
  110. package/crdt.d.ts.map +0 -1
  111. package/crdt.js +0 -164
  112. package/crdt.js.map +0 -1
  113. package/database.d.ts +0 -34
  114. package/database.d.ts.map +0 -1
  115. package/database.js +0 -133
  116. package/database.js.map +0 -1
  117. package/deno.json +0 -20
  118. package/index.d.ts.map +0 -1
  119. package/indexer-helpers.d.ts +0 -68
  120. package/indexer-helpers.d.ts.map +0 -1
  121. package/indexer-helpers.js +0 -157
  122. package/indexer-helpers.js.map +0 -1
  123. package/indexer.d.ts +0 -24
  124. package/indexer.d.ts.map +0 -1
  125. package/indexer.js +0 -239
  126. package/indexer.js.map +0 -1
  127. package/ledger.d.ts +0 -55
  128. package/ledger.d.ts.map +0 -1
  129. package/ledger.js +0 -240
  130. package/ledger.js.map +0 -1
  131. package/protocols/cloud/http-connection.d.ts +0 -25
  132. package/protocols/cloud/http-connection.d.ts.map +0 -1
  133. package/protocols/cloud/http-connection.js +0 -153
  134. package/protocols/cloud/http-connection.js.map +0 -1
  135. package/protocols/cloud/index.d.ts +0 -10
  136. package/protocols/cloud/index.d.ts.map +0 -1
  137. package/protocols/cloud/index.js +0 -10
  138. package/protocols/cloud/index.js.map +0 -1
  139. package/protocols/cloud/msg-raw-connection-base.d.ts +0 -16
  140. package/protocols/cloud/msg-raw-connection-base.d.ts.map +0 -1
  141. package/protocols/cloud/msg-raw-connection-base.js +0 -22
  142. package/protocols/cloud/msg-raw-connection-base.js.map +0 -1
  143. package/protocols/cloud/msg-types-data.d.ts +0 -36
  144. package/protocols/cloud/msg-types-data.d.ts.map +0 -1
  145. package/protocols/cloud/msg-types-data.js +0 -38
  146. package/protocols/cloud/msg-types-data.js.map +0 -1
  147. package/protocols/cloud/msg-types-meta.d.ts +0 -41
  148. package/protocols/cloud/msg-types-meta.d.ts.map +0 -1
  149. package/protocols/cloud/msg-types-meta.js +0 -98
  150. package/protocols/cloud/msg-types-meta.js.map +0 -1
  151. package/protocols/cloud/msg-types-wal.d.ts +0 -33
  152. package/protocols/cloud/msg-types-wal.d.ts.map +0 -1
  153. package/protocols/cloud/msg-types-wal.js +0 -38
  154. package/protocols/cloud/msg-types-wal.js.map +0 -1
  155. package/protocols/cloud/msg-types.d.ts +0 -296
  156. package/protocols/cloud/msg-types.d.ts.map +0 -1
  157. package/protocols/cloud/msg-types.js +0 -296
  158. package/protocols/cloud/msg-types.js.map +0 -1
  159. package/protocols/cloud/msger.d.ts +0 -79
  160. package/protocols/cloud/msger.d.ts.map +0 -1
  161. package/protocols/cloud/msger.js +0 -198
  162. package/protocols/cloud/msger.js.map +0 -1
  163. package/protocols/cloud/ws-connection.d.ts +0 -29
  164. package/protocols/cloud/ws-connection.d.ts.map +0 -1
  165. package/protocols/cloud/ws-connection.js +0 -166
  166. package/protocols/cloud/ws-connection.js.map +0 -1
  167. package/protocols/index.d.ts +0 -2
  168. package/protocols/index.d.ts.map +0 -1
  169. package/protocols/index.js +0 -2
  170. package/protocols/index.js.map +0 -1
  171. package/react/img-file.d.ts +0 -303
  172. package/react/img-file.d.ts.map +0 -1
  173. package/react/img-file.js +0 -92
  174. package/react/img-file.js.map +0 -1
  175. package/react/index.d.ts +0 -5
  176. package/react/index.d.ts.map +0 -1
  177. package/react/index.js +0 -5
  178. package/react/index.js.map +0 -1
  179. package/react/types.d.ts +0 -71
  180. package/react/types.d.ts.map +0 -1
  181. package/react/types.js +0 -2
  182. package/react/types.js.map +0 -1
  183. package/react/use-all-docs.d.ts +0 -4
  184. package/react/use-all-docs.d.ts.map +0 -1
  185. package/react/use-all-docs.js +0 -25
  186. package/react/use-all-docs.js.map +0 -1
  187. package/react/use-attach.d.ts +0 -6
  188. package/react/use-attach.d.ts.map +0 -1
  189. package/react/use-attach.js +0 -75
  190. package/react/use-attach.js.map +0 -1
  191. package/react/use-changes.d.ts +0 -4
  192. package/react/use-changes.d.ts.map +0 -1
  193. package/react/use-changes.js +0 -19
  194. package/react/use-changes.js.map +0 -1
  195. package/react/use-document.d.ts +0 -4
  196. package/react/use-document.d.ts.map +0 -1
  197. package/react/use-document.js +0 -109
  198. package/react/use-document.js.map +0 -1
  199. package/react/use-fireproof.d.ts +0 -6
  200. package/react/use-fireproof.d.ts.map +0 -1
  201. package/react/use-fireproof.js +0 -20
  202. package/react/use-fireproof.js.map +0 -1
  203. package/react/use-live-query.d.ts +0 -4
  204. package/react/use-live-query.d.ts.map +0 -1
  205. package/react/use-live-query.js +0 -24
  206. package/react/use-live-query.js.map +0 -1
  207. package/runtime/files.d.ts +0 -12
  208. package/runtime/files.d.ts.map +0 -1
  209. package/runtime/files.js +0 -29
  210. package/runtime/files.js.map +0 -1
  211. package/runtime/gateways/cloud/gateway.d.ts +0 -41
  212. package/runtime/gateways/cloud/gateway.d.ts.map +0 -1
  213. package/runtime/gateways/cloud/gateway.js +0 -512
  214. package/runtime/gateways/cloud/gateway.js.map +0 -1
  215. package/runtime/gateways/cloud/index.d.ts +0 -3
  216. package/runtime/gateways/cloud/index.d.ts.map +0 -1
  217. package/runtime/gateways/cloud/index.js +0 -3
  218. package/runtime/gateways/cloud/index.js.map +0 -1
  219. package/runtime/gateways/cloud/to-cloud.d.ts +0 -46
  220. package/runtime/gateways/cloud/to-cloud.d.ts.map +0 -1
  221. package/runtime/gateways/cloud/to-cloud.js +0 -159
  222. package/runtime/gateways/cloud/to-cloud.js.map +0 -1
  223. package/runtime/gateways/def-serde-gateway.d.ts +0 -18
  224. package/runtime/gateways/def-serde-gateway.d.ts.map +0 -1
  225. package/runtime/gateways/def-serde-gateway.js +0 -92
  226. package/runtime/gateways/def-serde-gateway.js.map +0 -1
  227. package/runtime/gateways/file/deno/deno-filesystem.d.ts +0 -27
  228. package/runtime/gateways/file/deno/deno-filesystem.d.ts.map +0 -1
  229. package/runtime/gateways/file/deno/deno-filesystem.js +0 -52
  230. package/runtime/gateways/file/deno/deno-filesystem.js.map +0 -1
  231. package/runtime/gateways/file/deno/get-sys-file-system.d.ts +0 -4
  232. package/runtime/gateways/file/deno/get-sys-file-system.d.ts.map +0 -1
  233. package/runtime/gateways/file/deno/get-sys-file-system.js +0 -11
  234. package/runtime/gateways/file/deno/get-sys-file-system.js.map +0 -1
  235. package/runtime/gateways/file/deno/index.d.ts +0 -2
  236. package/runtime/gateways/file/deno/index.d.ts.map +0 -1
  237. package/runtime/gateways/file/deno/index.js +0 -2
  238. package/runtime/gateways/file/deno/index.js.map +0 -1
  239. package/runtime/gateways/file/gateway-impl.d.ts +0 -18
  240. package/runtime/gateways/file/gateway-impl.d.ts.map +0 -1
  241. package/runtime/gateways/file/gateway-impl.js +0 -121
  242. package/runtime/gateways/file/gateway-impl.js.map +0 -1
  243. package/runtime/gateways/file/index.d.ts +0 -3
  244. package/runtime/gateways/file/index.d.ts.map +0 -1
  245. package/runtime/gateways/file/index.js +0 -3
  246. package/runtime/gateways/file/index.js.map +0 -1
  247. package/runtime/gateways/file/key-bag-file.d.ts +0 -19
  248. package/runtime/gateways/file/key-bag-file.d.ts.map +0 -1
  249. package/runtime/gateways/file/key-bag-file.js +0 -40
  250. package/runtime/gateways/file/key-bag-file.js.map +0 -1
  251. package/runtime/gateways/file/node/get-sys-file-system.d.ts +0 -4
  252. package/runtime/gateways/file/node/get-sys-file-system.d.ts.map +0 -1
  253. package/runtime/gateways/file/node/get-sys-file-system.js +0 -11
  254. package/runtime/gateways/file/node/get-sys-file-system.js.map +0 -1
  255. package/runtime/gateways/file/node/index.d.ts +0 -2
  256. package/runtime/gateways/file/node/index.d.ts.map +0 -1
  257. package/runtime/gateways/file/node/index.js +0 -2
  258. package/runtime/gateways/file/node/index.js.map +0 -1
  259. package/runtime/gateways/file/node/node-filesystem.d.ts +0 -32
  260. package/runtime/gateways/file/node/node-filesystem.d.ts.map +0 -1
  261. package/runtime/gateways/file/node/node-filesystem.js +0 -33
  262. package/runtime/gateways/file/node/node-filesystem.js.map +0 -1
  263. package/runtime/gateways/file/node/to-array-buffer.d.ts +0 -2
  264. package/runtime/gateways/file/node/to-array-buffer.d.ts.map +0 -1
  265. package/runtime/gateways/file/node/to-array-buffer.js +0 -12
  266. package/runtime/gateways/file/node/to-array-buffer.js.map +0 -1
  267. package/runtime/gateways/file/sys-file-system-factory.d.ts +0 -4
  268. package/runtime/gateways/file/sys-file-system-factory.d.ts.map +0 -1
  269. package/runtime/gateways/file/sys-file-system-factory.js +0 -13
  270. package/runtime/gateways/file/sys-file-system-factory.js.map +0 -1
  271. package/runtime/gateways/file/utils.d.ts +0 -5
  272. package/runtime/gateways/file/utils.d.ts.map +0 -1
  273. package/runtime/gateways/file/utils.js +0 -27
  274. package/runtime/gateways/file/utils.js.map +0 -1
  275. package/runtime/gateways/file/version.d.ts +0 -2
  276. package/runtime/gateways/file/version.d.ts.map +0 -1
  277. package/runtime/gateways/file/version.js +0 -2
  278. package/runtime/gateways/file/version.js.map +0 -1
  279. package/runtime/gateways/fp-envelope-serialize.d.ts +0 -50
  280. package/runtime/gateways/fp-envelope-serialize.d.ts.map +0 -1
  281. package/runtime/gateways/fp-envelope-serialize.js +0 -141
  282. package/runtime/gateways/fp-envelope-serialize.js.map +0 -1
  283. package/runtime/gateways/index.d.ts +0 -6
  284. package/runtime/gateways/index.d.ts.map +0 -1
  285. package/runtime/gateways/index.js +0 -6
  286. package/runtime/gateways/index.js.map +0 -1
  287. package/runtime/gateways/indexeddb/gateway-impl.d.ts +0 -22
  288. package/runtime/gateways/indexeddb/gateway-impl.d.ts.map +0 -1
  289. package/runtime/gateways/indexeddb/gateway-impl.js +0 -147
  290. package/runtime/gateways/indexeddb/gateway-impl.js.map +0 -1
  291. package/runtime/gateways/indexeddb/index.d.ts +0 -6
  292. package/runtime/gateways/indexeddb/index.d.ts.map +0 -1
  293. package/runtime/gateways/indexeddb/index.js +0 -6
  294. package/runtime/gateways/indexeddb/index.js.map +0 -1
  295. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts +0 -15
  296. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +0 -1
  297. package/runtime/gateways/indexeddb/key-bag-indexeddb.js +0 -42
  298. package/runtime/gateways/indexeddb/key-bag-indexeddb.js.map +0 -1
  299. package/runtime/gateways/indexeddb-version.d.ts +0 -2
  300. package/runtime/gateways/indexeddb-version.d.ts.map +0 -1
  301. package/runtime/gateways/indexeddb-version.js +0 -2
  302. package/runtime/gateways/indexeddb-version.js.map +0 -1
  303. package/runtime/gateways/memory/gateway.d.ts +0 -18
  304. package/runtime/gateways/memory/gateway.d.ts.map +0 -1
  305. package/runtime/gateways/memory/gateway.js +0 -73
  306. package/runtime/gateways/memory/gateway.js.map +0 -1
  307. package/runtime/gateways/memory/version.d.ts +0 -2
  308. package/runtime/gateways/memory/version.d.ts.map +0 -1
  309. package/runtime/gateways/memory/version.js +0 -2
  310. package/runtime/gateways/memory/version.js.map +0 -1
  311. package/runtime/index.d.ts +0 -13
  312. package/runtime/index.d.ts.map +0 -1
  313. package/runtime/index.js +0 -13
  314. package/runtime/index.js.map +0 -1
  315. package/runtime/key-bag-memory.d.ts +0 -12
  316. package/runtime/key-bag-memory.d.ts.map +0 -1
  317. package/runtime/key-bag-memory.js +0 -23
  318. package/runtime/key-bag-memory.js.map +0 -1
  319. package/runtime/key-bag.d.ts +0 -85
  320. package/runtime/key-bag.d.ts.map +0 -1
  321. package/runtime/key-bag.js +0 -411
  322. package/runtime/key-bag.js.map +0 -1
  323. package/runtime/keyed-crypto.d.ts +0 -19
  324. package/runtime/keyed-crypto.d.ts.map +0 -1
  325. package/runtime/keyed-crypto.js +0 -192
  326. package/runtime/keyed-crypto.js.map +0 -1
  327. package/runtime/memory-sys-container.d.ts +0 -2
  328. package/runtime/memory-sys-container.d.ts.map +0 -1
  329. package/runtime/memory-sys-container.js +0 -2
  330. package/runtime/memory-sys-container.js.map +0 -1
  331. package/runtime/meta-key-hack.d.ts +0 -42
  332. package/runtime/meta-key-hack.d.ts.map +0 -1
  333. package/runtime/meta-key-hack.js +0 -201
  334. package/runtime/meta-key-hack.js.map +0 -1
  335. package/runtime/sts-service/index.d.ts +0 -40
  336. package/runtime/sts-service/index.d.ts.map +0 -1
  337. package/runtime/sts-service/index.js +0 -108
  338. package/runtime/sts-service/index.js.map +0 -1
  339. package/runtime/sys-container.d.ts +0 -2
  340. package/runtime/sys-container.d.ts.map +0 -1
  341. package/runtime/sys-container.js +0 -2
  342. package/runtime/sys-container.js.map +0 -1
  343. package/runtime/wait-pr-multiformats/block.d.ts +0 -47
  344. package/runtime/wait-pr-multiformats/block.d.ts.map +0 -1
  345. package/runtime/wait-pr-multiformats/block.js +0 -64
  346. package/runtime/wait-pr-multiformats/block.js.map +0 -1
  347. package/runtime/wait-pr-multiformats/codec-interface.d.ts +0 -29
  348. package/runtime/wait-pr-multiformats/codec-interface.d.ts.map +0 -1
  349. package/runtime/wait-pr-multiformats/codec-interface.js +0 -2
  350. package/runtime/wait-pr-multiformats/codec-interface.js.map +0 -1
  351. package/runtime/wait-pr-multiformats/index.d.ts +0 -3
  352. package/runtime/wait-pr-multiformats/index.d.ts.map +0 -1
  353. package/runtime/wait-pr-multiformats/index.js +0 -3
  354. package/runtime/wait-pr-multiformats/index.js.map +0 -1
  355. package/tests/blockstore/fp-envelope.test.ts-off +0 -65
  356. package/tests/blockstore/fragment-gateway.test.ts-off +0 -106
  357. package/tests/blockstore/interceptor-gateway.test.ts +0 -254
  358. package/tests/blockstore/keyed-crypto-indexeddb-file.test.ts +0 -128
  359. package/tests/blockstore/keyed-crypto.test.ts +0 -526
  360. package/tests/blockstore/loader.test.ts +0 -297
  361. package/tests/blockstore/standalone.test.ts +0 -152
  362. package/tests/blockstore/store.test.ts +0 -192
  363. package/tests/blockstore/transaction.test.ts +0 -130
  364. package/tests/fireproof/all-gateway.test.ts +0 -461
  365. package/tests/fireproof/attachable.test.ts +0 -686
  366. package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.car +0 -0
  367. package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +0 -324
  368. package/tests/fireproof/charwise-boolean.test.ts +0 -66
  369. package/tests/fireproof/crdt.test.ts +0 -570
  370. package/tests/fireproof/database.test.ts +0 -779
  371. package/tests/fireproof/deleted-docs-handling.test.ts +0 -111
  372. package/tests/fireproof/fireproof.test.fixture.ts +0 -133
  373. package/tests/fireproof/fireproof.test.ts +0 -777
  374. package/tests/fireproof/hello.test.ts +0 -74
  375. package/tests/fireproof/indexer.test.ts +0 -458
  376. package/tests/fireproof/multiple-ledger.test.ts +0 -65
  377. package/tests/fireproof/query-docs.test.ts +0 -116
  378. package/tests/fireproof/query-limit-issue.test.ts +0 -147
  379. package/tests/fireproof/query-property-inconsistency.test.ts +0 -89
  380. package/tests/fireproof/query-result-properties.test.ts +0 -42
  381. package/tests/fireproof/stable-cid.test.ts +0 -69
  382. package/tests/fireproof/utils.test.ts +0 -135
  383. package/tests/gateway/file/loader-config.test.ts +0 -307
  384. package/tests/gateway/indexeddb/loader-config.test.ts +0 -79
  385. package/tests/helpers.ts +0 -174
  386. package/tests/react/img-file.test.tsx +0 -190
  387. package/tests/react/use-all-docs.test.tsx +0 -173
  388. package/tests/react/use-document-with-nonexistent-id.test.tsx +0 -96
  389. package/tests/react/use-fireproof-db-switch.test.tsx +0 -91
  390. package/tests/react/use-fireproof-stability.test.tsx +0 -145
  391. package/tests/react/use-fireproof.test.tsx +0 -645
  392. package/tests/runtime/fp-envelope-serialize.test.ts +0 -254
  393. package/tests/runtime/meta-key-hack.test.ts +0 -95
  394. package/tests/setup.file.ts +0 -1
  395. package/tests/setup.indexeddb.ts +0 -0
  396. package/tests/setup.memory.ts +0 -2
  397. package/tests/utils.test.ts +0 -192
  398. package/tests/vitest.file.config.ts +0 -14
  399. package/tests/vitest.indexeddb.config.ts +0 -37
  400. package/tests/vitest.memory.config.ts +0 -25
  401. package/types.d.ts +0 -462
  402. package/types.d.ts.map +0 -1
  403. package/types.js +0 -60
  404. package/types.js.map +0 -1
  405. package/use-fireproof/iframe-strategy.d.ts +0 -13
  406. package/use-fireproof/iframe-strategy.d.ts.map +0 -1
  407. package/use-fireproof/iframe-strategy.js +0 -83
  408. package/use-fireproof/iframe-strategy.js.map +0 -1
  409. package/use-fireproof/index.d.ts +0 -10
  410. package/use-fireproof/index.d.ts.map +0 -1
  411. package/use-fireproof/index.js +0 -16
  412. package/use-fireproof/index.js.map +0 -1
  413. package/use-fireproof/redirect-strategy.d.ts +0 -8
  414. package/use-fireproof/redirect-strategy.d.ts.map +0 -1
  415. package/use-fireproof/redirect-strategy.js +0 -31
  416. package/use-fireproof/redirect-strategy.js.map +0 -1
  417. package/utils.d.ts +0 -49
  418. package/utils.d.ts.map +0 -1
  419. package/utils.js +0 -454
  420. package/utils.js.map +0 -1
  421. package/version.d.ts +0 -2
  422. package/version.d.ts.map +0 -1
  423. package/version.js +0 -4
  424. package/version.js.map +0 -1
  425. package/write-queue.d.ts +0 -9
  426. package/write-queue.d.ts.map +0 -1
  427. package/write-queue.js +0 -70
  428. package/write-queue.js.map +0 -1
@@ -1,190 +0,0 @@
1
- import { render, waitFor } from "@testing-library/react";
2
- import { describe, expect, it, vi } from "vitest";
3
- import { ImgFile, bs } from "use-fireproof";
4
- import { createElement } from "react";
5
- import type { DocFileMeta } from "use-fireproof";
6
-
7
- // Extend HTMLElement to include querySelector for TypeScript
8
-
9
- // Simple SVG content for testing
10
- const SVG_CONTENT = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
11
- <circle cx="12" cy="12" r="10" fill="blue" />
12
- </svg>`;
13
-
14
- describe("COMPONENT: ImgFile", () => {
15
- // Mock URL methods
16
- const mockObjectURL = "mock-object-url";
17
- const originalCreateObjectURL = window.URL.createObjectURL;
18
- const originalRevokeObjectURL = window.URL.revokeObjectURL;
19
-
20
- beforeEach(() => {
21
- window.URL.createObjectURL = vi.fn(() => mockObjectURL);
22
- window.URL.revokeObjectURL = vi.fn();
23
- });
24
-
25
- afterEach(() => {
26
- window.URL.createObjectURL = originalCreateObjectURL;
27
- window.URL.revokeObjectURL = originalRevokeObjectURL;
28
- });
29
-
30
- // Test timeout value for CI
31
- const TEST_TIMEOUT = 60000; // 1 minute per test
32
-
33
- it(
34
- "renders the image from a File object",
35
- async () => {
36
- const file = new File([new Blob([SVG_CONTENT], { type: "image/svg+xml" })], "test.svg", { type: "image/svg+xml" });
37
-
38
- const { container } = render(
39
- createElement(ImgFile, {
40
- file: file,
41
- alt: "Test SVG",
42
- className: "test-class",
43
- }),
44
- );
45
-
46
- await waitFor(() => {
47
- const img = container.querySelector("img");
48
- expect(img).not.toBeNull();
49
- });
50
-
51
- const img = container.querySelector("img");
52
- expect(img?.getAttribute("src")).toBe(mockObjectURL);
53
- expect(img?.getAttribute("alt")).toBe("Test SVG");
54
- expect(img?.classList.contains("test-class")).toBe(true);
55
- expect(window.URL.createObjectURL).toHaveBeenCalledWith(file);
56
- },
57
- TEST_TIMEOUT,
58
- );
59
-
60
- it(
61
- "does not render when file is not present",
62
- () => {
63
- const { container } = render(
64
- createElement(ImgFile, {
65
- file: undefined,
66
- alt: "No File",
67
- }),
68
- );
69
-
70
- const img = container.querySelector("img");
71
- expect(img).toBeNull();
72
- expect(window.URL.createObjectURL).not.toHaveBeenCalled();
73
- },
74
- TEST_TIMEOUT,
75
- );
76
-
77
- it(
78
- "supports legacy 'meta' parameter",
79
- async () => {
80
- const file = new File([new Blob([SVG_CONTENT], { type: "image/svg+xml" })], "legacy.svg", { type: "image/svg+xml" });
81
-
82
- const { container } = render(
83
- createElement(ImgFile, {
84
- meta: file,
85
- alt: "Legacy File",
86
- }),
87
- );
88
-
89
- await waitFor(() => {
90
- const img = container.querySelector("img");
91
- expect(img).not.toBeNull();
92
- });
93
-
94
- const img = container.querySelector("img");
95
- expect(img?.getAttribute("src")).toBe(mockObjectURL);
96
- expect(img?.getAttribute("alt")).toBe("Legacy File");
97
- expect(window.URL.createObjectURL).toHaveBeenCalledWith(file);
98
- },
99
- TEST_TIMEOUT,
100
- );
101
-
102
- it(
103
- "renders from DocFileMeta object",
104
- async () => {
105
- const file = new File([new Blob([SVG_CONTENT], { type: "image/svg+xml" })], "meta.svg", { type: "image/svg+xml" });
106
-
107
- // Create a mock DocFileMeta with required cid property
108
- const mockCid = { toString: () => "test-cid" } as bs.AnyLink;
109
- const docFileMeta: DocFileMeta = {
110
- type: "image/svg+xml",
111
- size: file.size,
112
- cid: mockCid,
113
- file: async () => file,
114
- };
115
-
116
- const { container } = render(
117
- createElement(ImgFile, {
118
- file: docFileMeta,
119
- alt: "DocFileMeta Image",
120
- }),
121
- );
122
-
123
- await waitFor(() => {
124
- const img = container.querySelector("img");
125
- expect(img).not.toBeNull();
126
- });
127
-
128
- const img = container.querySelector("img");
129
- expect(img?.getAttribute("src")).toBe(mockObjectURL);
130
- expect(img?.getAttribute("alt")).toBe("DocFileMeta Image");
131
- expect(window.URL.createObjectURL).toHaveBeenCalledWith(file);
132
- },
133
- TEST_TIMEOUT,
134
- );
135
-
136
- it(
137
- "does not render for non-image file types",
138
- async () => {
139
- const textFile = new File(["test content"], "test.txt", { type: "text/plain" });
140
-
141
- const { container } = render(
142
- createElement(ImgFile, {
143
- file: textFile,
144
- alt: "Text File",
145
- }),
146
- );
147
-
148
- // Wait a bit to ensure any async operations complete
149
- await waitFor(
150
- () => {
151
- // Verify that createObjectURL was called (or not called)
152
- expect(window.URL.createObjectURL).toHaveBeenCalledTimes(0);
153
- },
154
- { timeout: 1000 },
155
- );
156
-
157
- const img = container.querySelector("img");
158
- expect(img).toBeNull();
159
- },
160
- TEST_TIMEOUT,
161
- );
162
-
163
- it(
164
- "cleans up object URLs when unmounted",
165
- async () => {
166
- const file = new File([new Blob([SVG_CONTENT], { type: "image/svg+xml" })], "cleanup.svg", { type: "image/svg+xml" });
167
-
168
- const { container, unmount } = render(
169
- createElement(ImgFile, {
170
- file: file,
171
- alt: "Cleanup Test",
172
- }),
173
- );
174
-
175
- await waitFor(() => {
176
- const img = container.querySelector("img");
177
- expect(img).not.toBeNull();
178
- });
179
-
180
- expect(window.URL.createObjectURL).toHaveBeenCalledWith(file);
181
- expect(window.URL.revokeObjectURL).not.toHaveBeenCalled();
182
-
183
- // Unmount to trigger cleanup
184
- unmount();
185
-
186
- expect(window.URL.revokeObjectURL).toHaveBeenCalledWith(mockObjectURL);
187
- },
188
- TEST_TIMEOUT,
189
- );
190
- });
@@ -1,173 +0,0 @@
1
- import { renderHook, waitFor } from "@testing-library/react";
2
- import { describe, expect, it, beforeEach, afterEach } from "vitest";
3
- import { fireproof, useFireproof } from "use-fireproof";
4
- import type { Database } from "use-fireproof";
5
- import type { AllDocsResult } from "../../src/react/types.js";
6
-
7
- // Test timeout value for CI
8
- const TEST_TIMEOUT = 45000;
9
-
10
- describe("HOOK: useFireproof useAllDocs", () => {
11
- const dbName = "useAllDocsTest";
12
- let db: Database,
13
- database: ReturnType<typeof useFireproof>["database"],
14
- useAllDocs: ReturnType<typeof useFireproof>["useAllDocs"];
15
-
16
- beforeEach(async () => {
17
- const expectedValues = ["apple", "banana", "cherry"];
18
- db = fireproof(dbName);
19
- for (const value of expectedValues) {
20
- await db.put({ fruit: value });
21
- }
22
-
23
- const allDocs = await db.allDocs<{ fruit: string }>();
24
- expect(allDocs.rows.map((row) => row.value.fruit)).toEqual(expectedValues);
25
- });
26
-
27
- it(
28
- "fetches documents correctly",
29
- async () => {
30
- let result: AllDocsResult<{ fruit: string }>;
31
-
32
- renderHook(() => {
33
- const hookResult = useFireproof(dbName);
34
- database = hookResult.database;
35
- useAllDocs = hookResult.useAllDocs;
36
- result = useAllDocs<{ fruit: string }>();
37
- });
38
-
39
- await waitFor(() => {
40
- expect(result.docs.length).toBe(3);
41
- expect(result.docs.map((doc) => doc.fruit)).toEqual(["apple", "banana", "cherry"]);
42
- });
43
- },
44
- TEST_TIMEOUT,
45
- );
46
-
47
- it(
48
- "updates when database changes",
49
- async () => {
50
- let allDocsResult: AllDocsResult<{ fruit: string }>;
51
-
52
- renderHook(() => {
53
- const hookResult = useFireproof(dbName);
54
- database = hookResult.database;
55
- useAllDocs = hookResult.useAllDocs;
56
- allDocsResult = useAllDocs<{ fruit: string }>();
57
- });
58
-
59
- // Wait for initial data to load
60
- await waitFor(() => {
61
- expect(allDocsResult.docs.length).toBe(3);
62
- });
63
-
64
- // Add a new document
65
- await database.put({ fruit: "dragonfruit" });
66
-
67
- // Verify the hook updates with the new document
68
- await waitFor(() => {
69
- expect(allDocsResult.docs.length).toBe(4);
70
- expect(allDocsResult.docs.map((doc) => doc.fruit)).toContain("dragonfruit");
71
- });
72
- },
73
- TEST_TIMEOUT,
74
- );
75
-
76
- it(
77
- "properly handles subscription lifecycle",
78
- async () => {
79
- // This test verifies that the subscription works properly
80
- // We'll just check that the component renders and updates
81
-
82
- // Render the hook in a way we can unmount it
83
- const { unmount, result } = renderHook(() => {
84
- const hookResult = useFireproof(dbName);
85
- database = hookResult.database;
86
- useAllDocs = hookResult.useAllDocs;
87
- return useAllDocs<{ fruit: string }>();
88
- });
89
-
90
- // Wait for the hook to initialize with data
91
- await waitFor(() => {
92
- expect(result.current.docs.length).toBe(3);
93
- });
94
-
95
- // Add a document to test subscription works
96
- await database?.put({ fruit: "date" });
97
-
98
- // Verify the hook updates with the new document
99
- await waitFor(() => {
100
- expect(result.current.docs.length).toBe(4);
101
- });
102
-
103
- // Unmount the component to trigger cleanup
104
- unmount();
105
-
106
- // Test passes if no errors occur during unmount
107
- },
108
- TEST_TIMEOUT,
109
- );
110
-
111
- it(
112
- "accepts query parameters",
113
- async () => {
114
- // This test verifies that the hook accepts query parameters
115
- let allDocsResult: AllDocsResult<{ fruit: string }>;
116
-
117
- renderHook(() => {
118
- const hookResult = useFireproof(dbName);
119
- database = hookResult.database;
120
- useAllDocs = hookResult.useAllDocs;
121
- // Pass query parameters to the hook
122
- allDocsResult = useAllDocs<{ fruit: string }>({ descending: true });
123
- });
124
-
125
- // Wait for the hook to initialize
126
- await waitFor(() => {
127
- // Verify that the hook returns data regardless of parameters
128
- expect(allDocsResult.docs.length).toBe(3);
129
- // The current implementation doesn't filter client-side
130
- });
131
- },
132
- TEST_TIMEOUT,
133
- );
134
-
135
- it(
136
- "refreshes when query parameters change",
137
- async () => {
138
- // This test verifies that the useAllDocs hook refreshes when query parameters change
139
- let allDocsResult: AllDocsResult<{ fruit: string }>;
140
- let queryParams = {};
141
-
142
- const { rerender } = renderHook(() => {
143
- const hookResult = useFireproof(dbName);
144
- database = hookResult.database;
145
- useAllDocs = hookResult.useAllDocs;
146
- allDocsResult = useAllDocs<{ fruit: string }>(queryParams);
147
- });
148
-
149
- // Verify initial state with no query parameters
150
- await waitFor(() => {
151
- expect(allDocsResult.docs.length).toBe(3);
152
- });
153
-
154
- // Change the query parameters
155
- queryParams = { descending: true };
156
- rerender();
157
-
158
- // Verify the hook still works after query parameters change
159
- // The implementation should handle the parameter change correctly
160
- await waitFor(() => {
161
- expect(allDocsResult.docs.length).toBe(3);
162
- });
163
- },
164
- TEST_TIMEOUT,
165
- );
166
-
167
- afterEach(async () => {
168
- await db.close();
169
- await db.destroy();
170
- await database?.close();
171
- await database?.destroy();
172
- });
173
- });
@@ -1,96 +0,0 @@
1
- import { renderHook, waitFor } from "@testing-library/react";
2
- import { describe, expect, it, beforeEach, afterEach } from "vitest";
3
- import { fireproof, useFireproof } from "use-fireproof";
4
- import type { Database, UseDocumentResult } from "use-fireproof";
5
-
6
- const TEST_TIMEOUT = 45000;
7
-
8
- // Define a type for user settings
9
- interface TestTypeDoc {
10
- _id?: string;
11
- testField?: string;
12
- theme?: string;
13
- notifications?: boolean;
14
- language?: string;
15
- }
16
-
17
- describe("HOOK: useDocument with non-existent ID", () => {
18
- const dbName = "useDocumentWithNonExistentId";
19
- let db: Database;
20
- let settingsResult: UseDocumentResult<TestTypeDoc>;
21
- let database: ReturnType<typeof useFireproof>["database"];
22
- let useDocument: ReturnType<typeof useFireproof>["useDocument"];
23
- const testId = "test_settings";
24
-
25
- beforeEach(async () => {
26
- db = fireproof(dbName);
27
-
28
- // Make sure the document doesn't exist
29
- try {
30
- const doc = await db.get(testId);
31
- if (doc) {
32
- // Use put with _deleted flag instead of delete
33
- await db.put({ _id: testId, _deleted: true });
34
- }
35
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
36
- } catch (_) {
37
- // Document doesn't exist, which is what we want
38
- }
39
-
40
- renderHook(() => {
41
- const result = useFireproof(dbName);
42
- database = result.database;
43
- useDocument = result.useDocument;
44
- settingsResult = useDocument<TestTypeDoc>({ _id: testId, testField: "test" });
45
- });
46
- });
47
-
48
- it(
49
- "should initialize with the provided _id even if document doesn't exist",
50
- async () => {
51
- // Try to refresh the document to see if we get the error
52
- try {
53
- await settingsResult.refresh();
54
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
55
- } catch (_) {
56
- // Expected error when document doesn't exist yet
57
- }
58
-
59
- await waitFor(() => {
60
- expect(settingsResult.doc._id).toBe(testId);
61
- expect(settingsResult.doc.testField).toBe("test");
62
- // Other properties should be undefined
63
- expect(settingsResult.doc.theme).toBeUndefined();
64
- expect(settingsResult.doc.notifications).toBeUndefined();
65
- expect(settingsResult.doc.language).toBeUndefined();
66
- });
67
-
68
- // Try to get the document directly from the database
69
- try {
70
- const docFromDb = await db.get(testId);
71
- // This should not happen as the document doesn't exist yet
72
- expect(docFromDb).toBeUndefined();
73
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
- } catch (_) {
75
- // Expected error when document doesn't exist yet
76
- }
77
-
78
- // Try to save the document and see what happens
79
- try {
80
- await settingsResult.save();
81
- // Document should be saved successfully
82
- } catch (error) {
83
- // This should not happen
84
- expect(error).toBeUndefined();
85
- }
86
- },
87
- TEST_TIMEOUT,
88
- );
89
-
90
- afterEach(async () => {
91
- await db.close();
92
- await db.destroy();
93
- await database?.close();
94
- await database?.destroy();
95
- });
96
- });
@@ -1,91 +0,0 @@
1
- import { renderHook, waitFor } from "@testing-library/react";
2
- import { describe, expect, it } from "vitest";
3
- import { fireproof, useFireproof } from "use-fireproof";
4
- import type { Database, LiveQueryResult } from "use-fireproof";
5
-
6
- // Test timeout value for CI
7
- const TEST_TIMEOUT = 45000;
8
-
9
- describe("HOOK: useFireproof database switching", () => {
10
- const db1Name = "db1";
11
- const db2Name = "db2";
12
- let db1: Database, db2: Database;
13
-
14
- beforeEach(async () => {
15
- // Setup two databases with different data
16
- db1 = fireproof(db1Name);
17
- db2 = fireproof(db2Name);
18
-
19
- // Add data to db1
20
- await db1.put({ foo: "db1-data" });
21
-
22
- // Add different data to db2
23
- await db2.put({ foo: "db2-data" });
24
- });
25
-
26
- it(
27
- "should switch databases and update query results when database name changes",
28
- async () => {
29
- let query: LiveQueryResult<{ foo: string }, string>;
30
- let currentDbName: string;
31
- let currentDb: Database;
32
-
33
- // Initial render with db1
34
- const { rerender } = renderHook(
35
- ({ dbName }) => {
36
- const result = useFireproof(dbName);
37
- currentDbName = result.database.name;
38
- currentDb = result.database;
39
- query = result.useLiveQuery<{ foo: string }>("foo");
40
- return result;
41
- },
42
- { initialProps: { dbName: db1Name } },
43
- );
44
-
45
- // Verify initial state with db1
46
- await waitFor(() => {
47
- expect(currentDbName).toBe(db1Name);
48
- expect(currentDb.name).toBe(db1Name);
49
- expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db1-data"]);
50
- });
51
-
52
- // Switch to db2
53
- rerender({ dbName: db2Name });
54
-
55
- // Verify state with db2
56
- await waitFor(() => {
57
- expect(currentDbName).toBe(db2Name);
58
- expect(currentDb.name).toBe(db2Name);
59
- expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db2-data"]);
60
- });
61
-
62
- // Switch back to db1
63
- rerender({ dbName: db1Name });
64
-
65
- // Verify state is back to db1
66
- await waitFor(() => {
67
- expect(currentDbName).toBe(db1Name);
68
- expect(currentDb.name).toBe(db1Name);
69
- expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db1-data"]);
70
- });
71
-
72
- // Test that changes to the new database are reflected
73
- await db2.put({ foo: "db2-updated" });
74
- rerender({ dbName: db2Name });
75
-
76
- await waitFor(() => {
77
- expect(currentDbName).toBe(db2Name);
78
- expect(currentDb.name).toBe(db2Name);
79
- expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db2-data", "db2-updated"]);
80
- });
81
- },
82
- TEST_TIMEOUT,
83
- );
84
-
85
- afterEach(async () => {
86
- await db1.close();
87
- await db1.destroy();
88
- await db2.close();
89
- await db2.destroy();
90
- });
91
- });
@@ -1,145 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { act, fireEvent, render, waitFor } from "@testing-library/react";
3
- import { createElement, useEffect, useState } from "react";
4
- import { useFireproof } from "../../src/react/use-fireproof.js";
5
-
6
- // Extend HTMLElement for TypeScript compatibility
7
- declare global {
8
- interface HTMLElement {
9
- querySelector(selectors: string): HTMLElement | null;
10
- getAttribute(name: string): string | null;
11
- textContent: string | null;
12
- click(): void;
13
- }
14
- }
15
-
16
- // Test component that triggers state updates and verifies database stability
17
- function TestComponent() {
18
- const { database } = useFireproof("test-stability-db");
19
- const [counter, setCounter] = useState(0);
20
- const initialDatabaseRef = database;
21
-
22
- // Verify that the database reference remains stable across renders
23
- if (counter > 0 && initialDatabaseRef !== database) {
24
- throw new Error("Database reference changed between renders!");
25
- }
26
-
27
- return createElement("div", {}, [
28
- createElement("div", { "data-testid": "db-name", key: "db-name" }, database.name),
29
- createElement("div", { "data-testid": "counter", key: "counter" }, String(counter)),
30
- createElement(
31
- "button",
32
- {
33
- "data-testid": "increment",
34
- key: "increment",
35
- type: "button",
36
- onClick: () => setCounter((c) => c + 1),
37
- },
38
- "Increment",
39
- ),
40
- ]);
41
- }
42
-
43
- // Test timeout value for CI
44
- const TEST_TIMEOUT = 60000; // 1 minute per test
45
-
46
- describe("HOOK: useFireproof stability", () => {
47
- it(
48
- "database instance remains stable across renders",
49
- async () => {
50
- // Mock console.error to catch any React errors
51
- const consoleErrorMock = vi.spyOn(console, "error").mockImplementation(vi.fn());
52
-
53
- const { findByTestId } = render(createElement(TestComponent, {}));
54
-
55
- // Get initial state
56
- const dbNameEl = await findByTestId("db-name" as const);
57
- const counterEl = await findByTestId("counter" as const);
58
-
59
- // Verify initial state
60
- expect(dbNameEl.textContent).toBe("test-stability-db");
61
- expect(counterEl.textContent).toBe("0");
62
-
63
- // Trigger a re-render by updating state
64
- const incrementButton = await findByTestId("increment" as const);
65
- await act(async () => {
66
- incrementButton.click();
67
- });
68
-
69
- // Verify state changed but no errors occurred
70
- expect(counterEl.textContent).toBe("1");
71
-
72
- // There should be no errors logged from React about database reference changing
73
- expect(consoleErrorMock).not.toHaveBeenCalledWith(expect.stringContaining("Database reference changed between renders"));
74
-
75
- // Perform multiple render cycles to ensure stability
76
- for (let i = 0; i < 5; i++) {
77
- await act(async () => {
78
- incrementButton.click();
79
- });
80
- }
81
-
82
- // Verify no errors occurred during multiple renders
83
- expect(consoleErrorMock).not.toHaveBeenCalledWith(expect.stringContaining("Database reference changed between renders"));
84
-
85
- // Restore console
86
- consoleErrorMock.mockRestore();
87
- },
88
- TEST_TIMEOUT,
89
- );
90
-
91
- it(
92
- "input events do not cause infinite render loops",
93
- async () => {
94
- // This test is specifically designed to catch the issue reported in v0.20.0
95
-
96
- function InputTestComponent() {
97
- // We still create the database to ensure no infinite render loops occur
98
- // But we don't need to use any of its features directly in this test
99
- useFireproof("test-input-db");
100
- const [inputValue, setInputValue] = useState("");
101
- const [renderCount, setRenderCount] = useState(0);
102
-
103
- // Track render count
104
- useEffect(() => {
105
- setRenderCount((c) => c + 1);
106
- }, []);
107
-
108
- return createElement("div", {}, [
109
- createElement("input", {
110
- type: "text",
111
- "data-testid": "input",
112
- key: "input",
113
- value: inputValue,
114
- onChange: (e: { target: { value: string } }) => {
115
- setInputValue(e.target.value);
116
- },
117
- }),
118
- createElement("div", { "data-testid": "render-count", key: "render-count" }, String(renderCount)),
119
- ]);
120
- }
121
-
122
- // Instead of using createRoot, use the standard render method
123
- const { getByTestId } = render(createElement(InputTestComponent));
124
-
125
- // Get the input element
126
- const input = getByTestId("input");
127
-
128
- // Simulate typing in the input field - this would trigger the bug in v0.20.0
129
- await waitFor(() => {
130
- fireEvent.change(input, { target: { value: "test" } });
131
- });
132
-
133
- // Wait a bit to ensure no infinite loop occurs
134
- await new Promise((resolve) => setTimeout(resolve, 1000));
135
-
136
- // Verify the render count hasn't exploded (if it were an infinite loop, the test would timeout)
137
- const renderCount = getByTestId("render-count");
138
-
139
- // The exact number isn't important, but it should be a small number
140
- // If we're in an infinite loop, the test would have timed out before reaching here
141
- expect(parseInt(renderCount.textContent || "0", 10)).toBeLessThan(10);
142
- },
143
- TEST_TIMEOUT,
144
- );
145
- });