@fireproof/core 0.20.0-dev-preview-63 → 0.20.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 (407) hide show
  1. package/deno/index.d.ts +7 -0
  2. package/deno/index.js +66 -0
  3. package/deno/index.js.map +1 -0
  4. package/deno/metafile-esm.json +1 -0
  5. package/deno.json +2 -2
  6. package/index.cjs +7268 -0
  7. package/index.cjs.map +1 -0
  8. package/index.d.cts +2742 -0
  9. package/index.d.ts +2742 -15
  10. package/index.js +7267 -14
  11. package/index.js.map +1 -1
  12. package/indexeddb/index.cjs +218 -0
  13. package/indexeddb/index.cjs.map +1 -0
  14. package/indexeddb/index.d.cts +30 -0
  15. package/indexeddb/index.d.ts +30 -0
  16. package/indexeddb/index.js +195 -0
  17. package/indexeddb/index.js.map +1 -0
  18. package/indexeddb/metafile-cjs.json +1 -0
  19. package/indexeddb/metafile-esm.json +1 -0
  20. package/metafile-cjs.json +1 -0
  21. package/metafile-esm.json +1 -0
  22. package/node/index.cjs +97 -0
  23. package/node/index.cjs.map +1 -0
  24. package/node/index.d.cts +7 -0
  25. package/node/index.d.ts +7 -0
  26. package/node/index.js +64 -0
  27. package/node/index.js.map +1 -0
  28. package/node/metafile-cjs.json +1 -0
  29. package/node/metafile-esm.json +1 -0
  30. package/package.json +17 -20
  31. package/react/index.cjs +296 -0
  32. package/react/index.cjs.map +1 -0
  33. package/react/{img-file.d.ts → index.d.cts} +53 -6
  34. package/react/index.d.ts +336 -4
  35. package/react/index.js +262 -3
  36. package/react/index.js.map +1 -1
  37. package/react/metafile-cjs.json +1 -0
  38. package/react/metafile-esm.json +1 -0
  39. package/tests/blockstore/loader.test.ts +1 -1
  40. package/tests/blockstore/store.test.ts +4 -9
  41. package/tests/fireproof/attachable.test.ts +3 -3
  42. package/tests/react/use-fireproof-db-switch.test.tsx +91 -0
  43. package/tests/www/gallery.html +132 -0
  44. package/tests/www/iife.html +42 -0
  45. package/tests/www/todo-aws.html +232 -0
  46. package/tests/www/todo-ipfs.html +213 -0
  47. package/tests/www/todo-local.html +214 -0
  48. package/tests/www/todo-netlify.html +227 -0
  49. package/tests/www/todo.html +254 -0
  50. package/apply-head-queue.d.ts +0 -18
  51. package/apply-head-queue.d.ts.map +0 -1
  52. package/apply-head-queue.js +0 -47
  53. package/apply-head-queue.js.map +0 -1
  54. package/blockstore/attachable-store.d.ts +0 -17
  55. package/blockstore/attachable-store.d.ts.map +0 -1
  56. package/blockstore/attachable-store.js +0 -295
  57. package/blockstore/attachable-store.js.map +0 -1
  58. package/blockstore/commit-queue.d.ts +0 -12
  59. package/blockstore/commit-queue.d.ts.map +0 -1
  60. package/blockstore/commit-queue.js +0 -52
  61. package/blockstore/commit-queue.js.map +0 -1
  62. package/blockstore/commitor.d.ts +0 -21
  63. package/blockstore/commitor.d.ts.map +0 -1
  64. package/blockstore/commitor.js +0 -104
  65. package/blockstore/commitor.js.map +0 -1
  66. package/blockstore/connect-raw.d.ts +0 -2
  67. package/blockstore/connect-raw.d.ts.map +0 -1
  68. package/blockstore/connect-raw.js +0 -2
  69. package/blockstore/connect-raw.js.map +0 -1
  70. package/blockstore/connection-base.d.ts +0 -2
  71. package/blockstore/connection-base.d.ts.map +0 -1
  72. package/blockstore/connection-base.js +0 -2
  73. package/blockstore/connection-base.js.map +0 -1
  74. package/blockstore/encrypt-helpers.d.ts +0 -2
  75. package/blockstore/encrypt-helpers.d.ts.map +0 -1
  76. package/blockstore/encrypt-helpers.js +0 -2
  77. package/blockstore/encrypt-helpers.js.map +0 -1
  78. package/blockstore/fp-envelope.d.ts +0 -32
  79. package/blockstore/fp-envelope.d.ts.map +0 -1
  80. package/blockstore/fp-envelope.js +0 -14
  81. package/blockstore/fp-envelope.js.map +0 -1
  82. package/blockstore/gateway.d.ts +0 -20
  83. package/blockstore/gateway.d.ts.map +0 -1
  84. package/blockstore/gateway.js +0 -2
  85. package/blockstore/gateway.js.map +0 -1
  86. package/blockstore/index.d.ts +0 -16
  87. package/blockstore/index.d.ts.map +0 -1
  88. package/blockstore/index.js +0 -16
  89. package/blockstore/index.js.map +0 -1
  90. package/blockstore/interceptor-gateway.d.ts +0 -29
  91. package/blockstore/interceptor-gateway.d.ts.map +0 -1
  92. package/blockstore/interceptor-gateway.js +0 -137
  93. package/blockstore/interceptor-gateway.js.map +0 -1
  94. package/blockstore/loader-helpers.d.ts +0 -4
  95. package/blockstore/loader-helpers.d.ts.map +0 -1
  96. package/blockstore/loader-helpers.js +0 -16
  97. package/blockstore/loader-helpers.js.map +0 -1
  98. package/blockstore/loader.d.ts +0 -45
  99. package/blockstore/loader.d.ts.map +0 -1
  100. package/blockstore/loader.js +0 -352
  101. package/blockstore/loader.js.map +0 -1
  102. package/blockstore/register-store-protocol.d.ts +0 -22
  103. package/blockstore/register-store-protocol.d.ts.map +0 -1
  104. package/blockstore/register-store-protocol.js +0 -114
  105. package/blockstore/register-store-protocol.js.map +0 -1
  106. package/blockstore/serde-gateway.d.ts +0 -78
  107. package/blockstore/serde-gateway.d.ts.map +0 -1
  108. package/blockstore/serde-gateway.js +0 -2
  109. package/blockstore/serde-gateway.js.map +0 -1
  110. package/blockstore/store-factory.d.ts +0 -11
  111. package/blockstore/store-factory.d.ts.map +0 -1
  112. package/blockstore/store-factory.js +0 -105
  113. package/blockstore/store-factory.js.map +0 -1
  114. package/blockstore/store-remote.d.ts +0 -2
  115. package/blockstore/store-remote.d.ts.map +0 -1
  116. package/blockstore/store-remote.js +0 -2
  117. package/blockstore/store-remote.js.map +0 -1
  118. package/blockstore/store.d.ts +0 -82
  119. package/blockstore/store.d.ts.map +0 -1
  120. package/blockstore/store.js +0 -438
  121. package/blockstore/store.js.map +0 -1
  122. package/blockstore/task-manager.d.ts +0 -19
  123. package/blockstore/task-manager.d.ts.map +0 -1
  124. package/blockstore/task-manager.js +0 -50
  125. package/blockstore/task-manager.js.map +0 -1
  126. package/blockstore/transaction.d.ts +0 -64
  127. package/blockstore/transaction.d.ts.map +0 -1
  128. package/blockstore/transaction.js +0 -249
  129. package/blockstore/transaction.js.map +0 -1
  130. package/blockstore/types.d.ts +0 -400
  131. package/blockstore/types.d.ts.map +0 -1
  132. package/blockstore/types.js +0 -55
  133. package/blockstore/types.js.map +0 -1
  134. package/blockstore/uri-interceptor.d.ts +0 -19
  135. package/blockstore/uri-interceptor.d.ts.map +0 -1
  136. package/blockstore/uri-interceptor.js +0 -61
  137. package/blockstore/uri-interceptor.js.map +0 -1
  138. package/bundle-not-impl.d.ts +0 -2
  139. package/bundle-not-impl.d.ts.map +0 -1
  140. package/bundle-not-impl.js +0 -4
  141. package/bundle-not-impl.js.map +0 -1
  142. package/cli/main.js +0 -26114
  143. package/context.d.ts +0 -7
  144. package/context.d.ts.map +0 -1
  145. package/context.js +0 -15
  146. package/context.js.map +0 -1
  147. package/crdt-clock.d.ts +0 -27
  148. package/crdt-clock.d.ts.map +0 -1
  149. package/crdt-clock.js +0 -140
  150. package/crdt-clock.js.map +0 -1
  151. package/crdt-helpers.d.ts +0 -16
  152. package/crdt-helpers.d.ts.map +0 -1
  153. package/crdt-helpers.js +0 -316
  154. package/crdt-helpers.js.map +0 -1
  155. package/crdt.d.ts +0 -34
  156. package/crdt.d.ts.map +0 -1
  157. package/crdt.js +0 -131
  158. package/crdt.js.map +0 -1
  159. package/database.d.ts +0 -34
  160. package/database.d.ts.map +0 -1
  161. package/database.js +0 -121
  162. package/database.js.map +0 -1
  163. package/index.d.ts.map +0 -1
  164. package/indexer-helpers.d.ts +0 -69
  165. package/indexer-helpers.d.ts.map +0 -1
  166. package/indexer-helpers.js +0 -135
  167. package/indexer-helpers.js.map +0 -1
  168. package/indexer.d.ts +0 -25
  169. package/indexer.d.ts.map +0 -1
  170. package/indexer.js +0 -231
  171. package/indexer.js.map +0 -1
  172. package/ledger.d.ts +0 -56
  173. package/ledger.d.ts.map +0 -1
  174. package/ledger.js +0 -224
  175. package/ledger.js.map +0 -1
  176. package/protocols/cloud/http-connection.d.ts +0 -25
  177. package/protocols/cloud/http-connection.d.ts.map +0 -1
  178. package/protocols/cloud/http-connection.js +0 -153
  179. package/protocols/cloud/http-connection.js.map +0 -1
  180. package/protocols/cloud/index.d.ts +0 -10
  181. package/protocols/cloud/index.d.ts.map +0 -1
  182. package/protocols/cloud/index.js +0 -10
  183. package/protocols/cloud/index.js.map +0 -1
  184. package/protocols/cloud/msg-raw-connection-base.d.ts +0 -16
  185. package/protocols/cloud/msg-raw-connection-base.d.ts.map +0 -1
  186. package/protocols/cloud/msg-raw-connection-base.js +0 -22
  187. package/protocols/cloud/msg-raw-connection-base.js.map +0 -1
  188. package/protocols/cloud/msg-types-data.d.ts +0 -36
  189. package/protocols/cloud/msg-types-data.d.ts.map +0 -1
  190. package/protocols/cloud/msg-types-data.js +0 -38
  191. package/protocols/cloud/msg-types-data.js.map +0 -1
  192. package/protocols/cloud/msg-types-meta.d.ts +0 -41
  193. package/protocols/cloud/msg-types-meta.d.ts.map +0 -1
  194. package/protocols/cloud/msg-types-meta.js +0 -98
  195. package/protocols/cloud/msg-types-meta.js.map +0 -1
  196. package/protocols/cloud/msg-types-wal.d.ts +0 -33
  197. package/protocols/cloud/msg-types-wal.d.ts.map +0 -1
  198. package/protocols/cloud/msg-types-wal.js +0 -38
  199. package/protocols/cloud/msg-types-wal.js.map +0 -1
  200. package/protocols/cloud/msg-types.d.ts +0 -279
  201. package/protocols/cloud/msg-types.d.ts.map +0 -1
  202. package/protocols/cloud/msg-types.js +0 -278
  203. package/protocols/cloud/msg-types.js.map +0 -1
  204. package/protocols/cloud/msger.d.ts +0 -79
  205. package/protocols/cloud/msger.d.ts.map +0 -1
  206. package/protocols/cloud/msger.js +0 -198
  207. package/protocols/cloud/msger.js.map +0 -1
  208. package/protocols/cloud/ws-connection.d.ts +0 -29
  209. package/protocols/cloud/ws-connection.d.ts.map +0 -1
  210. package/protocols/cloud/ws-connection.js +0 -163
  211. package/protocols/cloud/ws-connection.js.map +0 -1
  212. package/protocols/index.d.ts +0 -2
  213. package/protocols/index.d.ts.map +0 -1
  214. package/protocols/index.js +0 -2
  215. package/protocols/index.js.map +0 -1
  216. package/react/img-file.d.ts.map +0 -1
  217. package/react/img-file.js +0 -58
  218. package/react/img-file.js.map +0 -1
  219. package/react/index.d.ts.map +0 -1
  220. package/react/types.d.ts +0 -43
  221. package/react/types.d.ts.map +0 -1
  222. package/react/types.js +0 -2
  223. package/react/types.js.map +0 -1
  224. package/react/use-all-docs.d.ts +0 -4
  225. package/react/use-all-docs.d.ts.map +0 -1
  226. package/react/use-all-docs.js +0 -19
  227. package/react/use-all-docs.js.map +0 -1
  228. package/react/use-changes.d.ts +0 -4
  229. package/react/use-changes.d.ts.map +0 -1
  230. package/react/use-changes.js +0 -19
  231. package/react/use-changes.js.map +0 -1
  232. package/react/use-document.d.ts +0 -4
  233. package/react/use-document.d.ts.map +0 -1
  234. package/react/use-document.js +0 -99
  235. package/react/use-document.js.map +0 -1
  236. package/react/use-fireproof.d.ts +0 -6
  237. package/react/use-fireproof.d.ts.map +0 -1
  238. package/react/use-fireproof.js +0 -15
  239. package/react/use-fireproof.js.map +0 -1
  240. package/react/use-live-query.d.ts +0 -4
  241. package/react/use-live-query.d.ts.map +0 -1
  242. package/react/use-live-query.js +0 -38
  243. package/react/use-live-query.js.map +0 -1
  244. package/react/utils.d.ts +0 -2
  245. package/react/utils.d.ts.map +0 -1
  246. package/react/utils.js +0 -4
  247. package/react/utils.js.map +0 -1
  248. package/runtime/files.d.ts +0 -12
  249. package/runtime/files.d.ts.map +0 -1
  250. package/runtime/files.js +0 -29
  251. package/runtime/files.js.map +0 -1
  252. package/runtime/gateways/cloud/gateway.d.ts +0 -44
  253. package/runtime/gateways/cloud/gateway.d.ts.map +0 -1
  254. package/runtime/gateways/cloud/gateway.js +0 -496
  255. package/runtime/gateways/cloud/gateway.js.map +0 -1
  256. package/runtime/gateways/def-serde-gateway.d.ts +0 -19
  257. package/runtime/gateways/def-serde-gateway.d.ts.map +0 -1
  258. package/runtime/gateways/def-serde-gateway.js +0 -73
  259. package/runtime/gateways/def-serde-gateway.js.map +0 -1
  260. package/runtime/gateways/file/deno/deno-filesystem.d.ts +0 -27
  261. package/runtime/gateways/file/deno/deno-filesystem.d.ts.map +0 -1
  262. package/runtime/gateways/file/deno/deno-filesystem.js +0 -51
  263. package/runtime/gateways/file/deno/deno-filesystem.js.map +0 -1
  264. package/runtime/gateways/file/deno/get-sys-file-system.d.ts +0 -4
  265. package/runtime/gateways/file/deno/get-sys-file-system.d.ts.map +0 -1
  266. package/runtime/gateways/file/deno/get-sys-file-system.js +0 -11
  267. package/runtime/gateways/file/deno/get-sys-file-system.js.map +0 -1
  268. package/runtime/gateways/file/deno/index.d.ts +0 -2
  269. package/runtime/gateways/file/deno/index.d.ts.map +0 -1
  270. package/runtime/gateways/file/deno/index.js +0 -2
  271. package/runtime/gateways/file/deno/index.js.map +0 -1
  272. package/runtime/gateways/file/gateway-impl.d.ts +0 -18
  273. package/runtime/gateways/file/gateway-impl.d.ts.map +0 -1
  274. package/runtime/gateways/file/gateway-impl.js +0 -121
  275. package/runtime/gateways/file/gateway-impl.js.map +0 -1
  276. package/runtime/gateways/file/index.d.ts +0 -3
  277. package/runtime/gateways/file/index.d.ts.map +0 -1
  278. package/runtime/gateways/file/index.js +0 -3
  279. package/runtime/gateways/file/index.js.map +0 -1
  280. package/runtime/gateways/file/key-bag-file.d.ts +0 -19
  281. package/runtime/gateways/file/key-bag-file.d.ts.map +0 -1
  282. package/runtime/gateways/file/key-bag-file.js +0 -40
  283. package/runtime/gateways/file/key-bag-file.js.map +0 -1
  284. package/runtime/gateways/file/node/get-sys-file-system.d.ts +0 -4
  285. package/runtime/gateways/file/node/get-sys-file-system.d.ts.map +0 -1
  286. package/runtime/gateways/file/node/get-sys-file-system.js +0 -11
  287. package/runtime/gateways/file/node/get-sys-file-system.js.map +0 -1
  288. package/runtime/gateways/file/node/index.d.ts +0 -2
  289. package/runtime/gateways/file/node/index.d.ts.map +0 -1
  290. package/runtime/gateways/file/node/index.js +0 -2
  291. package/runtime/gateways/file/node/index.js.map +0 -1
  292. package/runtime/gateways/file/node/node-filesystem.d.ts +0 -32
  293. package/runtime/gateways/file/node/node-filesystem.d.ts.map +0 -1
  294. package/runtime/gateways/file/node/node-filesystem.js +0 -37
  295. package/runtime/gateways/file/node/node-filesystem.js.map +0 -1
  296. package/runtime/gateways/file/node/to-array-buffer.d.ts +0 -2
  297. package/runtime/gateways/file/node/to-array-buffer.d.ts.map +0 -1
  298. package/runtime/gateways/file/node/to-array-buffer.js +0 -12
  299. package/runtime/gateways/file/node/to-array-buffer.js.map +0 -1
  300. package/runtime/gateways/file/sys-file-system-factory.d.ts +0 -4
  301. package/runtime/gateways/file/sys-file-system-factory.d.ts.map +0 -1
  302. package/runtime/gateways/file/sys-file-system-factory.js +0 -13
  303. package/runtime/gateways/file/sys-file-system-factory.js.map +0 -1
  304. package/runtime/gateways/file/utils.d.ts +0 -5
  305. package/runtime/gateways/file/utils.d.ts.map +0 -1
  306. package/runtime/gateways/file/utils.js +0 -27
  307. package/runtime/gateways/file/utils.js.map +0 -1
  308. package/runtime/gateways/file/version.d.ts +0 -2
  309. package/runtime/gateways/file/version.d.ts.map +0 -1
  310. package/runtime/gateways/file/version.js +0 -2
  311. package/runtime/gateways/file/version.js.map +0 -1
  312. package/runtime/gateways/fp-envelope-serialize.d.ts +0 -50
  313. package/runtime/gateways/fp-envelope-serialize.d.ts.map +0 -1
  314. package/runtime/gateways/fp-envelope-serialize.js +0 -141
  315. package/runtime/gateways/fp-envelope-serialize.js.map +0 -1
  316. package/runtime/gateways/index.d.ts +0 -6
  317. package/runtime/gateways/index.d.ts.map +0 -1
  318. package/runtime/gateways/index.js +0 -6
  319. package/runtime/gateways/index.js.map +0 -1
  320. package/runtime/gateways/indexeddb/gateway-impl.d.ts +0 -22
  321. package/runtime/gateways/indexeddb/gateway-impl.d.ts.map +0 -1
  322. package/runtime/gateways/indexeddb/gateway-impl.js +0 -147
  323. package/runtime/gateways/indexeddb/gateway-impl.js.map +0 -1
  324. package/runtime/gateways/indexeddb/index.d.ts +0 -6
  325. package/runtime/gateways/indexeddb/index.d.ts.map +0 -1
  326. package/runtime/gateways/indexeddb/index.js +0 -6
  327. package/runtime/gateways/indexeddb/index.js.map +0 -1
  328. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts +0 -15
  329. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +0 -1
  330. package/runtime/gateways/indexeddb/key-bag-indexeddb.js +0 -42
  331. package/runtime/gateways/indexeddb/key-bag-indexeddb.js.map +0 -1
  332. package/runtime/gateways/indexeddb-version.d.ts +0 -2
  333. package/runtime/gateways/indexeddb-version.d.ts.map +0 -1
  334. package/runtime/gateways/indexeddb-version.js +0 -2
  335. package/runtime/gateways/indexeddb-version.js.map +0 -1
  336. package/runtime/gateways/memory/gateway.d.ts +0 -18
  337. package/runtime/gateways/memory/gateway.d.ts.map +0 -1
  338. package/runtime/gateways/memory/gateway.js +0 -58
  339. package/runtime/gateways/memory/gateway.js.map +0 -1
  340. package/runtime/gateways/memory/version.d.ts +0 -2
  341. package/runtime/gateways/memory/version.d.ts.map +0 -1
  342. package/runtime/gateways/memory/version.js +0 -2
  343. package/runtime/gateways/memory/version.js.map +0 -1
  344. package/runtime/index.d.ts +0 -13
  345. package/runtime/index.d.ts.map +0 -1
  346. package/runtime/index.js +0 -13
  347. package/runtime/index.js.map +0 -1
  348. package/runtime/key-bag-memory.d.ts +0 -12
  349. package/runtime/key-bag-memory.d.ts.map +0 -1
  350. package/runtime/key-bag-memory.js +0 -23
  351. package/runtime/key-bag-memory.js.map +0 -1
  352. package/runtime/key-bag.d.ts +0 -85
  353. package/runtime/key-bag.d.ts.map +0 -1
  354. package/runtime/key-bag.js +0 -415
  355. package/runtime/key-bag.js.map +0 -1
  356. package/runtime/keyed-crypto.d.ts +0 -19
  357. package/runtime/keyed-crypto.d.ts.map +0 -1
  358. package/runtime/keyed-crypto.js +0 -192
  359. package/runtime/keyed-crypto.js.map +0 -1
  360. package/runtime/memory-sys-container.d.ts +0 -2
  361. package/runtime/memory-sys-container.d.ts.map +0 -1
  362. package/runtime/memory-sys-container.js +0 -2
  363. package/runtime/memory-sys-container.js.map +0 -1
  364. package/runtime/meta-key-hack.d.ts +0 -42
  365. package/runtime/meta-key-hack.d.ts.map +0 -1
  366. package/runtime/meta-key-hack.js +0 -201
  367. package/runtime/meta-key-hack.js.map +0 -1
  368. package/runtime/sts-service/index.d.ts +0 -40
  369. package/runtime/sts-service/index.d.ts.map +0 -1
  370. package/runtime/sts-service/index.js +0 -102
  371. package/runtime/sts-service/index.js.map +0 -1
  372. package/runtime/sys-container.d.ts +0 -2
  373. package/runtime/sys-container.d.ts.map +0 -1
  374. package/runtime/sys-container.js +0 -2
  375. package/runtime/sys-container.js.map +0 -1
  376. package/runtime/wait-pr-multiformats/block.d.ts +0 -47
  377. package/runtime/wait-pr-multiformats/block.d.ts.map +0 -1
  378. package/runtime/wait-pr-multiformats/block.js +0 -64
  379. package/runtime/wait-pr-multiformats/block.js.map +0 -1
  380. package/runtime/wait-pr-multiformats/codec-interface.d.ts +0 -29
  381. package/runtime/wait-pr-multiformats/codec-interface.d.ts.map +0 -1
  382. package/runtime/wait-pr-multiformats/codec-interface.js +0 -2
  383. package/runtime/wait-pr-multiformats/codec-interface.js.map +0 -1
  384. package/runtime/wait-pr-multiformats/index.d.ts +0 -3
  385. package/runtime/wait-pr-multiformats/index.d.ts.map +0 -1
  386. package/runtime/wait-pr-multiformats/index.js +0 -3
  387. package/runtime/wait-pr-multiformats/index.js.map +0 -1
  388. package/types.d.ts +0 -427
  389. package/types.d.ts.map +0 -1
  390. package/types.js +0 -54
  391. package/types.js.map +0 -1
  392. package/use-fireproof/index.d.ts +0 -3
  393. package/use-fireproof/index.d.ts.map +0 -1
  394. package/use-fireproof/index.js +0 -3
  395. package/use-fireproof/index.js.map +0 -1
  396. package/utils.d.ts +0 -36
  397. package/utils.d.ts.map +0 -1
  398. package/utils.js +0 -379
  399. package/utils.js.map +0 -1
  400. package/version.d.ts +0 -2
  401. package/version.d.ts.map +0 -1
  402. package/version.js +0 -4
  403. package/version.js.map +0 -1
  404. package/write-queue.d.ts +0 -9
  405. package/write-queue.d.ts.map +0 -1
  406. package/write-queue.js +0 -70
  407. package/write-queue.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"inputs":{"src/react/utils.ts":{"bytes":156,"imports":[],"format":"esm"},"src/react/use-document.ts":{"bytes":4209,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/react/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/react/use-live-query.ts":{"bytes":1760,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-all-docs.ts":{"bytes":934,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-changes.ts":{"bytes":974,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-fireproof.ts":{"bytes":2247,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/use-document.ts","kind":"import-statement","original":"./use-document.js"},{"path":"src/react/use-live-query.ts","kind":"import-statement","original":"./use-live-query.js"},{"path":"src/react/use-all-docs.ts","kind":"import-statement","original":"./use-all-docs.js"},{"path":"src/react/use-changes.ts","kind":"import-statement","original":"./use-changes.js"}],"format":"esm"},"src/react/types.ts":{"bytes":2407,"imports":[],"format":"esm"},"src/react/img-file.ts":{"bytes":2248,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/index.ts":{"bytes":124,"imports":[{"path":"src/react/use-fireproof.ts","kind":"import-statement","original":"./use-fireproof.js"},{"path":"src/react/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/react/img-file.ts","kind":"import-statement","original":"./img-file.js"}],"format":"esm"}},"outputs":{"dist/fireproof-core/react/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":19592},"dist/fireproof-core/react/index.cjs":{"imports":[{"path":"@fireproof/core","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/react/index.ts","inputs":{"src/react/index.ts":{"bytesInOutput":197},"src/react/use-fireproof.ts":{"bytesInOutput":502},"src/react/use-document.ts":{"bytesInOutput":3579},"src/react/utils.ts":{"bytesInOutput":107},"src/react/use-live-query.ts":{"bytesInOutput":1129},"src/react/use-all-docs.ts":{"bytesInOutput":657},"src/react/use-changes.ts":{"bytesInOutput":679},"src/react/img-file.ts":{"bytesInOutput":1499}},"bytes":10030}}}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/react/utils.ts":{"bytes":156,"imports":[],"format":"esm"},"src/react/use-document.ts":{"bytes":4209,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/react/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/react/use-live-query.ts":{"bytes":1760,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-all-docs.ts":{"bytes":934,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-changes.ts":{"bytes":974,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-fireproof.ts":{"bytes":2247,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/use-document.ts","kind":"import-statement","original":"./use-document.js"},{"path":"src/react/use-live-query.ts","kind":"import-statement","original":"./use-live-query.js"},{"path":"src/react/use-all-docs.ts","kind":"import-statement","original":"./use-all-docs.js"},{"path":"src/react/use-changes.ts","kind":"import-statement","original":"./use-changes.js"}],"format":"esm"},"src/react/types.ts":{"bytes":2407,"imports":[],"format":"esm"},"src/react/img-file.ts":{"bytes":2248,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/index.ts":{"bytes":124,"imports":[{"path":"src/react/use-fireproof.ts","kind":"import-statement","original":"./use-fireproof.js"},{"path":"src/react/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/react/img-file.ts","kind":"import-statement","original":"./img-file.js"}],"format":"esm"}},"outputs":{"dist/fireproof-core/react/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":19622},"dist/fireproof-core/react/index.js":{"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["FireproofCtx","ImgFile","useFireproof"],"entryPoint":"src/react/index.ts","inputs":{"src/react/use-fireproof.ts":{"bytesInOutput":484},"src/react/use-document.ts":{"bytesInOutput":3383},"src/react/utils.ts":{"bytesInOutput":107},"src/react/use-live-query.ts":{"bytesInOutput":1123},"src/react/use-all-docs.ts":{"bytesInOutput":669},"src/react/use-changes.ts":{"bytesInOutput":691},"src/react/index.ts":{"bytesInOutput":0},"src/react/img-file.ts":{"bytesInOutput":1476}},"bytes":8248}}}
@@ -2,7 +2,7 @@ import * as codec from "@ipld/dag-cbor";
2
2
  import { sha256 as hasher } from "multiformats/hashes/sha2";
3
3
  import { BlockView } from "multiformats";
4
4
  import { CID } from "multiformats/cid";
5
- import { MemoryBlockstore } from "@fireproof/vendor/@web3-storage/pail/block";
5
+ import { MemoryBlockstore } from "@web3-storage/pail/block";
6
6
  import { CRDTMeta, CarTransaction, IndexTransactionMeta, SuperThis, bs, ensureSuperThis, rt } from "@fireproof/core";
7
7
  import { simpleBlockOpts } from "../helpers.js";
8
8
 
@@ -19,8 +19,7 @@ import { mockLoader, noopUrl } from "../helpers.js";
19
19
  describe("CarStore", function () {
20
20
  let store: bs.CarStore;
21
21
  const sthis = ensureSuperThis();
22
-
23
- let loader: bs.Loadable;
22
+ const loader = mockLoader(sthis);
24
23
 
25
24
  afterEach(async () => {
26
25
  await store.close();
@@ -28,7 +27,6 @@ describe("CarStore", function () {
28
27
  });
29
28
 
30
29
  beforeEach(async () => {
31
- loader = mockLoader(sthis);
32
30
  await sthis.start();
33
31
  const at = await bs.createAttachedStores(noopUrl("test"), loader);
34
32
  store = at.stores.car;
@@ -53,9 +51,9 @@ describe("CarStore", function () {
53
51
  describe("CarStore with a saved car", function () {
54
52
  let store: bs.CarStore;
55
53
  let car: bs.AnyBlock;
56
- let loader: bs.Loadable;
57
54
 
58
55
  const sthis = ensureSuperThis();
56
+ const loader = mockLoader(sthis);
59
57
 
60
58
  afterEach(async () => {
61
59
  await store.close();
@@ -63,7 +61,6 @@ describe("CarStore with a saved car", function () {
63
61
  });
64
62
 
65
63
  beforeEach(async () => {
66
- loader = mockLoader(sthis);
67
64
  await sthis.start();
68
65
 
69
66
  const at = await bs.createAttachedStores(noopUrl("test2"), loader);
@@ -98,7 +95,7 @@ describe("CarStore with a saved car", function () {
98
95
  describe("MetaStore", function () {
99
96
  let store: bs.MetaStore;
100
97
  const sthis = ensureSuperThis();
101
- let loader: bs.Loadable;
98
+ const loader = mockLoader(sthis);
102
99
 
103
100
  afterEach(async () => {
104
101
  await store.close();
@@ -106,7 +103,6 @@ describe("MetaStore", function () {
106
103
  });
107
104
 
108
105
  beforeEach(async () => {
109
- loader = mockLoader(sthis);
110
106
  await sthis.start();
111
107
  const at = await bs.createAttachedStores(noopUrl("test"), loader);
112
108
  store = at.stores.meta;
@@ -139,7 +135,7 @@ describe("MetaStore with a saved header", function () {
139
135
  let store: bs.MetaStore;
140
136
  let cid: CID;
141
137
  const sthis = ensureSuperThis();
142
- let loader: bs.Loadable;
138
+ const loader = mockLoader(sthis);
143
139
 
144
140
  afterEach(async () => {
145
141
  await store.close();
@@ -147,7 +143,6 @@ describe("MetaStore with a saved header", function () {
147
143
  });
148
144
 
149
145
  beforeEach(async () => {
150
- loader = mockLoader(sthis);
151
146
  await sthis.start();
152
147
  const at = await bs.createAttachedStores(noopUrl("test3-meta"), loader);
153
148
  store = at.stores.meta;
@@ -176,7 +176,7 @@ describe("activate store", () => {
176
176
 
177
177
  it("activate by store", async () => {
178
178
  expect(attach.activate(secondAttached.stores).active.car.url().toString()).toBe(
179
- "memory://second?localName=first&name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
179
+ "memory://second?name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
180
180
  );
181
181
  expect(attach.activate(firstAttached.stores).local().active.car.url().toString()).toBe(
182
182
  "memory://first?name=first&store=car&storekey=%40first-data%40&suffix=.car&version=v0.19-memory",
@@ -188,10 +188,10 @@ describe("activate store", () => {
188
188
 
189
189
  it("activate by store", async () => {
190
190
  expect(attach.activate("memory://second").active.car.url().toString()).toBe(
191
- "memory://second?localName=first&name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
191
+ "memory://second?name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
192
192
  );
193
193
  expect(attach.activate("memory://second").remotes()[0].active.car.url().toString()).toEqual(
194
- "memory://second?localName=first&name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
194
+ "memory://second?name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
195
195
  );
196
196
  expect(attach.activate("memory://first?store=meta").active.car.url().toString()).toBe(
197
197
  "memory://first?name=first&store=car&storekey=%40first-data%40&suffix=.car&version=v0.19-memory",
@@ -0,0 +1,91 @@
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
+ });
@@ -0,0 +1,132 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Fireproof Uploads</title>
7
+ <script src="./fireproof.iife.js?cache=94"></script>
8
+ <script type="text/javascript">
9
+ function testApp() {
10
+ const { fireproof, connect } = Fireproof;
11
+ let dbName;
12
+ let db;
13
+ let cx;
14
+
15
+ let dbUnsubscribe = false;
16
+
17
+ function setupDb(name) {
18
+ if (dbUnsubscribe) {
19
+ dbUnsubscribe();
20
+ }
21
+ dbName = name;
22
+ db = fireproof(name);
23
+ window.db = db;
24
+
25
+ cx = db.connect("jchris+files-30@fireproof.storage", "todo-test");
26
+ window.cx = cx;
27
+
28
+ dbUnsubscribe = db.subscribe(redraw);
29
+ return db;
30
+ }
31
+
32
+ let doing;
33
+ const redraw = async () => {
34
+ if (doing) {
35
+ return doing;
36
+ }
37
+ doing = draw().finally(() => (doing = null));
38
+ return doing;
39
+ };
40
+
41
+ const draw = async () => {
42
+ const result = await db.query("_id", { descending: true, limit: 10 });
43
+ document.querySelector("ul").innerHTML = "";
44
+ for (const row of result.rows) {
45
+ const doc = row.doc;
46
+ if (doc._publicFiles) {
47
+ const li = document.querySelector("ul").appendChild(document.createElement("li"));
48
+ li.appendChild(document.createElement("span")).innerText = row.key;
49
+ li.appendChild(document.createElement("br"));
50
+ for (const file of Object.keys(doc._publicFiles)) {
51
+ (async () => {
52
+ const meta = doc._publicFiles[file];
53
+ if (meta.file && /image/.test(meta.type)) {
54
+ const src = URL.createObjectURL(await meta.file());
55
+ const img = document.createElement("img");
56
+ img.src = src;
57
+ img.height = 100;
58
+ img.onload = () => {
59
+ URL.revokeObjectURL(img.src);
60
+ };
61
+
62
+ console.log("url", meta.url);
63
+ li.appendChild(img);
64
+ }
65
+ })();
66
+ }
67
+ }
68
+ }
69
+ };
70
+
71
+ async function changeList(e) {
72
+ e.preventDefault();
73
+ const input = document.querySelector("#list");
74
+ dbName = input.value;
75
+ history.pushState(null, "", location.pathname + "?db=" + encodeURIComponent(dbName));
76
+ setupDb(dbName);
77
+
78
+ redraw();
79
+ }
80
+ window.changeList = changeList;
81
+
82
+ async function openDashboard(e) {
83
+ db.openDashboard();
84
+ }
85
+ window.openDashboard = openDashboard;
86
+
87
+ function handleFiles() {
88
+ const fileList = this.files;
89
+ const doc = {
90
+ _publicFiles: {},
91
+ };
92
+ for (const file of fileList) {
93
+ doc._publicFiles[file.name] = file;
94
+ }
95
+ const ok = db.put(doc);
96
+ }
97
+
98
+ async function initialize() {
99
+ ps = new URLSearchParams(location.search);
100
+ const listQ = ps.get("db");
101
+ setupDb(listQ || "hello-world");
102
+ const input = document.querySelector("#list");
103
+ input.value = dbName;
104
+
105
+ const inputElement = document.getElementById("files-up");
106
+ inputElement.addEventListener("change", handleFiles, false);
107
+ db.subscribe(draw);
108
+ draw();
109
+ }
110
+
111
+ window.onload = initialize;
112
+ }
113
+ testApp();
114
+ </script>
115
+ </head>
116
+
117
+ <body>
118
+ List:
119
+ <input title="gallery" type="text" name="list" id="list" />
120
+ <button onclick="changeList(event)">Change Gallery</button>
121
+ <button onclick="openDashboard(event)">🔥 Import to Dashboard</button>
122
+ <h3>Files</h3>
123
+ <p>
124
+ Data is stored locally and encrypted before upload to S3. This is a demo so the encryption key is not managed securely. Read
125
+ more about <a href="https://use-fireproof.com/docs/ledger-api/replication">Fireproof replication options.</a> You can also see
126
+ a demo without images but <a href="https://fireproof.storage/s3up-test.html">with compaction and refresh buttons.</a>
127
+ </p>
128
+ <label for="files-up"><strong>Drop files:</strong></label>
129
+ <input accept="image/*" title="save to Fireproof" type="file" id="files-up" multiple />
130
+ <ul></ul>
131
+ </body>
132
+ </html>
@@ -0,0 +1,42 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Fireproof Test</title>
7
+ <script src="./fireproof.iife.js"></script>
8
+ <script type="text/javascript">
9
+ function testApp() {
10
+ const db = Fireproof.fireproof("iife-test", { persistIndexes: true });
11
+
12
+ const draw = async () => {
13
+ const result = await db.query("sort", { includeDocs: true });
14
+ document.querySelector("ul").innerHTML = "";
15
+ for (const row of result.rows) {
16
+ document.querySelector("ul").appendChild(document.createElement("li")).innerText = JSON.stringify(row.doc);
17
+ }
18
+ };
19
+
20
+ async function initialize() {
21
+ console.log("initialize");
22
+ db.subscribe(draw);
23
+ draw();
24
+ }
25
+
26
+ async function onButtonClick(e) {
27
+ e.preventDefault();
28
+ console.log("put");
29
+ const ok = await db.put({ sort: Math.random(), test: "test" });
30
+ console.log("ok", ok.id);
31
+ }
32
+ window.onButtonClick = onButtonClick;
33
+ window.onload = initialize;
34
+ }
35
+ testApp();
36
+ </script>
37
+ </head>
38
+ <body>
39
+ <button onclick="onButtonClick(event)">Click to Run</button>
40
+ <ul></ul>
41
+ </body>
42
+ </html>
@@ -0,0 +1,232 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Fireproof Test</title>
7
+ <script src="./fireproof.iife.js"></script>
8
+ <script src="./connect.iife.js"></script>
9
+ <script type="text/javascript">
10
+ function todoApp() {
11
+ const actorTag = Math.random().toString(36).substring(2, 7);
12
+ const { fireproof, index } = Fireproof;
13
+ const { connect } = FireproofConnect;
14
+
15
+ // console.log('connect', connect)
16
+
17
+ let dbName;
18
+ let db;
19
+ let cx;
20
+
21
+ let dbUnsubscribe = false;
22
+
23
+ function setupDb(name, newDb, newConn) {
24
+ const input = document.querySelector("#todo");
25
+ input.disabled = true;
26
+
27
+ if (dbUnsubscribe) {
28
+ dbUnsubscribe();
29
+ }
30
+ if (newDb) {
31
+ // console.log('new db', newDb, newConn)
32
+ name = newDb.name;
33
+ dbName = newDb.name;
34
+ db = newDb;
35
+ cx = newConn;
36
+ const input = document.querySelector("#list");
37
+ input.value = dbName;
38
+ } else {
39
+ dbName = name;
40
+ db = fireproof(name, { autoCompact: 100 });
41
+ cx = connect.awsFree(db);
42
+ cx.ready.then(async () => {
43
+ const span = document.querySelector("#cxInfo");
44
+ span.innerText = `📡`;
45
+ span.addEventListener("click", () => {
46
+ cx.refresh();
47
+ });
48
+ });
49
+ }
50
+
51
+ window.db = db;
52
+ window.cx = cx;
53
+
54
+ db.changes([], { limit: 1 }).then((changes) => {
55
+ if (changes.clock.length > 0) {
56
+ input.disabled = false;
57
+ } else {
58
+ cx.ready.then(async () => {
59
+ input.disabled = false;
60
+ });
61
+ }
62
+ });
63
+
64
+ dbUnsubscribe = db.subscribe(redraw);
65
+ return db;
66
+ }
67
+
68
+ let doing;
69
+ const redraw = async () => {
70
+ if (doing) {
71
+ return doing;
72
+ }
73
+ doing = doRedraw().finally(() => (doing = null));
74
+ return doing;
75
+ };
76
+ window.redraw = redraw;
77
+
78
+ let compactor = "🚗";
79
+ function drawInfo() {
80
+ document.querySelector("#carLog").innerText =
81
+ ` ⏰ ${db._crdt.clock.head.length} ${compactor} ${cx.loader.carLog.length} 📩 ${cx.loader.remoteWAL.walState.operations.length}`;
82
+ }
83
+ const doRedraw = async () => {
84
+ drawInfo();
85
+ const result = await db.allDocs();
86
+ drawInfo();
87
+ document.querySelector("ul").innerHTML = "";
88
+ for (const row of result.rows) {
89
+ // const doc = await db.get(row.id);
90
+ const doc = row.value;
91
+ const checkbox = document.createElement("input");
92
+ checkbox.setAttribute("type", "checkbox");
93
+ if (doc.completed) {
94
+ checkbox.setAttribute("checked", true);
95
+ }
96
+ checkbox.onchange = async (e) => {
97
+ e.target.indeterminate = true;
98
+ const clicks = doc.clicks || 0;
99
+ doc.clicks = clicks + 1;
100
+ doc.completed = !doc.completed;
101
+ await db.put(doc);
102
+ };
103
+ const textSpan = document.createElement("span");
104
+ textSpan.innerText = `${doc.actor}:${doc.clicks || 0} ${doc.task}`;
105
+ const li = document.createElement("li");
106
+ li.appendChild(checkbox);
107
+ li.appendChild(textSpan);
108
+ document.querySelector("ul").appendChild(li);
109
+ }
110
+ };
111
+
112
+ async function initialize() {
113
+ ps = new URLSearchParams(location.search);
114
+ const listQ = ps.get("list");
115
+ setupDb(listQ || "my-list");
116
+ const input = document.querySelector("#list");
117
+ input.value = dbName;
118
+ redraw();
119
+ }
120
+
121
+ async function openDashboard(e) {
122
+ db.openDashboard();
123
+ }
124
+ window.openDashboard = openDashboard;
125
+
126
+ async function changeList(e) {
127
+ e.preventDefault();
128
+ const input = document.querySelector("#list");
129
+ dbName = input.value;
130
+ history.pushState(null, "", location.pathname + "?list=" + encodeURIComponent(dbName));
131
+ setupDb(dbName);
132
+ redraw();
133
+ }
134
+ window.changeList = changeList;
135
+
136
+ async function createTodoClick(e) {
137
+ e.preventDefault();
138
+ const input = document.querySelector("#todo");
139
+ input.disabled = true;
140
+ const ok = await db.put({
141
+ actor: actorTag,
142
+ created: Date.now(),
143
+ task: input.value,
144
+ completed: false,
145
+ });
146
+ input.disabled = false;
147
+ input.value = "";
148
+ }
149
+ window.createTodoClick = createTodoClick;
150
+
151
+ let worker;
152
+ async function startWorker() {
153
+ const button = document.querySelector("#robot");
154
+ button.innerText = "🦾";
155
+ const dcs = await db.allDocs();
156
+ console.log("start worker", dcs.rows.length);
157
+ // worker = setInterval(async () => {
158
+ // dcs.rows.map((r) => db.put({ ...r.value, clicks: (r.value.clicks || 0) + 1, completed: Math.random() > 0.5 }))
159
+ // }, 5000)
160
+ goWorker(dcs);
161
+ }
162
+ const goWorker = (dcs) => {
163
+ const timeout = 10 + db._crdt.clock.head.length * (Math.floor(Math.random() * 2000) + 2000);
164
+ // console.log('go worker', timeout)
165
+ worker = setTimeout(async () => {
166
+ await Promise.all(
167
+ dcs.rows.slice(0, 5).map((r) => {
168
+ r.value.clicks = r.value.clicks || 0;
169
+ r.value.clicks += 1;
170
+ r.value.completed = Math.random() > 0.5;
171
+ db.put({ ...r.value });
172
+ }),
173
+ );
174
+ goWorker(dcs);
175
+ }, timeout);
176
+ };
177
+
178
+ const stopWorker = () => {
179
+ const button = document.querySelector("#robot");
180
+ button.innerText = "🤖";
181
+ console.log("stop worker");
182
+ clearTimeout(worker);
183
+ };
184
+ const toggleWorker = (e) => {
185
+ e.preventDefault();
186
+ if (worker) {
187
+ stopWorker();
188
+ } else {
189
+ startWorker(e);
190
+ }
191
+ };
192
+ window.toggleWorker = toggleWorker;
193
+
194
+ async function doCompact(e) {
195
+ e.preventDefault();
196
+ compactor = "🚕";
197
+ drawInfo();
198
+ await db.compact();
199
+ drawInfo();
200
+ compactor = "🚗";
201
+ }
202
+ window.doCompact = doCompact;
203
+
204
+ window.onload = initialize;
205
+ window.db = db;
206
+ }
207
+
208
+ todoApp();
209
+ </script>
210
+ </head>
211
+
212
+ <body>
213
+ <h1><a href="https://use-fireproof.com/">Fireproof</a> Test App</h1>
214
+ Ledger:
215
+ <input title="Change list" type="text" name="list" id="list" />
216
+ <button onclick="changeList(event)">Switch</button>
217
+
218
+ <p>
219
+ This version of the Fireprof test app uses AWS S3 as the storage backend. Click the 📡 to refresh the latest data from other
220
+ clients.
221
+ </p>
222
+
223
+ <button id="robot" onclick="toggleWorker(event)">🤖</button>
224
+ <span id="carLog" onclick="doCompact(event)"></span>
225
+ <span id="cxInfo"></span>
226
+
227
+ <h3>Todos</h3>
228
+ <input title="Create a todo" type="text" name="todo" id="todo" />
229
+ <button onclick="createTodoClick(event)">Create Todo</button>
230
+ <ul></ul>
231
+ </body>
232
+ </html>