@fireproof/core 0.21.0-dev-preview-7 → 0.22.0-keybag

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 (444) 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 +12 -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 -316
  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 -17
  45. package/blockstore/index.d.ts.map +0 -1
  46. package/blockstore/index.js +0 -17
  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 -62
  57. package/blockstore/loader.d.ts.map +0 -1
  58. package/blockstore/loader.js +0 -523
  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 -508
  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 -26645
  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 -33
  114. package/database.d.ts.map +0 -1
  115. package/database.js +0 -132
  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 -56
  128. package/ledger.d.ts.map +0 -1
  129. package/ledger.js +0 -237
  130. package/ledger.js.map +0 -1
  131. package/protocols/cloud/http-connection.d.ts +0 -26
  132. package/protocols/cloud/http-connection.d.ts.map +0 -1
  133. package/protocols/cloud/http-connection.js +0 -154
  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 -310
  156. package/protocols/cloud/msg-types.d.ts.map +0 -1
  157. package/protocols/cloud/msg-types.js +0 -299
  158. package/protocols/cloud/msg-types.js.map +0 -1
  159. package/protocols/cloud/msger.d.ts +0 -94
  160. package/protocols/cloud/msger.d.ts.map +0 -1
  161. package/protocols/cloud/msger.js +0 -319
  162. package/protocols/cloud/msger.js.map +0 -1
  163. package/protocols/cloud/ws-connection.d.ts +0 -40
  164. package/protocols/cloud/ws-connection.d.ts.map +0 -1
  165. package/protocols/cloud/ws-connection.js +0 -205
  166. package/protocols/cloud/ws-connection.js.map +0 -1
  167. package/protocols/dashboard/index.d.ts +0 -4
  168. package/protocols/dashboard/index.d.ts.map +0 -1
  169. package/protocols/dashboard/index.js +0 -4
  170. package/protocols/dashboard/index.js.map +0 -1
  171. package/protocols/dashboard/msg-api.d.ts +0 -11
  172. package/protocols/dashboard/msg-api.d.ts.map +0 -1
  173. package/protocols/dashboard/msg-api.js +0 -55
  174. package/protocols/dashboard/msg-api.js.map +0 -1
  175. package/protocols/dashboard/msg-is.d.ts +0 -45
  176. package/protocols/dashboard/msg-is.d.ts.map +0 -1
  177. package/protocols/dashboard/msg-is.js +0 -63
  178. package/protocols/dashboard/msg-is.js.map +0 -1
  179. package/protocols/dashboard/msg-types.d.ts +0 -397
  180. package/protocols/dashboard/msg-types.d.ts.map +0 -1
  181. package/protocols/dashboard/msg-types.js +0 -4
  182. package/protocols/dashboard/msg-types.js.map +0 -1
  183. package/protocols/index.d.ts +0 -3
  184. package/protocols/index.d.ts.map +0 -1
  185. package/protocols/index.js +0 -3
  186. package/protocols/index.js.map +0 -1
  187. package/react/img-file.d.ts +0 -303
  188. package/react/img-file.d.ts.map +0 -1
  189. package/react/img-file.js +0 -92
  190. package/react/img-file.js.map +0 -1
  191. package/react/index.d.ts +0 -5
  192. package/react/index.d.ts.map +0 -1
  193. package/react/index.js +0 -5
  194. package/react/index.js.map +0 -1
  195. package/react/types.d.ts +0 -91
  196. package/react/types.d.ts.map +0 -1
  197. package/react/types.js +0 -2
  198. package/react/types.js.map +0 -1
  199. package/react/use-all-docs.d.ts +0 -4
  200. package/react/use-all-docs.d.ts.map +0 -1
  201. package/react/use-all-docs.js +0 -25
  202. package/react/use-all-docs.js.map +0 -1
  203. package/react/use-attach.d.ts +0 -11
  204. package/react/use-attach.d.ts.map +0 -1
  205. package/react/use-attach.js +0 -169
  206. package/react/use-attach.js.map +0 -1
  207. package/react/use-changes.d.ts +0 -4
  208. package/react/use-changes.d.ts.map +0 -1
  209. package/react/use-changes.js +0 -19
  210. package/react/use-changes.js.map +0 -1
  211. package/react/use-document.d.ts +0 -4
  212. package/react/use-document.d.ts.map +0 -1
  213. package/react/use-document.js +0 -109
  214. package/react/use-document.js.map +0 -1
  215. package/react/use-fireproof.d.ts +0 -6
  216. package/react/use-fireproof.d.ts.map +0 -1
  217. package/react/use-fireproof.js +0 -20
  218. package/react/use-fireproof.js.map +0 -1
  219. package/react/use-live-query.d.ts +0 -4
  220. package/react/use-live-query.d.ts.map +0 -1
  221. package/react/use-live-query.js +0 -24
  222. package/react/use-live-query.js.map +0 -1
  223. package/runtime/files.d.ts +0 -12
  224. package/runtime/files.d.ts.map +0 -1
  225. package/runtime/files.js +0 -29
  226. package/runtime/files.js.map +0 -1
  227. package/runtime/gateways/cloud/gateway.d.ts +0 -41
  228. package/runtime/gateways/cloud/gateway.d.ts.map +0 -1
  229. package/runtime/gateways/cloud/gateway.js +0 -514
  230. package/runtime/gateways/cloud/gateway.js.map +0 -1
  231. package/runtime/gateways/cloud/index.d.ts +0 -3
  232. package/runtime/gateways/cloud/index.d.ts.map +0 -1
  233. package/runtime/gateways/cloud/index.js +0 -3
  234. package/runtime/gateways/cloud/index.js.map +0 -1
  235. package/runtime/gateways/cloud/to-cloud.d.ts +0 -59
  236. package/runtime/gateways/cloud/to-cloud.d.ts.map +0 -1
  237. package/runtime/gateways/cloud/to-cloud.js +0 -175
  238. package/runtime/gateways/cloud/to-cloud.js.map +0 -1
  239. package/runtime/gateways/def-serde-gateway.d.ts +0 -18
  240. package/runtime/gateways/def-serde-gateway.d.ts.map +0 -1
  241. package/runtime/gateways/def-serde-gateway.js +0 -92
  242. package/runtime/gateways/def-serde-gateway.js.map +0 -1
  243. package/runtime/gateways/file/deno/deno-filesystem.d.ts +0 -27
  244. package/runtime/gateways/file/deno/deno-filesystem.d.ts.map +0 -1
  245. package/runtime/gateways/file/deno/deno-filesystem.js +0 -52
  246. package/runtime/gateways/file/deno/deno-filesystem.js.map +0 -1
  247. package/runtime/gateways/file/deno/get-sys-file-system.d.ts +0 -4
  248. package/runtime/gateways/file/deno/get-sys-file-system.d.ts.map +0 -1
  249. package/runtime/gateways/file/deno/get-sys-file-system.js +0 -11
  250. package/runtime/gateways/file/deno/get-sys-file-system.js.map +0 -1
  251. package/runtime/gateways/file/deno/index.d.ts +0 -2
  252. package/runtime/gateways/file/deno/index.d.ts.map +0 -1
  253. package/runtime/gateways/file/deno/index.js +0 -2
  254. package/runtime/gateways/file/deno/index.js.map +0 -1
  255. package/runtime/gateways/file/gateway-impl.d.ts +0 -18
  256. package/runtime/gateways/file/gateway-impl.d.ts.map +0 -1
  257. package/runtime/gateways/file/gateway-impl.js +0 -121
  258. package/runtime/gateways/file/gateway-impl.js.map +0 -1
  259. package/runtime/gateways/file/index.d.ts +0 -3
  260. package/runtime/gateways/file/index.d.ts.map +0 -1
  261. package/runtime/gateways/file/index.js +0 -3
  262. package/runtime/gateways/file/index.js.map +0 -1
  263. package/runtime/gateways/file/key-bag-file.d.ts +0 -20
  264. package/runtime/gateways/file/key-bag-file.d.ts.map +0 -1
  265. package/runtime/gateways/file/key-bag-file.js +0 -52
  266. package/runtime/gateways/file/key-bag-file.js.map +0 -1
  267. package/runtime/gateways/file/node/get-sys-file-system.d.ts +0 -4
  268. package/runtime/gateways/file/node/get-sys-file-system.d.ts.map +0 -1
  269. package/runtime/gateways/file/node/get-sys-file-system.js +0 -11
  270. package/runtime/gateways/file/node/get-sys-file-system.js.map +0 -1
  271. package/runtime/gateways/file/node/index.d.ts +0 -2
  272. package/runtime/gateways/file/node/index.d.ts.map +0 -1
  273. package/runtime/gateways/file/node/index.js +0 -2
  274. package/runtime/gateways/file/node/index.js.map +0 -1
  275. package/runtime/gateways/file/node/node-filesystem.d.ts +0 -32
  276. package/runtime/gateways/file/node/node-filesystem.d.ts.map +0 -1
  277. package/runtime/gateways/file/node/node-filesystem.js +0 -33
  278. package/runtime/gateways/file/node/node-filesystem.js.map +0 -1
  279. package/runtime/gateways/file/node/to-array-buffer.d.ts +0 -2
  280. package/runtime/gateways/file/node/to-array-buffer.d.ts.map +0 -1
  281. package/runtime/gateways/file/node/to-array-buffer.js +0 -12
  282. package/runtime/gateways/file/node/to-array-buffer.js.map +0 -1
  283. package/runtime/gateways/file/sys-file-system-factory.d.ts +0 -4
  284. package/runtime/gateways/file/sys-file-system-factory.d.ts.map +0 -1
  285. package/runtime/gateways/file/sys-file-system-factory.js +0 -13
  286. package/runtime/gateways/file/sys-file-system-factory.js.map +0 -1
  287. package/runtime/gateways/file/utils.d.ts +0 -5
  288. package/runtime/gateways/file/utils.d.ts.map +0 -1
  289. package/runtime/gateways/file/utils.js +0 -27
  290. package/runtime/gateways/file/utils.js.map +0 -1
  291. package/runtime/gateways/file/version.d.ts +0 -2
  292. package/runtime/gateways/file/version.d.ts.map +0 -1
  293. package/runtime/gateways/file/version.js +0 -2
  294. package/runtime/gateways/file/version.js.map +0 -1
  295. package/runtime/gateways/fp-envelope-serialize.d.ts +0 -50
  296. package/runtime/gateways/fp-envelope-serialize.d.ts.map +0 -1
  297. package/runtime/gateways/fp-envelope-serialize.js +0 -141
  298. package/runtime/gateways/fp-envelope-serialize.js.map +0 -1
  299. package/runtime/gateways/index.d.ts +0 -6
  300. package/runtime/gateways/index.d.ts.map +0 -1
  301. package/runtime/gateways/index.js +0 -6
  302. package/runtime/gateways/index.js.map +0 -1
  303. package/runtime/gateways/indexeddb/gateway-impl.d.ts +0 -22
  304. package/runtime/gateways/indexeddb/gateway-impl.d.ts.map +0 -1
  305. package/runtime/gateways/indexeddb/gateway-impl.js +0 -147
  306. package/runtime/gateways/indexeddb/gateway-impl.js.map +0 -1
  307. package/runtime/gateways/indexeddb/index.d.ts +0 -6
  308. package/runtime/gateways/indexeddb/index.d.ts.map +0 -1
  309. package/runtime/gateways/indexeddb/index.js +0 -6
  310. package/runtime/gateways/indexeddb/index.js.map +0 -1
  311. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts +0 -16
  312. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +0 -1
  313. package/runtime/gateways/indexeddb/key-bag-indexeddb.js +0 -48
  314. package/runtime/gateways/indexeddb/key-bag-indexeddb.js.map +0 -1
  315. package/runtime/gateways/indexeddb-version.d.ts +0 -2
  316. package/runtime/gateways/indexeddb-version.d.ts.map +0 -1
  317. package/runtime/gateways/indexeddb-version.js +0 -2
  318. package/runtime/gateways/indexeddb-version.js.map +0 -1
  319. package/runtime/gateways/memory/gateway.d.ts +0 -18
  320. package/runtime/gateways/memory/gateway.d.ts.map +0 -1
  321. package/runtime/gateways/memory/gateway.js +0 -73
  322. package/runtime/gateways/memory/gateway.js.map +0 -1
  323. package/runtime/gateways/memory/version.d.ts +0 -2
  324. package/runtime/gateways/memory/version.d.ts.map +0 -1
  325. package/runtime/gateways/memory/version.js +0 -2
  326. package/runtime/gateways/memory/version.js.map +0 -1
  327. package/runtime/index.d.ts +0 -13
  328. package/runtime/index.d.ts.map +0 -1
  329. package/runtime/index.js +0 -13
  330. package/runtime/index.js.map +0 -1
  331. package/runtime/key-bag-memory.d.ts +0 -13
  332. package/runtime/key-bag-memory.d.ts.map +0 -1
  333. package/runtime/key-bag-memory.js +0 -30
  334. package/runtime/key-bag-memory.js.map +0 -1
  335. package/runtime/key-bag.d.ts +0 -88
  336. package/runtime/key-bag.d.ts.map +0 -1
  337. package/runtime/key-bag.js +0 -417
  338. package/runtime/key-bag.js.map +0 -1
  339. package/runtime/keyed-crypto.d.ts +0 -19
  340. package/runtime/keyed-crypto.d.ts.map +0 -1
  341. package/runtime/keyed-crypto.js +0 -192
  342. package/runtime/keyed-crypto.js.map +0 -1
  343. package/runtime/memory-sys-container.d.ts +0 -2
  344. package/runtime/memory-sys-container.d.ts.map +0 -1
  345. package/runtime/memory-sys-container.js +0 -2
  346. package/runtime/memory-sys-container.js.map +0 -1
  347. package/runtime/meta-key-hack.d.ts +0 -42
  348. package/runtime/meta-key-hack.d.ts.map +0 -1
  349. package/runtime/meta-key-hack.js +0 -201
  350. package/runtime/meta-key-hack.js.map +0 -1
  351. package/runtime/sts-service/index.d.ts +0 -40
  352. package/runtime/sts-service/index.d.ts.map +0 -1
  353. package/runtime/sts-service/index.js +0 -108
  354. package/runtime/sts-service/index.js.map +0 -1
  355. package/runtime/sys-container.d.ts +0 -2
  356. package/runtime/sys-container.d.ts.map +0 -1
  357. package/runtime/sys-container.js +0 -2
  358. package/runtime/sys-container.js.map +0 -1
  359. package/runtime/wait-pr-multiformats/block.d.ts +0 -47
  360. package/runtime/wait-pr-multiformats/block.d.ts.map +0 -1
  361. package/runtime/wait-pr-multiformats/block.js +0 -64
  362. package/runtime/wait-pr-multiformats/block.js.map +0 -1
  363. package/runtime/wait-pr-multiformats/codec-interface.d.ts +0 -29
  364. package/runtime/wait-pr-multiformats/codec-interface.d.ts.map +0 -1
  365. package/runtime/wait-pr-multiformats/codec-interface.js +0 -2
  366. package/runtime/wait-pr-multiformats/codec-interface.js.map +0 -1
  367. package/runtime/wait-pr-multiformats/index.d.ts +0 -3
  368. package/runtime/wait-pr-multiformats/index.d.ts.map +0 -1
  369. package/runtime/wait-pr-multiformats/index.js +0 -3
  370. package/runtime/wait-pr-multiformats/index.js.map +0 -1
  371. package/tests/blockstore/fp-envelope.test.ts-off +0 -65
  372. package/tests/blockstore/fragment-gateway.test.ts-off +0 -106
  373. package/tests/blockstore/interceptor-gateway.test.ts +0 -254
  374. package/tests/blockstore/keyed-crypto-indexeddb-file.test.ts +0 -128
  375. package/tests/blockstore/keyed-crypto.test.ts +0 -376
  376. package/tests/blockstore/loader.test.ts +0 -298
  377. package/tests/blockstore/standalone.test.ts +0 -152
  378. package/tests/blockstore/store.test.ts +0 -192
  379. package/tests/blockstore/transaction.test.ts +0 -130
  380. package/tests/fireproof/all-gateway.test.ts +0 -461
  381. package/tests/fireproof/attachable.test.ts +0 -686
  382. package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.car +0 -0
  383. package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +0 -324
  384. package/tests/fireproof/charwise-boolean.test.ts +0 -66
  385. package/tests/fireproof/crdt.test.ts +0 -570
  386. package/tests/fireproof/database.test.ts +0 -779
  387. package/tests/fireproof/deleted-docs-handling.test.ts +0 -111
  388. package/tests/fireproof/fireproof.test.fixture.ts +0 -133
  389. package/tests/fireproof/fireproof.test.ts +0 -777
  390. package/tests/fireproof/hello.test.ts +0 -74
  391. package/tests/fireproof/indexer.test.ts +0 -458
  392. package/tests/fireproof/multiple-ledger.test.ts +0 -65
  393. package/tests/fireproof/query-docs.test.ts +0 -116
  394. package/tests/fireproof/query-limit-issue.test.ts +0 -147
  395. package/tests/fireproof/query-property-inconsistency.test.ts +0 -89
  396. package/tests/fireproof/query-result-properties.test.ts +0 -42
  397. package/tests/fireproof/stable-cid.test.ts +0 -69
  398. package/tests/fireproof/utils.test.ts +0 -135
  399. package/tests/gateway/file/loader-config.test.ts +0 -307
  400. package/tests/gateway/indexeddb/loader-config.test.ts +0 -79
  401. package/tests/helpers.ts +0 -172
  402. package/tests/protocols/cloud/msger.test.ts +0 -548
  403. package/tests/react/img-file.test.tsx +0 -190
  404. package/tests/react/use-all-docs.test.tsx +0 -172
  405. package/tests/react/use-document-with-nonexistent-id.test.tsx +0 -96
  406. package/tests/react/use-fireproof-db-switch.test.tsx +0 -91
  407. package/tests/react/use-fireproof-stability.test.tsx +0 -145
  408. package/tests/react/use-fireproof.test.tsx +0 -645
  409. package/tests/runtime/fp-envelope-serialize.test.ts +0 -254
  410. package/tests/runtime/meta-key-hack.test.ts +0 -95
  411. package/tests/setup.file.ts +0 -1
  412. package/tests/setup.indexeddb.ts +0 -0
  413. package/tests/setup.memory.ts +0 -2
  414. package/tests/vitest.file.config.ts +0 -14
  415. package/tests/vitest.indexeddb.config.ts +0 -37
  416. package/tests/vitest.memory.config.ts +0 -25
  417. package/types.d.ts +0 -461
  418. package/types.d.ts.map +0 -1
  419. package/types.js +0 -60
  420. package/types.js.map +0 -1
  421. package/use-fireproof/iframe-strategy.d.ts +0 -14
  422. package/use-fireproof/iframe-strategy.d.ts.map +0 -1
  423. package/use-fireproof/iframe-strategy.js +0 -79
  424. package/use-fireproof/iframe-strategy.js.map +0 -1
  425. package/use-fireproof/index.d.ts +0 -14
  426. package/use-fireproof/index.d.ts.map +0 -1
  427. package/use-fireproof/index.js +0 -36
  428. package/use-fireproof/index.js.map +0 -1
  429. package/use-fireproof/redirect-strategy.d.ts +0 -15
  430. package/use-fireproof/redirect-strategy.d.ts.map +0 -1
  431. package/use-fireproof/redirect-strategy.js +0 -153
  432. package/use-fireproof/redirect-strategy.js.map +0 -1
  433. package/utils.d.ts +0 -48
  434. package/utils.d.ts.map +0 -1
  435. package/utils.js +0 -406
  436. package/utils.js.map +0 -1
  437. package/version.d.ts +0 -2
  438. package/version.d.ts.map +0 -1
  439. package/version.js +0 -4
  440. package/version.js.map +0 -1
  441. package/write-queue.d.ts +0 -9
  442. package/write-queue.d.ts.map +0 -1
  443. package/write-queue.js +0 -70
  444. 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,172 +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, AllDocsResult } from "use-fireproof";
5
-
6
- // Test timeout value for CI
7
- const TEST_TIMEOUT = 45000;
8
-
9
- describe("HOOK: useFireproof useAllDocs", () => {
10
- const dbName = "useAllDocsTest";
11
- let db: Database,
12
- database: ReturnType<typeof useFireproof>["database"],
13
- useAllDocs: ReturnType<typeof useFireproof>["useAllDocs"];
14
-
15
- beforeEach(async () => {
16
- const expectedValues = ["apple", "banana", "cherry"];
17
- db = fireproof(dbName);
18
- for (const value of expectedValues) {
19
- await db.put({ fruit: value });
20
- }
21
-
22
- const allDocs = await db.allDocs<{ fruit: string }>();
23
- expect(allDocs.rows.map((row) => row.value.fruit)).toEqual(expectedValues);
24
- });
25
-
26
- it(
27
- "fetches documents correctly",
28
- async () => {
29
- let result: AllDocsResult<{ fruit: string }>;
30
-
31
- renderHook(() => {
32
- const hookResult = useFireproof(dbName);
33
- database = hookResult.database;
34
- useAllDocs = hookResult.useAllDocs;
35
- result = useAllDocs<{ fruit: string }>();
36
- });
37
-
38
- await waitFor(() => {
39
- expect(result.docs.length).toBe(3);
40
- expect(result.docs.map((doc) => doc.fruit)).toEqual(["apple", "banana", "cherry"]);
41
- });
42
- },
43
- TEST_TIMEOUT,
44
- );
45
-
46
- it(
47
- "updates when database changes",
48
- async () => {
49
- let allDocsResult: AllDocsResult<{ fruit: string }>;
50
-
51
- renderHook(() => {
52
- const hookResult = useFireproof(dbName);
53
- database = hookResult.database;
54
- useAllDocs = hookResult.useAllDocs;
55
- allDocsResult = useAllDocs<{ fruit: string }>();
56
- });
57
-
58
- // Wait for initial data to load
59
- await waitFor(() => {
60
- expect(allDocsResult.docs.length).toBe(3);
61
- });
62
-
63
- // Add a new document
64
- await database.put({ fruit: "dragonfruit" });
65
-
66
- // Verify the hook updates with the new document
67
- await waitFor(() => {
68
- expect(allDocsResult.docs.length).toBe(4);
69
- expect(allDocsResult.docs.map((doc) => doc.fruit)).toContain("dragonfruit");
70
- });
71
- },
72
- TEST_TIMEOUT,
73
- );
74
-
75
- it(
76
- "properly handles subscription lifecycle",
77
- async () => {
78
- // This test verifies that the subscription works properly
79
- // We'll just check that the component renders and updates
80
-
81
- // Render the hook in a way we can unmount it
82
- const { unmount, result } = renderHook(() => {
83
- const hookResult = useFireproof(dbName);
84
- database = hookResult.database;
85
- useAllDocs = hookResult.useAllDocs;
86
- return useAllDocs<{ fruit: string }>();
87
- });
88
-
89
- // Wait for the hook to initialize with data
90
- await waitFor(() => {
91
- expect(result.current.docs.length).toBe(3);
92
- });
93
-
94
- // Add a document to test subscription works
95
- await database?.put({ fruit: "date" });
96
-
97
- // Verify the hook updates with the new document
98
- await waitFor(() => {
99
- expect(result.current.docs.length).toBe(4);
100
- });
101
-
102
- // Unmount the component to trigger cleanup
103
- unmount();
104
-
105
- // Test passes if no errors occur during unmount
106
- },
107
- TEST_TIMEOUT,
108
- );
109
-
110
- it(
111
- "accepts query parameters",
112
- async () => {
113
- // This test verifies that the hook accepts query parameters
114
- let allDocsResult: AllDocsResult<{ fruit: string }>;
115
-
116
- renderHook(() => {
117
- const hookResult = useFireproof(dbName);
118
- database = hookResult.database;
119
- useAllDocs = hookResult.useAllDocs;
120
- // Pass query parameters to the hook
121
- allDocsResult = useAllDocs<{ fruit: string }>({ descending: true });
122
- });
123
-
124
- // Wait for the hook to initialize
125
- await waitFor(() => {
126
- // Verify that the hook returns data regardless of parameters
127
- expect(allDocsResult.docs.length).toBe(3);
128
- // The current implementation doesn't filter client-side
129
- });
130
- },
131
- TEST_TIMEOUT,
132
- );
133
-
134
- it(
135
- "refreshes when query parameters change",
136
- async () => {
137
- // This test verifies that the useAllDocs hook refreshes when query parameters change
138
- let allDocsResult: AllDocsResult<{ fruit: string }>;
139
- let queryParams = {};
140
-
141
- const { rerender } = renderHook(() => {
142
- const hookResult = useFireproof(dbName);
143
- database = hookResult.database;
144
- useAllDocs = hookResult.useAllDocs;
145
- allDocsResult = useAllDocs<{ fruit: string }>(queryParams);
146
- });
147
-
148
- // Verify initial state with no query parameters
149
- await waitFor(() => {
150
- expect(allDocsResult.docs.length).toBe(3);
151
- });
152
-
153
- // Change the query parameters
154
- queryParams = { descending: true };
155
- rerender();
156
-
157
- // Verify the hook still works after query parameters change
158
- // The implementation should handle the parameter change correctly
159
- await waitFor(() => {
160
- expect(allDocsResult.docs.length).toBe(3);
161
- });
162
- },
163
- TEST_TIMEOUT,
164
- );
165
-
166
- afterEach(async () => {
167
- await db.close();
168
- await db.destroy();
169
- await database?.close();
170
- await database?.destroy();
171
- });
172
- });
@@ -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 "use-fireproof";
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
- });