diff --git a/scripts/react-native/pnpm-lock.yaml b/scripts/react-native/pnpm-lock.yaml index 3fabc151..7e27e86f 100644 --- a/scripts/react-native/pnpm-lock.yaml +++ b/scripts/react-native/pnpm-lock.yaml @@ -78,6 +78,10 @@ importers: packages: + '@adviser/cement@0.1.20': + resolution: {integrity: sha512-6Pi0d+a4+cgE1XlBi5Ot6v6DOcKJxdGaqJ9qt4jktvlkBFtgJsvwC5saFNYjerVAdVO6eoZUEUmZlPCXlE8Lrw==} + engines: {node: '>=16'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -826,7 +830,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@fireproof/core@file:../../dist/fireproof-core/fireproof-core-0.0.0-dev.tgz': - resolution: {integrity: sha512-s56sDRX/+JWHTdrf3koAyLZdlrm9bsKcIExM/v3KfTgUOYanIb9SEvzQC3e1eQ+bMYo3ECGvFPYibE1s9aPWvQ==, tarball: file:../../dist/fireproof-core/fireproof-core-0.0.0-dev.tgz} + resolution: {integrity: sha512-V31RcEMgkJFcY9rvtQAVSSe5KQ4j41632AOv1BaX0njXXob86dPGYot1a9HchvDwbnOfVoTWq9j7KRLEOhHjrA==, tarball: file:../../dist/fireproof-core/fireproof-core-0.0.0-dev.tgz} version: 0.0.0-dev '@hapi/hoek@9.3.0': @@ -848,10 +852,18 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@ipld/dag-cbor@9.2.1': + resolution: {integrity: sha512-nyY48yE7r3dnJVlxrdaimrbloh4RokQaNRdI//btfTkcTEZbpmSrbYcBQ4VKTf8ZxXAOUJy4VsRpkJo+y9RTnA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + '@ipld/dag-json@10.2.2': resolution: {integrity: sha512-NnU8HdHKwAoGyrW3S09NMa8aZw0tImLRyR64hoafpLpDpAbA9g1+fb24JsdlugbL4sXUQVwDVA+qK4Ud8V83lA==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} + '@ipld/dag-pb@4.1.2': + resolution: {integrity: sha512-BSztO4l3C+ya9HjCaQot26Y4AVsqIKtnn6+23ubc1usucnf6yoTBme18oCCdM6gKBMxuPqju5ye3lh9WEJsdeQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + '@isaacs/ttlcache@1.4.1': resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} @@ -901,6 +913,10 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@multiformats/murmur3@2.1.8': + resolution: {integrity: sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1311,6 +1327,9 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + charwise@3.0.1: + resolution: {integrity: sha512-RcdumNsM6fJZ5HHbYunqj2bpurVRGsXour3OR+SlLEHFhG6ALm54i6Osnh+OvO7kEoSBzwExpblYFH8zKQiEPw==} + chrome-launcher@0.15.2: resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} engines: {node: '>=12.13.0'} @@ -1508,6 +1527,9 @@ packages: engines: {node: '>=4'} hasBin: true + err-code@3.0.1: + resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1638,6 +1660,9 @@ packages: resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==} engines: {node: '>=10.13.0'} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -1796,6 +1821,9 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + hamt-sharding@3.0.6: + resolution: {integrity: sha512-nZeamxfymIWLpVcAN0CRrb7uVq3hCOGj9IcL6NMA6VVCVWqj+h9Jo/SmaWuS92AEDf1thmHsM5D5c70hM3j2Tg==} + has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -1881,6 +1909,12 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + interface-blockstore@5.2.10: + resolution: {integrity: sha512-9K48hTvBCGsKVD3pF4ILgDcf+W2P/gq0oxLcsHGB6E6W6nDutYkzR+7k7bCs9REHrBEfKzcVDEKieiuNM9WRZg==} + + interface-store@5.1.8: + resolution: {integrity: sha512-7na81Uxkl0vqk0CBPO5PvyTkdaJBaezwUJGsMOz7riPOq0rJt+7W31iaopaMICWea/iykUsvNlPx/Tc+MxC3/w==} + internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -1888,6 +1922,12 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + ipfs-unixfs-exporter@13.5.0: + resolution: {integrity: sha512-s1eWXzoyhQFNEAB1p+QE3adjhW+lBdgpORmmjiCLiruHs5z7T5zsAgRVcWpM8LWYhq2flRtJHObb7Hg73J+oLQ==} + + ipfs-unixfs@11.1.4: + resolution: {integrity: sha512-RE4nyx5qgG2w7JOLj0Y0D7SfAR1ZkEdramNaBx0OSD4DlQ2Y2NORgc4FHfej3Pgy31v+QISDVP1pQJhdv3bUUg==} + is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -2050,6 +2090,35 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + it-filter@3.1.1: + resolution: {integrity: sha512-TOXmVuaSkxlLp2hXKoMTra0WMZMKVFxE3vSsbIA+PbADNCBAHhjJ/lM31vBOUTddHMO34Ku++vU8T9PLlBxQtg==} + + it-last@3.0.6: + resolution: {integrity: sha512-M4/get95O85u2vWvWQinF8SJUc/RPC5bWTveBTYXvlP2q5TF9Y+QhT3nz+CRCyS2YEc66VJkyl/da6WrJ0wKhw==} + + it-map@3.1.1: + resolution: {integrity: sha512-9bCSwKD1yN1wCOgJ9UOl+46NQtdatosPWzxxUk2NdTLwRPXLh+L7iwCC9QKsbgM60RQxT/nH8bKMqm3H/o8IHQ==} + + it-merge@3.0.5: + resolution: {integrity: sha512-2l7+mPf85pyRF5pqi0dKcA54E5Jm/2FyY5GsOaN51Ta0ipC7YZ3szuAsH8wOoB6eKY4XsU4k2X+mzPmFBMayEA==} + + it-parallel@3.0.8: + resolution: {integrity: sha512-URLhs6eG4Hdr4OdvgBBPDzOjBeSSmI+Kqex2rv/aAyYClME26RYHirLVhZsZP5M+ZP6M34iRlXk8Wlqtezuqpg==} + + it-peekable@3.0.5: + resolution: {integrity: sha512-JWQOGMt6rKiPcY30zUVMR4g6YxkpueTwHVE7CMs/aGqCf4OydM6w+7ZM3PvmO1e0TocjuR4aL8xyZWR46cTqCQ==} + + it-pipe@3.0.1: + resolution: {integrity: sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + it-pushable@3.2.3: + resolution: {integrity: sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==} + + it-stream-types@2.0.1: + resolution: {integrity: sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} @@ -2333,6 +2402,10 @@ packages: multiformats@13.1.3: resolution: {integrity: sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==} + murmurhash3js-revisited@3.0.0: + resolution: {integrity: sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==} + engines: {node: '>=8.0.0'} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -2373,6 +2446,10 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-sql-parser@3.9.4: + resolution: {integrity: sha512-U8xa/QBpNz/dc4BERBkMg//XTrBDcj0uIg5YDYPV4ChYgHPEw4JhoT5YWTxQuKBg/3C1kfkTO4MuEYw7fCYHJw==} + engines: {node: '>=8'} + node-stream-zip@1.15.0: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} @@ -2463,6 +2540,10 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + p-defer@4.0.1: + resolution: {integrity: sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==} + engines: {node: '>=12'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -2483,6 +2564,14 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-queue@8.0.1: + resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==} + engines: {node: '>=18'} + + p-timeout@6.1.2: + resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==} + engines: {node: '>=14.16'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -2569,6 +2658,13 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress-events@1.0.0: + resolution: {integrity: sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + prolly-trees@1.0.4: + resolution: {integrity: sha512-vtnxfw5wnUHbGa0IIIk9B9DRztJWZw+t9d0s0iGxY/VzEGCg2EMl8GgGU3EhSquFLWapwbGjFTL1ipbezaXR3g==} + promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -2579,6 +2675,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + protons-runtime@5.4.0: + resolution: {integrity: sha512-XfA++W/WlQOSyjUyuF5lgYBfXZUEMP01Oh1C2dSwZAlF2e/ZrMRPfWonXj6BGM+o8Xciv7w0tsRMKYwYEuQvaw==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2869,6 +2968,9 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + sparse-array@1.3.2: + resolution: {integrity: sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -3038,6 +3140,15 @@ packages: engines: {node: '>=14.17'} hasBin: true + uint8-varint@2.0.4: + resolution: {integrity: sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==} + + uint8arraylist@2.4.8: + resolution: {integrity: sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==} + + uint8arrays@5.1.0: + resolution: {integrity: sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==} + unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -3078,7 +3189,7 @@ packages: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} use-fireproof@file:../../dist/use-fireproof/use-fireproof-0.0.0-dev.tgz: - resolution: {integrity: sha512-kO6MenRiEG3iDwIYaoBl5Sf2x0QeJg4zpFvKFawLLBGDTZBBap7vD0bV992Y7Sbmu0QVR4+3HlsVgQspaJ72gA==, tarball: file:../../dist/use-fireproof/use-fireproof-0.0.0-dev.tgz} + resolution: {integrity: sha512-p46SaY8R+WaT3yc12CPQrCLJeKCrFrZf3ffBGfDskbxETVuYWhccLveUR7i56cJXZ0flQAaM4T99VwSoWmRkpg==, tarball: file:../../dist/use-fireproof/use-fireproof-0.0.0-dev.tgz} version: 0.0.0-dev peerDependencies: react: '>=18.0.0' @@ -3093,6 +3204,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuidv7@1.0.1: + resolution: {integrity: sha512-2noB909GbI352dKfASOY6VHHl59KvevZ1FF8gCAXCwDyrt2kkZhuFbczF9udqTfeejiRYEmO4wzUZ0WhVP+IUA==} + hasBin: true + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -3220,6 +3335,8 @@ packages: snapshots: + '@adviser/cement@0.1.20': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -4191,7 +4308,13 @@ snapshots: '@eslint/js@8.57.0': {} - '@fireproof/core@file:../../dist/fireproof-core/fireproof-core-0.0.0-dev.tgz': {} + '@fireproof/core@file:../../dist/fireproof-core/fireproof-core-0.0.0-dev.tgz': + dependencies: + '@adviser/cement': 0.1.20 + charwise: 3.0.1 + ipfs-unixfs-exporter: 13.5.0 + prolly-trees: 1.0.4 + uuidv7: 1.0.1 '@hapi/hoek@9.3.0': {} @@ -4211,11 +4334,20 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@ipld/dag-cbor@9.2.1': + dependencies: + cborg: 4.2.2 + multiformats: 13.1.3 + '@ipld/dag-json@10.2.2': dependencies: cborg: 4.2.2 multiformats: 13.1.3 + '@ipld/dag-pb@4.1.2': + dependencies: + multiformats: 13.1.3 + '@isaacs/ttlcache@1.4.1': {} '@jest/create-cache-key-function@29.7.0': @@ -4281,6 +4413,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@multiformats/murmur3@2.1.8': + dependencies: + multiformats: 13.1.3 + murmurhash3js-revisited: 3.0.0 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4940,6 +5077,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + charwise@3.0.1: {} + chrome-launcher@0.15.2: dependencies: '@types/node': 20.14.10 @@ -5148,6 +5287,8 @@ snapshots: envinfo@7.13.0: {} + err-code@3.0.1: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -5381,6 +5522,8 @@ snapshots: event-target-shim@6.0.2: {} + eventemitter3@5.0.1: {} + events@3.3.0: {} execa@5.1.1: @@ -5559,6 +5702,11 @@ snapshots: graphemer@1.4.0: {} + hamt-sharding@3.0.6: + dependencies: + sparse-array: 1.3.2 + uint8arrays: 5.1.0 + has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -5634,6 +5782,13 @@ snapshots: inherits@2.0.4: {} + interface-blockstore@5.2.10: + dependencies: + interface-store: 5.1.8 + multiformats: 13.1.3 + + interface-store@5.1.8: {} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 @@ -5644,6 +5799,32 @@ snapshots: dependencies: loose-envify: 1.4.0 + ipfs-unixfs-exporter@13.5.0: + dependencies: + '@ipld/dag-cbor': 9.2.1 + '@ipld/dag-json': 10.2.2 + '@ipld/dag-pb': 4.1.2 + '@multiformats/murmur3': 2.1.8 + err-code: 3.0.1 + hamt-sharding: 3.0.6 + interface-blockstore: 5.2.10 + ipfs-unixfs: 11.1.4 + it-filter: 3.1.1 + it-last: 3.0.6 + it-map: 3.1.1 + it-parallel: 3.0.8 + it-pipe: 3.0.1 + it-pushable: 3.2.3 + multiformats: 13.1.3 + p-queue: 8.0.1 + progress-events: 1.0.0 + + ipfs-unixfs@11.1.4: + dependencies: + err-code: 3.0.1 + protons-runtime: 5.4.0 + uint8arraylist: 2.4.8 + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 @@ -5775,6 +5956,38 @@ snapshots: isobject@3.0.1: {} + it-filter@3.1.1: + dependencies: + it-peekable: 3.0.5 + + it-last@3.0.6: {} + + it-map@3.1.1: + dependencies: + it-peekable: 3.0.5 + + it-merge@3.0.5: + dependencies: + it-pushable: 3.2.3 + + it-parallel@3.0.8: + dependencies: + p-defer: 4.0.1 + + it-peekable@3.0.5: {} + + it-pipe@3.0.1: + dependencies: + it-merge: 3.0.5 + it-pushable: 3.2.3 + it-stream-types: 2.0.1 + + it-pushable@3.2.3: + dependencies: + p-defer: 4.0.1 + + it-stream-types@2.0.1: {} + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 @@ -6193,6 +6406,8 @@ snapshots: multiformats@13.1.3: {} + murmurhash3js-revisited@3.0.0: {} + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -6217,6 +6432,10 @@ snapshots: node-releases@2.0.14: {} + node-sql-parser@3.9.4: + dependencies: + big-integer: 1.6.52 + node-stream-zip@1.15.0: {} normalize-path@3.0.0: {} @@ -6320,6 +6539,8 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + p-defer@4.0.1: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -6340,6 +6561,13 @@ snapshots: dependencies: p-limit: 3.1.0 + p-queue@8.0.1: + dependencies: + eventemitter3: 5.0.1 + p-timeout: 6.1.2 + + p-timeout@6.1.2: {} + p-try@2.2.0: {} parent-module@1.0.1: @@ -6404,6 +6632,13 @@ snapshots: process@0.11.10: {} + progress-events@1.0.0: {} + + prolly-trees@1.0.4: + dependencies: + bl: 4.1.0 + node-sql-parser: 3.9.4 + promise@8.3.0: dependencies: asap: 2.0.6 @@ -6419,6 +6654,12 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + protons-runtime@5.4.0: + dependencies: + uint8-varint: 2.0.4 + uint8arraylist: 2.4.8 + uint8arrays: 5.1.0 + punycode@2.3.1: {} querystring@0.2.1: {} @@ -6789,6 +7030,8 @@ snapshots: source-map@0.7.4: {} + sparse-array@1.3.2: {} + sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -6967,6 +7210,19 @@ snapshots: typescript@5.5.3: {} + uint8-varint@2.0.4: + dependencies: + uint8arraylist: 2.4.8 + uint8arrays: 5.1.0 + + uint8arraylist@2.4.8: + dependencies: + uint8arrays: 5.1.0 + + uint8arrays@5.1.0: + dependencies: + multiformats: 13.1.3 + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -7017,6 +7273,8 @@ snapshots: utils-merge@1.0.1: {} + uuidv7@1.0.1: {} + vary@1.1.2: {} vlq@1.0.1: {} diff --git a/scripts/react-native/src/store-native.ts b/scripts/react-native/src/store-native.ts index bb0f8a40..f505beb7 100644 --- a/scripts/react-native/src/store-native.ts +++ b/scripts/react-native/src/store-native.ts @@ -1,136 +1,157 @@ -import type { - AnyBlock, - AnyLink, - DbMeta, - Loadable, - Loader -} from '@fireproof/core'; import { - DataStore as DataStoreBase, - MetaStore as MetaStoreBase, - RemoteWAL as RemoteWALBase, - WALState + bs, + ensureLogger, + Falsy, + LoggerOpts } from '@fireproof/core'; import { format, parse, ToString } from '@ipld/dag-json'; import { MMKV } from 'react-native-mmkv'; -export const makeDataStore = (name: string) => new DataStore(name); -export const makeMetaStore = (loader: Loader) => new MetaStore(loader.name); -export const makeRemoteWAL = (loader: Loadable) => new RemoteWAL(loader); - -export class DataStore extends DataStoreBase { - tag: string = 'car-native-mmkv'; - store: MMKV | null = null; +const buildURL = (type: string, name: string, opts: bs.StoreOpts): URL => { + const url = new URL(`mmkv+fp://${name}`); + url.searchParams.set("type", type); + if (opts.isIndex) { + url.searchParams.set("index", String(opts.isIndex)); + } + return url; +}; + +export const ReactNativeStoreFactory = (sopts: bs.StoreOpts & LoggerOpts = {}): bs.StoreFactory => ({ + makeDataStore: async (loader: bs.Loadable): Promise => { + return new DataStore(loader.name, buildURL("data", loader.name, sopts), sopts); + }, + makeMetaStore: async (loader: bs.Loadable): Promise => { + return new MetaStore(loader.name, buildURL("meta", loader.name, sopts), sopts); + }, + makeRemoteWAL: async (loader: bs.Loadable): Promise => { + return new RemoteWAL(loader, buildURL("wal", loader.name, sopts), sopts); + }, +}); + +class DataStore extends bs.DataStore { + store: MMKV; + + constructor(name: string, url: URL, logger: LoggerOpts) { + super(name, url, ensureLogger(logger, "ReactNativeDataStore", { name, url })); + } - async _withDB(dbWorkFun: (db: MMKV) => Promise) { + async start(): Promise { if (!this.store) { - const dbName = `fp.${this.STORAGE_VERSION}.${this.name}`; this.store = new MMKV({ - id: dbName, + id: `fp.${this.STORAGE_VERSION}.${this.name}`, }); } - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return await dbWorkFun(this.store); } - async load(cid: AnyLink): Promise { - return (await this._withDB(async (db: MMKV) => { - const bytes = db.getBuffer(cid.toString()); - if (!bytes) throw new Error(`missing db block ${cid.toString()}`); - return { cid, bytes }; - })) as AnyBlock; + async load(cid: bs.AnyLink): Promise { + const bytes = this.store.getBuffer(cid.toString()); + if (!bytes) throw new Error(`missing db block ${cid.toString()}`); + return { cid, bytes }; + } + + async save(car: bs.AnyBlock): Promise { + this.store.set(car.cid.toString(), car.bytes); + } + + async remove(cid: bs.AnyLink): Promise { + this.store.delete(cid.toString()); } - async save(car: AnyBlock): Promise { - return (await this._withDB(async (db: MMKV) => { - db.set(car.cid.toString(), car.bytes); - })) as void; + async close(): Promise { + // no-op } - async remove(cid: AnyLink): Promise { - return (await this._withDB(async (db: MMKV) => { - db.delete(cid.toString()); - })) as void; + async destroy(): Promise { + this.store.clearAll(); } } -export class RemoteWAL extends RemoteWALBase { - tag: string = 'wal-native-mmkv'; - store: MMKV | null = null; +export class RemoteWAL extends bs.RemoteWAL { + store: MMKV; - headerKey(branch: string) { - // remove 'public' on next storage version bump - return `fp.${this.STORAGE_VERSION}.wal.${this.loader.name}.${branch}`; + constructor(loader: bs.Loadable, url: URL, logger: LoggerOpts) { + super(loader, url, ensureLogger(logger, "ReactNativeRemoteWAL", { name: loader.name, url })); } - async _withDB(dbWorkFun: (arg0: MMKV) => Promise) { + async start(): Promise { if (!this.store) { - const dbName = `fp.${this.STORAGE_VERSION}.wal`; this.store = new MMKV({ - id: dbName, + id: `fp.wal`, }); } - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return await dbWorkFun(this.store); } // eslint-disable-next-line @typescript-eslint/require-await - async load(branch = 'main'): Promise { - return (await this._withDB(async (db: MMKV) => { - const doc = db.getString(this.headerKey(branch)); - if (!doc) return null; - return parse(doc); - })) as WALState | null; + async _load(branch = 'main'): Promise { + const doc = this.store.getString(this.headerKey(branch)); + if (!doc) return null; + return parse(doc); } // eslint-disable-next-line @typescript-eslint/require-await - async save(state: WALState, branch = 'main'): Promise { - return (await this._withDB(async (db: MMKV) => { - const encoded: ToString = format(state); - db.set(this.headerKey(branch), encoded); - })) as void; + async _save(state: bs.WALState, branch = 'main'): Promise { + const encoded: ToString = format(state); + this.store.set(this.headerKey(branch), encoded); } -} -export class MetaStore extends MetaStoreBase { - tag: string = 'header-native-mmkv'; - store: MMKV | null = null; + async _close(): Promise { + // no-op + } + + async _destroy(): Promise { + this.store.clearAll(); + } headerKey(branch: string) { - return `fp.${this.STORAGE_VERSION}.meta.${this.name}.${branch}`; + // remove 'public' on next storage version bump + return `fp.wal.${this.loader.name}.${branch}`; } - async _withDB(dbWorkFun: (arg0: MMKV) => Promise) { +} + +export class MetaStore extends bs.MetaStore { + store: MMKV; + + constructor(name: string, url: URL, logger: LoggerOpts) { + super(name, url, ensureLogger(logger, "ReactNativeMetaStore", { name, url })); + } + + async start(): Promise { if (!this.store) { - const dbName = `fp.${this.STORAGE_VERSION}.meta`; this.store = new MMKV({ - id: dbName, + id: `fp.${this.STORAGE_VERSION}.meta`, }); } - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return await dbWorkFun(this.store); } // eslint-disable-next-line @typescript-eslint/require-await - async load(branch: string = 'main'): Promise { - return await this._withDB(async (db: MMKV) => { - const doc = db.getString(this.headerKey(branch)); - if (!doc) return null; - // TODO: react native wrt below? - // browser assumes a single writer process - // to support concurrent updates to the same database across multiple tabs - // we need to implement the same kind of mvcc.crdt solution as in store-fs and connect-s3 - return [this.parseHeader(doc)]; - }); + async load(branch: string = 'main'): Promise { + const doc = this.store.getString(this.headerKey(branch)); + if (!doc) return null; + // TODO: react native wrt below? + // browser assumes a single writer process + // to support concurrent updates to the same database across multiple tabs + // we need to implement the same kind of mvcc.crdt solution as in store-fs and connect-s3 + return [this.parseHeader(doc)]; } // eslint-disable-next-line @typescript-eslint/require-await - async save(meta: DbMeta, branch: string = 'main') { - return await this._withDB(async (db: MMKV) => { - const headerKey = this.headerKey(branch); - const bytes = this.makeHeader(meta); - db.set(headerKey, bytes); - return null; - }); + async save(meta: bs.DbMeta, branch: string = 'main'): Promise { + const headerKey = this.headerKey(branch); + const bytes = this.makeHeader(meta); + this.store.set(headerKey, bytes); + return null; + } + + async close(): Promise { + // no-op + } + + async destroy(): Promise { + this.store.clearAll(); + } + + headerKey(branch: string) { + return `fp.${this.STORAGE_VERSION}.meta.${this.name}.${branch}`; } } diff --git a/src/blockstore/loader.ts b/src/blockstore/loader.ts index 40d3549f..993ac33d 100644 --- a/src/blockstore/loader.ts +++ b/src/blockstore/loader.ts @@ -76,9 +76,9 @@ interface Startable { class EnsureStart { readonly oncePerStore = new ResolveOnce(); - reset() { - this.oncePerStore.reset(); - } + // reset() { + // this.oncePerStore.reset(true); + // } once(fn: () => Promise) { return this.oncePerStore.once(async () => { const ret = await fn(); @@ -154,10 +154,10 @@ export class Loader implements Loadable { store.close(); }), ); - this.ensureCarStore.reset(); - this.ensureFileStore.reset(); - this.ensureRemoteFileStore.reset(); - this.ensureMetaStore.reset(); + // this.ensureCarStore.reset(); + // this.ensureFileStore.reset(); + // this.ensureRemoteFileStore.reset(); + // this.ensureMetaStore.reset(); } async destroy() {