personal web client for Bluesky
typescript solidjs bluesky atcute

Compare changes

Choose any two refs to compare.

Changed files
+2107 -2275
patches
src
api
components
lib
views
-13
.editorconfig
··· 1 - [*] 2 - charset = utf-8 3 - end_of_line = lf 4 - insert_final_newline = true 5 - indent_style = tab 6 - trim_trailing_whitespace = true 7 - 8 - [*.{yml,yaml}] 9 - indent_style = space 10 - 11 - [*.md] 12 - indent_style = space 13 - trim_trailing_whitespace = false
+2
.npmrc
··· 1 1 auto-install-peers=false 2 2 public-hoist-pattern[]=workbox-window 3 + 4 + @jsr:registry=https://npm.jsr.io
+10
mise.lock
··· 1 + [tools.node] 2 + version = "22.14.0" 3 + backend = "core:node" 4 + 5 + [tools.pnpm] 6 + version = "10.7.0" 7 + backend = "aqua:pnpm/pnpm" 8 + 9 + [tools.pnpm.checksums] 10 + pnpm-linux-x64 = "sha256:d1e8009b1ac8c54050efd969d4b6a96eae4fdc3e1ed138741eaf5699a85a16cf"
+6 -2
mise.toml
··· 1 1 [tools] 2 - node = "24.1.0" 3 - pnpm = "10.11.0" 2 + node = "lts" 3 + pnpm = "latest" 4 + 5 + [settings] 6 + experimental = true 7 + lockfile = true
+20 -21
package.json
··· 8 8 "fmt": "prettier --cache --write ." 9 9 }, 10 10 "dependencies": { 11 - "@atcute/bluemoji": "^2.0.0", 12 - "@atcute/bluesky": "^2.1.1", 11 + "@atcute/bluemoji": "^1.0.4", 12 + "@atcute/bluesky": "^1.0.15", 13 13 "@atcute/bluesky-richtext-parser": "^1.0.7", 14 - "@atcute/bluesky-richtext-segmenter": "^2.0.0", 14 + "@atcute/bluesky-richtext-segmenter": "^1.0.5", 15 15 "@atcute/bluesky-search-parser": "^0.1.0", 16 - "@atcute/cbor": "^2.2.3", 17 - "@atcute/cid": "^2.2.2", 18 - "@atcute/client": "^3.1.0", 19 - "@atcute/oauth-browser-client": "^1.0.18", 16 + "@atcute/cbor": "^2.2.0", 17 + "@atcute/cid": "^2.2.0", 18 + "@atcute/client": "^2.0.9", 19 + "@atcute/oauth-browser-client": "^1.0.16", 20 20 "@atcute/tid": "^1.0.2", 21 - "@atlaskit/pragmatic-drag-and-drop": "^1.6.0", 21 + "@atlaskit/pragmatic-drag-and-drop": "^1.5.2", 22 22 "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3", 23 - "@floating-ui/dom": "^1.7.0", 23 + "@floating-ui/dom": "^1.6.13", 24 24 "@floating-ui/utils": "^0.2.9", 25 - "@mary/array-fns": "jsr:^0.1.4", 26 - "@mary/async-iterator-fns": "jsr:^0.1.1", 27 - "@mary/batch-fetch": "jsr:^0.1.0", 28 - "@mary/date-fns": "jsr:^0.1.3", 29 - "@mary/events": "jsr:^0.2.0", 30 - "@mary/exif-rm": "jsr:^0.2.2", 25 + "@mary/array-fns": "npm:@jsr/mary__array-fns@^0.1.4", 26 + "@mary/async-iterator-fns": "npm:@jsr/mary__async-iterator-fns@^0.1.1", 27 + "@mary/date-fns": "npm:@jsr/mary__date-fns@^0.1.3", 28 + "@mary/events": "npm:@jsr/mary__events@^0.2.0", 29 + "@mary/exif-rm": "npm:@jsr/mary__exif-rm@^0.2.2", 31 30 "@mary/solid-freeze": "npm:@externdefs/solid-freeze@^0.1.1", 32 31 "@mary/solid-query": "npm:@externdefs/solid-query@^0.1.5", 33 32 "comlink": "^4.4.2", 34 - "hls.js": "^1.6.2", 33 + "hls.js": "^1.6.0", 35 34 "idb": "^8.0.2", 36 35 "nanoid": "^5.1.5", 37 36 "solid-floating-ui": "~0.2.1", 38 - "solid-js": "^1.9.6", 39 - "webm-muxer": "^5.1.2" 37 + "solid-js": "^1.9.5", 38 + "webm-muxer": "^5.1.1" 40 39 }, 41 40 "devDependencies": { 42 41 "@trivago/prettier-plugin-sort-imports": "^5.2.2", ··· 48 47 "prettier-plugin-tailwindcss": "^0.6.11", 49 48 "tailwindcss": "^3.4.17", 50 49 "terser": "^5.39.0", 51 - "typescript": "~5.8.3", 52 - "vite": "^6.3.4", 50 + "typescript": "5.7.2", 51 + "vite": "6.0.5", 53 52 "vite-plugin-pwa": "0.21.0", 54 53 "vite-plugin-solid": "^2.11.6", 55 - "wrangler": "^4.14.1" 54 + "wrangler": "^4.6.0" 56 55 }, 57 56 "pnpm": { 58 57 "patchedDependencies": {
+8 -8
patches/solid-js.patch
··· 1 1 diff --git a/dist/solid.js b/dist/solid.js 2 - index f8d7c6698944fb9deb3c1e0ffb77071da6fe562c..0751e68eb39091cc51236d0d6abb637dd7b08436 100644 2 + index 2571609363d5758d32e2aa88489acca146a6d308..4a1e0bf4e523fb075340e0c2ccef0a4a9ab12f7f 100644 3 3 --- a/dist/solid.js 4 4 +++ b/dist/solid.js 5 - @@ -1586,7 +1586,6 @@ function Show(props) { 5 + @@ -1581,7 +1581,6 @@ function Show(props) { 6 6 keyed 7 7 ? c 8 8 : () => { 9 9 - if (!untrack(condition)) throw narrowedError("Show"); 10 - return conditionValue(); 10 + return props.when; 11 11 } 12 12 ) 13 - @@ -1636,7 +1635,6 @@ function Switch(props) { 14 - mp.keyed 15 - ? conditionValue() 13 + @@ -1628,7 +1627,6 @@ function Switch(props) { 14 + keyed 15 + ? when 16 16 : () => { 17 - - if (untrack(switchFunc)()?.[0] !== index) throw narrowedError("Match"); 18 - return conditionValue(); 17 + - if (untrack(evalConditions)[0] !== index) throw narrowedError("Match"); 18 + return cond.when; 19 19 } 20 20 )
+1143 -1144
pnpm-lock.yaml
··· 17 17 hash: 0b06407b66b7af88765fb6e01e112677a8c09ce518cb4f547cee8a0044471acd 18 18 path: patches/@tanstack__query-core@5.17.19.patch 19 19 solid-js: 20 - hash: 34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268 20 + hash: 9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c 21 21 path: patches/solid-js.patch 22 22 vite-plugin-pwa: 23 23 hash: 003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325 ··· 31 31 .: 32 32 dependencies: 33 33 '@atcute/bluemoji': 34 - specifier: ^2.0.0 35 - version: 2.0.0(@atcute/bluesky@2.1.1(@atcute/client@3.1.0))(@atcute/client@3.1.0) 34 + specifier: ^1.0.4 35 + version: 1.0.4(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9) 36 36 '@atcute/bluesky': 37 - specifier: ^2.1.1 38 - version: 2.1.1(@atcute/client@3.1.0) 37 + specifier: ^1.0.15 38 + version: 1.0.15(@atcute/client@2.0.9) 39 39 '@atcute/bluesky-richtext-parser': 40 40 specifier: ^1.0.7 41 41 version: 1.0.7 42 42 '@atcute/bluesky-richtext-segmenter': 43 - specifier: ^2.0.0 44 - version: 2.0.0(@atcute/bluesky@2.1.1(@atcute/client@3.1.0))(@atcute/client@3.1.0) 43 + specifier: ^1.0.5 44 + version: 1.0.5(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9) 45 45 '@atcute/bluesky-search-parser': 46 46 specifier: ^0.1.0 47 47 version: 0.1.0 48 48 '@atcute/cbor': 49 - specifier: ^2.2.3 50 - version: 2.2.3 49 + specifier: ^2.2.0 50 + version: 2.2.0 51 51 '@atcute/cid': 52 - specifier: ^2.2.2 53 - version: 2.2.2 52 + specifier: ^2.2.0 53 + version: 2.2.0 54 54 '@atcute/client': 55 - specifier: ^3.1.0 56 - version: 3.1.0 55 + specifier: ^2.0.9 56 + version: 2.0.9 57 57 '@atcute/oauth-browser-client': 58 - specifier: ^1.0.18 59 - version: 1.0.18 58 + specifier: ^1.0.16 59 + version: 1.0.16 60 60 '@atcute/tid': 61 61 specifier: ^1.0.2 62 62 version: 1.0.2 63 63 '@atlaskit/pragmatic-drag-and-drop': 64 - specifier: ^1.6.0 65 - version: 1.6.0 64 + specifier: ^1.5.2 65 + version: 1.5.2 66 66 '@atlaskit/pragmatic-drag-and-drop-hitbox': 67 67 specifier: ^1.0.3 68 68 version: 1.0.3 69 69 '@floating-ui/dom': 70 - specifier: ^1.7.0 71 - version: 1.7.0 70 + specifier: ^1.6.13 71 + version: 1.6.13 72 72 '@floating-ui/utils': 73 73 specifier: ^0.2.9 74 74 version: 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea) 75 75 '@mary/array-fns': 76 - specifier: jsr:^0.1.4 76 + specifier: npm:@jsr/mary__array-fns@^0.1.4 77 77 version: '@jsr/mary__array-fns@0.1.4' 78 78 '@mary/async-iterator-fns': 79 - specifier: jsr:^0.1.1 79 + specifier: npm:@jsr/mary__async-iterator-fns@^0.1.1 80 80 version: '@jsr/mary__async-iterator-fns@0.1.1' 81 - '@mary/batch-fetch': 82 - specifier: jsr:^0.1.0 83 - version: '@jsr/mary__batch-fetch@0.1.0' 84 81 '@mary/date-fns': 85 - specifier: jsr:^0.1.3 82 + specifier: npm:@jsr/mary__date-fns@^0.1.3 86 83 version: '@jsr/mary__date-fns@0.1.3' 87 84 '@mary/events': 88 - specifier: jsr:^0.2.0 85 + specifier: npm:@jsr/mary__events@^0.2.0 89 86 version: '@jsr/mary__events@0.2.0' 90 87 '@mary/exif-rm': 91 - specifier: jsr:^0.2.2 88 + specifier: npm:@jsr/mary__exif-rm@^0.2.2 92 89 version: '@jsr/mary__exif-rm@0.2.2' 93 90 '@mary/solid-freeze': 94 91 specifier: npm:@externdefs/solid-freeze@^0.1.1 95 - version: '@externdefs/solid-freeze@0.1.1(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268))' 92 + version: '@externdefs/solid-freeze@0.1.1(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))' 96 93 '@mary/solid-query': 97 94 specifier: npm:@externdefs/solid-query@^0.1.5 98 - version: '@externdefs/solid-query@0.1.5(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268))' 95 + version: '@externdefs/solid-query@0.1.5(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))' 99 96 comlink: 100 97 specifier: ^4.4.2 101 98 version: 4.4.2 102 99 hls.js: 103 - specifier: ^1.6.2 104 - version: 1.6.2 100 + specifier: ^1.6.0 101 + version: 1.6.0 105 102 idb: 106 103 specifier: ^8.0.2 107 104 version: 8.0.2 ··· 110 107 version: 5.1.5 111 108 solid-floating-ui: 112 109 specifier: ~0.2.1 113 - version: 0.2.1(@floating-ui/dom@1.7.0)(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268)) 110 + version: 0.2.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)) 114 111 solid-js: 115 - specifier: ^1.9.6 116 - version: 1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268) 112 + specifier: ^1.9.5 113 + version: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 117 114 webm-muxer: 118 - specifier: ^5.1.2 119 - version: 5.1.2 115 + specifier: ^5.1.1 116 + version: 5.1.1 120 117 devDependencies: 121 118 '@trivago/prettier-plugin-sort-imports': 122 119 specifier: ^5.2.2 ··· 132 129 version: 10.4.21(postcss@8.5.3) 133 130 babel-plugin-transform-typescript-const-enums: 134 131 specifier: ^0.1.0 135 - version: 0.1.0(@babel/core@7.27.1) 132 + version: 0.1.0(@babel/core@7.26.10) 136 133 prettier: 137 134 specifier: ^3.5.3 138 135 version: 3.5.3 ··· 146 143 specifier: ^5.39.0 147 144 version: 5.39.0 148 145 typescript: 149 - specifier: ~5.8.3 150 - version: 5.8.3 146 + specifier: 5.7.2 147 + version: 5.7.2 151 148 vite: 152 - specifier: ^6.3.4 153 - version: 6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1) 149 + specifier: 6.0.5 150 + version: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0) 154 151 vite-plugin-pwa: 155 152 specifier: 0.21.0 156 - version: 0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1)) 153 + version: 0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)) 157 154 vite-plugin-solid: 158 155 specifier: ^2.11.6 159 - version: 2.11.6(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268))(vite@6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1)) 156 + version: 2.11.6(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)) 160 157 wrangler: 161 - specifier: ^4.14.1 162 - version: 4.14.1 158 + specifier: ^4.6.0 159 + version: 4.6.0 163 160 164 161 packages: 165 162 ··· 177 174 peerDependencies: 178 175 ajv: '>=8' 179 176 180 - '@atcute/bluemoji@2.0.0': 181 - resolution: {integrity: sha512-tgcsW4H50oWo6uHMkUVU2IgObfX63mYp/qxWfoLkKPFWbwz68SiwedaCY/E+Cw8anWGF0urFjDemmga7B5Z0QA==} 177 + '@atcute/bluemoji@1.0.4': 178 + resolution: {integrity: sha512-Rzujybon6EFuycWPID5bzjYIVdPPWWjVfPqELhByJTLe2vq3SlEubUCmz3VfhDu/Bb8wlBP2tIT5w4oq3vJLrg==} 182 179 peerDependencies: 183 - '@atcute/bluesky': ^2.0.0 184 - '@atcute/client': ^3.0.0 180 + '@atcute/bluesky': ^1.0.0 181 + '@atcute/client': ^1.0.0 || ^2.0.0 185 182 186 183 '@atcute/bluesky-richtext-parser@1.0.7': 187 184 resolution: {integrity: sha512-nOvU699OXiGMbyswao7JJnY0C9WkwE7PVC/m5WWt0UN9fsXSOor9IZWw+v9SATp+94BTJoG38XyUomUaJnoQRA==} 188 185 189 - '@atcute/bluesky-richtext-segmenter@2.0.0': 190 - resolution: {integrity: sha512-BummI6zgdXSx9f5TJg2oR2ervCJhG8zcbAMDLWjccNLt/0P38lIRsXqOBdIIAZoBtk8g5LpgnnICdiMsDM2iDQ==} 186 + '@atcute/bluesky-richtext-segmenter@1.0.5': 187 + resolution: {integrity: sha512-D0FfmJVwppky9naL1OGKcQjtgO0lDLhkG4iCQHpShuHhEZ9FUdf3eUb/eQpVRNJGaJ4ShjEOHA6FlAizcjMkGQ==} 191 188 peerDependencies: 192 - '@atcute/bluesky': ^2.0.0 193 - '@atcute/client': ^3.0.0 189 + '@atcute/bluesky': ^1.0.0 190 + '@atcute/client': ^1.0.0 || ^2.0.0 194 191 195 192 '@atcute/bluesky-search-parser@0.1.0': 196 193 resolution: {integrity: sha512-bTClwD9VGwaECOyWe1mf8V6t+7/77e3tiUHTE6CSrHXOJ/yM8N2xbn+dIi2ki2JLHvgvBN9wsWpFLykgfWhBaw==} 197 194 198 - '@atcute/bluesky@2.1.1': 199 - resolution: {integrity: sha512-wEZfFW58J6yC1SqHcVJOn4qbHENTTzjeCEWthRT5HvKovADLqk54HSMSAuXDMBUbintSTBr0khQNZQ3ZdgzDdQ==} 195 + '@atcute/bluesky@1.0.15': 196 + resolution: {integrity: sha512-+EFiybmKQ97aBAgtaD+cKRJER5AMn3cZMkEwEg/pDdWyzxYJ9m1UgemmLdTgI8VrxPufKqdXS2nl7uO7TY6BPA==} 200 197 peerDependencies: 201 - '@atcute/client': ^3.0.0 198 + '@atcute/client': ^1.0.0 || ^2.0.0 202 199 203 - '@atcute/cbor@2.2.3': 204 - resolution: {integrity: sha512-yvzaPI6ChNlqYN41qY8cVGCubgb6N/Y2kpNQnjC5waAZ4Xy2WH7ohuyiv0BQDvgzPT4ww1+9G+zBFxcfM2PH/Q==} 200 + '@atcute/cbor@2.2.0': 201 + resolution: {integrity: sha512-W3ttcDJHiB5N6MbfEpJbTINZSjg0KB8gpBds8UWOGmybqUnuz43HZkFSpF/Vom0KilYg6QWU/ZM4X8SXZE+kow==} 205 202 206 - '@atcute/cid@2.2.2': 207 - resolution: {integrity: sha512-deAGMqLAyplt7eIukhkjlsGubvrcMrtXkDKlUYZDo4WUdL7hSjBywtPXf6SbMK+Mjvst7l2+83OqTcY5AuuxtA==} 203 + '@atcute/cid@2.2.0': 204 + resolution: {integrity: sha512-ty+WjGcTfi1JJtcRNz6bsJMqT69lEIl4Ts7vl4U8SBHbxjbb6Tk/pcnQZVClKRYduRoZ1XhS9n5qOSIbIMctDA==} 208 205 209 - '@atcute/client@3.1.0': 210 - resolution: {integrity: sha512-+rQPsHXSf0DUm8XoHoaH7Y2E8tIpbsW84djyPj7dqAyrFIjvGuJ1X1DvMufwbTIcmLerdy+dzl34iZcz/h3Vhg==} 206 + '@atcute/client@2.0.9': 207 + resolution: {integrity: sha512-QNDm9gMP6x9LY77ArwY+urQOBtQW74/onEAz42c40JxRm6Rl9K9cU4ROvNKJ+5cpVmEm1sthEWVRmDr5CSZENA==} 211 208 212 - '@atcute/multibase@1.1.3': 213 - resolution: {integrity: sha512-vQQO0tDuQPguBvHdgV3ryn7R8U6beQ50KA/juYm+dCeT/3hOK2stMbX+IaW8JEuwkT5lJsU8wDIOicQT4mB7Ag==} 209 + '@atcute/multibase@1.1.2': 210 + resolution: {integrity: sha512-KFX+c7a/u2jSNcRw0rLaUHG/XEKf1A1c8XF5soHnsb1JMCShihf/anfZ1kJ4no/IlIp9HEHV3PQRQO2sWL6ASQ==} 214 211 215 - '@atcute/oauth-browser-client@1.0.18': 216 - resolution: {integrity: sha512-VPr7XIsdoHemoVhqDNe/kAKYK3k1o6IJvce7ngsBWoLq5gnls9S7cgRF4f9ucP/FAxDfZ7RQbWh7t6ethfwLrQ==} 212 + '@atcute/oauth-browser-client@1.0.16': 213 + resolution: {integrity: sha512-BKkA4TPyaLIO+hVxcxZoDfLFUgsd3A47UyzWAbe3BpSoN8Kywy/CqWuAVlqdiUhO1iG+vVqGQhjKy4UxutaU4g==} 217 214 218 215 '@atcute/tid@1.0.2': 219 216 resolution: {integrity: sha512-ahmjroNyeDPJhtuf3+HTJropaH04HmJ8fhntDu73Gpz/RkAF7+nkz6kcP2QTgfvMCgMPAJUdskAAP82GPDTY9w==} ··· 224 221 '@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3': 225 222 resolution: {integrity: sha512-/Sbu/HqN2VGLYBhnsG7SbRNg98XKkbF6L7XDdBi+izRybfaK1FeMfodPpm/xnBHPJzwYMdkE0qtLyv6afhgMUA==} 226 223 227 - '@atlaskit/pragmatic-drag-and-drop@1.6.0': 228 - resolution: {integrity: sha512-J5ZnU6h0wjda1M1BKimzt4oRKeyVsTQzlRUqlbIUjfNioWFdSnIkPogWIn9tV2B68jphL1QNuZdEkKxcJygU2w==} 224 + '@atlaskit/pragmatic-drag-and-drop@1.5.2': 225 + resolution: {integrity: sha512-fDuTwlDD11r3ev5tLJ6JnzQUiG9v77c8zGcNdO7RRNtZZbOHam8CFhmyFGY4E/mLjvgYng0UkcyCrSBc4FXYZw==} 229 226 230 - '@babel/code-frame@7.27.1': 231 - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 227 + '@babel/code-frame@7.26.2': 228 + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 232 229 engines: {node: '>=6.9.0'} 233 230 234 - '@babel/compat-data@7.27.1': 235 - resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} 231 + '@babel/compat-data@7.26.8': 232 + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 236 233 engines: {node: '>=6.9.0'} 237 234 238 - '@babel/core@7.27.1': 239 - resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} 235 + '@babel/core@7.26.10': 236 + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} 240 237 engines: {node: '>=6.9.0'} 241 238 242 - '@babel/generator@7.27.1': 243 - resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} 239 + '@babel/generator@7.27.0': 240 + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} 244 241 engines: {node: '>=6.9.0'} 245 242 246 - '@babel/helper-annotate-as-pure@7.27.1': 247 - resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} 243 + '@babel/helper-annotate-as-pure@7.25.9': 244 + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} 248 245 engines: {node: '>=6.9.0'} 249 246 250 - '@babel/helper-compilation-targets@7.27.1': 251 - resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} 247 + '@babel/helper-compilation-targets@7.27.0': 248 + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} 252 249 engines: {node: '>=6.9.0'} 253 250 254 - '@babel/helper-create-class-features-plugin@7.27.1': 255 - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} 251 + '@babel/helper-create-class-features-plugin@7.27.0': 252 + resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} 256 253 engines: {node: '>=6.9.0'} 257 254 peerDependencies: 258 255 '@babel/core': ^7.0.0 259 256 260 - '@babel/helper-create-regexp-features-plugin@7.27.1': 261 - resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} 257 + '@babel/helper-create-regexp-features-plugin@7.27.0': 258 + resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} 262 259 engines: {node: '>=6.9.0'} 263 260 peerDependencies: 264 261 '@babel/core': ^7.0.0 ··· 268 265 peerDependencies: 269 266 '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 270 267 271 - '@babel/helper-member-expression-to-functions@7.27.1': 272 - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} 268 + '@babel/helper-member-expression-to-functions@7.25.9': 269 + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} 273 270 engines: {node: '>=6.9.0'} 274 271 275 272 '@babel/helper-module-imports@7.18.6': 276 273 resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 277 274 engines: {node: '>=6.9.0'} 278 275 279 - '@babel/helper-module-imports@7.27.1': 280 - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 276 + '@babel/helper-module-imports@7.25.9': 277 + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 281 278 engines: {node: '>=6.9.0'} 282 279 283 - '@babel/helper-module-transforms@7.27.1': 284 - resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} 280 + '@babel/helper-module-transforms@7.26.0': 281 + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 285 282 engines: {node: '>=6.9.0'} 286 283 peerDependencies: 287 284 '@babel/core': ^7.0.0 288 285 289 - '@babel/helper-optimise-call-expression@7.27.1': 290 - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} 286 + '@babel/helper-optimise-call-expression@7.25.9': 287 + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} 291 288 engines: {node: '>=6.9.0'} 292 289 293 - '@babel/helper-plugin-utils@7.27.1': 294 - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 290 + '@babel/helper-plugin-utils@7.26.5': 291 + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 295 292 engines: {node: '>=6.9.0'} 296 293 297 - '@babel/helper-remap-async-to-generator@7.27.1': 298 - resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} 294 + '@babel/helper-remap-async-to-generator@7.25.9': 295 + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} 299 296 engines: {node: '>=6.9.0'} 300 297 peerDependencies: 301 298 '@babel/core': ^7.0.0 302 299 303 - '@babel/helper-replace-supers@7.27.1': 304 - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} 300 + '@babel/helper-replace-supers@7.26.5': 301 + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} 305 302 engines: {node: '>=6.9.0'} 306 303 peerDependencies: 307 304 '@babel/core': ^7.0.0 308 305 309 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': 310 - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} 306 + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': 307 + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} 311 308 engines: {node: '>=6.9.0'} 312 309 313 - '@babel/helper-string-parser@7.27.1': 314 - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 310 + '@babel/helper-string-parser@7.25.9': 311 + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 315 312 engines: {node: '>=6.9.0'} 316 313 317 - '@babel/helper-validator-identifier@7.27.1': 318 - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 314 + '@babel/helper-validator-identifier@7.25.9': 315 + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 319 316 engines: {node: '>=6.9.0'} 320 317 321 - '@babel/helper-validator-option@7.27.1': 322 - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 318 + '@babel/helper-validator-option@7.25.9': 319 + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 323 320 engines: {node: '>=6.9.0'} 324 321 325 - '@babel/helper-wrap-function@7.27.1': 326 - resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} 322 + '@babel/helper-wrap-function@7.25.9': 323 + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} 327 324 engines: {node: '>=6.9.0'} 328 325 329 - '@babel/helpers@7.27.1': 330 - resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} 326 + '@babel/helpers@7.27.0': 327 + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} 331 328 engines: {node: '>=6.9.0'} 332 329 333 - '@babel/parser@7.27.1': 334 - resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} 330 + '@babel/parser@7.27.0': 331 + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} 335 332 engines: {node: '>=6.0.0'} 336 333 hasBin: true 337 334 338 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': 339 - resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} 335 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': 336 + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} 340 337 engines: {node: '>=6.9.0'} 341 338 peerDependencies: 342 339 '@babel/core': ^7.0.0 343 340 344 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': 345 - resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} 341 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': 342 + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} 346 343 engines: {node: '>=6.9.0'} 347 344 peerDependencies: 348 345 '@babel/core': ^7.0.0 349 346 350 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': 351 - resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} 347 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': 348 + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} 352 349 engines: {node: '>=6.9.0'} 353 350 peerDependencies: 354 351 '@babel/core': ^7.0.0 355 352 356 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': 357 - resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} 353 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': 354 + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} 358 355 engines: {node: '>=6.9.0'} 359 356 peerDependencies: 360 357 '@babel/core': ^7.13.0 361 358 362 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': 363 - resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} 359 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': 360 + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} 364 361 engines: {node: '>=6.9.0'} 365 362 peerDependencies: 366 363 '@babel/core': ^7.0.0 ··· 371 368 peerDependencies: 372 369 '@babel/core': ^7.0.0-0 373 370 374 - '@babel/plugin-syntax-import-assertions@7.27.1': 375 - resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} 371 + '@babel/plugin-syntax-import-assertions@7.26.0': 372 + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} 376 373 engines: {node: '>=6.9.0'} 377 374 peerDependencies: 378 375 '@babel/core': ^7.0.0-0 379 376 380 - '@babel/plugin-syntax-import-attributes@7.27.1': 381 - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} 377 + '@babel/plugin-syntax-import-attributes@7.26.0': 378 + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} 382 379 engines: {node: '>=6.9.0'} 383 380 peerDependencies: 384 381 '@babel/core': ^7.0.0-0 385 382 386 - '@babel/plugin-syntax-jsx@7.27.1': 387 - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} 383 + '@babel/plugin-syntax-jsx@7.25.9': 384 + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} 388 385 engines: {node: '>=6.9.0'} 389 386 peerDependencies: 390 387 '@babel/core': ^7.0.0-0 ··· 395 392 peerDependencies: 396 393 '@babel/core': ^7.0.0 397 394 398 - '@babel/plugin-transform-arrow-functions@7.27.1': 399 - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} 395 + '@babel/plugin-transform-arrow-functions@7.25.9': 396 + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} 400 397 engines: {node: '>=6.9.0'} 401 398 peerDependencies: 402 399 '@babel/core': ^7.0.0-0 403 400 404 - '@babel/plugin-transform-async-generator-functions@7.27.1': 405 - resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==} 401 + '@babel/plugin-transform-async-generator-functions@7.26.8': 402 + resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} 406 403 engines: {node: '>=6.9.0'} 407 404 peerDependencies: 408 405 '@babel/core': ^7.0.0-0 409 406 410 - '@babel/plugin-transform-async-to-generator@7.27.1': 411 - resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} 407 + '@babel/plugin-transform-async-to-generator@7.25.9': 408 + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} 412 409 engines: {node: '>=6.9.0'} 413 410 peerDependencies: 414 411 '@babel/core': ^7.0.0-0 415 412 416 - '@babel/plugin-transform-block-scoped-functions@7.27.1': 417 - resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} 413 + '@babel/plugin-transform-block-scoped-functions@7.26.5': 414 + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} 418 415 engines: {node: '>=6.9.0'} 419 416 peerDependencies: 420 417 '@babel/core': ^7.0.0-0 421 418 422 - '@babel/plugin-transform-block-scoping@7.27.1': 423 - resolution: {integrity: sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==} 419 + '@babel/plugin-transform-block-scoping@7.27.0': 420 + resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==} 424 421 engines: {node: '>=6.9.0'} 425 422 peerDependencies: 426 423 '@babel/core': ^7.0.0-0 427 424 428 - '@babel/plugin-transform-class-properties@7.27.1': 429 - resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} 425 + '@babel/plugin-transform-class-properties@7.25.9': 426 + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} 430 427 engines: {node: '>=6.9.0'} 431 428 peerDependencies: 432 429 '@babel/core': ^7.0.0-0 433 430 434 - '@babel/plugin-transform-class-static-block@7.27.1': 435 - resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} 431 + '@babel/plugin-transform-class-static-block@7.26.0': 432 + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} 436 433 engines: {node: '>=6.9.0'} 437 434 peerDependencies: 438 435 '@babel/core': ^7.12.0 439 436 440 - '@babel/plugin-transform-classes@7.27.1': 441 - resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} 437 + '@babel/plugin-transform-classes@7.25.9': 438 + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} 442 439 engines: {node: '>=6.9.0'} 443 440 peerDependencies: 444 441 '@babel/core': ^7.0.0-0 445 442 446 - '@babel/plugin-transform-computed-properties@7.27.1': 447 - resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} 443 + '@babel/plugin-transform-computed-properties@7.25.9': 444 + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} 448 445 engines: {node: '>=6.9.0'} 449 446 peerDependencies: 450 447 '@babel/core': ^7.0.0-0 451 448 452 - '@babel/plugin-transform-destructuring@7.27.1': 453 - resolution: {integrity: sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==} 449 + '@babel/plugin-transform-destructuring@7.25.9': 450 + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} 454 451 engines: {node: '>=6.9.0'} 455 452 peerDependencies: 456 453 '@babel/core': ^7.0.0-0 457 454 458 - '@babel/plugin-transform-dotall-regex@7.27.1': 459 - resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} 455 + '@babel/plugin-transform-dotall-regex@7.25.9': 456 + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} 460 457 engines: {node: '>=6.9.0'} 461 458 peerDependencies: 462 459 '@babel/core': ^7.0.0-0 463 460 464 - '@babel/plugin-transform-duplicate-keys@7.27.1': 465 - resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} 461 + '@babel/plugin-transform-duplicate-keys@7.25.9': 462 + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} 466 463 engines: {node: '>=6.9.0'} 467 464 peerDependencies: 468 465 '@babel/core': ^7.0.0-0 469 466 470 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': 471 - resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} 467 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': 468 + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} 472 469 engines: {node: '>=6.9.0'} 473 470 peerDependencies: 474 471 '@babel/core': ^7.0.0 475 472 476 - '@babel/plugin-transform-dynamic-import@7.27.1': 477 - resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} 473 + '@babel/plugin-transform-dynamic-import@7.25.9': 474 + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} 478 475 engines: {node: '>=6.9.0'} 479 476 peerDependencies: 480 477 '@babel/core': ^7.0.0-0 481 478 482 - '@babel/plugin-transform-exponentiation-operator@7.27.1': 483 - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} 479 + '@babel/plugin-transform-exponentiation-operator@7.26.3': 480 + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} 484 481 engines: {node: '>=6.9.0'} 485 482 peerDependencies: 486 483 '@babel/core': ^7.0.0-0 487 484 488 - '@babel/plugin-transform-export-namespace-from@7.27.1': 489 - resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} 485 + '@babel/plugin-transform-export-namespace-from@7.25.9': 486 + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} 490 487 engines: {node: '>=6.9.0'} 491 488 peerDependencies: 492 489 '@babel/core': ^7.0.0-0 493 490 494 - '@babel/plugin-transform-for-of@7.27.1': 495 - resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} 491 + '@babel/plugin-transform-for-of@7.26.9': 492 + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} 496 493 engines: {node: '>=6.9.0'} 497 494 peerDependencies: 498 495 '@babel/core': ^7.0.0-0 499 496 500 - '@babel/plugin-transform-function-name@7.27.1': 501 - resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} 497 + '@babel/plugin-transform-function-name@7.25.9': 498 + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} 502 499 engines: {node: '>=6.9.0'} 503 500 peerDependencies: 504 501 '@babel/core': ^7.0.0-0 505 502 506 - '@babel/plugin-transform-json-strings@7.27.1': 507 - resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} 503 + '@babel/plugin-transform-json-strings@7.25.9': 504 + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} 508 505 engines: {node: '>=6.9.0'} 509 506 peerDependencies: 510 507 '@babel/core': ^7.0.0-0 511 508 512 - '@babel/plugin-transform-literals@7.27.1': 513 - resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} 509 + '@babel/plugin-transform-literals@7.25.9': 510 + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} 514 511 engines: {node: '>=6.9.0'} 515 512 peerDependencies: 516 513 '@babel/core': ^7.0.0-0 517 514 518 - '@babel/plugin-transform-logical-assignment-operators@7.27.1': 519 - resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} 515 + '@babel/plugin-transform-logical-assignment-operators@7.25.9': 516 + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} 520 517 engines: {node: '>=6.9.0'} 521 518 peerDependencies: 522 519 '@babel/core': ^7.0.0-0 523 520 524 - '@babel/plugin-transform-member-expression-literals@7.27.1': 525 - resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} 521 + '@babel/plugin-transform-member-expression-literals@7.25.9': 522 + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} 526 523 engines: {node: '>=6.9.0'} 527 524 peerDependencies: 528 525 '@babel/core': ^7.0.0-0 529 526 530 - '@babel/plugin-transform-modules-amd@7.27.1': 531 - resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} 527 + '@babel/plugin-transform-modules-amd@7.25.9': 528 + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} 532 529 engines: {node: '>=6.9.0'} 533 530 peerDependencies: 534 531 '@babel/core': ^7.0.0-0 535 532 536 - '@babel/plugin-transform-modules-commonjs@7.27.1': 537 - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} 533 + '@babel/plugin-transform-modules-commonjs@7.26.3': 534 + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} 538 535 engines: {node: '>=6.9.0'} 539 536 peerDependencies: 540 537 '@babel/core': ^7.0.0-0 541 538 542 - '@babel/plugin-transform-modules-systemjs@7.27.1': 543 - resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} 539 + '@babel/plugin-transform-modules-systemjs@7.25.9': 540 + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} 544 541 engines: {node: '>=6.9.0'} 545 542 peerDependencies: 546 543 '@babel/core': ^7.0.0-0 547 544 548 - '@babel/plugin-transform-modules-umd@7.27.1': 549 - resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} 545 + '@babel/plugin-transform-modules-umd@7.25.9': 546 + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} 550 547 engines: {node: '>=6.9.0'} 551 548 peerDependencies: 552 549 '@babel/core': ^7.0.0-0 553 550 554 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': 555 - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} 551 + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': 552 + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} 556 553 engines: {node: '>=6.9.0'} 557 554 peerDependencies: 558 555 '@babel/core': ^7.0.0 559 556 560 - '@babel/plugin-transform-new-target@7.27.1': 561 - resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} 557 + '@babel/plugin-transform-new-target@7.25.9': 558 + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} 562 559 engines: {node: '>=6.9.0'} 563 560 peerDependencies: 564 561 '@babel/core': ^7.0.0-0 565 562 566 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': 567 - resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} 563 + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': 564 + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} 568 565 engines: {node: '>=6.9.0'} 569 566 peerDependencies: 570 567 '@babel/core': ^7.0.0-0 571 568 572 - '@babel/plugin-transform-numeric-separator@7.27.1': 573 - resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} 569 + '@babel/plugin-transform-numeric-separator@7.25.9': 570 + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} 574 571 engines: {node: '>=6.9.0'} 575 572 peerDependencies: 576 573 '@babel/core': ^7.0.0-0 577 574 578 - '@babel/plugin-transform-object-rest-spread@7.27.1': 579 - resolution: {integrity: sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA==} 575 + '@babel/plugin-transform-object-rest-spread@7.25.9': 576 + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} 580 577 engines: {node: '>=6.9.0'} 581 578 peerDependencies: 582 579 '@babel/core': ^7.0.0-0 583 580 584 - '@babel/plugin-transform-object-super@7.27.1': 585 - resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} 581 + '@babel/plugin-transform-object-super@7.25.9': 582 + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} 586 583 engines: {node: '>=6.9.0'} 587 584 peerDependencies: 588 585 '@babel/core': ^7.0.0-0 589 586 590 - '@babel/plugin-transform-optional-catch-binding@7.27.1': 591 - resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} 587 + '@babel/plugin-transform-optional-catch-binding@7.25.9': 588 + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} 592 589 engines: {node: '>=6.9.0'} 593 590 peerDependencies: 594 591 '@babel/core': ^7.0.0-0 595 592 596 - '@babel/plugin-transform-optional-chaining@7.27.1': 597 - resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} 593 + '@babel/plugin-transform-optional-chaining@7.25.9': 594 + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} 598 595 engines: {node: '>=6.9.0'} 599 596 peerDependencies: 600 597 '@babel/core': ^7.0.0-0 601 598 602 - '@babel/plugin-transform-parameters@7.27.1': 603 - resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} 599 + '@babel/plugin-transform-parameters@7.25.9': 600 + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} 604 601 engines: {node: '>=6.9.0'} 605 602 peerDependencies: 606 603 '@babel/core': ^7.0.0-0 607 604 608 - '@babel/plugin-transform-private-methods@7.27.1': 609 - resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} 605 + '@babel/plugin-transform-private-methods@7.25.9': 606 + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} 610 607 engines: {node: '>=6.9.0'} 611 608 peerDependencies: 612 609 '@babel/core': ^7.0.0-0 613 610 614 - '@babel/plugin-transform-private-property-in-object@7.27.1': 615 - resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} 611 + '@babel/plugin-transform-private-property-in-object@7.25.9': 612 + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} 616 613 engines: {node: '>=6.9.0'} 617 614 peerDependencies: 618 615 '@babel/core': ^7.0.0-0 619 616 620 - '@babel/plugin-transform-property-literals@7.27.1': 621 - resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} 617 + '@babel/plugin-transform-property-literals@7.25.9': 618 + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} 622 619 engines: {node: '>=6.9.0'} 623 620 peerDependencies: 624 621 '@babel/core': ^7.0.0-0 625 622 626 - '@babel/plugin-transform-regenerator@7.27.1': 627 - resolution: {integrity: sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==} 623 + '@babel/plugin-transform-regenerator@7.27.0': 624 + resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==} 628 625 engines: {node: '>=6.9.0'} 629 626 peerDependencies: 630 627 '@babel/core': ^7.0.0-0 631 628 632 - '@babel/plugin-transform-regexp-modifiers@7.27.1': 633 - resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} 629 + '@babel/plugin-transform-regexp-modifiers@7.26.0': 630 + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} 634 631 engines: {node: '>=6.9.0'} 635 632 peerDependencies: 636 633 '@babel/core': ^7.0.0 637 634 638 - '@babel/plugin-transform-reserved-words@7.27.1': 639 - resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} 635 + '@babel/plugin-transform-reserved-words@7.25.9': 636 + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} 640 637 engines: {node: '>=6.9.0'} 641 638 peerDependencies: 642 639 '@babel/core': ^7.0.0-0 643 640 644 - '@babel/plugin-transform-shorthand-properties@7.27.1': 645 - resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} 641 + '@babel/plugin-transform-shorthand-properties@7.25.9': 642 + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} 646 643 engines: {node: '>=6.9.0'} 647 644 peerDependencies: 648 645 '@babel/core': ^7.0.0-0 649 646 650 - '@babel/plugin-transform-spread@7.27.1': 651 - resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} 647 + '@babel/plugin-transform-spread@7.25.9': 648 + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} 652 649 engines: {node: '>=6.9.0'} 653 650 peerDependencies: 654 651 '@babel/core': ^7.0.0-0 655 652 656 - '@babel/plugin-transform-sticky-regex@7.27.1': 657 - resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} 653 + '@babel/plugin-transform-sticky-regex@7.25.9': 654 + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} 658 655 engines: {node: '>=6.9.0'} 659 656 peerDependencies: 660 657 '@babel/core': ^7.0.0-0 661 658 662 - '@babel/plugin-transform-template-literals@7.27.1': 663 - resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} 659 + '@babel/plugin-transform-template-literals@7.26.8': 660 + resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} 664 661 engines: {node: '>=6.9.0'} 665 662 peerDependencies: 666 663 '@babel/core': ^7.0.0-0 667 664 668 - '@babel/plugin-transform-typeof-symbol@7.27.1': 669 - resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} 665 + '@babel/plugin-transform-typeof-symbol@7.27.0': 666 + resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==} 670 667 engines: {node: '>=6.9.0'} 671 668 peerDependencies: 672 669 '@babel/core': ^7.0.0-0 673 670 674 - '@babel/plugin-transform-unicode-escapes@7.27.1': 675 - resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} 671 + '@babel/plugin-transform-unicode-escapes@7.25.9': 672 + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} 676 673 engines: {node: '>=6.9.0'} 677 674 peerDependencies: 678 675 '@babel/core': ^7.0.0-0 679 676 680 - '@babel/plugin-transform-unicode-property-regex@7.27.1': 681 - resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} 677 + '@babel/plugin-transform-unicode-property-regex@7.25.9': 678 + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} 682 679 engines: {node: '>=6.9.0'} 683 680 peerDependencies: 684 681 '@babel/core': ^7.0.0-0 685 682 686 - '@babel/plugin-transform-unicode-regex@7.27.1': 687 - resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} 683 + '@babel/plugin-transform-unicode-regex@7.25.9': 684 + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} 688 685 engines: {node: '>=6.9.0'} 689 686 peerDependencies: 690 687 '@babel/core': ^7.0.0-0 691 688 692 - '@babel/plugin-transform-unicode-sets-regex@7.27.1': 693 - resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} 689 + '@babel/plugin-transform-unicode-sets-regex@7.25.9': 690 + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} 694 691 engines: {node: '>=6.9.0'} 695 692 peerDependencies: 696 693 '@babel/core': ^7.0.0 697 694 698 - '@babel/preset-env@7.27.1': 699 - resolution: {integrity: sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA==} 695 + '@babel/preset-env@7.26.9': 696 + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} 700 697 engines: {node: '>=6.9.0'} 701 698 peerDependencies: 702 699 '@babel/core': ^7.0.0-0 ··· 706 703 peerDependencies: 707 704 '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 708 705 709 - '@babel/runtime@7.27.1': 710 - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} 706 + '@babel/runtime@7.27.0': 707 + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} 711 708 engines: {node: '>=6.9.0'} 712 709 713 - '@babel/template@7.27.1': 714 - resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} 710 + '@babel/template@7.27.0': 711 + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} 715 712 engines: {node: '>=6.9.0'} 716 713 717 - '@babel/traverse@7.27.1': 718 - resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} 714 + '@babel/traverse@7.27.0': 715 + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} 719 716 engines: {node: '>=6.9.0'} 720 717 721 - '@babel/types@7.27.1': 722 - resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} 718 + '@babel/types@7.27.0': 719 + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} 723 720 engines: {node: '>=6.9.0'} 724 721 725 722 '@cloudflare/kv-asset-handler@0.4.0': ··· 735 732 workerd: 736 733 optional: true 737 734 738 - '@cloudflare/workerd-darwin-64@1.20250428.0': 739 - resolution: {integrity: sha512-6nVe9oV4Hdec6ctzMtW80TiDvNTd2oFPi3VsKqSDVaJSJbL+4b6seyJ7G/UEPI+si6JhHBSLV2/9lNXNGLjClA==} 735 + '@cloudflare/workerd-darwin-64@1.20250321.0': 736 + resolution: {integrity: sha512-y273GfLaNCxkL8hTfo0c8FZKkOPdq+CPZAKJXPWB+YpS1JCOULu6lNTptpD7ZtF14dTYPkn5Weug31TTlviJmw==} 740 737 engines: {node: '>=16'} 741 738 cpu: [x64] 742 739 os: [darwin] 743 740 744 - '@cloudflare/workerd-darwin-arm64@1.20250428.0': 745 - resolution: {integrity: sha512-/TB7bh7SIJ5f+6r4PHsAz7+9Qal/TK1cJuKFkUno1kqGlZbdrMwH0ATYwlWC/nBFeu2FB3NUolsTntEuy23hnQ==} 741 + '@cloudflare/workerd-darwin-arm64@1.20250321.0': 742 + resolution: {integrity: sha512-qvf7/gkkQq7fAsoMlntJSimN/WfwQqxi2oL0aWZMGodTvs/yRHO2I4oE0eOihVdK1BXyBHJXNxEvNDBjF0+Yuw==} 746 743 engines: {node: '>=16'} 747 744 cpu: [arm64] 748 745 os: [darwin] 749 746 750 - '@cloudflare/workerd-linux-64@1.20250428.0': 751 - resolution: {integrity: sha512-9eCbj+R3CKqpiXP6DfAA20DxKge+OTj7Hyw3ZewiEhWH9INIHiJwJQYybu4iq9kJEGjnGvxgguLFjSCWm26hgg==} 747 + '@cloudflare/workerd-linux-64@1.20250321.0': 748 + resolution: {integrity: sha512-AEp3xjWFrNPO/h0StCOgOb0bWCcNThnkESpy91Wf4mfUF2p7tOCdp37Nk/1QIRqSxnfv4Hgxyi7gcWud9cJuMw==} 752 749 engines: {node: '>=16'} 753 750 cpu: [x64] 754 751 os: [linux] 755 752 756 - '@cloudflare/workerd-linux-arm64@1.20250428.0': 757 - resolution: {integrity: sha512-D9NRBnW46nl1EQsP13qfkYb5lbt4C6nxl38SBKY/NOcZAUoHzNB5K0GaK8LxvpkM7X/97ySojlMfR5jh5DNXYQ==} 753 + '@cloudflare/workerd-linux-arm64@1.20250321.0': 754 + resolution: {integrity: sha512-wRWyMIoPIS1UBXCisW0FYTgGsfZD4AVS0hXA5nuLc0c21CvzZpmmTjqEWMcwPFenwy/MNL61NautVOC4qJqQ3Q==} 758 755 engines: {node: '>=16'} 759 756 cpu: [arm64] 760 757 os: [linux] 761 758 762 - '@cloudflare/workerd-windows-64@1.20250428.0': 763 - resolution: {integrity: sha512-RQCRj28eitjKD0tmei6iFOuWqMuHMHdNGEigRmbkmuTlpbWHNAoHikgCzZQ/dkKDdatA76TmcpbyECNf31oaTA==} 759 + '@cloudflare/workerd-windows-64@1.20250321.0': 760 + resolution: {integrity: sha512-8vYP3QYO0zo2faUDfWl88jjfUvz7Si9GS3mUYaTh/TR9LcAUtsO7muLxPamqEyoxNFtbQgy08R4rTid94KRi3w==} 764 761 engines: {node: '>=16'} 765 762 cpu: [x64] 766 763 os: [win32] ··· 769 766 resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 770 767 engines: {node: '>=12'} 771 768 772 - '@emnapi/runtime@1.4.3': 773 - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} 769 + '@emnapi/runtime@1.4.0': 770 + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} 774 771 775 - '@esbuild/aix-ppc64@0.25.2': 776 - resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} 772 + '@esbuild/aix-ppc64@0.24.0': 773 + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} 777 774 engines: {node: '>=18'} 778 775 cpu: [ppc64] 779 776 os: [aix] 780 777 781 - '@esbuild/aix-ppc64@0.25.3': 782 - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} 778 + '@esbuild/aix-ppc64@0.24.2': 779 + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} 783 780 engines: {node: '>=18'} 784 781 cpu: [ppc64] 785 782 os: [aix] 786 783 787 - '@esbuild/android-arm64@0.25.2': 788 - resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} 784 + '@esbuild/android-arm64@0.24.0': 785 + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} 789 786 engines: {node: '>=18'} 790 787 cpu: [arm64] 791 788 os: [android] 792 789 793 - '@esbuild/android-arm64@0.25.3': 794 - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} 790 + '@esbuild/android-arm64@0.24.2': 791 + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 795 792 engines: {node: '>=18'} 796 793 cpu: [arm64] 797 794 os: [android] 798 795 799 - '@esbuild/android-arm@0.25.2': 800 - resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} 796 + '@esbuild/android-arm@0.24.0': 797 + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} 801 798 engines: {node: '>=18'} 802 799 cpu: [arm] 803 800 os: [android] 804 801 805 - '@esbuild/android-arm@0.25.3': 806 - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} 802 + '@esbuild/android-arm@0.24.2': 803 + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} 807 804 engines: {node: '>=18'} 808 805 cpu: [arm] 809 806 os: [android] 810 807 811 - '@esbuild/android-x64@0.25.2': 812 - resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} 808 + '@esbuild/android-x64@0.24.0': 809 + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} 813 810 engines: {node: '>=18'} 814 811 cpu: [x64] 815 812 os: [android] 816 813 817 - '@esbuild/android-x64@0.25.3': 818 - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} 814 + '@esbuild/android-x64@0.24.2': 815 + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} 819 816 engines: {node: '>=18'} 820 817 cpu: [x64] 821 818 os: [android] 822 819 823 - '@esbuild/darwin-arm64@0.25.2': 824 - resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} 820 + '@esbuild/darwin-arm64@0.24.0': 821 + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} 825 822 engines: {node: '>=18'} 826 823 cpu: [arm64] 827 824 os: [darwin] 828 825 829 - '@esbuild/darwin-arm64@0.25.3': 830 - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} 826 + '@esbuild/darwin-arm64@0.24.2': 827 + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} 831 828 engines: {node: '>=18'} 832 829 cpu: [arm64] 833 830 os: [darwin] 834 831 835 - '@esbuild/darwin-x64@0.25.2': 836 - resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} 832 + '@esbuild/darwin-x64@0.24.0': 833 + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} 837 834 engines: {node: '>=18'} 838 835 cpu: [x64] 839 836 os: [darwin] 840 837 841 - '@esbuild/darwin-x64@0.25.3': 842 - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} 838 + '@esbuild/darwin-x64@0.24.2': 839 + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 843 840 engines: {node: '>=18'} 844 841 cpu: [x64] 845 842 os: [darwin] 846 843 847 - '@esbuild/freebsd-arm64@0.25.2': 848 - resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} 844 + '@esbuild/freebsd-arm64@0.24.0': 845 + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} 849 846 engines: {node: '>=18'} 850 847 cpu: [arm64] 851 848 os: [freebsd] 852 849 853 - '@esbuild/freebsd-arm64@0.25.3': 854 - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} 850 + '@esbuild/freebsd-arm64@0.24.2': 851 + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} 855 852 engines: {node: '>=18'} 856 853 cpu: [arm64] 857 854 os: [freebsd] 858 855 859 - '@esbuild/freebsd-x64@0.25.2': 860 - resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} 856 + '@esbuild/freebsd-x64@0.24.0': 857 + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} 861 858 engines: {node: '>=18'} 862 859 cpu: [x64] 863 860 os: [freebsd] 864 861 865 - '@esbuild/freebsd-x64@0.25.3': 866 - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} 862 + '@esbuild/freebsd-x64@0.24.2': 863 + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} 867 864 engines: {node: '>=18'} 868 865 cpu: [x64] 869 866 os: [freebsd] 870 867 871 - '@esbuild/linux-arm64@0.25.2': 872 - resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} 868 + '@esbuild/linux-arm64@0.24.0': 869 + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} 873 870 engines: {node: '>=18'} 874 871 cpu: [arm64] 875 872 os: [linux] 876 873 877 - '@esbuild/linux-arm64@0.25.3': 878 - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} 874 + '@esbuild/linux-arm64@0.24.2': 875 + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} 879 876 engines: {node: '>=18'} 880 877 cpu: [arm64] 881 878 os: [linux] 882 879 883 - '@esbuild/linux-arm@0.25.2': 884 - resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} 880 + '@esbuild/linux-arm@0.24.0': 881 + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} 885 882 engines: {node: '>=18'} 886 883 cpu: [arm] 887 884 os: [linux] 888 885 889 - '@esbuild/linux-arm@0.25.3': 890 - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} 886 + '@esbuild/linux-arm@0.24.2': 887 + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} 891 888 engines: {node: '>=18'} 892 889 cpu: [arm] 893 890 os: [linux] 894 891 895 - '@esbuild/linux-ia32@0.25.2': 896 - resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} 892 + '@esbuild/linux-ia32@0.24.0': 893 + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} 897 894 engines: {node: '>=18'} 898 895 cpu: [ia32] 899 896 os: [linux] 900 897 901 - '@esbuild/linux-ia32@0.25.3': 902 - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} 898 + '@esbuild/linux-ia32@0.24.2': 899 + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 903 900 engines: {node: '>=18'} 904 901 cpu: [ia32] 905 902 os: [linux] 906 903 907 - '@esbuild/linux-loong64@0.25.2': 908 - resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} 904 + '@esbuild/linux-loong64@0.24.0': 905 + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} 909 906 engines: {node: '>=18'} 910 907 cpu: [loong64] 911 908 os: [linux] 912 909 913 - '@esbuild/linux-loong64@0.25.3': 914 - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} 910 + '@esbuild/linux-loong64@0.24.2': 911 + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} 915 912 engines: {node: '>=18'} 916 913 cpu: [loong64] 917 914 os: [linux] 918 915 919 - '@esbuild/linux-mips64el@0.25.2': 920 - resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} 916 + '@esbuild/linux-mips64el@0.24.0': 917 + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} 921 918 engines: {node: '>=18'} 922 919 cpu: [mips64el] 923 920 os: [linux] 924 921 925 - '@esbuild/linux-mips64el@0.25.3': 926 - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} 922 + '@esbuild/linux-mips64el@0.24.2': 923 + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} 927 924 engines: {node: '>=18'} 928 925 cpu: [mips64el] 929 926 os: [linux] 930 927 931 - '@esbuild/linux-ppc64@0.25.2': 932 - resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} 928 + '@esbuild/linux-ppc64@0.24.0': 929 + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} 933 930 engines: {node: '>=18'} 934 931 cpu: [ppc64] 935 932 os: [linux] 936 933 937 - '@esbuild/linux-ppc64@0.25.3': 938 - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} 934 + '@esbuild/linux-ppc64@0.24.2': 935 + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} 939 936 engines: {node: '>=18'} 940 937 cpu: [ppc64] 941 938 os: [linux] 942 939 943 - '@esbuild/linux-riscv64@0.25.2': 944 - resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} 940 + '@esbuild/linux-riscv64@0.24.0': 941 + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} 945 942 engines: {node: '>=18'} 946 943 cpu: [riscv64] 947 944 os: [linux] 948 945 949 - '@esbuild/linux-riscv64@0.25.3': 950 - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} 946 + '@esbuild/linux-riscv64@0.24.2': 947 + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} 951 948 engines: {node: '>=18'} 952 949 cpu: [riscv64] 953 950 os: [linux] 954 951 955 - '@esbuild/linux-s390x@0.25.2': 956 - resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} 952 + '@esbuild/linux-s390x@0.24.0': 953 + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} 957 954 engines: {node: '>=18'} 958 955 cpu: [s390x] 959 956 os: [linux] 960 957 961 - '@esbuild/linux-s390x@0.25.3': 962 - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} 958 + '@esbuild/linux-s390x@0.24.2': 959 + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 963 960 engines: {node: '>=18'} 964 961 cpu: [s390x] 965 962 os: [linux] 966 963 967 - '@esbuild/linux-x64@0.25.2': 968 - resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} 964 + '@esbuild/linux-x64@0.24.0': 965 + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} 969 966 engines: {node: '>=18'} 970 967 cpu: [x64] 971 968 os: [linux] 972 969 973 - '@esbuild/linux-x64@0.25.3': 974 - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} 970 + '@esbuild/linux-x64@0.24.2': 971 + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} 975 972 engines: {node: '>=18'} 976 973 cpu: [x64] 977 974 os: [linux] 978 975 979 - '@esbuild/netbsd-arm64@0.25.2': 980 - resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} 976 + '@esbuild/netbsd-arm64@0.24.2': 977 + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 981 978 engines: {node: '>=18'} 982 979 cpu: [arm64] 983 980 os: [netbsd] 984 981 985 - '@esbuild/netbsd-arm64@0.25.3': 986 - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} 987 - engines: {node: '>=18'} 988 - cpu: [arm64] 989 - os: [netbsd] 990 - 991 - '@esbuild/netbsd-x64@0.25.2': 992 - resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} 982 + '@esbuild/netbsd-x64@0.24.0': 983 + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} 993 984 engines: {node: '>=18'} 994 985 cpu: [x64] 995 986 os: [netbsd] 996 987 997 - '@esbuild/netbsd-x64@0.25.3': 998 - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} 988 + '@esbuild/netbsd-x64@0.24.2': 989 + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} 999 990 engines: {node: '>=18'} 1000 991 cpu: [x64] 1001 992 os: [netbsd] 1002 993 1003 - '@esbuild/openbsd-arm64@0.25.2': 1004 - resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} 994 + '@esbuild/openbsd-arm64@0.24.0': 995 + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} 1005 996 engines: {node: '>=18'} 1006 997 cpu: [arm64] 1007 998 os: [openbsd] 1008 999 1009 - '@esbuild/openbsd-arm64@0.25.3': 1010 - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} 1000 + '@esbuild/openbsd-arm64@0.24.2': 1001 + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 1011 1002 engines: {node: '>=18'} 1012 1003 cpu: [arm64] 1013 1004 os: [openbsd] 1014 1005 1015 - '@esbuild/openbsd-x64@0.25.2': 1016 - resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} 1006 + '@esbuild/openbsd-x64@0.24.0': 1007 + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} 1017 1008 engines: {node: '>=18'} 1018 1009 cpu: [x64] 1019 1010 os: [openbsd] 1020 1011 1021 - '@esbuild/openbsd-x64@0.25.3': 1022 - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} 1012 + '@esbuild/openbsd-x64@0.24.2': 1013 + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 1023 1014 engines: {node: '>=18'} 1024 1015 cpu: [x64] 1025 1016 os: [openbsd] 1026 1017 1027 - '@esbuild/sunos-x64@0.25.2': 1028 - resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} 1018 + '@esbuild/sunos-x64@0.24.0': 1019 + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} 1029 1020 engines: {node: '>=18'} 1030 1021 cpu: [x64] 1031 1022 os: [sunos] 1032 1023 1033 - '@esbuild/sunos-x64@0.25.3': 1034 - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} 1024 + '@esbuild/sunos-x64@0.24.2': 1025 + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} 1035 1026 engines: {node: '>=18'} 1036 1027 cpu: [x64] 1037 1028 os: [sunos] 1038 1029 1039 - '@esbuild/win32-arm64@0.25.2': 1040 - resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} 1030 + '@esbuild/win32-arm64@0.24.0': 1031 + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} 1041 1032 engines: {node: '>=18'} 1042 1033 cpu: [arm64] 1043 1034 os: [win32] 1044 1035 1045 - '@esbuild/win32-arm64@0.25.3': 1046 - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} 1036 + '@esbuild/win32-arm64@0.24.2': 1037 + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 1047 1038 engines: {node: '>=18'} 1048 1039 cpu: [arm64] 1049 1040 os: [win32] 1050 1041 1051 - '@esbuild/win32-ia32@0.25.2': 1052 - resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} 1042 + '@esbuild/win32-ia32@0.24.0': 1043 + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} 1053 1044 engines: {node: '>=18'} 1054 1045 cpu: [ia32] 1055 1046 os: [win32] 1056 1047 1057 - '@esbuild/win32-ia32@0.25.3': 1058 - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} 1048 + '@esbuild/win32-ia32@0.24.2': 1049 + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} 1059 1050 engines: {node: '>=18'} 1060 1051 cpu: [ia32] 1061 1052 os: [win32] 1062 1053 1063 - '@esbuild/win32-x64@0.25.2': 1064 - resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} 1054 + '@esbuild/win32-x64@0.24.0': 1055 + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} 1065 1056 engines: {node: '>=18'} 1066 1057 cpu: [x64] 1067 1058 os: [win32] 1068 1059 1069 - '@esbuild/win32-x64@0.25.3': 1070 - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} 1060 + '@esbuild/win32-x64@0.24.2': 1061 + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 1071 1062 engines: {node: '>=18'} 1072 1063 cpu: [x64] 1073 1064 os: [win32] ··· 1086 1077 resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} 1087 1078 engines: {node: '>=14'} 1088 1079 1089 - '@floating-ui/core@1.7.0': 1090 - resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} 1080 + '@floating-ui/core@1.6.9': 1081 + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} 1091 1082 1092 - '@floating-ui/dom@1.7.0': 1093 - resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} 1083 + '@floating-ui/dom@1.6.13': 1084 + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} 1094 1085 1095 1086 '@floating-ui/utils@0.2.9': 1096 1087 resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} ··· 1234 1225 '@jsr/mary__async-iterator-fns@0.1.1': 1235 1226 resolution: {integrity: sha512-ef/TDpu6yGTAb4fbGEjSFPO7u49WrxJeXa9T6fvmjlpEfR84qxrjTR6MEUQ1hMySD0+O9yQKvBl/KL5x7K9+iA==, tarball: https://npm.jsr.io/~/11/@jsr/mary__async-iterator-fns/0.1.1.tgz} 1236 1227 1237 - '@jsr/mary__batch-fetch@0.1.0': 1238 - resolution: {integrity: sha512-A5SmTfDUMjr+AaJA+wFg4eKKVQm6/51CYTg5ssO+vcnaCJoP1Y0RURG6VkMno9QUholf3AAldfzRgQOXDZbFgg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__batch-fetch/0.1.0.tgz} 1239 - 1240 1228 '@jsr/mary__date-fns@0.1.3': 1241 1229 resolution: {integrity: sha512-kjS04BESEHO9ZTqjOxk4ip8DsAdVDmt/jC5V4zVIYq3VD/04+WJK9kjdQda23eVZMuF9ZZY0zMswU7UXG+PSrg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__date-fns/0.1.3.tgz} 1242 1230 ··· 1326 1314 rollup: 1327 1315 optional: true 1328 1316 1329 - '@rollup/rollup-android-arm-eabi@4.40.1': 1330 - resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} 1317 + '@rollup/rollup-android-arm-eabi@4.37.0': 1318 + resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} 1331 1319 cpu: [arm] 1332 1320 os: [android] 1333 1321 1334 - '@rollup/rollup-android-arm64@4.40.1': 1335 - resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} 1322 + '@rollup/rollup-android-arm64@4.37.0': 1323 + resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} 1336 1324 cpu: [arm64] 1337 1325 os: [android] 1338 1326 1339 - '@rollup/rollup-darwin-arm64@4.40.1': 1340 - resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} 1327 + '@rollup/rollup-darwin-arm64@4.37.0': 1328 + resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} 1341 1329 cpu: [arm64] 1342 1330 os: [darwin] 1343 1331 1344 - '@rollup/rollup-darwin-x64@4.40.1': 1345 - resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} 1332 + '@rollup/rollup-darwin-x64@4.37.0': 1333 + resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} 1346 1334 cpu: [x64] 1347 1335 os: [darwin] 1348 1336 1349 - '@rollup/rollup-freebsd-arm64@4.40.1': 1350 - resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} 1337 + '@rollup/rollup-freebsd-arm64@4.37.0': 1338 + resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} 1351 1339 cpu: [arm64] 1352 1340 os: [freebsd] 1353 1341 1354 - '@rollup/rollup-freebsd-x64@4.40.1': 1355 - resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} 1342 + '@rollup/rollup-freebsd-x64@4.37.0': 1343 + resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} 1356 1344 cpu: [x64] 1357 1345 os: [freebsd] 1358 1346 1359 - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 1360 - resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} 1347 + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 1348 + resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} 1361 1349 cpu: [arm] 1362 1350 os: [linux] 1363 1351 1364 - '@rollup/rollup-linux-arm-musleabihf@4.40.1': 1365 - resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} 1352 + '@rollup/rollup-linux-arm-musleabihf@4.37.0': 1353 + resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} 1366 1354 cpu: [arm] 1367 1355 os: [linux] 1368 1356 1369 - '@rollup/rollup-linux-arm64-gnu@4.40.1': 1370 - resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} 1357 + '@rollup/rollup-linux-arm64-gnu@4.37.0': 1358 + resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} 1371 1359 cpu: [arm64] 1372 1360 os: [linux] 1373 1361 1374 - '@rollup/rollup-linux-arm64-musl@4.40.1': 1375 - resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} 1362 + '@rollup/rollup-linux-arm64-musl@4.37.0': 1363 + resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} 1376 1364 cpu: [arm64] 1377 1365 os: [linux] 1378 1366 1379 - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 1380 - resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} 1367 + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 1368 + resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} 1381 1369 cpu: [loong64] 1382 1370 os: [linux] 1383 1371 1384 - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 1385 - resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} 1372 + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 1373 + resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} 1386 1374 cpu: [ppc64] 1387 1375 os: [linux] 1388 1376 1389 - '@rollup/rollup-linux-riscv64-gnu@4.40.1': 1390 - resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} 1377 + '@rollup/rollup-linux-riscv64-gnu@4.37.0': 1378 + resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} 1391 1379 cpu: [riscv64] 1392 1380 os: [linux] 1393 1381 1394 - '@rollup/rollup-linux-riscv64-musl@4.40.1': 1395 - resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} 1382 + '@rollup/rollup-linux-riscv64-musl@4.37.0': 1383 + resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} 1396 1384 cpu: [riscv64] 1397 1385 os: [linux] 1398 1386 1399 - '@rollup/rollup-linux-s390x-gnu@4.40.1': 1400 - resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} 1387 + '@rollup/rollup-linux-s390x-gnu@4.37.0': 1388 + resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} 1401 1389 cpu: [s390x] 1402 1390 os: [linux] 1403 1391 1404 - '@rollup/rollup-linux-x64-gnu@4.40.1': 1405 - resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} 1392 + '@rollup/rollup-linux-x64-gnu@4.37.0': 1393 + resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} 1406 1394 cpu: [x64] 1407 1395 os: [linux] 1408 1396 1409 - '@rollup/rollup-linux-x64-musl@4.40.1': 1410 - resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} 1397 + '@rollup/rollup-linux-x64-musl@4.37.0': 1398 + resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} 1411 1399 cpu: [x64] 1412 1400 os: [linux] 1413 1401 1414 - '@rollup/rollup-win32-arm64-msvc@4.40.1': 1415 - resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} 1402 + '@rollup/rollup-win32-arm64-msvc@4.37.0': 1403 + resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} 1416 1404 cpu: [arm64] 1417 1405 os: [win32] 1418 1406 1419 - '@rollup/rollup-win32-ia32-msvc@4.40.1': 1420 - resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} 1407 + '@rollup/rollup-win32-ia32-msvc@4.37.0': 1408 + resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} 1421 1409 cpu: [ia32] 1422 1410 os: [win32] 1423 1411 1424 - '@rollup/rollup-win32-x64-msvc@4.40.1': 1425 - resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} 1412 + '@rollup/rollup-win32-x64-msvc@4.37.0': 1413 + resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} 1426 1414 cpu: [x64] 1427 1415 os: [win32] 1428 1416 ··· 1451 1439 '@types/babel__core@7.20.5': 1452 1440 resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 1453 1441 1454 - '@types/babel__generator@7.27.0': 1455 - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 1442 + '@types/babel__generator@7.6.8': 1443 + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 1456 1444 1457 1445 '@types/babel__template@7.4.4': 1458 1446 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} ··· 1469 1457 '@types/estree@0.0.39': 1470 1458 resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} 1471 1459 1460 + '@types/estree@1.0.6': 1461 + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 1462 + 1472 1463 '@types/estree@1.0.7': 1473 1464 resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 1474 1465 ··· 1541 1532 peerDependencies: 1542 1533 postcss: ^8.1.0 1543 1534 1544 - babel-plugin-jsx-dom-expressions@0.39.8: 1545 - resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} 1535 + babel-plugin-jsx-dom-expressions@0.39.7: 1536 + resolution: {integrity: sha512-8GzVmFla7jaTNWW8W+lTMl9YGva4/06CtwJjySnkYtt8G1v9weCzc2SuF1DfrudcCNb2Doetc1FRg33swBYZCA==} 1546 1537 peerDependencies: 1547 1538 '@babel/core': ^7.20.12 1548 1539 ··· 1566 1557 peerDependencies: 1567 1558 '@babel/core': ^7.24.4 1568 1559 1569 - babel-preset-solid@1.9.6: 1570 - resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} 1560 + babel-preset-solid@1.9.5: 1561 + resolution: {integrity: sha512-85I3osODJ1LvZbv8wFozROV1vXq32BubqHXAGu73A//TRs3NLI1OFP83AQBUTSQHwgZQmARjHlJciym3we+V+w==} 1571 1562 peerDependencies: 1572 1563 '@babel/core': ^7.0.0 1573 1564 ··· 1594 1585 resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 1595 1586 engines: {node: '>=8'} 1596 1587 1597 - browserslist@4.24.5: 1598 - resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} 1588 + browserslist@4.24.4: 1589 + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 1599 1590 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1600 1591 hasBin: true 1601 1592 ··· 1606 1597 resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 1607 1598 engines: {node: '>= 6'} 1608 1599 1609 - caniuse-lite@1.0.30001716: 1610 - resolution: {integrity: sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==} 1600 + caniuse-lite@1.0.30001707: 1601 + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} 1611 1602 1612 1603 chalk@4.1.2: 1613 1604 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} ··· 1651 1642 convert-source-map@2.0.0: 1652 1643 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1653 1644 1654 - cookie@0.7.2: 1655 - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 1645 + cookie@0.5.0: 1646 + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1656 1647 engines: {node: '>= 0.6'} 1657 1648 1658 - core-js-compat@3.42.0: 1659 - resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} 1649 + core-js-compat@3.41.0: 1650 + resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} 1660 1651 1661 1652 cross-spawn@7.0.6: 1662 1653 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} ··· 1693 1684 defu@6.1.4: 1694 1685 resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 1695 1686 1696 - detect-libc@2.0.4: 1697 - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} 1687 + detect-libc@2.0.3: 1688 + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 1698 1689 engines: {node: '>=8'} 1699 1690 1700 1691 didyoumean@1.2.2: ··· 1711 1702 engines: {node: '>=0.10.0'} 1712 1703 hasBin: true 1713 1704 1714 - electron-to-chromium@1.5.149: 1715 - resolution: {integrity: sha512-UyiO82eb9dVOx8YO3ajDf9jz2kKyt98DEITRdeLPstOEuTlLzDA4Gyq5K9he71TQziU5jUVu2OAu5N48HmQiyQ==} 1705 + electron-to-chromium@1.5.128: 1706 + resolution: {integrity: sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==} 1716 1707 1717 1708 emoji-regex@8.0.0: 1718 1709 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} ··· 1720 1711 emoji-regex@9.2.2: 1721 1712 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1722 1713 1723 - entities@6.0.0: 1724 - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} 1714 + entities@4.5.0: 1715 + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1725 1716 engines: {node: '>=0.12'} 1726 1717 1727 - esbuild@0.25.2: 1728 - resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} 1718 + esbuild@0.24.0: 1719 + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} 1729 1720 engines: {node: '>=18'} 1730 1721 hasBin: true 1731 1722 1732 - esbuild@0.25.3: 1733 - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} 1723 + esbuild@0.24.2: 1724 + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} 1734 1725 engines: {node: '>=18'} 1735 1726 hasBin: true 1736 1727 ··· 1752 1743 resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} 1753 1744 engines: {node: '>=6'} 1754 1745 1755 - exsolve@1.0.5: 1756 - resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} 1746 + exsolve@1.0.4: 1747 + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} 1757 1748 1758 1749 fast-deep-equal@3.1.3: 1759 1750 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} ··· 1771 1762 fastq@1.19.1: 1772 1763 resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1773 1764 1774 - fdir@6.4.4: 1775 - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} 1765 + fdir@6.4.3: 1766 + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 1776 1767 peerDependencies: 1777 1768 picomatch: ^3 || ^4 1778 1769 peerDependenciesMeta: ··· 1845 1836 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1846 1837 engines: {node: '>=8'} 1847 1838 1848 - hls.js@1.6.2: 1849 - resolution: {integrity: sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==} 1839 + hls.js@1.6.0: 1840 + resolution: {integrity: sha512-AlW8ymcDKZuKtzXCUmEy4nOcHRkebnShH6t6hC2+QJQP0WXlTUSSO9Kp22uSEYdCgpwkXEJsfOhqxrgO2tDctQ==} 1850 1841 1851 1842 html-entities@2.3.3: 1852 1843 resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} ··· 2001 1992 engines: {node: '>=10.0.0'} 2002 1993 hasBin: true 2003 1994 2004 - miniflare@4.20250428.1: 2005 - resolution: {integrity: sha512-M3qcJXjeAEimHrEeWXEhrJiC3YHB5M3QSqqK67pOTI+lHn0QyVG/2iFUjVJ/nv+i10uxeAEva8GRGeu+tKRCmQ==} 1995 + miniflare@4.20250321.1: 1996 + resolution: {integrity: sha512-pQuVtF6vQ1zMvPCo3Z19mzSFjgnlEnybzNzAJZipsqIk6kMXpYBZq+d8cWmeQFkBYlgeZKeKJ4EBKT6KapfTNg==} 2006 1997 engines: {node: '>=18.0.0'} 2007 1998 hasBin: true 2008 1999 ··· 2069 2060 package-json-from-dist@1.0.1: 2070 2061 resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 2071 2062 2072 - parse5@7.3.0: 2073 - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 2063 + parse5@7.2.1: 2064 + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 2074 2065 2075 2066 path-is-absolute@1.0.1: 2076 2067 resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} ··· 2250 2241 2251 2242 regenerate@1.4.2: 2252 2243 resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} 2244 + 2245 + regenerator-runtime@0.14.1: 2246 + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 2247 + 2248 + regenerator-transform@0.15.2: 2249 + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} 2253 2250 2254 2251 regexpu-core@6.2.0: 2255 2252 resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} ··· 2280 2277 engines: {node: '>=10.0.0'} 2281 2278 hasBin: true 2282 2279 2283 - rollup@4.40.1: 2284 - resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} 2280 + rollup@4.37.0: 2281 + resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} 2285 2282 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2286 2283 hasBin: true 2287 2284 ··· 2339 2336 '@floating-ui/dom': ^1.0 2340 2337 solid-js: ^1.3 2341 2338 2342 - solid-js@1.9.6: 2343 - resolution: {integrity: sha512-PoasAJvLk60hRtOTe9ulvALOdLjjqxuxcGZRolBQqxOnXrBXHGzqMT4ijNhGsDAYdOgEa8ZYaAE94PSldrFSkA==} 2339 + solid-js@1.9.5: 2340 + resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==} 2344 2341 2345 2342 solid-refresh@0.6.3: 2346 2343 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 2435 2432 thenify@3.3.1: 2436 2433 resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2437 2434 2438 - tinyglobby@0.2.13: 2439 - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} 2435 + tinyglobby@0.2.12: 2436 + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} 2440 2437 engines: {node: '>=12.0.0'} 2441 2438 2442 2439 to-regex-range@5.0.1: ··· 2456 2453 resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} 2457 2454 engines: {node: '>=10'} 2458 2455 2459 - typescript@5.8.3: 2460 - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 2456 + typescript@5.7.2: 2457 + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 2461 2458 engines: {node: '>=14.17'} 2462 2459 hasBin: true 2463 2460 2464 - ufo@1.6.1: 2465 - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 2461 + ufo@1.5.4: 2462 + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 2466 2463 2467 2464 undici@5.29.0: 2468 2465 resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} ··· 2531 2528 '@testing-library/jest-dom': 2532 2529 optional: true 2533 2530 2534 - vite@6.3.4: 2535 - resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==} 2531 + vite@6.0.5: 2532 + resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==} 2536 2533 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 2537 2534 hasBin: true 2538 2535 peerDependencies: ··· 2582 2579 webidl-conversions@4.0.2: 2583 2580 resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2584 2581 2585 - webm-muxer@5.1.2: 2586 - resolution: {integrity: sha512-gl9pXKRD/zr/njtW6P2Z/a4qSWFHjEL1OxMjoRVR10eZCw0b/J3Z0pX5RAX8x03Q78P585KVxQQkd4lWuek5rQ==} 2582 + webm-muxer@5.1.1: 2583 + resolution: {integrity: sha512-oqGiFrwVr0LoVEIgSIISV+CURkPje1K2WiTzH+FUT4A70PcZHSPkwihBxwr+jumr76sQmhMHo9mvP82AuNiCiA==} 2587 2584 2588 2585 whatwg-url@7.1.0: 2589 2586 resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} ··· 2642 2639 workbox-window@7.3.0: 2643 2640 resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==} 2644 2641 2645 - workerd@1.20250428.0: 2646 - resolution: {integrity: sha512-JJNWkHkwPQKQdvtM9UORijgYdcdJsihA4SfYjwh02IUQsdMyZ9jizV1sX9yWi9B9ptlohTW8UNHJEATuphGgdg==} 2642 + workerd@1.20250321.0: 2643 + resolution: {integrity: sha512-vyuz9pdJ+7o1lC79vQ2UVRLXPARa2Lq94PbTfqEcYQeSxeR9X+YqhNq2yysv8Zs5vpokmexLCtMniPp9u+2LVQ==} 2647 2644 engines: {node: '>=16'} 2648 2645 hasBin: true 2649 2646 2650 - wrangler@4.14.1: 2651 - resolution: {integrity: sha512-EU7IThP7i68TBftJJSveogvWZ5k/WRijcJh3UclDWiWWhDZTPbL6LOJEFhHKqFzHOaC4Y2Aewt48rfTz0e7oCw==} 2647 + wrangler@4.6.0: 2648 + resolution: {integrity: sha512-2a2ZD0adlvxQ1H+nRKkuuD0dkgaYTOPlC7gBolItk5TfqOSliEV4m6DtZtKtJp33ioM+Uy6TlEWPpA2TrDveEQ==} 2652 2649 engines: {node: '>=18.0.0'} 2653 2650 hasBin: true 2654 2651 peerDependencies: 2655 - '@cloudflare/workers-types': ^4.20250428.0 2652 + '@cloudflare/workers-types': ^4.20250321.0 2656 2653 peerDependenciesMeta: 2657 2654 '@cloudflare/workers-types': 2658 2655 optional: true ··· 2683 2680 yallist@3.1.1: 2684 2681 resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2685 2682 2686 - yaml@2.7.1: 2687 - resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} 2683 + yaml@2.7.0: 2684 + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} 2688 2685 engines: {node: '>= 14'} 2689 2686 hasBin: true 2690 2687 2691 - youch@3.3.4: 2692 - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} 2688 + youch@3.2.3: 2689 + resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==} 2693 2690 2694 2691 zod@3.22.3: 2695 2692 resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} ··· 2710 2707 jsonpointer: 5.0.1 2711 2708 leven: 3.1.0 2712 2709 2713 - '@atcute/bluemoji@2.0.0(@atcute/bluesky@2.1.1(@atcute/client@3.1.0))(@atcute/client@3.1.0)': 2710 + '@atcute/bluemoji@1.0.4(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)': 2714 2711 dependencies: 2715 - '@atcute/bluesky': 2.1.1(@atcute/client@3.1.0) 2716 - '@atcute/client': 3.1.0 2712 + '@atcute/bluesky': 1.0.15(@atcute/client@2.0.9) 2713 + '@atcute/client': 2.0.9 2717 2714 2718 2715 '@atcute/bluesky-richtext-parser@1.0.7': {} 2719 2716 2720 - '@atcute/bluesky-richtext-segmenter@2.0.0(@atcute/bluesky@2.1.1(@atcute/client@3.1.0))(@atcute/client@3.1.0)': 2717 + '@atcute/bluesky-richtext-segmenter@1.0.5(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)': 2721 2718 dependencies: 2722 - '@atcute/bluesky': 2.1.1(@atcute/client@3.1.0) 2723 - '@atcute/client': 3.1.0 2719 + '@atcute/bluesky': 1.0.15(@atcute/client@2.0.9) 2720 + '@atcute/client': 2.0.9 2724 2721 2725 2722 '@atcute/bluesky-search-parser@0.1.0': {} 2726 2723 2727 - '@atcute/bluesky@2.1.1(@atcute/client@3.1.0)': 2724 + '@atcute/bluesky@1.0.15(@atcute/client@2.0.9)': 2728 2725 dependencies: 2729 - '@atcute/client': 3.1.0 2726 + '@atcute/client': 2.0.9 2730 2727 2731 - '@atcute/cbor@2.2.3': 2728 + '@atcute/cbor@2.2.0': 2732 2729 dependencies: 2733 - '@atcute/cid': 2.2.2 2734 - '@atcute/multibase': 1.1.3 2730 + '@atcute/cid': 2.2.0 2731 + '@atcute/multibase': 1.1.2 2735 2732 '@atcute/uint8array': 1.0.1 2736 2733 2737 - '@atcute/cid@2.2.2': 2734 + '@atcute/cid@2.2.0': 2738 2735 dependencies: 2739 - '@atcute/multibase': 1.1.3 2736 + '@atcute/multibase': 1.1.2 2740 2737 '@atcute/uint8array': 1.0.1 2741 2738 2742 - '@atcute/client@3.1.0': {} 2739 + '@atcute/client@2.0.9': {} 2743 2740 2744 - '@atcute/multibase@1.1.3': 2741 + '@atcute/multibase@1.1.2': 2745 2742 dependencies: 2746 2743 '@atcute/uint8array': 1.0.1 2747 2744 2748 - '@atcute/oauth-browser-client@1.0.18': 2745 + '@atcute/oauth-browser-client@1.0.16': 2749 2746 dependencies: 2750 - '@atcute/client': 3.1.0 2751 - '@atcute/multibase': 1.1.3 2747 + '@atcute/client': 2.0.9 2748 + '@atcute/multibase': 1.1.2 2752 2749 '@atcute/uint8array': 1.0.1 2753 2750 2754 2751 '@atcute/tid@1.0.2': {} ··· 2757 2754 2758 2755 '@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3': 2759 2756 dependencies: 2760 - '@atlaskit/pragmatic-drag-and-drop': 1.6.0 2761 - '@babel/runtime': 7.27.1 2757 + '@atlaskit/pragmatic-drag-and-drop': 1.5.2 2758 + '@babel/runtime': 7.27.0 2762 2759 2763 - '@atlaskit/pragmatic-drag-and-drop@1.6.0': 2760 + '@atlaskit/pragmatic-drag-and-drop@1.5.2': 2764 2761 dependencies: 2765 - '@babel/runtime': 7.27.1 2762 + '@babel/runtime': 7.27.0 2766 2763 bind-event-listener: 3.0.0 2767 2764 raf-schd: 4.0.3 2768 2765 2769 - '@babel/code-frame@7.27.1': 2766 + '@babel/code-frame@7.26.2': 2770 2767 dependencies: 2771 - '@babel/helper-validator-identifier': 7.27.1 2768 + '@babel/helper-validator-identifier': 7.25.9 2772 2769 js-tokens: 4.0.0 2773 2770 picocolors: 1.1.1 2774 2771 2775 - '@babel/compat-data@7.27.1': {} 2772 + '@babel/compat-data@7.26.8': {} 2776 2773 2777 - '@babel/core@7.27.1': 2774 + '@babel/core@7.26.10': 2778 2775 dependencies: 2779 2776 '@ampproject/remapping': 2.3.0 2780 - '@babel/code-frame': 7.27.1 2781 - '@babel/generator': 7.27.1 2782 - '@babel/helper-compilation-targets': 7.27.1 2783 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) 2784 - '@babel/helpers': 7.27.1 2785 - '@babel/parser': 7.27.1 2786 - '@babel/template': 7.27.1 2787 - '@babel/traverse': 7.27.1 2788 - '@babel/types': 7.27.1 2777 + '@babel/code-frame': 7.26.2 2778 + '@babel/generator': 7.27.0 2779 + '@babel/helper-compilation-targets': 7.27.0 2780 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 2781 + '@babel/helpers': 7.27.0 2782 + '@babel/parser': 7.27.0 2783 + '@babel/template': 7.27.0 2784 + '@babel/traverse': 7.27.0 2785 + '@babel/types': 7.27.0 2789 2786 convert-source-map: 2.0.0 2790 2787 debug: 4.4.0 2791 2788 gensync: 1.0.0-beta.2 ··· 2794 2791 transitivePeerDependencies: 2795 2792 - supports-color 2796 2793 2797 - '@babel/generator@7.27.1': 2794 + '@babel/generator@7.27.0': 2798 2795 dependencies: 2799 - '@babel/parser': 7.27.1 2800 - '@babel/types': 7.27.1 2796 + '@babel/parser': 7.27.0 2797 + '@babel/types': 7.27.0 2801 2798 '@jridgewell/gen-mapping': 0.3.8 2802 2799 '@jridgewell/trace-mapping': 0.3.25 2803 2800 jsesc: 3.1.0 2804 2801 2805 - '@babel/helper-annotate-as-pure@7.27.1': 2802 + '@babel/helper-annotate-as-pure@7.25.9': 2806 2803 dependencies: 2807 - '@babel/types': 7.27.1 2804 + '@babel/types': 7.27.0 2808 2805 2809 - '@babel/helper-compilation-targets@7.27.1': 2806 + '@babel/helper-compilation-targets@7.27.0': 2810 2807 dependencies: 2811 - '@babel/compat-data': 7.27.1 2812 - '@babel/helper-validator-option': 7.27.1 2813 - browserslist: 4.24.5 2808 + '@babel/compat-data': 7.26.8 2809 + '@babel/helper-validator-option': 7.25.9 2810 + browserslist: 4.24.4 2814 2811 lru-cache: 5.1.1 2815 2812 semver: 6.3.1 2816 2813 2817 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)': 2814 + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': 2818 2815 dependencies: 2819 - '@babel/core': 7.27.1 2820 - '@babel/helper-annotate-as-pure': 7.27.1 2821 - '@babel/helper-member-expression-to-functions': 7.27.1 2822 - '@babel/helper-optimise-call-expression': 7.27.1 2823 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) 2824 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 2825 - '@babel/traverse': 7.27.1 2816 + '@babel/core': 7.26.10 2817 + '@babel/helper-annotate-as-pure': 7.25.9 2818 + '@babel/helper-member-expression-to-functions': 7.25.9 2819 + '@babel/helper-optimise-call-expression': 7.25.9 2820 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) 2821 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 2822 + '@babel/traverse': 7.27.0 2826 2823 semver: 6.3.1 2827 2824 transitivePeerDependencies: 2828 2825 - supports-color 2829 2826 2830 - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1)': 2827 + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)': 2831 2828 dependencies: 2832 - '@babel/core': 7.27.1 2833 - '@babel/helper-annotate-as-pure': 7.27.1 2829 + '@babel/core': 7.26.10 2830 + '@babel/helper-annotate-as-pure': 7.25.9 2834 2831 regexpu-core: 6.2.0 2835 2832 semver: 6.3.1 2836 2833 2837 - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.1)': 2834 + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10)': 2838 2835 dependencies: 2839 - '@babel/core': 7.27.1 2840 - '@babel/helper-compilation-targets': 7.27.1 2841 - '@babel/helper-plugin-utils': 7.27.1 2836 + '@babel/core': 7.26.10 2837 + '@babel/helper-compilation-targets': 7.27.0 2838 + '@babel/helper-plugin-utils': 7.26.5 2842 2839 debug: 4.4.0 2843 2840 lodash.debounce: 4.0.8 2844 2841 resolve: 1.22.10 2845 2842 transitivePeerDependencies: 2846 2843 - supports-color 2847 2844 2848 - '@babel/helper-member-expression-to-functions@7.27.1': 2845 + '@babel/helper-member-expression-to-functions@7.25.9': 2849 2846 dependencies: 2850 - '@babel/traverse': 7.27.1 2851 - '@babel/types': 7.27.1 2847 + '@babel/traverse': 7.27.0 2848 + '@babel/types': 7.27.0 2852 2849 transitivePeerDependencies: 2853 2850 - supports-color 2854 2851 2855 2852 '@babel/helper-module-imports@7.18.6': 2856 2853 dependencies: 2857 - '@babel/types': 7.27.1 2854 + '@babel/types': 7.27.0 2858 2855 2859 - '@babel/helper-module-imports@7.27.1': 2856 + '@babel/helper-module-imports@7.25.9': 2860 2857 dependencies: 2861 - '@babel/traverse': 7.27.1 2862 - '@babel/types': 7.27.1 2858 + '@babel/traverse': 7.27.0 2859 + '@babel/types': 7.27.0 2863 2860 transitivePeerDependencies: 2864 2861 - supports-color 2865 2862 2866 - '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': 2863 + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': 2867 2864 dependencies: 2868 - '@babel/core': 7.27.1 2869 - '@babel/helper-module-imports': 7.27.1 2870 - '@babel/helper-validator-identifier': 7.27.1 2871 - '@babel/traverse': 7.27.1 2865 + '@babel/core': 7.26.10 2866 + '@babel/helper-module-imports': 7.25.9 2867 + '@babel/helper-validator-identifier': 7.25.9 2868 + '@babel/traverse': 7.27.0 2872 2869 transitivePeerDependencies: 2873 2870 - supports-color 2874 2871 2875 - '@babel/helper-optimise-call-expression@7.27.1': 2872 + '@babel/helper-optimise-call-expression@7.25.9': 2876 2873 dependencies: 2877 - '@babel/types': 7.27.1 2874 + '@babel/types': 7.27.0 2878 2875 2879 - '@babel/helper-plugin-utils@7.27.1': {} 2876 + '@babel/helper-plugin-utils@7.26.5': {} 2880 2877 2881 - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)': 2878 + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': 2882 2879 dependencies: 2883 - '@babel/core': 7.27.1 2884 - '@babel/helper-annotate-as-pure': 7.27.1 2885 - '@babel/helper-wrap-function': 7.27.1 2886 - '@babel/traverse': 7.27.1 2880 + '@babel/core': 7.26.10 2881 + '@babel/helper-annotate-as-pure': 7.25.9 2882 + '@babel/helper-wrap-function': 7.25.9 2883 + '@babel/traverse': 7.27.0 2887 2884 transitivePeerDependencies: 2888 2885 - supports-color 2889 2886 2890 - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.1)': 2887 + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': 2891 2888 dependencies: 2892 - '@babel/core': 7.27.1 2893 - '@babel/helper-member-expression-to-functions': 7.27.1 2894 - '@babel/helper-optimise-call-expression': 7.27.1 2895 - '@babel/traverse': 7.27.1 2889 + '@babel/core': 7.26.10 2890 + '@babel/helper-member-expression-to-functions': 7.25.9 2891 + '@babel/helper-optimise-call-expression': 7.25.9 2892 + '@babel/traverse': 7.27.0 2896 2893 transitivePeerDependencies: 2897 2894 - supports-color 2898 2895 2899 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': 2896 + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': 2900 2897 dependencies: 2901 - '@babel/traverse': 7.27.1 2902 - '@babel/types': 7.27.1 2898 + '@babel/traverse': 7.27.0 2899 + '@babel/types': 7.27.0 2903 2900 transitivePeerDependencies: 2904 2901 - supports-color 2905 2902 2906 - '@babel/helper-string-parser@7.27.1': {} 2903 + '@babel/helper-string-parser@7.25.9': {} 2907 2904 2908 - '@babel/helper-validator-identifier@7.27.1': {} 2905 + '@babel/helper-validator-identifier@7.25.9': {} 2909 2906 2910 - '@babel/helper-validator-option@7.27.1': {} 2907 + '@babel/helper-validator-option@7.25.9': {} 2911 2908 2912 - '@babel/helper-wrap-function@7.27.1': 2909 + '@babel/helper-wrap-function@7.25.9': 2913 2910 dependencies: 2914 - '@babel/template': 7.27.1 2915 - '@babel/traverse': 7.27.1 2916 - '@babel/types': 7.27.1 2911 + '@babel/template': 7.27.0 2912 + '@babel/traverse': 7.27.0 2913 + '@babel/types': 7.27.0 2917 2914 transitivePeerDependencies: 2918 2915 - supports-color 2919 2916 2920 - '@babel/helpers@7.27.1': 2917 + '@babel/helpers@7.27.0': 2921 2918 dependencies: 2922 - '@babel/template': 7.27.1 2923 - '@babel/types': 7.27.1 2919 + '@babel/template': 7.27.0 2920 + '@babel/types': 7.27.0 2924 2921 2925 - '@babel/parser@7.27.1': 2922 + '@babel/parser@7.27.0': 2926 2923 dependencies: 2927 - '@babel/types': 7.27.1 2924 + '@babel/types': 7.27.0 2928 2925 2929 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1)': 2926 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': 2930 2927 dependencies: 2931 - '@babel/core': 7.27.1 2932 - '@babel/helper-plugin-utils': 7.27.1 2933 - '@babel/traverse': 7.27.1 2928 + '@babel/core': 7.26.10 2929 + '@babel/helper-plugin-utils': 7.26.5 2930 + '@babel/traverse': 7.27.0 2934 2931 transitivePeerDependencies: 2935 2932 - supports-color 2936 2933 2937 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.1)': 2934 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)': 2938 2935 dependencies: 2939 - '@babel/core': 7.27.1 2940 - '@babel/helper-plugin-utils': 7.27.1 2936 + '@babel/core': 7.26.10 2937 + '@babel/helper-plugin-utils': 7.26.5 2941 2938 2942 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)': 2939 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)': 2943 2940 dependencies: 2944 - '@babel/core': 7.27.1 2945 - '@babel/helper-plugin-utils': 7.27.1 2941 + '@babel/core': 7.26.10 2942 + '@babel/helper-plugin-utils': 7.26.5 2946 2943 2947 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)': 2944 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)': 2948 2945 dependencies: 2949 - '@babel/core': 7.27.1 2950 - '@babel/helper-plugin-utils': 7.27.1 2951 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 2952 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) 2946 + '@babel/core': 7.26.10 2947 + '@babel/helper-plugin-utils': 7.26.5 2948 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 2949 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) 2953 2950 transitivePeerDependencies: 2954 2951 - supports-color 2955 2952 2956 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.1)': 2953 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)': 2957 2954 dependencies: 2958 - '@babel/core': 7.27.1 2959 - '@babel/helper-plugin-utils': 7.27.1 2960 - '@babel/traverse': 7.27.1 2955 + '@babel/core': 7.26.10 2956 + '@babel/helper-plugin-utils': 7.26.5 2957 + '@babel/traverse': 7.27.0 2961 2958 transitivePeerDependencies: 2962 2959 - supports-color 2963 2960 2964 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1)': 2961 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)': 2965 2962 dependencies: 2966 - '@babel/core': 7.27.1 2963 + '@babel/core': 7.26.10 2967 2964 2968 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': 2965 + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)': 2969 2966 dependencies: 2970 - '@babel/core': 7.27.1 2971 - '@babel/helper-plugin-utils': 7.27.1 2967 + '@babel/core': 7.26.10 2968 + '@babel/helper-plugin-utils': 7.26.5 2972 2969 2973 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)': 2970 + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': 2974 2971 dependencies: 2975 - '@babel/core': 7.27.1 2976 - '@babel/helper-plugin-utils': 7.27.1 2972 + '@babel/core': 7.26.10 2973 + '@babel/helper-plugin-utils': 7.26.5 2977 2974 2978 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)': 2975 + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': 2979 2976 dependencies: 2980 - '@babel/core': 7.27.1 2981 - '@babel/helper-plugin-utils': 7.27.1 2977 + '@babel/core': 7.26.10 2978 + '@babel/helper-plugin-utils': 7.26.5 2982 2979 2983 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)': 2980 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)': 2984 2981 dependencies: 2985 - '@babel/core': 7.27.1 2986 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 2987 - '@babel/helper-plugin-utils': 7.27.1 2982 + '@babel/core': 7.26.10 2983 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 2984 + '@babel/helper-plugin-utils': 7.26.5 2988 2985 2989 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)': 2986 + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)': 2990 2987 dependencies: 2991 - '@babel/core': 7.27.1 2992 - '@babel/helper-plugin-utils': 7.27.1 2988 + '@babel/core': 7.26.10 2989 + '@babel/helper-plugin-utils': 7.26.5 2993 2990 2994 - '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.1)': 2991 + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)': 2995 2992 dependencies: 2996 - '@babel/core': 7.27.1 2997 - '@babel/helper-plugin-utils': 7.27.1 2998 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) 2999 - '@babel/traverse': 7.27.1 2993 + '@babel/core': 7.26.10 2994 + '@babel/helper-plugin-utils': 7.26.5 2995 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) 2996 + '@babel/traverse': 7.27.0 3000 2997 transitivePeerDependencies: 3001 2998 - supports-color 3002 2999 3003 - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.1)': 3000 + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)': 3004 3001 dependencies: 3005 - '@babel/core': 7.27.1 3006 - '@babel/helper-module-imports': 7.27.1 3007 - '@babel/helper-plugin-utils': 7.27.1 3008 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) 3002 + '@babel/core': 7.26.10 3003 + '@babel/helper-module-imports': 7.25.9 3004 + '@babel/helper-plugin-utils': 7.26.5 3005 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) 3009 3006 transitivePeerDependencies: 3010 3007 - supports-color 3011 3008 3012 - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1)': 3009 + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)': 3013 3010 dependencies: 3014 - '@babel/core': 7.27.1 3015 - '@babel/helper-plugin-utils': 7.27.1 3011 + '@babel/core': 7.26.10 3012 + '@babel/helper-plugin-utils': 7.26.5 3016 3013 3017 - '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.1)': 3014 + '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10)': 3018 3015 dependencies: 3019 - '@babel/core': 7.27.1 3020 - '@babel/helper-plugin-utils': 7.27.1 3016 + '@babel/core': 7.26.10 3017 + '@babel/helper-plugin-utils': 7.26.5 3021 3018 3022 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1)': 3019 + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)': 3023 3020 dependencies: 3024 - '@babel/core': 7.27.1 3025 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) 3026 - '@babel/helper-plugin-utils': 7.27.1 3021 + '@babel/core': 7.26.10 3022 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) 3023 + '@babel/helper-plugin-utils': 7.26.5 3027 3024 transitivePeerDependencies: 3028 3025 - supports-color 3029 3026 3030 - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.1)': 3027 + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)': 3031 3028 dependencies: 3032 - '@babel/core': 7.27.1 3033 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) 3034 - '@babel/helper-plugin-utils': 7.27.1 3029 + '@babel/core': 7.26.10 3030 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) 3031 + '@babel/helper-plugin-utils': 7.26.5 3035 3032 transitivePeerDependencies: 3036 3033 - supports-color 3037 3034 3038 - '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.1)': 3035 + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)': 3039 3036 dependencies: 3040 - '@babel/core': 7.27.1 3041 - '@babel/helper-annotate-as-pure': 7.27.1 3042 - '@babel/helper-compilation-targets': 7.27.1 3043 - '@babel/helper-plugin-utils': 7.27.1 3044 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) 3045 - '@babel/traverse': 7.27.1 3037 + '@babel/core': 7.26.10 3038 + '@babel/helper-annotate-as-pure': 7.25.9 3039 + '@babel/helper-compilation-targets': 7.27.0 3040 + '@babel/helper-plugin-utils': 7.26.5 3041 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) 3042 + '@babel/traverse': 7.27.0 3046 3043 globals: 11.12.0 3047 3044 transitivePeerDependencies: 3048 3045 - supports-color 3049 3046 3050 - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.1)': 3047 + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)': 3051 3048 dependencies: 3052 - '@babel/core': 7.27.1 3053 - '@babel/helper-plugin-utils': 7.27.1 3054 - '@babel/template': 7.27.1 3049 + '@babel/core': 7.26.10 3050 + '@babel/helper-plugin-utils': 7.26.5 3051 + '@babel/template': 7.27.0 3055 3052 3056 - '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.1)': 3053 + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)': 3057 3054 dependencies: 3058 - '@babel/core': 7.27.1 3059 - '@babel/helper-plugin-utils': 7.27.1 3055 + '@babel/core': 7.26.10 3056 + '@babel/helper-plugin-utils': 7.26.5 3060 3057 3061 - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1)': 3058 + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)': 3062 3059 dependencies: 3063 - '@babel/core': 7.27.1 3064 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 3065 - '@babel/helper-plugin-utils': 7.27.1 3060 + '@babel/core': 7.26.10 3061 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 3062 + '@babel/helper-plugin-utils': 7.26.5 3066 3063 3067 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)': 3064 + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)': 3068 3065 dependencies: 3069 - '@babel/core': 7.27.1 3070 - '@babel/helper-plugin-utils': 7.27.1 3066 + '@babel/core': 7.26.10 3067 + '@babel/helper-plugin-utils': 7.26.5 3071 3068 3072 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': 3069 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': 3073 3070 dependencies: 3074 - '@babel/core': 7.27.1 3075 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 3076 - '@babel/helper-plugin-utils': 7.27.1 3071 + '@babel/core': 7.26.10 3072 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 3073 + '@babel/helper-plugin-utils': 7.26.5 3077 3074 3078 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)': 3075 + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)': 3079 3076 dependencies: 3080 - '@babel/core': 7.27.1 3081 - '@babel/helper-plugin-utils': 7.27.1 3077 + '@babel/core': 7.26.10 3078 + '@babel/helper-plugin-utils': 7.26.5 3082 3079 3083 - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1)': 3080 + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)': 3084 3081 dependencies: 3085 - '@babel/core': 7.27.1 3086 - '@babel/helper-plugin-utils': 7.27.1 3082 + '@babel/core': 7.26.10 3083 + '@babel/helper-plugin-utils': 7.26.5 3087 3084 3088 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)': 3085 + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)': 3089 3086 dependencies: 3090 - '@babel/core': 7.27.1 3091 - '@babel/helper-plugin-utils': 7.27.1 3087 + '@babel/core': 7.26.10 3088 + '@babel/helper-plugin-utils': 7.26.5 3092 3089 3093 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)': 3090 + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)': 3094 3091 dependencies: 3095 - '@babel/core': 7.27.1 3096 - '@babel/helper-plugin-utils': 7.27.1 3097 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 3092 + '@babel/core': 7.26.10 3093 + '@babel/helper-plugin-utils': 7.26.5 3094 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 3098 3095 transitivePeerDependencies: 3099 3096 - supports-color 3100 3097 3101 - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1)': 3098 + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)': 3102 3099 dependencies: 3103 - '@babel/core': 7.27.1 3104 - '@babel/helper-compilation-targets': 7.27.1 3105 - '@babel/helper-plugin-utils': 7.27.1 3106 - '@babel/traverse': 7.27.1 3100 + '@babel/core': 7.26.10 3101 + '@babel/helper-compilation-targets': 7.27.0 3102 + '@babel/helper-plugin-utils': 7.26.5 3103 + '@babel/traverse': 7.27.0 3107 3104 transitivePeerDependencies: 3108 3105 - supports-color 3109 3106 3110 - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.1)': 3107 + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)': 3111 3108 dependencies: 3112 - '@babel/core': 7.27.1 3113 - '@babel/helper-plugin-utils': 7.27.1 3109 + '@babel/core': 7.26.10 3110 + '@babel/helper-plugin-utils': 7.26.5 3114 3111 3115 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)': 3112 + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)': 3116 3113 dependencies: 3117 - '@babel/core': 7.27.1 3118 - '@babel/helper-plugin-utils': 7.27.1 3114 + '@babel/core': 7.26.10 3115 + '@babel/helper-plugin-utils': 7.26.5 3119 3116 3120 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1)': 3117 + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)': 3121 3118 dependencies: 3122 - '@babel/core': 7.27.1 3123 - '@babel/helper-plugin-utils': 7.27.1 3119 + '@babel/core': 7.26.10 3120 + '@babel/helper-plugin-utils': 7.26.5 3124 3121 3125 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)': 3122 + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)': 3126 3123 dependencies: 3127 - '@babel/core': 7.27.1 3128 - '@babel/helper-plugin-utils': 7.27.1 3124 + '@babel/core': 7.26.10 3125 + '@babel/helper-plugin-utils': 7.26.5 3129 3126 3130 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)': 3127 + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)': 3131 3128 dependencies: 3132 - '@babel/core': 7.27.1 3133 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) 3134 - '@babel/helper-plugin-utils': 7.27.1 3129 + '@babel/core': 7.26.10 3130 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 3131 + '@babel/helper-plugin-utils': 7.26.5 3135 3132 transitivePeerDependencies: 3136 3133 - supports-color 3137 3134 3138 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.1)': 3135 + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': 3139 3136 dependencies: 3140 - '@babel/core': 7.27.1 3141 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) 3142 - '@babel/helper-plugin-utils': 7.27.1 3137 + '@babel/core': 7.26.10 3138 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 3139 + '@babel/helper-plugin-utils': 7.26.5 3143 3140 transitivePeerDependencies: 3144 3141 - supports-color 3145 3142 3146 - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.1)': 3143 + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)': 3147 3144 dependencies: 3148 - '@babel/core': 7.27.1 3149 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) 3150 - '@babel/helper-plugin-utils': 7.27.1 3151 - '@babel/helper-validator-identifier': 7.27.1 3152 - '@babel/traverse': 7.27.1 3145 + '@babel/core': 7.26.10 3146 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 3147 + '@babel/helper-plugin-utils': 7.26.5 3148 + '@babel/helper-validator-identifier': 7.25.9 3149 + '@babel/traverse': 7.27.0 3153 3150 transitivePeerDependencies: 3154 3151 - supports-color 3155 3152 3156 - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1)': 3153 + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)': 3157 3154 dependencies: 3158 - '@babel/core': 7.27.1 3159 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) 3160 - '@babel/helper-plugin-utils': 7.27.1 3155 + '@babel/core': 7.26.10 3156 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 3157 + '@babel/helper-plugin-utils': 7.26.5 3161 3158 transitivePeerDependencies: 3162 3159 - supports-color 3163 3160 3164 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': 3161 + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': 3165 3162 dependencies: 3166 - '@babel/core': 7.27.1 3167 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 3168 - '@babel/helper-plugin-utils': 7.27.1 3163 + '@babel/core': 7.26.10 3164 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 3165 + '@babel/helper-plugin-utils': 7.26.5 3169 3166 3170 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)': 3167 + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)': 3171 3168 dependencies: 3172 - '@babel/core': 7.27.1 3173 - '@babel/helper-plugin-utils': 7.27.1 3169 + '@babel/core': 7.26.10 3170 + '@babel/helper-plugin-utils': 7.26.5 3174 3171 3175 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1)': 3172 + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)': 3176 3173 dependencies: 3177 - '@babel/core': 7.27.1 3178 - '@babel/helper-plugin-utils': 7.27.1 3174 + '@babel/core': 7.26.10 3175 + '@babel/helper-plugin-utils': 7.26.5 3179 3176 3180 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1)': 3177 + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)': 3181 3178 dependencies: 3182 - '@babel/core': 7.27.1 3183 - '@babel/helper-plugin-utils': 7.27.1 3179 + '@babel/core': 7.26.10 3180 + '@babel/helper-plugin-utils': 7.26.5 3184 3181 3185 - '@babel/plugin-transform-object-rest-spread@7.27.1(@babel/core@7.27.1)': 3182 + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)': 3186 3183 dependencies: 3187 - '@babel/core': 7.27.1 3188 - '@babel/helper-compilation-targets': 7.27.1 3189 - '@babel/helper-plugin-utils': 7.27.1 3190 - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) 3184 + '@babel/core': 7.26.10 3185 + '@babel/helper-compilation-targets': 7.27.0 3186 + '@babel/helper-plugin-utils': 7.26.5 3187 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) 3191 3188 3192 - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)': 3189 + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)': 3193 3190 dependencies: 3194 - '@babel/core': 7.27.1 3195 - '@babel/helper-plugin-utils': 7.27.1 3196 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) 3191 + '@babel/core': 7.26.10 3192 + '@babel/helper-plugin-utils': 7.26.5 3193 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) 3197 3194 transitivePeerDependencies: 3198 3195 - supports-color 3199 3196 3200 - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.1)': 3197 + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)': 3201 3198 dependencies: 3202 - '@babel/core': 7.27.1 3203 - '@babel/helper-plugin-utils': 7.27.1 3199 + '@babel/core': 7.26.10 3200 + '@babel/helper-plugin-utils': 7.26.5 3204 3201 3205 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1)': 3202 + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)': 3206 3203 dependencies: 3207 - '@babel/core': 7.27.1 3208 - '@babel/helper-plugin-utils': 7.27.1 3209 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 3204 + '@babel/core': 7.26.10 3205 + '@babel/helper-plugin-utils': 7.26.5 3206 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 3210 3207 transitivePeerDependencies: 3211 3208 - supports-color 3212 3209 3213 - '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.1)': 3210 + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)': 3214 3211 dependencies: 3215 - '@babel/core': 7.27.1 3216 - '@babel/helper-plugin-utils': 7.27.1 3212 + '@babel/core': 7.26.10 3213 + '@babel/helper-plugin-utils': 7.26.5 3217 3214 3218 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1)': 3215 + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)': 3219 3216 dependencies: 3220 - '@babel/core': 7.27.1 3221 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) 3222 - '@babel/helper-plugin-utils': 7.27.1 3217 + '@babel/core': 7.26.10 3218 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) 3219 + '@babel/helper-plugin-utils': 7.26.5 3223 3220 transitivePeerDependencies: 3224 3221 - supports-color 3225 3222 3226 - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)': 3223 + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)': 3227 3224 dependencies: 3228 - '@babel/core': 7.27.1 3229 - '@babel/helper-annotate-as-pure': 7.27.1 3230 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) 3231 - '@babel/helper-plugin-utils': 7.27.1 3225 + '@babel/core': 7.26.10 3226 + '@babel/helper-annotate-as-pure': 7.25.9 3227 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) 3228 + '@babel/helper-plugin-utils': 7.26.5 3232 3229 transitivePeerDependencies: 3233 3230 - supports-color 3234 3231 3235 - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1)': 3232 + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)': 3236 3233 dependencies: 3237 - '@babel/core': 7.27.1 3238 - '@babel/helper-plugin-utils': 7.27.1 3234 + '@babel/core': 7.26.10 3235 + '@babel/helper-plugin-utils': 7.26.5 3239 3236 3240 - '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.1)': 3237 + '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)': 3241 3238 dependencies: 3242 - '@babel/core': 7.27.1 3243 - '@babel/helper-plugin-utils': 7.27.1 3239 + '@babel/core': 7.26.10 3240 + '@babel/helper-plugin-utils': 7.26.5 3241 + regenerator-transform: 0.15.2 3244 3242 3245 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1)': 3243 + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)': 3246 3244 dependencies: 3247 - '@babel/core': 7.27.1 3248 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 3249 - '@babel/helper-plugin-utils': 7.27.1 3245 + '@babel/core': 7.26.10 3246 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 3247 + '@babel/helper-plugin-utils': 7.26.5 3250 3248 3251 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)': 3249 + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)': 3252 3250 dependencies: 3253 - '@babel/core': 7.27.1 3254 - '@babel/helper-plugin-utils': 7.27.1 3251 + '@babel/core': 7.26.10 3252 + '@babel/helper-plugin-utils': 7.26.5 3255 3253 3256 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1)': 3254 + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)': 3257 3255 dependencies: 3258 - '@babel/core': 7.27.1 3259 - '@babel/helper-plugin-utils': 7.27.1 3256 + '@babel/core': 7.26.10 3257 + '@babel/helper-plugin-utils': 7.26.5 3260 3258 3261 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1)': 3259 + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)': 3262 3260 dependencies: 3263 - '@babel/core': 7.27.1 3264 - '@babel/helper-plugin-utils': 7.27.1 3265 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 3261 + '@babel/core': 7.26.10 3262 + '@babel/helper-plugin-utils': 7.26.5 3263 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 3266 3264 transitivePeerDependencies: 3267 3265 - supports-color 3268 3266 3269 - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1)': 3267 + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)': 3270 3268 dependencies: 3271 - '@babel/core': 7.27.1 3272 - '@babel/helper-plugin-utils': 7.27.1 3269 + '@babel/core': 7.26.10 3270 + '@babel/helper-plugin-utils': 7.26.5 3273 3271 3274 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)': 3272 + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)': 3275 3273 dependencies: 3276 - '@babel/core': 7.27.1 3277 - '@babel/helper-plugin-utils': 7.27.1 3274 + '@babel/core': 7.26.10 3275 + '@babel/helper-plugin-utils': 7.26.5 3278 3276 3279 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)': 3277 + '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10)': 3280 3278 dependencies: 3281 - '@babel/core': 7.27.1 3282 - '@babel/helper-plugin-utils': 7.27.1 3279 + '@babel/core': 7.26.10 3280 + '@babel/helper-plugin-utils': 7.26.5 3283 3281 3284 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1)': 3282 + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)': 3285 3283 dependencies: 3286 - '@babel/core': 7.27.1 3287 - '@babel/helper-plugin-utils': 7.27.1 3284 + '@babel/core': 7.26.10 3285 + '@babel/helper-plugin-utils': 7.26.5 3288 3286 3289 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1)': 3287 + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)': 3290 3288 dependencies: 3291 - '@babel/core': 7.27.1 3292 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 3293 - '@babel/helper-plugin-utils': 7.27.1 3289 + '@babel/core': 7.26.10 3290 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 3291 + '@babel/helper-plugin-utils': 7.26.5 3294 3292 3295 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)': 3293 + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)': 3296 3294 dependencies: 3297 - '@babel/core': 7.27.1 3298 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 3299 - '@babel/helper-plugin-utils': 7.27.1 3295 + '@babel/core': 7.26.10 3296 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 3297 + '@babel/helper-plugin-utils': 7.26.5 3300 3298 3301 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1)': 3299 + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)': 3302 3300 dependencies: 3303 - '@babel/core': 7.27.1 3304 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) 3305 - '@babel/helper-plugin-utils': 7.27.1 3301 + '@babel/core': 7.26.10 3302 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) 3303 + '@babel/helper-plugin-utils': 7.26.5 3306 3304 3307 - '@babel/preset-env@7.27.1(@babel/core@7.27.1)': 3305 + '@babel/preset-env@7.26.9(@babel/core@7.26.10)': 3308 3306 dependencies: 3309 - '@babel/compat-data': 7.27.1 3310 - '@babel/core': 7.27.1 3311 - '@babel/helper-compilation-targets': 7.27.1 3312 - '@babel/helper-plugin-utils': 7.27.1 3313 - '@babel/helper-validator-option': 7.27.1 3314 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.1) 3315 - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.1) 3316 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.1) 3317 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.1) 3318 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.1) 3319 - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1) 3320 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.1) 3321 - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1) 3322 - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.1) 3323 - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) 3324 - '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.1) 3325 - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.1) 3326 - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.1) 3327 - '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.27.1) 3328 - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.1) 3329 - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.1) 3330 - '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.1) 3331 - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.1) 3332 - '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) 3333 - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.1) 3334 - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.1) 3335 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) 3336 - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.1) 3337 - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.1) 3338 - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.1) 3339 - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) 3340 - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.1) 3341 - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.1) 3342 - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.1) 3343 - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.1) 3344 - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.1) 3345 - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.1) 3346 - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) 3347 - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.1) 3348 - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.1) 3349 - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) 3350 - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1) 3351 - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.1) 3352 - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.1) 3353 - '@babel/plugin-transform-object-rest-spread': 7.27.1(@babel/core@7.27.1) 3354 - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1) 3355 - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.1) 3356 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) 3357 - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) 3358 - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.1) 3359 - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.1) 3360 - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.1) 3361 - '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.1) 3362 - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.1) 3363 - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.1) 3364 - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) 3365 - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.1) 3366 - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.1) 3367 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) 3368 - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.1) 3369 - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.1) 3370 - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.1) 3371 - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.1) 3372 - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.1) 3373 - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.1) 3374 - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.1) 3375 - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1) 3376 - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.1) 3377 - core-js-compat: 3.42.0 3307 + '@babel/compat-data': 7.26.8 3308 + '@babel/core': 7.26.10 3309 + '@babel/helper-compilation-targets': 7.27.0 3310 + '@babel/helper-plugin-utils': 7.26.5 3311 + '@babel/helper-validator-option': 7.25.9 3312 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10) 3313 + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10) 3314 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10) 3315 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10) 3316 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10) 3317 + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10) 3318 + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10) 3319 + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) 3320 + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) 3321 + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10) 3322 + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) 3323 + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) 3324 + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10) 3325 + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10) 3326 + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) 3327 + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10) 3328 + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10) 3329 + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10) 3330 + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10) 3331 + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10) 3332 + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10) 3333 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) 3334 + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10) 3335 + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10) 3336 + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10) 3337 + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10) 3338 + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10) 3339 + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10) 3340 + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10) 3341 + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10) 3342 + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10) 3343 + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10) 3344 + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) 3345 + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10) 3346 + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10) 3347 + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) 3348 + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10) 3349 + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10) 3350 + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10) 3351 + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10) 3352 + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10) 3353 + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10) 3354 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) 3355 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) 3356 + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10) 3357 + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10) 3358 + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10) 3359 + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10) 3360 + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10) 3361 + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10) 3362 + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10) 3363 + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10) 3364 + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10) 3365 + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10) 3366 + '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10) 3367 + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10) 3368 + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10) 3369 + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10) 3370 + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10) 3371 + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10) 3372 + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10) 3373 + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) 3374 + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10) 3375 + core-js-compat: 3.41.0 3378 3376 semver: 6.3.1 3379 3377 transitivePeerDependencies: 3380 3378 - supports-color 3381 3379 3382 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1)': 3380 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)': 3383 3381 dependencies: 3384 - '@babel/core': 7.27.1 3385 - '@babel/helper-plugin-utils': 7.27.1 3386 - '@babel/types': 7.27.1 3382 + '@babel/core': 7.26.10 3383 + '@babel/helper-plugin-utils': 7.26.5 3384 + '@babel/types': 7.27.0 3387 3385 esutils: 2.0.3 3388 3386 3389 - '@babel/runtime@7.27.1': {} 3387 + '@babel/runtime@7.27.0': 3388 + dependencies: 3389 + regenerator-runtime: 0.14.1 3390 3390 3391 - '@babel/template@7.27.1': 3391 + '@babel/template@7.27.0': 3392 3392 dependencies: 3393 - '@babel/code-frame': 7.27.1 3394 - '@babel/parser': 7.27.1 3395 - '@babel/types': 7.27.1 3393 + '@babel/code-frame': 7.26.2 3394 + '@babel/parser': 7.27.0 3395 + '@babel/types': 7.27.0 3396 3396 3397 - '@babel/traverse@7.27.1': 3397 + '@babel/traverse@7.27.0': 3398 3398 dependencies: 3399 - '@babel/code-frame': 7.27.1 3400 - '@babel/generator': 7.27.1 3401 - '@babel/parser': 7.27.1 3402 - '@babel/template': 7.27.1 3403 - '@babel/types': 7.27.1 3399 + '@babel/code-frame': 7.26.2 3400 + '@babel/generator': 7.27.0 3401 + '@babel/parser': 7.27.0 3402 + '@babel/template': 7.27.0 3403 + '@babel/types': 7.27.0 3404 3404 debug: 4.4.0 3405 3405 globals: 11.12.0 3406 3406 transitivePeerDependencies: 3407 3407 - supports-color 3408 3408 3409 - '@babel/types@7.27.1': 3409 + '@babel/types@7.27.0': 3410 3410 dependencies: 3411 - '@babel/helper-string-parser': 7.27.1 3412 - '@babel/helper-validator-identifier': 7.27.1 3411 + '@babel/helper-string-parser': 7.25.9 3412 + '@babel/helper-validator-identifier': 7.25.9 3413 3413 3414 3414 '@cloudflare/kv-asset-handler@0.4.0': 3415 3415 dependencies: 3416 3416 mime: 3.0.0 3417 3417 3418 - '@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250428.0)': 3418 + '@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0)': 3419 3419 dependencies: 3420 3420 unenv: 2.0.0-rc.15 3421 3421 optionalDependencies: 3422 - workerd: 1.20250428.0 3422 + workerd: 1.20250321.0 3423 3423 3424 - '@cloudflare/workerd-darwin-64@1.20250428.0': 3424 + '@cloudflare/workerd-darwin-64@1.20250321.0': 3425 3425 optional: true 3426 3426 3427 - '@cloudflare/workerd-darwin-arm64@1.20250428.0': 3427 + '@cloudflare/workerd-darwin-arm64@1.20250321.0': 3428 3428 optional: true 3429 3429 3430 - '@cloudflare/workerd-linux-64@1.20250428.0': 3430 + '@cloudflare/workerd-linux-64@1.20250321.0': 3431 3431 optional: true 3432 3432 3433 - '@cloudflare/workerd-linux-arm64@1.20250428.0': 3433 + '@cloudflare/workerd-linux-arm64@1.20250321.0': 3434 3434 optional: true 3435 3435 3436 - '@cloudflare/workerd-windows-64@1.20250428.0': 3436 + '@cloudflare/workerd-windows-64@1.20250321.0': 3437 3437 optional: true 3438 3438 3439 3439 '@cspotcode/source-map-support@0.8.1': 3440 3440 dependencies: 3441 3441 '@jridgewell/trace-mapping': 0.3.9 3442 3442 3443 - '@emnapi/runtime@1.4.3': 3443 + '@emnapi/runtime@1.4.0': 3444 3444 dependencies: 3445 3445 tslib: 2.8.1 3446 3446 optional: true 3447 3447 3448 - '@esbuild/aix-ppc64@0.25.2': 3448 + '@esbuild/aix-ppc64@0.24.0': 3449 3449 optional: true 3450 3450 3451 - '@esbuild/aix-ppc64@0.25.3': 3451 + '@esbuild/aix-ppc64@0.24.2': 3452 3452 optional: true 3453 3453 3454 - '@esbuild/android-arm64@0.25.2': 3454 + '@esbuild/android-arm64@0.24.0': 3455 3455 optional: true 3456 3456 3457 - '@esbuild/android-arm64@0.25.3': 3457 + '@esbuild/android-arm64@0.24.2': 3458 3458 optional: true 3459 3459 3460 - '@esbuild/android-arm@0.25.2': 3460 + '@esbuild/android-arm@0.24.0': 3461 3461 optional: true 3462 3462 3463 - '@esbuild/android-arm@0.25.3': 3463 + '@esbuild/android-arm@0.24.2': 3464 3464 optional: true 3465 3465 3466 - '@esbuild/android-x64@0.25.2': 3466 + '@esbuild/android-x64@0.24.0': 3467 3467 optional: true 3468 3468 3469 - '@esbuild/android-x64@0.25.3': 3469 + '@esbuild/android-x64@0.24.2': 3470 3470 optional: true 3471 3471 3472 - '@esbuild/darwin-arm64@0.25.2': 3472 + '@esbuild/darwin-arm64@0.24.0': 3473 3473 optional: true 3474 3474 3475 - '@esbuild/darwin-arm64@0.25.3': 3475 + '@esbuild/darwin-arm64@0.24.2': 3476 3476 optional: true 3477 3477 3478 - '@esbuild/darwin-x64@0.25.2': 3478 + '@esbuild/darwin-x64@0.24.0': 3479 3479 optional: true 3480 3480 3481 - '@esbuild/darwin-x64@0.25.3': 3481 + '@esbuild/darwin-x64@0.24.2': 3482 3482 optional: true 3483 3483 3484 - '@esbuild/freebsd-arm64@0.25.2': 3484 + '@esbuild/freebsd-arm64@0.24.0': 3485 3485 optional: true 3486 3486 3487 - '@esbuild/freebsd-arm64@0.25.3': 3487 + '@esbuild/freebsd-arm64@0.24.2': 3488 3488 optional: true 3489 3489 3490 - '@esbuild/freebsd-x64@0.25.2': 3490 + '@esbuild/freebsd-x64@0.24.0': 3491 3491 optional: true 3492 3492 3493 - '@esbuild/freebsd-x64@0.25.3': 3493 + '@esbuild/freebsd-x64@0.24.2': 3494 3494 optional: true 3495 3495 3496 - '@esbuild/linux-arm64@0.25.2': 3496 + '@esbuild/linux-arm64@0.24.0': 3497 3497 optional: true 3498 3498 3499 - '@esbuild/linux-arm64@0.25.3': 3499 + '@esbuild/linux-arm64@0.24.2': 3500 3500 optional: true 3501 3501 3502 - '@esbuild/linux-arm@0.25.2': 3502 + '@esbuild/linux-arm@0.24.0': 3503 3503 optional: true 3504 3504 3505 - '@esbuild/linux-arm@0.25.3': 3505 + '@esbuild/linux-arm@0.24.2': 3506 3506 optional: true 3507 3507 3508 - '@esbuild/linux-ia32@0.25.2': 3508 + '@esbuild/linux-ia32@0.24.0': 3509 3509 optional: true 3510 3510 3511 - '@esbuild/linux-ia32@0.25.3': 3511 + '@esbuild/linux-ia32@0.24.2': 3512 3512 optional: true 3513 3513 3514 - '@esbuild/linux-loong64@0.25.2': 3514 + '@esbuild/linux-loong64@0.24.0': 3515 3515 optional: true 3516 3516 3517 - '@esbuild/linux-loong64@0.25.3': 3517 + '@esbuild/linux-loong64@0.24.2': 3518 3518 optional: true 3519 3519 3520 - '@esbuild/linux-mips64el@0.25.2': 3520 + '@esbuild/linux-mips64el@0.24.0': 3521 3521 optional: true 3522 3522 3523 - '@esbuild/linux-mips64el@0.25.3': 3523 + '@esbuild/linux-mips64el@0.24.2': 3524 3524 optional: true 3525 3525 3526 - '@esbuild/linux-ppc64@0.25.2': 3526 + '@esbuild/linux-ppc64@0.24.0': 3527 3527 optional: true 3528 3528 3529 - '@esbuild/linux-ppc64@0.25.3': 3529 + '@esbuild/linux-ppc64@0.24.2': 3530 3530 optional: true 3531 3531 3532 - '@esbuild/linux-riscv64@0.25.2': 3532 + '@esbuild/linux-riscv64@0.24.0': 3533 3533 optional: true 3534 3534 3535 - '@esbuild/linux-riscv64@0.25.3': 3535 + '@esbuild/linux-riscv64@0.24.2': 3536 3536 optional: true 3537 3537 3538 - '@esbuild/linux-s390x@0.25.2': 3538 + '@esbuild/linux-s390x@0.24.0': 3539 3539 optional: true 3540 3540 3541 - '@esbuild/linux-s390x@0.25.3': 3541 + '@esbuild/linux-s390x@0.24.2': 3542 3542 optional: true 3543 3543 3544 - '@esbuild/linux-x64@0.25.2': 3544 + '@esbuild/linux-x64@0.24.0': 3545 3545 optional: true 3546 3546 3547 - '@esbuild/linux-x64@0.25.3': 3547 + '@esbuild/linux-x64@0.24.2': 3548 3548 optional: true 3549 3549 3550 - '@esbuild/netbsd-arm64@0.25.2': 3550 + '@esbuild/netbsd-arm64@0.24.2': 3551 3551 optional: true 3552 3552 3553 - '@esbuild/netbsd-arm64@0.25.3': 3553 + '@esbuild/netbsd-x64@0.24.0': 3554 3554 optional: true 3555 3555 3556 - '@esbuild/netbsd-x64@0.25.2': 3556 + '@esbuild/netbsd-x64@0.24.2': 3557 3557 optional: true 3558 3558 3559 - '@esbuild/netbsd-x64@0.25.3': 3559 + '@esbuild/openbsd-arm64@0.24.0': 3560 3560 optional: true 3561 3561 3562 - '@esbuild/openbsd-arm64@0.25.2': 3562 + '@esbuild/openbsd-arm64@0.24.2': 3563 3563 optional: true 3564 3564 3565 - '@esbuild/openbsd-arm64@0.25.3': 3565 + '@esbuild/openbsd-x64@0.24.0': 3566 3566 optional: true 3567 3567 3568 - '@esbuild/openbsd-x64@0.25.2': 3568 + '@esbuild/openbsd-x64@0.24.2': 3569 3569 optional: true 3570 3570 3571 - '@esbuild/openbsd-x64@0.25.3': 3571 + '@esbuild/sunos-x64@0.24.0': 3572 3572 optional: true 3573 3573 3574 - '@esbuild/sunos-x64@0.25.2': 3574 + '@esbuild/sunos-x64@0.24.2': 3575 3575 optional: true 3576 3576 3577 - '@esbuild/sunos-x64@0.25.3': 3577 + '@esbuild/win32-arm64@0.24.0': 3578 3578 optional: true 3579 3579 3580 - '@esbuild/win32-arm64@0.25.2': 3580 + '@esbuild/win32-arm64@0.24.2': 3581 3581 optional: true 3582 3582 3583 - '@esbuild/win32-arm64@0.25.3': 3583 + '@esbuild/win32-ia32@0.24.0': 3584 3584 optional: true 3585 3585 3586 - '@esbuild/win32-ia32@0.25.2': 3586 + '@esbuild/win32-ia32@0.24.2': 3587 3587 optional: true 3588 3588 3589 - '@esbuild/win32-ia32@0.25.3': 3589 + '@esbuild/win32-x64@0.24.0': 3590 3590 optional: true 3591 3591 3592 - '@esbuild/win32-x64@0.25.2': 3592 + '@esbuild/win32-x64@0.24.2': 3593 3593 optional: true 3594 3594 3595 - '@esbuild/win32-x64@0.25.3': 3596 - optional: true 3597 - 3598 - '@externdefs/solid-freeze@0.1.1(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268))': 3595 + '@externdefs/solid-freeze@0.1.1(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))': 3599 3596 dependencies: 3600 - solid-js: 1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268) 3597 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 3601 3598 3602 - '@externdefs/solid-query@0.1.5(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268))': 3599 + '@externdefs/solid-query@0.1.5(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))': 3603 3600 dependencies: 3604 3601 '@tanstack/query-core': 5.17.19(patch_hash=0b06407b66b7af88765fb6e01e112677a8c09ce518cb4f547cee8a0044471acd) 3605 - solid-js: 1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268) 3602 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 3606 3603 3607 3604 '@fastify/busboy@2.1.1': {} 3608 3605 3609 - '@floating-ui/core@1.7.0': 3606 + '@floating-ui/core@1.6.9': 3610 3607 dependencies: 3611 3608 '@floating-ui/utils': 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea) 3612 3609 3613 - '@floating-ui/dom@1.7.0': 3610 + '@floating-ui/dom@1.6.13': 3614 3611 dependencies: 3615 - '@floating-ui/core': 1.7.0 3612 + '@floating-ui/core': 1.6.9 3616 3613 '@floating-ui/utils': 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea) 3617 3614 3618 3615 '@floating-ui/utils@0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea)': {} ··· 3683 3680 3684 3681 '@img/sharp-wasm32@0.33.5': 3685 3682 dependencies: 3686 - '@emnapi/runtime': 1.4.3 3683 + '@emnapi/runtime': 1.4.0 3687 3684 optional: true 3688 3685 3689 3686 '@img/sharp-win32-ia32@0.33.5': ··· 3732 3729 3733 3730 '@jsr/mary__async-iterator-fns@0.1.1': {} 3734 3731 3735 - '@jsr/mary__batch-fetch@0.1.0': {} 3736 - 3737 3732 '@jsr/mary__date-fns@0.1.3': {} 3738 3733 3739 3734 '@jsr/mary__events@0.2.0': {} ··· 3765 3760 '@pkgjs/parseargs@0.11.0': 3766 3761 optional: true 3767 3762 3768 - '@rollup/plugin-babel@5.3.1(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@2.79.2)': 3763 + '@rollup/plugin-babel@5.3.1(@babel/core@7.26.10)(@types/babel__core@7.20.5)(rollup@2.79.2)': 3769 3764 dependencies: 3770 - '@babel/core': 7.27.1 3771 - '@babel/helper-module-imports': 7.27.1 3765 + '@babel/core': 7.26.10 3766 + '@babel/helper-module-imports': 7.25.9 3772 3767 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) 3773 3768 rollup: 2.79.2 3774 3769 optionalDependencies: ··· 3815 3810 optionalDependencies: 3816 3811 rollup: 2.79.2 3817 3812 3818 - '@rollup/rollup-android-arm-eabi@4.40.1': 3813 + '@rollup/rollup-android-arm-eabi@4.37.0': 3819 3814 optional: true 3820 3815 3821 - '@rollup/rollup-android-arm64@4.40.1': 3816 + '@rollup/rollup-android-arm64@4.37.0': 3822 3817 optional: true 3823 3818 3824 - '@rollup/rollup-darwin-arm64@4.40.1': 3819 + '@rollup/rollup-darwin-arm64@4.37.0': 3825 3820 optional: true 3826 3821 3827 - '@rollup/rollup-darwin-x64@4.40.1': 3822 + '@rollup/rollup-darwin-x64@4.37.0': 3828 3823 optional: true 3829 3824 3830 - '@rollup/rollup-freebsd-arm64@4.40.1': 3825 + '@rollup/rollup-freebsd-arm64@4.37.0': 3831 3826 optional: true 3832 3827 3833 - '@rollup/rollup-freebsd-x64@4.40.1': 3828 + '@rollup/rollup-freebsd-x64@4.37.0': 3834 3829 optional: true 3835 3830 3836 - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 3831 + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 3837 3832 optional: true 3838 3833 3839 - '@rollup/rollup-linux-arm-musleabihf@4.40.1': 3834 + '@rollup/rollup-linux-arm-musleabihf@4.37.0': 3840 3835 optional: true 3841 3836 3842 - '@rollup/rollup-linux-arm64-gnu@4.40.1': 3837 + '@rollup/rollup-linux-arm64-gnu@4.37.0': 3843 3838 optional: true 3844 3839 3845 - '@rollup/rollup-linux-arm64-musl@4.40.1': 3840 + '@rollup/rollup-linux-arm64-musl@4.37.0': 3846 3841 optional: true 3847 3842 3848 - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 3843 + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 3849 3844 optional: true 3850 3845 3851 - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 3846 + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 3852 3847 optional: true 3853 3848 3854 - '@rollup/rollup-linux-riscv64-gnu@4.40.1': 3849 + '@rollup/rollup-linux-riscv64-gnu@4.37.0': 3855 3850 optional: true 3856 3851 3857 - '@rollup/rollup-linux-riscv64-musl@4.40.1': 3852 + '@rollup/rollup-linux-riscv64-musl@4.37.0': 3858 3853 optional: true 3859 3854 3860 - '@rollup/rollup-linux-s390x-gnu@4.40.1': 3855 + '@rollup/rollup-linux-s390x-gnu@4.37.0': 3861 3856 optional: true 3862 3857 3863 - '@rollup/rollup-linux-x64-gnu@4.40.1': 3858 + '@rollup/rollup-linux-x64-gnu@4.37.0': 3864 3859 optional: true 3865 3860 3866 - '@rollup/rollup-linux-x64-musl@4.40.1': 3861 + '@rollup/rollup-linux-x64-musl@4.37.0': 3867 3862 optional: true 3868 3863 3869 - '@rollup/rollup-win32-arm64-msvc@4.40.1': 3864 + '@rollup/rollup-win32-arm64-msvc@4.37.0': 3870 3865 optional: true 3871 3866 3872 - '@rollup/rollup-win32-ia32-msvc@4.40.1': 3867 + '@rollup/rollup-win32-ia32-msvc@4.37.0': 3873 3868 optional: true 3874 3869 3875 - '@rollup/rollup-win32-x64-msvc@4.40.1': 3870 + '@rollup/rollup-win32-x64-msvc@4.37.0': 3876 3871 optional: true 3877 3872 3878 3873 '@surma/rollup-plugin-off-main-thread@2.2.3': ··· 3886 3881 3887 3882 '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)': 3888 3883 dependencies: 3889 - '@babel/generator': 7.27.1 3890 - '@babel/parser': 7.27.1 3891 - '@babel/traverse': 7.27.1 3892 - '@babel/types': 7.27.1 3884 + '@babel/generator': 7.27.0 3885 + '@babel/parser': 7.27.0 3886 + '@babel/traverse': 7.27.0 3887 + '@babel/types': 7.27.0 3893 3888 javascript-natural-sort: 0.7.1 3894 3889 lodash: 4.17.21 3895 3890 prettier: 3.5.3 ··· 3898 3893 3899 3894 '@types/babel__core@7.20.5': 3900 3895 dependencies: 3901 - '@babel/parser': 7.27.1 3902 - '@babel/types': 7.27.1 3903 - '@types/babel__generator': 7.27.0 3896 + '@babel/parser': 7.27.0 3897 + '@babel/types': 7.27.0 3898 + '@types/babel__generator': 7.6.8 3904 3899 '@types/babel__template': 7.4.4 3905 3900 '@types/babel__traverse': 7.20.7 3906 3901 3907 - '@types/babel__generator@7.27.0': 3902 + '@types/babel__generator@7.6.8': 3908 3903 dependencies: 3909 - '@babel/types': 7.27.1 3904 + '@babel/types': 7.27.0 3910 3905 3911 3906 '@types/babel__template@7.4.4': 3912 3907 dependencies: 3913 - '@babel/parser': 7.27.1 3914 - '@babel/types': 7.27.1 3908 + '@babel/parser': 7.27.0 3909 + '@babel/types': 7.27.0 3915 3910 3916 3911 '@types/babel__traverse@7.20.7': 3917 3912 dependencies: 3918 - '@babel/types': 7.27.1 3913 + '@babel/types': 7.27.0 3919 3914 3920 3915 '@types/dom-close-watcher@1.0.0': {} 3921 3916 3922 3917 '@types/dom-webcodecs@0.1.14': {} 3923 3918 3924 3919 '@types/estree@0.0.39': {} 3920 + 3921 + '@types/estree@1.0.6': {} 3925 3922 3926 3923 '@types/estree@1.0.7': {} 3927 3924 ··· 3973 3970 3974 3971 autoprefixer@10.4.21(postcss@8.5.3): 3975 3972 dependencies: 3976 - browserslist: 4.24.5 3977 - caniuse-lite: 1.0.30001716 3973 + browserslist: 4.24.4 3974 + caniuse-lite: 1.0.30001707 3978 3975 fraction.js: 4.3.7 3979 3976 normalize-range: 0.1.2 3980 3977 picocolors: 1.1.1 3981 3978 postcss: 8.5.3 3982 3979 postcss-value-parser: 4.2.0 3983 3980 3984 - babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.27.1): 3981 + babel-plugin-jsx-dom-expressions@0.39.7(@babel/core@7.26.10): 3985 3982 dependencies: 3986 - '@babel/core': 7.27.1 3983 + '@babel/core': 7.26.10 3987 3984 '@babel/helper-module-imports': 7.18.6 3988 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) 3989 - '@babel/types': 7.27.1 3985 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) 3986 + '@babel/types': 7.27.0 3990 3987 html-entities: 2.3.3 3991 - parse5: 7.3.0 3988 + parse5: 7.2.1 3992 3989 validate-html-nesting: 1.2.2 3993 3990 3994 - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1): 3991 + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10): 3995 3992 dependencies: 3996 - '@babel/compat-data': 7.27.1 3997 - '@babel/core': 7.27.1 3998 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) 3993 + '@babel/compat-data': 7.26.8 3994 + '@babel/core': 7.26.10 3995 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) 3999 3996 semver: 6.3.1 4000 3997 transitivePeerDependencies: 4001 3998 - supports-color 4002 3999 4003 - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.1): 4000 + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10): 4004 4001 dependencies: 4005 - '@babel/core': 7.27.1 4006 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) 4007 - core-js-compat: 3.42.0 4002 + '@babel/core': 7.26.10 4003 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) 4004 + core-js-compat: 3.41.0 4008 4005 transitivePeerDependencies: 4009 4006 - supports-color 4010 4007 4011 - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.1): 4008 + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10): 4012 4009 dependencies: 4013 - '@babel/core': 7.27.1 4014 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) 4010 + '@babel/core': 7.26.10 4011 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) 4015 4012 transitivePeerDependencies: 4016 4013 - supports-color 4017 4014 4018 - babel-plugin-transform-typescript-const-enums@0.1.0(@babel/core@7.27.1): 4015 + babel-plugin-transform-typescript-const-enums@0.1.0(@babel/core@7.26.10): 4019 4016 dependencies: 4020 - '@babel/core': 7.27.1 4021 - '@babel/helper-plugin-utils': 7.27.1 4022 - '@babel/types': 7.27.1 4017 + '@babel/core': 7.26.10 4018 + '@babel/helper-plugin-utils': 7.26.5 4019 + '@babel/types': 7.27.0 4023 4020 4024 - babel-preset-solid@1.9.6(@babel/core@7.27.1): 4021 + babel-preset-solid@1.9.5(@babel/core@7.26.10): 4025 4022 dependencies: 4026 - '@babel/core': 7.27.1 4027 - babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.27.1) 4023 + '@babel/core': 7.26.10 4024 + babel-plugin-jsx-dom-expressions: 0.39.7(@babel/core@7.26.10) 4028 4025 4029 4026 balanced-match@1.0.2: {} 4030 4027 ··· 4047 4044 dependencies: 4048 4045 fill-range: 7.1.1 4049 4046 4050 - browserslist@4.24.5: 4047 + browserslist@4.24.4: 4051 4048 dependencies: 4052 - caniuse-lite: 1.0.30001716 4053 - electron-to-chromium: 1.5.149 4049 + caniuse-lite: 1.0.30001707 4050 + electron-to-chromium: 1.5.128 4054 4051 node-releases: 2.0.19 4055 - update-browserslist-db: 1.1.3(browserslist@4.24.5) 4052 + update-browserslist-db: 1.1.3(browserslist@4.24.4) 4056 4053 4057 4054 buffer-from@1.1.2: {} 4058 4055 4059 4056 camelcase-css@2.0.1: {} 4060 4057 4061 - caniuse-lite@1.0.30001716: {} 4058 + caniuse-lite@1.0.30001707: {} 4062 4059 4063 4060 chalk@4.1.2: 4064 4061 dependencies: ··· 4107 4104 4108 4105 convert-source-map@2.0.0: {} 4109 4106 4110 - cookie@0.7.2: {} 4107 + cookie@0.5.0: {} 4111 4108 4112 - core-js-compat@3.42.0: 4109 + core-js-compat@3.41.0: 4113 4110 dependencies: 4114 - browserslist: 4.24.5 4111 + browserslist: 4.24.4 4115 4112 4116 4113 cross-spawn@7.0.6: 4117 4114 dependencies: ··· 4135 4132 4136 4133 defu@6.1.4: {} 4137 4134 4138 - detect-libc@2.0.4: 4135 + detect-libc@2.0.3: 4139 4136 optional: true 4140 4137 4141 4138 didyoumean@1.2.2: {} ··· 4148 4145 dependencies: 4149 4146 jake: 10.9.2 4150 4147 4151 - electron-to-chromium@1.5.149: {} 4148 + electron-to-chromium@1.5.128: {} 4152 4149 4153 4150 emoji-regex@8.0.0: {} 4154 4151 4155 4152 emoji-regex@9.2.2: {} 4156 4153 4157 - entities@6.0.0: {} 4154 + entities@4.5.0: {} 4158 4155 4159 - esbuild@0.25.2: 4156 + esbuild@0.24.0: 4160 4157 optionalDependencies: 4161 - '@esbuild/aix-ppc64': 0.25.2 4162 - '@esbuild/android-arm': 0.25.2 4163 - '@esbuild/android-arm64': 0.25.2 4164 - '@esbuild/android-x64': 0.25.2 4165 - '@esbuild/darwin-arm64': 0.25.2 4166 - '@esbuild/darwin-x64': 0.25.2 4167 - '@esbuild/freebsd-arm64': 0.25.2 4168 - '@esbuild/freebsd-x64': 0.25.2 4169 - '@esbuild/linux-arm': 0.25.2 4170 - '@esbuild/linux-arm64': 0.25.2 4171 - '@esbuild/linux-ia32': 0.25.2 4172 - '@esbuild/linux-loong64': 0.25.2 4173 - '@esbuild/linux-mips64el': 0.25.2 4174 - '@esbuild/linux-ppc64': 0.25.2 4175 - '@esbuild/linux-riscv64': 0.25.2 4176 - '@esbuild/linux-s390x': 0.25.2 4177 - '@esbuild/linux-x64': 0.25.2 4178 - '@esbuild/netbsd-arm64': 0.25.2 4179 - '@esbuild/netbsd-x64': 0.25.2 4180 - '@esbuild/openbsd-arm64': 0.25.2 4181 - '@esbuild/openbsd-x64': 0.25.2 4182 - '@esbuild/sunos-x64': 0.25.2 4183 - '@esbuild/win32-arm64': 0.25.2 4184 - '@esbuild/win32-ia32': 0.25.2 4185 - '@esbuild/win32-x64': 0.25.2 4158 + '@esbuild/aix-ppc64': 0.24.0 4159 + '@esbuild/android-arm': 0.24.0 4160 + '@esbuild/android-arm64': 0.24.0 4161 + '@esbuild/android-x64': 0.24.0 4162 + '@esbuild/darwin-arm64': 0.24.0 4163 + '@esbuild/darwin-x64': 0.24.0 4164 + '@esbuild/freebsd-arm64': 0.24.0 4165 + '@esbuild/freebsd-x64': 0.24.0 4166 + '@esbuild/linux-arm': 0.24.0 4167 + '@esbuild/linux-arm64': 0.24.0 4168 + '@esbuild/linux-ia32': 0.24.0 4169 + '@esbuild/linux-loong64': 0.24.0 4170 + '@esbuild/linux-mips64el': 0.24.0 4171 + '@esbuild/linux-ppc64': 0.24.0 4172 + '@esbuild/linux-riscv64': 0.24.0 4173 + '@esbuild/linux-s390x': 0.24.0 4174 + '@esbuild/linux-x64': 0.24.0 4175 + '@esbuild/netbsd-x64': 0.24.0 4176 + '@esbuild/openbsd-arm64': 0.24.0 4177 + '@esbuild/openbsd-x64': 0.24.0 4178 + '@esbuild/sunos-x64': 0.24.0 4179 + '@esbuild/win32-arm64': 0.24.0 4180 + '@esbuild/win32-ia32': 0.24.0 4181 + '@esbuild/win32-x64': 0.24.0 4186 4182 4187 - esbuild@0.25.3: 4183 + esbuild@0.24.2: 4188 4184 optionalDependencies: 4189 - '@esbuild/aix-ppc64': 0.25.3 4190 - '@esbuild/android-arm': 0.25.3 4191 - '@esbuild/android-arm64': 0.25.3 4192 - '@esbuild/android-x64': 0.25.3 4193 - '@esbuild/darwin-arm64': 0.25.3 4194 - '@esbuild/darwin-x64': 0.25.3 4195 - '@esbuild/freebsd-arm64': 0.25.3 4196 - '@esbuild/freebsd-x64': 0.25.3 4197 - '@esbuild/linux-arm': 0.25.3 4198 - '@esbuild/linux-arm64': 0.25.3 4199 - '@esbuild/linux-ia32': 0.25.3 4200 - '@esbuild/linux-loong64': 0.25.3 4201 - '@esbuild/linux-mips64el': 0.25.3 4202 - '@esbuild/linux-ppc64': 0.25.3 4203 - '@esbuild/linux-riscv64': 0.25.3 4204 - '@esbuild/linux-s390x': 0.25.3 4205 - '@esbuild/linux-x64': 0.25.3 4206 - '@esbuild/netbsd-arm64': 0.25.3 4207 - '@esbuild/netbsd-x64': 0.25.3 4208 - '@esbuild/openbsd-arm64': 0.25.3 4209 - '@esbuild/openbsd-x64': 0.25.3 4210 - '@esbuild/sunos-x64': 0.25.3 4211 - '@esbuild/win32-arm64': 0.25.3 4212 - '@esbuild/win32-ia32': 0.25.3 4213 - '@esbuild/win32-x64': 0.25.3 4185 + '@esbuild/aix-ppc64': 0.24.2 4186 + '@esbuild/android-arm': 0.24.2 4187 + '@esbuild/android-arm64': 0.24.2 4188 + '@esbuild/android-x64': 0.24.2 4189 + '@esbuild/darwin-arm64': 0.24.2 4190 + '@esbuild/darwin-x64': 0.24.2 4191 + '@esbuild/freebsd-arm64': 0.24.2 4192 + '@esbuild/freebsd-x64': 0.24.2 4193 + '@esbuild/linux-arm': 0.24.2 4194 + '@esbuild/linux-arm64': 0.24.2 4195 + '@esbuild/linux-ia32': 0.24.2 4196 + '@esbuild/linux-loong64': 0.24.2 4197 + '@esbuild/linux-mips64el': 0.24.2 4198 + '@esbuild/linux-ppc64': 0.24.2 4199 + '@esbuild/linux-riscv64': 0.24.2 4200 + '@esbuild/linux-s390x': 0.24.2 4201 + '@esbuild/linux-x64': 0.24.2 4202 + '@esbuild/netbsd-arm64': 0.24.2 4203 + '@esbuild/netbsd-x64': 0.24.2 4204 + '@esbuild/openbsd-arm64': 0.24.2 4205 + '@esbuild/openbsd-x64': 0.24.2 4206 + '@esbuild/sunos-x64': 0.24.2 4207 + '@esbuild/win32-arm64': 0.24.2 4208 + '@esbuild/win32-ia32': 0.24.2 4209 + '@esbuild/win32-x64': 0.24.2 4214 4210 4215 4211 escalade@3.2.0: {} 4216 4212 ··· 4222 4218 4223 4219 exit-hook@2.2.1: {} 4224 4220 4225 - exsolve@1.0.5: {} 4221 + exsolve@1.0.4: {} 4226 4222 4227 4223 fast-deep-equal@3.1.3: {} 4228 4224 ··· 4242 4238 dependencies: 4243 4239 reusify: 1.1.0 4244 4240 4245 - fdir@6.4.4(picomatch@4.0.2): 4241 + fdir@6.4.3(picomatch@4.0.2): 4246 4242 optionalDependencies: 4247 4243 picomatch: 4.0.2 4248 4244 ··· 4316 4312 4317 4313 has-flag@4.0.0: {} 4318 4314 4319 - hls.js@1.6.2: {} 4315 + hls.js@1.6.0: {} 4320 4316 4321 4317 html-entities@2.3.3: {} 4322 4318 ··· 4432 4428 4433 4429 mime@3.0.0: {} 4434 4430 4435 - miniflare@4.20250428.1: 4431 + miniflare@4.20250321.1: 4436 4432 dependencies: 4437 4433 '@cspotcode/source-map-support': 0.8.1 4438 4434 acorn: 8.14.0 ··· 4441 4437 glob-to-regexp: 0.4.1 4442 4438 stoppable: 1.1.0 4443 4439 undici: 5.29.0 4444 - workerd: 1.20250428.0 4440 + workerd: 1.20250321.0 4445 4441 ws: 8.18.0 4446 - youch: 3.3.4 4442 + youch: 3.2.3 4447 4443 zod: 3.22.3 4448 4444 transitivePeerDependencies: 4449 4445 - bufferutil ··· 4495 4491 4496 4492 package-json-from-dist@1.0.1: {} 4497 4493 4498 - parse5@7.3.0: 4494 + parse5@7.2.1: 4499 4495 dependencies: 4500 - entities: 6.0.0 4496 + entities: 4.5.0 4501 4497 4502 4498 path-is-absolute@1.0.1: {} 4503 4499 ··· 4539 4535 postcss-load-config@4.0.2(postcss@8.5.3): 4540 4536 dependencies: 4541 4537 lilconfig: 3.1.3 4542 - yaml: 2.7.1 4538 + yaml: 2.7.0 4543 4539 optionalDependencies: 4544 4540 postcss: 8.5.3 4545 4541 ··· 4599 4595 4600 4596 regenerate@1.4.2: {} 4601 4597 4598 + regenerator-runtime@0.14.1: {} 4599 + 4600 + regenerator-transform@0.15.2: 4601 + dependencies: 4602 + '@babel/runtime': 7.27.0 4603 + 4602 4604 regexpu-core@6.2.0: 4603 4605 dependencies: 4604 4606 regenerate: 1.4.2 ··· 4628 4630 optionalDependencies: 4629 4631 fsevents: 2.3.3 4630 4632 4631 - rollup@4.40.1: 4633 + rollup@4.37.0: 4632 4634 dependencies: 4633 - '@types/estree': 1.0.7 4635 + '@types/estree': 1.0.6 4634 4636 optionalDependencies: 4635 - '@rollup/rollup-android-arm-eabi': 4.40.1 4636 - '@rollup/rollup-android-arm64': 4.40.1 4637 - '@rollup/rollup-darwin-arm64': 4.40.1 4638 - '@rollup/rollup-darwin-x64': 4.40.1 4639 - '@rollup/rollup-freebsd-arm64': 4.40.1 4640 - '@rollup/rollup-freebsd-x64': 4.40.1 4641 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 4642 - '@rollup/rollup-linux-arm-musleabihf': 4.40.1 4643 - '@rollup/rollup-linux-arm64-gnu': 4.40.1 4644 - '@rollup/rollup-linux-arm64-musl': 4.40.1 4645 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 4646 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 4647 - '@rollup/rollup-linux-riscv64-gnu': 4.40.1 4648 - '@rollup/rollup-linux-riscv64-musl': 4.40.1 4649 - '@rollup/rollup-linux-s390x-gnu': 4.40.1 4650 - '@rollup/rollup-linux-x64-gnu': 4.40.1 4651 - '@rollup/rollup-linux-x64-musl': 4.40.1 4652 - '@rollup/rollup-win32-arm64-msvc': 4.40.1 4653 - '@rollup/rollup-win32-ia32-msvc': 4.40.1 4654 - '@rollup/rollup-win32-x64-msvc': 4.40.1 4637 + '@rollup/rollup-android-arm-eabi': 4.37.0 4638 + '@rollup/rollup-android-arm64': 4.37.0 4639 + '@rollup/rollup-darwin-arm64': 4.37.0 4640 + '@rollup/rollup-darwin-x64': 4.37.0 4641 + '@rollup/rollup-freebsd-arm64': 4.37.0 4642 + '@rollup/rollup-freebsd-x64': 4.37.0 4643 + '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 4644 + '@rollup/rollup-linux-arm-musleabihf': 4.37.0 4645 + '@rollup/rollup-linux-arm64-gnu': 4.37.0 4646 + '@rollup/rollup-linux-arm64-musl': 4.37.0 4647 + '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 4648 + '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 4649 + '@rollup/rollup-linux-riscv64-gnu': 4.37.0 4650 + '@rollup/rollup-linux-riscv64-musl': 4.37.0 4651 + '@rollup/rollup-linux-s390x-gnu': 4.37.0 4652 + '@rollup/rollup-linux-x64-gnu': 4.37.0 4653 + '@rollup/rollup-linux-x64-musl': 4.37.0 4654 + '@rollup/rollup-win32-arm64-msvc': 4.37.0 4655 + '@rollup/rollup-win32-ia32-msvc': 4.37.0 4656 + '@rollup/rollup-win32-x64-msvc': 4.37.0 4655 4657 fsevents: 2.3.3 4656 4658 4657 4659 run-parallel@1.2.0: ··· 4676 4678 sharp@0.33.5: 4677 4679 dependencies: 4678 4680 color: 4.2.3 4679 - detect-libc: 2.0.4 4681 + detect-libc: 2.0.3 4680 4682 semver: 7.7.1 4681 4683 optionalDependencies: 4682 4684 '@img/sharp-darwin-arm64': 0.33.5 ··· 4715 4717 4716 4718 smob@1.5.0: {} 4717 4719 4718 - solid-floating-ui@0.2.1(@floating-ui/dom@1.7.0)(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268)): 4720 + solid-floating-ui@0.2.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)): 4719 4721 dependencies: 4720 - '@floating-ui/dom': 1.7.0 4721 - solid-js: 1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268) 4722 + '@floating-ui/dom': 1.6.13 4723 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 4722 4724 4723 - solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268): 4725 + solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c): 4724 4726 dependencies: 4725 4727 csstype: 3.1.3 4726 4728 seroval: 1.2.1 4727 4729 seroval-plugins: 1.2.1(seroval@1.2.1) 4728 4730 4729 - solid-refresh@0.6.3(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268)): 4731 + solid-refresh@0.6.3(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)): 4730 4732 dependencies: 4731 - '@babel/generator': 7.27.1 4732 - '@babel/helper-module-imports': 7.27.1 4733 - '@babel/types': 7.27.1 4734 - solid-js: 1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268) 4733 + '@babel/generator': 7.27.0 4734 + '@babel/helper-module-imports': 7.25.9 4735 + '@babel/types': 7.27.0 4736 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 4735 4737 transitivePeerDependencies: 4736 4738 - supports-color 4737 4739 ··· 4852 4854 dependencies: 4853 4855 any-promise: 1.3.0 4854 4856 4855 - tinyglobby@0.2.13: 4857 + tinyglobby@0.2.12: 4856 4858 dependencies: 4857 - fdir: 6.4.4(picomatch@4.0.2) 4859 + fdir: 6.4.3(picomatch@4.0.2) 4858 4860 picomatch: 4.0.2 4859 4861 4860 4862 to-regex-range@5.0.1: ··· 4872 4874 4873 4875 type-fest@0.16.0: {} 4874 4876 4875 - typescript@5.8.3: {} 4877 + typescript@5.7.2: {} 4876 4878 4877 - ufo@1.6.1: {} 4879 + ufo@1.5.4: {} 4878 4880 4879 4881 undici@5.29.0: 4880 4882 dependencies: ··· 4883 4885 unenv@2.0.0-rc.15: 4884 4886 dependencies: 4885 4887 defu: 6.1.4 4886 - exsolve: 1.0.5 4888 + exsolve: 1.0.4 4887 4889 ohash: 2.0.11 4888 4890 pathe: 2.0.3 4889 - ufo: 1.6.1 4891 + ufo: 1.5.4 4890 4892 4891 4893 unicode-canonical-property-names-ecmascript@2.0.1: {} 4892 4894 ··· 4907 4909 4908 4910 upath@1.2.0: {} 4909 4911 4910 - update-browserslist-db@1.1.3(browserslist@4.24.5): 4912 + update-browserslist-db@1.1.3(browserslist@4.24.4): 4911 4913 dependencies: 4912 - browserslist: 4.24.5 4914 + browserslist: 4.24.4 4913 4915 escalade: 3.2.0 4914 4916 picocolors: 1.1.1 4915 4917 ··· 4917 4919 4918 4920 validate-html-nesting@1.2.2: {} 4919 4921 4920 - vite-plugin-pwa@0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1)): 4922 + vite-plugin-pwa@0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)): 4921 4923 dependencies: 4922 4924 debug: 4.4.0 4923 4925 pretty-bytes: 6.1.1 4924 - tinyglobby: 0.2.13 4925 - vite: 6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1) 4926 + tinyglobby: 0.2.12 4927 + vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0) 4926 4928 workbox-build: 7.3.0(@types/babel__core@7.20.5) 4927 4929 workbox-window: 7.3.0 4928 4930 transitivePeerDependencies: 4929 4931 - '@types/babel__core' 4930 4932 - supports-color 4931 4933 4932 - vite-plugin-solid@2.11.6(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268))(vite@6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1)): 4934 + vite-plugin-solid@2.11.6(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)): 4933 4935 dependencies: 4934 - '@babel/core': 7.27.1 4936 + '@babel/core': 7.26.10 4935 4937 '@types/babel__core': 7.20.5 4936 - babel-preset-solid: 1.9.6(@babel/core@7.27.1) 4938 + babel-preset-solid: 1.9.5(@babel/core@7.26.10) 4937 4939 merge-anything: 5.1.7 4938 - solid-js: 1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268) 4939 - solid-refresh: 0.6.3(solid-js@1.9.6(patch_hash=34b4d8d8690680b566072e58ba66c5cec2f5a8fe0073abbee0445c8e02182268)) 4940 - vite: 6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1) 4941 - vitefu: 1.0.6(vite@6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1)) 4940 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 4941 + solid-refresh: 0.6.3(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)) 4942 + vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0) 4943 + vitefu: 1.0.6(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)) 4942 4944 transitivePeerDependencies: 4943 4945 - supports-color 4944 4946 4945 - vite@6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1): 4947 + vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0): 4946 4948 dependencies: 4947 - esbuild: 0.25.3 4948 - fdir: 6.4.4(picomatch@4.0.2) 4949 - picomatch: 4.0.2 4949 + esbuild: 0.24.0 4950 4950 postcss: 8.5.3 4951 - rollup: 4.40.1 4952 - tinyglobby: 0.2.13 4951 + rollup: 4.37.0 4953 4952 optionalDependencies: 4954 4953 fsevents: 2.3.3 4955 4954 jiti: 1.21.7 4956 4955 terser: 5.39.0 4957 - yaml: 2.7.1 4956 + yaml: 2.7.0 4958 4957 4959 - vitefu@1.0.6(vite@6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1)): 4958 + vitefu@1.0.6(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)): 4960 4959 optionalDependencies: 4961 - vite: 6.3.4(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.1) 4960 + vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0) 4962 4961 4963 4962 webidl-conversions@4.0.2: {} 4964 4963 4965 - webm-muxer@5.1.2: 4964 + webm-muxer@5.1.1: 4966 4965 dependencies: 4967 4966 '@types/dom-webcodecs': 0.1.14 4968 4967 '@types/wicg-file-system-access': 2020.9.8 ··· 4989 4988 workbox-build@7.3.0(@types/babel__core@7.20.5): 4990 4989 dependencies: 4991 4990 '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) 4992 - '@babel/core': 7.27.1 4993 - '@babel/preset-env': 7.27.1(@babel/core@7.27.1) 4994 - '@babel/runtime': 7.27.1 4995 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@2.79.2) 4991 + '@babel/core': 7.26.10 4992 + '@babel/preset-env': 7.26.9(@babel/core@7.26.10) 4993 + '@babel/runtime': 7.27.0 4994 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.26.10)(@types/babel__core@7.20.5)(rollup@2.79.2) 4996 4995 '@rollup/plugin-node-resolve': 15.3.1(rollup@2.79.2) 4997 4996 '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) 4998 4997 '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) ··· 5090 5089 '@types/trusted-types': 2.0.7 5091 5090 workbox-core: 7.3.0 5092 5091 5093 - workerd@1.20250428.0: 5092 + workerd@1.20250321.0: 5094 5093 optionalDependencies: 5095 - '@cloudflare/workerd-darwin-64': 1.20250428.0 5096 - '@cloudflare/workerd-darwin-arm64': 1.20250428.0 5097 - '@cloudflare/workerd-linux-64': 1.20250428.0 5098 - '@cloudflare/workerd-linux-arm64': 1.20250428.0 5099 - '@cloudflare/workerd-windows-64': 1.20250428.0 5094 + '@cloudflare/workerd-darwin-64': 1.20250321.0 5095 + '@cloudflare/workerd-darwin-arm64': 1.20250321.0 5096 + '@cloudflare/workerd-linux-64': 1.20250321.0 5097 + '@cloudflare/workerd-linux-arm64': 1.20250321.0 5098 + '@cloudflare/workerd-windows-64': 1.20250321.0 5100 5099 5101 - wrangler@4.14.1: 5100 + wrangler@4.6.0: 5102 5101 dependencies: 5103 5102 '@cloudflare/kv-asset-handler': 0.4.0 5104 - '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250428.0) 5103 + '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0) 5105 5104 blake3-wasm: 2.1.5 5106 - esbuild: 0.25.2 5107 - miniflare: 4.20250428.1 5105 + esbuild: 0.24.2 5106 + miniflare: 4.20250321.1 5108 5107 path-to-regexp: 6.3.0 5109 5108 unenv: 2.0.0-rc.15 5110 - workerd: 1.20250428.0 5109 + workerd: 1.20250321.0 5111 5110 optionalDependencies: 5112 5111 fsevents: 2.3.3 5113 5112 sharp: 0.33.5 ··· 5133 5132 5134 5133 yallist@3.1.1: {} 5135 5134 5136 - yaml@2.7.1: {} 5135 + yaml@2.7.0: {} 5137 5136 5138 - youch@3.3.4: 5137 + youch@3.2.3: 5139 5138 dependencies: 5140 - cookie: 0.7.2 5139 + cookie: 0.5.0 5141 5140 mustache: 4.2.0 5142 5141 stacktracey: 2.1.8 5143 5142
+3 -3
src/api/cache/profile-shadow.ts
··· 33 33 | AppBskyActorDefs.ProfileViewBasic 34 34 | AppBskyActorDefs.ProfileViewDetailed; 35 35 36 - const emitter = new EventEmitter<{ [uri: At.Did]: [] }>(); 36 + const emitter = new EventEmitter<{ [uri: At.DID]: [] }>(); 37 37 const shadows = new WeakMap<AllProfileView, ProfileShadow>(); 38 38 39 39 export const useProfileShadow = (profile: AccessorMaybe<AllProfileView>): Accessor<ProfileShadowView> => { ··· 66 66 }; 67 67 }; 68 68 69 - export const updateProfileShadow = (queryClient: QueryClient, did: At.Did, value: Partial<ProfileShadow>) => { 69 + export const updateProfileShadow = (queryClient: QueryClient, did: At.DID, value: Partial<ProfileShadow>) => { 70 70 for (const profile of findProfilesInCache(queryClient, did)) { 71 71 shadows.set(profile, { ...shadows.get(profile), ...value }); 72 72 } ··· 74 74 batch(() => emitter.emit(did)); 75 75 }; 76 76 77 - export function findProfilesInCache(queryClient: QueryClient, did: At.Did): Generator<AllProfileView> { 77 + export function findProfilesInCache(queryClient: QueryClient, did: At.DID): Generator<AllProfileView> { 78 78 return iterateQueryCache<AllProfileView>(queryClient, [ 79 79 findAllProfilesInBookmarkFeed(did), 80 80 findAllProfilesInNotificationFeed(did),
+3 -1
src/api/models/post-thread.tsx
··· 69 69 export interface PostDescendantItem extends BaseDescendant { 70 70 type: 'post'; 71 71 post: AppBskyFeedDefs.PostView; 72 + context: AppBskyFeedDefs.ThreadContext | undefined; 72 73 prev: boolean; 73 74 next: boolean; 74 75 } ··· 119 120 thread: Brand.Union<AppBskyFeedDefs.ThreadViewPost>; 120 121 preferences: ThreadViewPreferences; 121 122 moderationOptions: ModerationOptions; 122 - selfDid?: At.Did; 123 + selfDid?: At.DID; 123 124 }): ThreadData => { 124 125 const { followsFirst, sort, treeView } = preferences; 125 126 ··· 329 330 id: post.uri, 330 331 type: 'post', 331 332 post: post, 333 + context: reply.threadContext, 332 334 prev: depth !== 0, 333 335 next: children.length !== 0, 334 336 lines: nlines,
+1 -1
src/api/moderation/entities/generic.ts
··· 5 5 6 6 export const moderateGeneric = ( 7 7 item: { labels?: ComAtprotoLabelDefs.Label[] }, 8 - userDid: At.Did, 8 + userDid: At.DID, 9 9 opts: ModerationOptions, 10 10 ) => { 11 11 const accu: ModerationCause[] = [];
+5 -5
src/api/moderation/index.ts
··· 280 280 281 281 export interface ModerationLabeler { 282 282 /** DID of the labeler */ 283 - did: At.Did; 283 + did: At.DID; 284 284 /** Profile details of the labeler */ 285 285 profile: { 286 286 avatar?: string; ··· 309 309 /** Preferences for global-defined labels */ 310 310 labels: LabelPreferenceMapping; 311 311 /** Preferences for labels from subscribed labelers */ 312 - labelers: Record<At.Did, ModerationLabelerPreferences>; 312 + labelers: Record<At.DID, ModerationLabelerPreferences>; 313 313 /** Keyword filters */ 314 314 keywords: KeywordFilter[]; 315 315 316 316 /** List of users to hide reposts from */ 317 - hideReposts: At.Did[]; 317 + hideReposts: At.DID[]; 318 318 } 319 319 320 320 export interface ModerationOptions { 321 321 _filtersCache?: [raw: string, match: RegExp][]; 322 322 323 323 preferences: ModerationPreferences; 324 - labelerDefinitions: Record<At.Did, ModerationLabeler>; 324 + labelerDefinitions: Record<At.DID, ModerationLabeler>; 325 325 } 326 326 327 327 export const decideLabelModeration = ( 328 328 accu: ModerationCause[], 329 329 target: LabelTarget, 330 330 labels: Label[] | undefined, 331 - userDid: At.Did, 331 + userDid: At.DID, 332 332 opts: ModerationOptions, 333 333 ) => { 334 334 if (labels /* && labels.length > 0 */) {
+9 -9
src/api/mutations/post.ts
··· 5 5 import { useSession } from '~/lib/states/session'; 6 6 7 7 import { type PostShadowView, updatePostShadow } from '../cache/post-shadow'; 8 - import { parseCanonicalResourceUri } from '../types/at-uri'; 8 + import { parseAtUri } from '../types/at-uri'; 9 9 import { getCurrentDate } from '../utils/misc'; 10 10 import { createRecord, deleteRecord } from '../utils/records'; 11 11 import { createToggleMutationQueue } from '../utils/toggle-mutation'; ··· 15 15 shadow: () => PostShadowView, 16 16 ) => { 17 17 const queryClient = useQueryClient(); 18 - const { client } = useAgent(); 18 + const { rpc } = useAgent(); 19 19 const { currentAccount } = useSession(); 20 20 21 21 const postUri = post().uri; ··· 30 30 return prevLikeUri; 31 31 } 32 32 33 - const result = await createRecord(client, { 33 + const result = await createRecord(rpc, { 34 34 repo: currentAccount!.did, 35 35 collection: 'app.bsky.feed.like', 36 36 record: { ··· 45 45 46 46 return result.uri; 47 47 } else if (prevLikeUri) { 48 - const uri = parseCanonicalResourceUri(prevLikeUri); 48 + const uri = parseAtUri(prevLikeUri); 49 49 50 - await deleteRecord(client, { 50 + await deleteRecord(rpc, { 51 51 repo: currentAccount!.did, 52 52 collection: 'app.bsky.feed.like', 53 53 rkey: uri.rkey, ··· 74 74 shadow: () => PostShadowView, 75 75 ) => { 76 76 const queryClient = useQueryClient(); 77 - const { client } = useAgent(); 77 + const { rpc } = useAgent(); 78 78 const { currentAccount } = useSession(); 79 79 80 80 const postUri = post().uri; ··· 89 89 return prevRepostUri; 90 90 } 91 91 92 - const result = await createRecord(client, { 92 + const result = await createRecord(rpc, { 93 93 repo: currentAccount!.did, 94 94 collection: 'app.bsky.feed.repost', 95 95 record: { ··· 104 104 105 105 return result.uri; 106 106 } else if (prevRepostUri) { 107 - const uri = parseCanonicalResourceUri(prevRepostUri); 107 + const uri = parseAtUri(prevRepostUri); 108 108 109 - await deleteRecord(client, { 109 + await deleteRecord(rpc, { 110 110 repo: currentAccount!.did, 111 111 collection: 'app.bsky.feed.repost', 112 112 rkey: uri.rkey,
+5 -5
src/api/mutations/profile.ts
··· 5 5 import { useSession } from '~/lib/states/session'; 6 6 7 7 import { type ProfileShadowView, updateProfileShadow } from '../cache/profile-shadow'; 8 - import { parseCanonicalResourceUri } from '../types/at-uri'; 8 + import { parseAtUri } from '../types/at-uri'; 9 9 import { getCurrentDate } from '../utils/misc'; 10 10 import { createRecord, deleteRecord } from '../utils/records'; 11 11 import { createToggleMutationQueue } from '../utils/toggle-mutation'; ··· 15 15 shadow: () => ProfileShadowView, 16 16 ) => { 17 17 const queryClient = useQueryClient(); 18 - const { client } = useAgent(); 18 + const { rpc } = useAgent(); 19 19 const { currentAccount } = useSession(); 20 20 21 21 const did = profile().did; ··· 30 30 return prevFollowUri; 31 31 } 32 32 33 - const result = await createRecord(client, { 33 + const result = await createRecord(rpc, { 34 34 repo: currentAccount!.did, 35 35 collection: 'app.bsky.graph.follow', 36 36 record: { ··· 42 42 43 43 return result.uri; 44 44 } else if (prevFollowUri) { 45 - const uri = parseCanonicalResourceUri(prevFollowUri); 45 + const uri = parseAtUri(prevFollowUri); 46 46 47 - await deleteRecord(client, { 47 + await deleteRecord(rpc, { 48 48 repo: currentAccount!.did, 49 49 collection: 'app.bsky.graph.follow', 50 50 rkey: uri.rkey,
+3 -8
src/api/queries/blob.ts
··· 1 - import { type Client, ok } from '@atcute/client'; 1 + import type { XRPC } from '@atcute/client'; 2 2 import type { At } from '@atcute/client/lexicons'; 3 3 4 - export const uploadBlob = async (client: Client, blob: Blob): Promise<At.Blob<any>> => { 5 - const data = await ok( 6 - client.post('com.atproto.repo.uploadBlob', { 7 - input: blob, 8 - }), 9 - ); 10 - 4 + export const uploadBlob = async (rpc: XRPC, blob: Blob): Promise<At.Blob<any>> => { 5 + const { data } = await rpc.call('com.atproto.repo.uploadBlob', { data: blob }); 11 6 return data.blob; 12 7 };
+7 -10
src/api/queries/bookmark-feed.ts
··· 1 1 import { tokenize } from '@atcute/bluesky-search-parser'; 2 - import { ok } from '@atcute/client'; 3 2 import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 3 import { mapDefined } from '@mary/array-fns'; 5 4 import { filter, map, take, toArray } from '@mary/async-iterator-fns'; ··· 42 41 43 42 export const createBookmarkFeedQuery = (tagId: () => string, search: () => string) => { 44 43 const bookmarks = inject(BookmarksService); 45 - const { client } = useAgent(); 44 + const { rpc } = useAgent(); 46 45 47 46 const listing = createInfiniteQuery(() => { 48 47 const $tagId = tagId(); ··· 96 95 let map: Map<string, AppBskyFeedDefs.PostView>; 97 96 98 97 try { 99 - const data = await ok( 100 - client.get('app.bsky.feed.getPosts', { 101 - signal: ctx.signal, 102 - params: { 103 - uris: raws.map((item) => item.view.uri), 104 - }, 105 - }), 106 - ); 98 + const { data } = await rpc.get('app.bsky.feed.getPosts', { 99 + signal: ctx.signal, 100 + params: { 101 + uris: raws.map((item) => item.view.uri), 102 + }, 103 + }); 107 104 108 105 map = new Map(data.posts.map((view) => [view.uri, view])); 109 106 } catch {}
+2 -3
src/api/queries/composer.ts
··· 1 - import type { At } from '@atcute/client/lexicons'; 2 1 import { createQuery } from '@mary/solid-query'; 3 2 4 3 const LINK_PROXY_ENDPOINT = 'https://cardyb.bsky.app/v1/extract'; ··· 13 12 } 14 13 15 14 export interface LinkMeta { 16 - uri: At.GenericUri; 15 + uri: string; 17 16 title: string; 18 17 description: string; 19 18 thumb: Blob | undefined; ··· 57 56 } 58 57 59 58 const meta: LinkMeta = { 60 - uri: $uri as At.GenericUri, 59 + uri: $uri, 61 60 title: data.title, 62 61 description: data.description, 63 62 thumb: thumb,
+11 -14
src/api/queries/feed.ts
··· 1 1 import { modifyMutable, reconcile } from 'solid-js/store'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import type { AppBskyFeedDefs, At } from '@atcute/client/lexicons'; 5 4 import { createQuery } from '@mary/solid-query'; 6 5 ··· 9 8 import { useSession } from '~/lib/states/session'; 10 9 import { omit } from '~/lib/utils/misc'; 11 10 12 - import { makeAtUri, parseCanonicalResourceUri } from '../types/at-uri'; 11 + import { makeAtUri, parseAtUri } from '../types/at-uri'; 13 12 import { isDid } from '../types/identity'; 14 13 15 14 import { resolveHandle } from './handle'; 16 15 17 16 export const createFeedMetaQuery = (feedUri: () => string) => { 18 - const { client } = useAgent(); 17 + const { rpc } = useAgent(); 19 18 const { currentAccount } = useSession(); 20 19 21 20 return createQuery((queryClient) => { ··· 24 23 return { 25 24 queryKey: ['feed-meta', $feedUri], 26 25 async queryFn(ctx): Promise<AppBskyFeedDefs.GeneratorView> { 27 - const uri = parseCanonicalResourceUri($feedUri); 26 + const uri = parseAtUri($feedUri); 28 27 29 - let did: At.Did; 28 + let did: At.DID; 30 29 if (isDid(uri.repo)) { 31 30 did = uri.repo; 32 31 } else { 33 - did = await resolveHandle(client, uri.repo, ctx.signal); 32 + did = await resolveHandle(rpc, uri.repo, ctx.signal); 34 33 } 35 34 36 - const data = await ok( 37 - client.get('app.bsky.feed.getFeedGenerator', { 38 - signal: ctx.signal, 39 - params: { 40 - feed: makeAtUri(did, uri.collection, uri.rkey), 41 - }, 42 - }), 43 - ); 35 + const { data } = await rpc.get('app.bsky.feed.getFeedGenerator', { 36 + signal: ctx.signal, 37 + params: { 38 + feed: makeAtUri(did, uri.collection, uri.rkey), 39 + }, 40 + }); 44 41 45 42 if (currentAccount) { 46 43 const found = currentAccount.preferences.feeds.find((item): item is SavedGeneratorFeed => {
+11 -14
src/api/queries/handle.ts
··· 1 - import { type Client, ok } from '@atcute/client'; 2 - import type { At } from '@atcute/client/lexicons'; 1 + import { XRPC } from '@atcute/client'; 3 2 import { createQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; 6 5 7 - export const useResolveHandleQuery = (handle: () => At.Handle) => { 8 - const { client } = useAgent(); 6 + export const useResolveHandleQuery = (handle: () => string) => { 7 + const { rpc } = useAgent(); 9 8 10 9 return createQuery(() => { 11 10 const $handle = handle(); ··· 13 12 return { 14 13 queryKey: ['resolve-handle', $handle], 15 14 async queryFn(ctx) { 16 - return resolveHandle(client, $handle, ctx.signal); 15 + return resolveHandle(rpc, $handle, ctx.signal); 17 16 }, 18 17 }; 19 18 }); 20 19 }; 21 20 22 - export const resolveHandle = async (client: Client, handle: At.Handle, signal?: AbortSignal) => { 23 - const data = await ok( 24 - client.get('com.atproto.identity.resolveHandle', { 25 - signal: signal, 26 - params: { 27 - handle: handle, 28 - }, 29 - }), 30 - ); 21 + export const resolveHandle = async (rpc: XRPC, handle: string, signal?: AbortSignal) => { 22 + const { data } = await rpc.get('com.atproto.identity.resolveHandle', { 23 + signal: signal, 24 + params: { 25 + handle: handle, 26 + }, 27 + }); 31 28 32 29 return data.did; 33 30 };
+13 -15
src/api/queries/labeler.ts
··· 1 - import { ClientResponseError, ok } from '@atcute/client'; 1 + import { XRPCError } from '@atcute/client'; 2 2 import type { AppBskyLabelerDefs, At } from '@atcute/client/lexicons'; 3 3 import { createQuery } from '@mary/solid-query'; 4 4 ··· 6 6 7 7 import { interpretLabelerDefinition } from '../moderation/labeler'; 8 8 9 - export const createLabelerMetaQuery = (did: () => At.Did) => { 10 - const { client } = useAgent(); 9 + export const createLabelerMetaQuery = (did: () => At.DID) => { 10 + const { rpc } = useAgent(); 11 11 12 12 const query = createQuery(() => { 13 13 const $did = did(); ··· 15 15 return { 16 16 queryKey: ['labeler-definition', $did], 17 17 async queryFn(ctx) { 18 - const data = await ok( 19 - client.get('app.bsky.labeler.getServices', { 20 - signal: ctx.signal, 21 - params: { 22 - dids: [$did], 23 - detailed: true, 24 - }, 25 - }), 26 - ); 18 + const { data } = await rpc.get('app.bsky.labeler.getServices', { 19 + signal: ctx.signal, 20 + params: { 21 + dids: [$did], 22 + detailed: true, 23 + }, 24 + }); 27 25 28 26 const service = data.views[0] as AppBskyLabelerDefs.LabelerViewDetailed; 29 27 30 28 if (!service) { 31 - throw new ClientResponseError({ 32 - status: 400, 33 - data: { error: `NotFound`, message: `Labeler not found: ${$did}` }, 29 + throw new XRPCError(400, { 30 + kind: 'NotFound', 31 + description: `Labeler not found: ${$did}`, 34 32 }); 35 33 } 36 34
+10 -14
src/api/queries/list-members.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { At } from '@atcute/client/lexicons'; 3 1 import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 2 5 3 import { useAgent } from '~/lib/states/agent'; 6 4 7 - export const createListMembersQuery = (listUri: () => At.ResourceUri) => { 8 - const { client } = useAgent(); 5 + export const createListMembersQuery = (listUri: () => string) => { 6 + const { rpc } = useAgent(); 9 7 10 8 return createInfiniteQuery(() => { 11 9 const $listUri = listUri(); ··· 13 11 return { 14 12 queryKey: ['list-members', $listUri], 15 13 async queryFn(ctx: QC<never, string | undefined>) { 16 - const data = await ok( 17 - client.get('app.bsky.graph.getList', { 18 - signal: ctx.signal, 19 - params: { 20 - list: $listUri, 21 - limit: 50, 22 - cursor: ctx.pageParam, 23 - }, 24 - }), 25 - ); 14 + const { data } = await rpc.get('app.bsky.graph.getList', { 15 + signal: ctx.signal, 16 + params: { 17 + list: $listUri, 18 + limit: 50, 19 + cursor: ctx.pageParam, 20 + }, 21 + }); 26 22 27 23 return { 28 24 cursor: data.cursor,
+12 -15
src/api/queries/list.ts
··· 1 1 import { modifyMutable, reconcile } from 'solid-js/store'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import type { AppBskyGraphDefs, At } from '@atcute/client/lexicons'; 5 4 import { createQuery } from '@mary/solid-query'; 6 5 ··· 9 8 import { useSession } from '~/lib/states/session'; 10 9 import { omit } from '~/lib/utils/misc'; 11 10 12 - import { makeAtUri, parseCanonicalResourceUri } from '../types/at-uri'; 11 + import { makeAtUri, parseAtUri } from '../types/at-uri'; 13 12 import { isDid } from '../types/identity'; 14 13 15 14 import { resolveHandle } from './handle'; 16 15 17 16 export const createListMetaQuery = (listUri: () => string) => { 18 - const { client } = useAgent(); 17 + const { rpc } = useAgent(); 19 18 const { currentAccount } = useSession(); 20 19 21 20 return createQuery((queryClient) => { ··· 24 23 return { 25 24 queryKey: ['list-meta', $listUri], 26 25 async queryFn(ctx) { 27 - const uri = parseCanonicalResourceUri($listUri); 26 + const uri = parseAtUri($listUri); 28 27 29 - let did: At.Did; 28 + let did: At.DID; 30 29 if (isDid(uri.repo)) { 31 30 did = uri.repo; 32 31 } else { 33 - did = await resolveHandle(client, uri.repo, ctx.signal); 32 + did = await resolveHandle(rpc, uri.repo, ctx.signal); 34 33 } 35 34 36 - const data = await ok( 37 - client.get('app.bsky.graph.getList', { 38 - signal: ctx.signal, 39 - params: { 40 - list: makeAtUri(did, uri.collection, uri.rkey), 41 - limit: 1, 42 - }, 43 - }), 44 - ); 35 + const { data } = await rpc.get('app.bsky.graph.getList', { 36 + signal: ctx.signal, 37 + params: { 38 + list: makeAtUri(did, uri.collection, uri.rkey), 39 + limit: 1, 40 + }, 41 + }); 45 42 46 43 if (currentAccount) { 47 44 const found = currentAccount.preferences.feeds.find((item): item is SavedListFeed => {
+23 -30
src/api/queries/my-lists.ts
··· 1 - import { ok } from '@atcute/client'; 2 1 import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 3 2 import { createQuery } from '@mary/solid-query'; 4 3 ··· 8 7 export type MyListsFilter = 'all' | 'curation' | 'moderation' | 'all-including-subscribed'; 9 8 10 9 export const createMyListsQuery = (filter: MyListsFilter) => { 11 - const { client } = useAgent(); 10 + const { rpc } = useAgent(); 12 11 const { currentAccount } = useSession(); 13 12 14 13 return createQuery(() => ({ ··· 16 15 async queryFn({ signal }) { 17 16 const promises = [ 18 17 accumulate(async (cursor) => { 19 - const data = await ok( 20 - client.get('app.bsky.graph.getLists', { 21 - signal, 22 - params: { 23 - actor: currentAccount!.did, 24 - cursor, 25 - limit: 100, 26 - }, 27 - }), 28 - ); 18 + const { data } = await rpc.get('app.bsky.graph.getLists', { 19 + signal, 20 + params: { 21 + actor: currentAccount!.did, 22 + cursor, 23 + limit: 100, 24 + }, 25 + }); 29 26 30 27 return { 31 28 cursor: data.cursor, ··· 37 34 if (filter === 'all-including-subscribed' || filter === 'moderation') { 38 35 promises.push( 39 36 accumulate(async (cursor) => { 40 - const data = await ok( 41 - client.get('app.bsky.graph.getListMutes', { 42 - signal, 43 - params: { 44 - cursor, 45 - limit: 100, 46 - }, 47 - }), 48 - ); 37 + const { data } = await rpc.get('app.bsky.graph.getListMutes', { 38 + signal, 39 + params: { 40 + cursor, 41 + limit: 100, 42 + }, 43 + }); 49 44 50 45 return { 51 46 cursor: data.cursor, ··· 56 51 57 52 promises.push( 58 53 accumulate(async (cursor) => { 59 - const data = await ok( 60 - client.get('app.bsky.graph.getListBlocks', { 61 - signal, 62 - params: { 63 - cursor, 64 - limit: 100, 65 - }, 66 - }), 67 - ); 54 + const { data } = await rpc.get('app.bsky.graph.getListBlocks', { 55 + signal, 56 + params: { 57 + cursor, 58 + limit: 100, 59 + }, 60 + }); 68 61 69 62 return { 70 63 cursor: data.cursor,
+4 -7
src/api/queries/notification-count.tsx
··· 1 - import { ok } from '@atcute/client'; 2 1 import { createQuery } from '@mary/solid-query'; 3 2 4 3 import { useAgent } from '~/lib/states/agent'; ··· 6 5 7 6 export const createNotificationCountQuery = (options?: { readonly disabled?: boolean }) => { 8 7 const { currentAccount } = useSession(); 9 - const { client } = useAgent(); 8 + const { rpc } = useAgent(); 10 9 11 10 const query = createQuery(() => ({ 12 11 queryKey: ['notification', 'count'], 13 12 enabled: currentAccount !== undefined && !options?.disabled, 14 13 async queryFn() { 15 - const data = await ok( 16 - client.get('app.bsky.notification.getUnreadCount', { 17 - params: {}, 18 - }), 19 - ); 14 + const { data } = await rpc.get('app.bsky.notification.getUnreadCount', { 15 + params: {}, 16 + }); 20 17 21 18 return data; 22 19 },
+21 -32
src/api/queries/notification-feed.tsx
··· 1 1 import { createSignal } from 'solid-js'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import type { AppBskyFeedDefs, AppBskyNotificationListNotifications } from '@atcute/client/lexicons'; 5 4 import { chunked, mapDefined } from '@mary/array-fns'; 6 5 import { type QueryFunctionContext as QC, createInfiniteQuery, useQueryClient } from '@mary/solid-query'; 7 6 8 7 import { useAgent } from '~/lib/states/agent'; 9 8 10 - import { parseCanonicalResourceUri } from '../types/at-uri'; 9 + import { parseAtUri } from '../types/at-uri'; 11 10 import { dequal } from '../utils/dequal'; 12 11 import { resetInfiniteData } from '../utils/query'; 13 12 ··· 85 84 export type NotificationsFilter = 'all' | 'mentions'; 86 85 87 86 export const createNotificationFeedQuery = (filter: () => NotificationsFilter) => { 88 - const { client } = useAgent(); 87 + const { rpc } = useAgent(); 89 88 const queryClient = useQueryClient(); 90 89 91 90 const [firstFetchedAt, setFirstFetchedAt] = createSignal(0); ··· 105 104 reasons = ['mention', 'reply', 'quote']; 106 105 } 107 106 108 - const data = await ok( 109 - client.get('app.bsky.notification.listNotifications', { 110 - signal: signal, 111 - params: { 112 - limit: 40, 113 - reasons: reasons, 114 - cursor: pageParam?.cursor, 115 - }, 116 - }), 117 - ); 107 + const { data } = await rpc.get('app.bsky.notification.listNotifications', { 108 + signal: signal, 109 + params: { 110 + limit: 40, 111 + reasons: reasons, 112 + cursor: pageParam?.cursor, 113 + }, 114 + }); 118 115 119 116 const notifs = data.notifications; 120 117 const firstSeenAt = pageParam?.seenAt; ··· 132 129 const subjectUri = item.reasonSubject; 133 130 134 131 // skip if they're not related to posts. 135 - if ( 136 - !subjectUri || 137 - parseCanonicalResourceUri(subjectUri).collection !== 'app.bsky.feed.post' 138 - ) { 132 + if (!subjectUri || parseAtUri(subjectUri).collection !== 'app.bsky.feed.post') { 139 133 return; 140 134 } 141 135 ··· 148 142 149 143 const chunkedPosts = await Promise.all( 150 144 chunked(Array.from(postUris), 25).map(async (uris) => { 151 - const data = await ok( 152 - client.get('app.bsky.feed.getPosts', { 153 - params: { 154 - uris: uris, 155 - }, 156 - }), 157 - ); 145 + const { data } = await rpc.get('app.bsky.feed.getPosts', { 146 + params: { 147 + uris: uris, 148 + }, 149 + }); 158 150 159 151 return data.posts; 160 152 }), ··· 246 238 const indexedAt = new Date(notifs[0]?.indexedAt ?? 0).getTime(); 247 239 const seenAt = Math.max(now, indexedAt); 248 240 249 - const promise = ok( 250 - client.post('app.bsky.notification.updateSeen', { 251 - as: null, 252 - input: { 253 - seenAt: new Date(seenAt).toISOString(), 254 - }, 255 - }), 256 - ); 241 + const promise = rpc.call('app.bsky.notification.updateSeen', { 242 + data: { 243 + seenAt: new Date(seenAt).toISOString(), 244 + }, 245 + }); 257 246 258 247 queryClient.cancelQueries({ 259 248 exact: true,
+11 -14
src/api/queries/post-quotes.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { AppBskyFeedGetQuotes, At } from '@atcute/client/lexicons'; 1 + import type { AppBskyFeedGetQuotes } from '@atcute/client/lexicons'; 3 2 import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; 6 5 7 - export const createPostQuotesQuery = (uri: () => At.ResourceUri) => { 8 - const { client } = useAgent(); 6 + export const createPostQuotesQuery = (uri: () => string) => { 7 + const { rpc } = useAgent(); 9 8 10 9 return createInfiniteQuery(() => { 11 10 const $uri = uri(); ··· 14 13 queryKey: ['post-quotes', $uri], 15 14 structuralSharing: false, 16 15 async queryFn(ctx: QC<never, string | undefined>): Promise<AppBskyFeedGetQuotes.Output> { 17 - const data = await ok( 18 - client.get('app.bsky.feed.getQuotes', { 19 - signal: ctx.signal, 20 - params: { 21 - uri: $uri, 22 - limit: 50, 23 - cursor: ctx.pageParam, 24 - }, 25 - }), 26 - ); 16 + const { data } = await rpc.get('app.bsky.feed.getQuotes', { 17 + signal: ctx.signal, 18 + params: { 19 + uri: $uri, 20 + limit: 50, 21 + cursor: ctx.pageParam, 22 + }, 23 + }); 27 24 28 25 return data; 29 26 },
+15 -20
src/api/queries/post-thread.ts
··· 1 - import { ClientResponseError, ok } from '@atcute/client'; 2 - import type { AppBskyFeedDefs, At, Brand } from '@atcute/client/lexicons'; 1 + import { XRPCError } from '@atcute/client'; 2 + import type { AppBskyFeedDefs, Brand } from '@atcute/client/lexicons'; 3 3 import { createQuery } from '@mary/solid-query'; 4 4 5 5 import { useAgent } from '~/lib/states/agent'; ··· 11 11 12 12 type ThreadReturn = Brand.Union<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost>; 13 13 14 - export const usePostThreadQuery = (uri: () => At.ResourceUri) => { 15 - const { client } = useAgent(); 14 + export const usePostThreadQuery = (uri: () => string) => { 15 + const { rpc } = useAgent(); 16 16 17 17 return createQuery((queryClient) => { 18 18 const $uri = uri(); ··· 21 21 queryKey: ['post-thread', $uri], 22 22 structuralSharing: false, 23 23 async queryFn(ctx): Promise<ThreadReturn> { 24 - const data = await ok( 25 - client.get('app.bsky.feed.getPostThread', { 26 - signal: ctx.signal, 27 - params: { 28 - uri: $uri, 29 - depth: MAX_DEPTH, 30 - parentHeight: MAX_HEIGHT, 31 - }, 32 - }), 33 - ); 24 + const { data } = await rpc.get('app.bsky.feed.getPostThread', { 25 + signal: ctx.signal, 26 + params: { 27 + uri: $uri, 28 + depth: MAX_DEPTH, 29 + parentHeight: MAX_HEIGHT, 30 + }, 31 + }); 34 32 35 33 const thread = data.thread; 36 34 37 35 if (thread.$type === 'app.bsky.feed.defs#notFoundPost') { 38 - throw new ClientResponseError({ 39 - status: 400, 40 - data: { 41 - error: `NotFound`, 42 - message: `Post not found: ${$uri}`, 43 - }, 36 + throw new XRPCError(400, { 37 + kind: 'NotFound', 38 + description: `Post not found: ${$uri}`, 44 39 }); 45 40 } 46 41
+11 -14
src/api/queries/post.ts
··· 1 - import { ok } from '@atcute/client'; 2 1 import type { At } from '@atcute/client/lexicons'; 3 2 import { createQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; 6 5 7 6 import { findPostsInCache } from '../cache/post-shadow'; 8 - import { makeAtUri, parseCanonicalResourceUri } from '../types/at-uri'; 7 + import { makeAtUri, parseAtUri } from '../types/at-uri'; 9 8 import { isDid } from '../types/identity'; 10 9 11 10 import { resolveHandle } from './handle'; 12 11 13 12 export const createPostQuery = (postUri: () => string) => { 14 - const { client } = useAgent(); 13 + const { rpc } = useAgent(); 15 14 16 15 return createQuery((queryClient) => { 17 16 const $postUri = postUri(); ··· 19 18 return { 20 19 queryKey: ['post', $postUri], 21 20 async queryFn(ctx) { 22 - const uri = parseCanonicalResourceUri($postUri); 21 + const uri = parseAtUri($postUri); 23 22 24 - let did: At.Did; 23 + let did: At.DID; 25 24 if (isDid(uri.repo)) { 26 25 did = uri.repo; 27 26 } else { 28 - did = await resolveHandle(client, uri.repo, ctx.signal); 27 + did = await resolveHandle(rpc, uri.repo, ctx.signal); 29 28 } 30 29 31 - const data = await ok( 32 - client.get('app.bsky.feed.getPosts', { 33 - signal: ctx.signal, 34 - params: { 35 - uris: [makeAtUri(did, uri.collection, uri.rkey)], 36 - }, 37 - }), 38 - ); 30 + const { data } = await rpc.get('app.bsky.feed.getPosts', { 31 + signal: ctx.signal, 32 + params: { 33 + uris: [makeAtUri(did, uri.collection, uri.rkey)], 34 + }, 35 + }); 39 36 40 37 const post = data.posts[0]; 41 38
+8 -11
src/api/queries/profile-autocomplete.ts
··· 1 - import { ok } from '@atcute/client'; 2 1 import { createQuery, keepPreviousData } from '@mary/solid-query'; 3 2 4 3 import { useAgent } from '~/lib/states/agent'; ··· 11 10 query: () => string, 12 11 opts?: ProfileAutocompleteQueryOptions, 13 12 ) => { 14 - const { client } = useAgent(); 13 + const { rpc } = useAgent(); 15 14 16 15 return createQuery(() => { 17 16 const $query = query(); ··· 27 26 enabled: isEnabled, 28 27 placeholderData: isEnabled ? keepPreviousData : undefined, 29 28 async queryFn({ signal }) { 30 - const data = await ok( 31 - client.get('app.bsky.actor.searchActorsTypeahead', { 32 - signal, 33 - params: { 34 - q: trimmed, 35 - limit: 10, 36 - }, 37 - }), 38 - ); 29 + const { data } = await rpc.get('app.bsky.actor.searchActorsTypeahead', { 30 + signal, 31 + params: { 32 + q: trimmed, 33 + limit: 10, 34 + }, 35 + }); 39 36 40 37 return data; 41 38 },
+10 -14
src/api/queries/profile-feeds.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { At } from '@atcute/client/lexicons'; 3 1 import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 2 5 3 import { useAgent } from '~/lib/states/agent'; 6 4 7 - export const createProfileFeedsQuery = (didOrHandle: () => At.Identifier) => { 8 - const { client } = useAgent(); 5 + export const createProfileFeedsQuery = (didOrHandle: () => string) => { 6 + const { rpc } = useAgent(); 9 7 10 8 return createInfiniteQuery(() => { 11 9 const $didOrHandle = didOrHandle(); ··· 13 11 return { 14 12 queryKey: ['profile-feeds', $didOrHandle], 15 13 async queryFn(ctx: QC<never, string | undefined>) { 16 - const data = await ok( 17 - client.get('app.bsky.feed.getActorFeeds', { 18 - signal: ctx.signal, 19 - params: { 20 - actor: $didOrHandle, 21 - limit: 100, 22 - cursor: ctx.pageParam, 23 - }, 24 - }), 25 - ); 14 + const { data } = await rpc.get('app.bsky.feed.getActorFeeds', { 15 + signal: ctx.signal, 16 + params: { 17 + actor: $didOrHandle, 18 + limit: 100, 19 + cursor: ctx.pageParam, 20 + }, 21 + }); 26 22 27 23 data.feeds.sort((a, b) => (b.likeCount ?? 0) - (a.likeCount ?? 0)); 28 24 return data;
+11 -14
src/api/queries/profile-followers.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 3 2 import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; 6 5 7 6 import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response'; 8 7 9 - export const createProfileFollowersQuery = (didOrHandle: () => At.Identifier) => { 10 - const { client } = useAgent(); 8 + export const createProfileFollowersQuery = (didOrHandle: () => string) => { 9 + const { rpc } = useAgent(); 11 10 12 11 return createInfiniteQuery((queryClient) => { 13 12 const $didOrHandle = didOrHandle(); ··· 15 14 return { 16 15 queryKey: ['profile-followers', $didOrHandle], 17 16 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> { 18 - const data = await ok( 19 - client.get('app.bsky.graph.getFollowers', { 20 - signal: ctx.signal, 21 - params: { 22 - actor: $didOrHandle, 23 - limit: 50, 24 - cursor: ctx.pageParam, 25 - }, 26 - }), 27 - ); 17 + const { data } = await rpc.get('app.bsky.graph.getFollowers', { 18 + signal: ctx.signal, 19 + params: { 20 + actor: $didOrHandle, 21 + limit: 50, 22 + cursor: ctx.pageParam, 23 + }, 24 + }); 28 25 29 26 return toProfilesListWithSubjectPage(data, 'followers'); 30 27 },
+11 -14
src/api/queries/profile-following.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 3 2 import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; 6 5 7 6 import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response'; 8 7 9 - export const createProfileFollowingQuery = (didOrHandle: () => At.Identifier) => { 10 - const { client } = useAgent(); 8 + export const createProfileFollowingQuery = (didOrHandle: () => string) => { 9 + const { rpc } = useAgent(); 11 10 12 11 return createInfiniteQuery((queryClient) => { 13 12 const $didOrHandle = didOrHandle(); ··· 15 14 return { 16 15 queryKey: ['profile-following', $didOrHandle], 17 16 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> { 18 - const data = await ok( 19 - client.get('app.bsky.graph.getFollows', { 20 - signal: ctx.signal, 21 - params: { 22 - actor: $didOrHandle, 23 - limit: 50, 24 - cursor: ctx.pageParam, 25 - }, 26 - }), 27 - ); 17 + const { data } = await rpc.get('app.bsky.graph.getFollows', { 18 + signal: ctx.signal, 19 + params: { 20 + actor: $didOrHandle, 21 + limit: 50, 22 + cursor: ctx.pageParam, 23 + }, 24 + }); 28 25 29 26 return toProfilesListWithSubjectPage(data, 'follows'); 30 27 },
+11 -14
src/api/queries/profile-known-followers.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 3 2 import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; 6 5 7 6 import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response'; 8 7 9 - export const createProfileKnownFollowersQuery = (didOrHandle: () => At.Identifier) => { 10 - const { client } = useAgent(); 8 + export const createProfileKnownFollowersQuery = (didOrHandle: () => string) => { 9 + const { rpc } = useAgent(); 11 10 12 11 return createInfiniteQuery((queryClient) => { 13 12 const $didOrHandle = didOrHandle(); ··· 15 14 return { 16 15 queryKey: ['profile-known-followers', $didOrHandle], 17 16 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> { 18 - const data = await ok( 19 - client.get('app.bsky.graph.getKnownFollowers', { 20 - signal: ctx.signal, 21 - params: { 22 - actor: $didOrHandle, 23 - limit: 50, 24 - cursor: ctx.pageParam, 25 - }, 26 - }), 27 - ); 17 + const { data } = await rpc.get('app.bsky.graph.getKnownFollowers', { 18 + signal: ctx.signal, 19 + params: { 20 + actor: $didOrHandle, 21 + limit: 50, 22 + cursor: ctx.pageParam, 23 + }, 24 + }); 28 25 29 26 return toProfilesListWithSubjectPage(data, 'followers'); 30 27 },
+10 -14
src/api/queries/profile-lists.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { At } from '@atcute/client/lexicons'; 3 1 import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 2 5 3 import { useAgent } from '~/lib/states/agent'; 6 4 7 - export const createProfileListsQuery = (didOrHandle: () => At.Identifier) => { 8 - const { client } = useAgent(); 5 + export const createProfileListsQuery = (didOrHandle: () => string) => { 6 + const { rpc } = useAgent(); 9 7 10 8 const collator = new Intl.Collator('en-US'); 11 9 ··· 15 13 return { 16 14 queryKey: ['profile-lists', $didOrHandle], 17 15 async queryFn(ctx: QC<never, string | undefined>) { 18 - const data = await ok( 19 - client.get('app.bsky.graph.getLists', { 20 - signal: ctx.signal, 21 - params: { 22 - actor: $didOrHandle, 23 - limit: 100, 24 - cursor: ctx.pageParam, 25 - }, 26 - }), 27 - ); 16 + const { data } = await rpc.get('app.bsky.graph.getLists', { 17 + signal: ctx.signal, 18 + params: { 19 + actor: $didOrHandle, 20 + limit: 100, 21 + cursor: ctx.pageParam, 22 + }, 23 + }); 28 24 29 25 data.lists.sort((a, b) => collator.compare(a.name, b.name)); 30 26 return data;
+17 -12
src/api/queries/profile.ts
··· 1 1 import { modifyMutable, reconcile } from 'solid-js/store'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 5 4 import { createQuery } from '@mary/solid-query'; 6 5 7 6 import { useAgent } from '~/lib/states/agent'; 8 7 import { useSession } from '~/lib/states/session'; 9 8 9 + import { findProfilesInCache } from '../cache/profile-shadow'; 10 10 import { dequal } from '../utils/dequal'; 11 11 12 12 export interface ProfileQueryOptions { ··· 14 14 gcTime?: number; 15 15 } 16 16 17 - export const createProfileQuery = (didOrHandle: () => At.Identifier, opts: ProfileQueryOptions = {}) => { 18 - const { client } = useAgent(); 17 + export const createProfileQuery = (didOrHandle: () => string, opts: ProfileQueryOptions = {}) => { 18 + const { rpc } = useAgent(); 19 19 const { currentAccount } = useSession(); 20 20 21 21 return createQuery((queryClient) => { ··· 26 26 staleTime: opts.staleTime, 27 27 gcTime: opts.gcTime, 28 28 async queryFn(ctx): Promise<AppBskyActorDefs.ProfileViewDetailed> { 29 - const data = await ok( 30 - client.get('app.bsky.actor.getProfile', { 31 - signal: ctx.signal, 32 - params: { 33 - actor: $didOrHandle!, 34 - }, 35 - }), 36 - ); 29 + const { data } = await rpc.get('app.bsky.actor.getProfile', { 30 + signal: ctx.signal, 31 + params: { 32 + actor: $didOrHandle!, 33 + }, 34 + }); 37 35 38 36 if (currentAccount !== undefined && currentAccount.did === data.did) { 39 37 // Unset `knownFollowers` as we don't need that on our own profile. ··· 53 51 return data; 54 52 }, 55 53 placeholderData(): AppBskyActorDefs.ProfileViewDetailed | undefined { 56 - return queryClient.getQueryData(['profile-precache', $didOrHandle]); 54 + const precache = queryClient.getQueryData(['profile-precache', $didOrHandle]); 55 + if (precache) { 56 + return precache as any; 57 + } 58 + 59 + for (const profile of findProfilesInCache(queryClient, $didOrHandle as At.DID)) { 60 + return profile as any; 61 + } 57 62 }, 58 63 initialData(): AppBskyActorDefs.ProfileViewDetailed | undefined { 59 64 if (currentAccount !== undefined && currentAccount.did === $didOrHandle) {
+9 -12
src/api/queries/search-feeds.ts
··· 1 - import { ok } from '@atcute/client'; 2 1 import type { AppBskyUnspeccedGetPopularFeedGenerators } from '@atcute/client/lexicons'; 3 2 import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; 6 5 7 6 export const createSearchFeedsQuery = (query: () => string) => { 8 - const { client } = useAgent(); 7 + const { rpc } = useAgent(); 9 8 10 9 return createInfiniteQuery(() => { 11 10 const q = query(); ··· 15 14 async queryFn( 16 15 ctx: QC<never, string | undefined>, 17 16 ): Promise<AppBskyUnspeccedGetPopularFeedGenerators.Output> { 18 - const data = await ok( 19 - client.get('app.bsky.unspecced.getPopularFeedGenerators', { 20 - signal: ctx.signal, 21 - params: { 22 - query: q, 23 - limit: 50, 24 - cursor: ctx.pageParam, 25 - }, 26 - }), 27 - ); 17 + const { data } = await rpc.get('app.bsky.unspecced.getPopularFeedGenerators', { 18 + signal: ctx.signal, 19 + params: { 20 + query: q, 21 + limit: 50, 22 + cursor: ctx.pageParam, 23 + }, 24 + }); 28 25 29 26 return data; 30 27 },
+9 -12
src/api/queries/search-profiles.ts
··· 1 - import { ok } from '@atcute/client'; 2 1 import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 3 2 4 3 import { useAgent } from '~/lib/states/agent'; ··· 6 5 import { type ProfilesListPage, toProfilesListPage } from '../types/profile-response'; 7 6 8 7 export const createSearchProfilesQuery = (query: () => string) => { 9 - const { client } = useAgent(); 8 + const { rpc } = useAgent(); 10 9 11 10 return createInfiniteQuery(() => { 12 11 const q = query(); ··· 14 13 return { 15 14 queryKey: ['search-profiles', q], 16 15 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListPage> { 17 - const data = await ok( 18 - client.get('app.bsky.actor.searchActors', { 19 - signal: ctx.signal, 20 - params: { 21 - q: q, 22 - limit: 50, 23 - cursor: ctx.pageParam, 24 - }, 25 - }), 26 - ); 16 + const { data } = await rpc.get('app.bsky.actor.searchActors', { 17 + signal: ctx.signal, 18 + params: { 19 + q: q, 20 + limit: 50, 21 + cursor: ctx.pageParam, 22 + }, 23 + }); 27 24 28 25 return toProfilesListPage(data, 'actors'); 29 26 },
+10 -14
src/api/queries/subject-likers.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { At } from '@atcute/client/lexicons'; 3 1 import type { QueryFunctionContext as QC } from '@mary/solid-query'; 4 2 import { createInfiniteQuery } from '@mary/solid-query'; 5 3 ··· 7 5 8 6 import type { ProfilesListPage } from '../types/profile-response'; 9 7 10 - export const createSubjectLikersQuery = (uri: () => At.ResourceUri) => { 11 - const { client } = useAgent(); 8 + export const createSubjectLikersQuery = (uri: () => string) => { 9 + const { rpc } = useAgent(); 12 10 13 11 return createInfiniteQuery(() => { 14 12 const $uri = uri(); ··· 17 15 queryKey: ['subject-likers', $uri], 18 16 structuralSharing: false, 19 17 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListPage> { 20 - const data = await ok( 21 - client.get('app.bsky.feed.getLikes', { 22 - signal: ctx.signal, 23 - params: { 24 - uri: $uri, 25 - limit: 50, 26 - cursor: ctx.pageParam, 27 - }, 28 - }), 29 - ); 18 + const { data } = await rpc.get('app.bsky.feed.getLikes', { 19 + signal: ctx.signal, 20 + params: { 21 + uri: $uri, 22 + limit: 50, 23 + cursor: ctx.pageParam, 24 + }, 25 + }); 30 26 31 27 return { 32 28 cursor: data.cursor,
+10 -14
src/api/queries/subject-reposters.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { At } from '@atcute/client/lexicons'; 3 1 import type { QueryFunctionContext as QC } from '@mary/solid-query'; 4 2 import { createInfiniteQuery } from '@mary/solid-query'; 5 3 ··· 7 5 8 6 import { type ProfilesListPage, toProfilesListPage } from '../types/profile-response'; 9 7 10 - export const createSubjectRepostersQuery = (uri: () => At.ResourceUri) => { 11 - const { client } = useAgent(); 8 + export const createSubjectRepostersQuery = (uri: () => string) => { 9 + const { rpc } = useAgent(); 12 10 13 11 return createInfiniteQuery(() => { 14 12 const $uri = uri(); ··· 17 15 queryKey: ['subject-reposters', $uri], 18 16 structuralSharing: false, 19 17 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListPage> { 20 - const data = await ok( 21 - client.get('app.bsky.feed.getRepostedBy', { 22 - signal: ctx.signal, 23 - params: { 24 - uri: $uri, 25 - limit: 50, 26 - cursor: ctx.pageParam, 27 - }, 28 - }), 29 - ); 18 + const { data } = await rpc.get('app.bsky.feed.getRepostedBy', { 19 + signal: ctx.signal, 20 + params: { 21 + uri: $uri, 22 + limit: 50, 23 + cursor: ctx.pageParam, 24 + }, 25 + }); 30 26 31 27 return toProfilesListPage(data, 'repostedBy'); 32 28 },
+75 -85
src/api/queries/timeline.ts
··· 1 1 import { createEffect, createMemo, createRenderEffect, onCleanup, untrack } from 'solid-js'; 2 2 3 - import { type Client, ok } from '@atcute/client'; 3 + import type { XRPC } from '@atcute/client'; 4 4 import type { AppBskyFeedDefs, AppBskyFeedGetTimeline, AppBskyFeedPost, At } from '@atcute/client/lexicons'; 5 5 import { type FalsyValue, definite } from '@mary/array-fns'; 6 6 import { type InfiniteData, createInfiniteQuery, createQuery, useQueryClient } from '@mary/solid-query'; ··· 31 31 getModerationUI, 32 32 } from '../moderation'; 33 33 import { ContextContentList, PreferenceHide, TargetContent } from '../moderation/constants'; 34 - import { parseCanonicalResourceUri } from '../types/at-uri'; 34 + import { parseAtUri } from '../types/at-uri'; 35 35 import { unwrapRecordEmbed } from '../utils/bluesky/embed'; 36 36 import { unwrapRecordEmbedView } from '../utils/bluesky/embed-view'; 37 37 import { EQUALS_DEQUAL } from '../utils/dequal'; ··· 49 49 50 50 export interface FeedTimelineParams { 51 51 type: 'feed'; 52 - uri: At.ResourceUri; 52 + uri: string; 53 53 showReplies: boolean; 54 54 showReposts: boolean; 55 55 showQuotes: boolean; ··· 57 57 58 58 export interface ListTimelineParams { 59 59 type: 'list'; 60 - uri: At.ResourceUri; 60 + uri: string; 61 61 showReplies: boolean; 62 62 showQuotes: boolean; 63 63 } 64 64 65 65 export interface ProfileTimelineParams { 66 66 type: 'profile'; 67 - actor: At.Did; 67 + actor: At.DID; 68 68 tab: 'posts' | 'replies' | 'likes' | 'media'; 69 69 } 70 70 ··· 126 126 export const useTimelineQuery = (_params: () => TimelineParams) => { 127 127 const getParams = createMemo(() => _params(), EQUALS_DEQUAL); 128 128 129 - const { client } = useAgent(); 129 + const { rpc } = useAgent(); 130 130 const { currentAccount } = useSession(); 131 131 const queryClient = useQueryClient(); 132 132 ··· 195 195 postFilter = createLabelPostFilter(moderation); 196 196 } 197 197 198 - const timeline = await fetchPage(client, params, limit, cursor, ctx.signal); 198 + const timeline = await fetchPage(rpc, params, limit, cursor, ctx.signal); 199 199 200 200 const feed = timeline.feed; 201 201 const newCursor = timeline.cursor; ··· 238 238 // const offset = params.type !== 'profile' ? timelineData!.pages[0].pinAmount : 0; 239 239 const offset = timelineData!.pages[0].pinAmount; 240 240 241 - const timeline = await fetchPage(client, params, offset + 1, undefined, ctx.signal); 241 + const timeline = await fetchPage(rpc, params, offset + 1, undefined, ctx.signal); 242 242 const feed = timeline.feed; 243 243 244 244 return { hash: getTimelineHash(feed) }; ··· 308 308 309 309 //// Raw fetch 310 310 const fetchPage = async ( 311 - client: Client, 311 + rpc: XRPC, 312 312 params: TimelineParams, 313 313 limit: number, 314 314 cursor: string | undefined, ··· 317 317 const type = params.type; 318 318 319 319 if (type === 'following') { 320 - const data = await ok( 321 - client.get('app.bsky.feed.getTimeline', { 322 - signal: signal, 323 - params: { 324 - algorithm: 'reverse-chronological', 325 - cursor: cursor, 326 - limit: limit, 327 - }, 328 - }), 329 - ); 320 + const response = await rpc.get('app.bsky.feed.getTimeline', { 321 + signal: signal, 322 + params: { 323 + algorithm: 'reverse-chronological', 324 + cursor: cursor, 325 + limit: limit, 326 + }, 327 + }); 330 328 331 - return data; 329 + return response.data; 332 330 } else if (type === 'feed') { 333 - const data = await ok( 334 - client.get('app.bsky.feed.getFeed', { 335 - signal: signal, 336 - headers: { 337 - 'accent-language': navigator.languages.join(','), 338 - }, 339 - params: { 340 - feed: params.uri, 341 - cursor: cursor, 342 - limit: limit, 343 - }, 344 - }), 345 - ); 331 + const response = await rpc.get('app.bsky.feed.getFeed', { 332 + signal: signal, 333 + headers: { 334 + 'accent-language': navigator.languages.join(','), 335 + }, 336 + params: { 337 + feed: params.uri, 338 + cursor: cursor, 339 + limit: limit, 340 + }, 341 + }); 342 + 343 + const data = response.data; 346 344 347 345 return { 348 346 // Discover feed, wooo. ··· 350 348 feed: data.feed, 351 349 }; 352 350 } else if (type === 'list') { 353 - const data = await ok( 354 - client.get('app.bsky.feed.getListFeed', { 351 + const response = await rpc.get('app.bsky.feed.getListFeed', { 352 + signal: signal, 353 + params: { 354 + list: params.uri, 355 + cursor: cursor, 356 + limit: limit, 357 + }, 358 + }); 359 + 360 + return response.data; 361 + } else if (type === 'profile') { 362 + if (params.tab === 'likes') { 363 + const response = await rpc.get('app.bsky.feed.getActorLikes', { 355 364 signal: signal, 356 365 params: { 357 - list: params.uri, 366 + actor: params.actor, 358 367 cursor: cursor, 359 368 limit: limit, 360 369 }, 361 - }), 362 - ); 363 - 364 - return data; 365 - } else if (type === 'profile') { 366 - if (params.tab === 'likes') { 367 - const data = await ok( 368 - client.get('app.bsky.feed.getActorLikes', { 369 - signal: signal, 370 - params: { 371 - actor: params.actor, 372 - cursor: cursor, 373 - limit: limit, 374 - }, 375 - }), 376 - ); 370 + }); 377 371 378 - return data; 372 + return response.data; 379 373 } else { 380 - const data = await ok( 381 - client.get('app.bsky.feed.getAuthorFeed', { 382 - signal: signal, 383 - params: { 384 - actor: params.actor, 385 - cursor: cursor, 386 - limit: limit, 387 - includePins: params.tab !== 'media', 388 - filter: 389 - params.tab === 'media' 390 - ? 'posts_with_media' 391 - : params.tab === 'replies' 392 - ? 'posts_with_replies' 393 - : 'posts_and_author_threads', 394 - }, 395 - }), 396 - ); 397 - 398 - return data; 399 - } 400 - } else if (type === 'search') { 401 - const data = await ok( 402 - client.get('app.bsky.feed.searchPosts', { 374 + const response = await rpc.get('app.bsky.feed.getAuthorFeed', { 403 375 signal: signal, 404 376 params: { 405 - sort: params.sort, 406 - q: params.query, 377 + actor: params.actor, 407 378 cursor: cursor, 408 379 limit: limit, 380 + includePins: params.tab !== 'media', 381 + filter: 382 + params.tab === 'media' 383 + ? 'posts_with_media' 384 + : params.tab === 'replies' 385 + ? 'posts_with_replies' 386 + : 'posts_and_author_threads', 409 387 }, 410 - }), 411 - ); 388 + }); 389 + 390 + return response.data; 391 + } 392 + } else if (type === 'search') { 393 + const response = await rpc.get('app.bsky.feed.searchPosts', { 394 + signal: signal, 395 + params: { 396 + sort: params.sort, 397 + q: params.query, 398 + cursor: cursor, 399 + limit: limit, 400 + }, 401 + }); 402 + 403 + const data = response.data; 412 404 413 405 return { cursor: data.cursor, feed: data.posts.map((view) => ({ post: view })) }; 414 406 } else { ··· 534 526 const post = item.post.record as PostRecord; 535 527 const record = unwrapRecordEmbed(post.embed); 536 528 537 - return ( 538 - record === undefined || parseCanonicalResourceUri(record.record.uri).collection === 'app.bsky.feed.post' 539 - ); 529 + return record === undefined || parseAtUri(record.record.uri).collection === 'app.bsky.feed.post'; 540 530 }; 541 531 }; 542 532 ··· 585 575 }; 586 576 }; 587 577 588 - const createHomeSliceFilter = (uid: At.Did, followsOnly: boolean): SliceFilter | undefined => { 578 + const createHomeSliceFilter = (uid: At.DID, followsOnly: boolean): SliceFilter | undefined => { 589 579 return (slice) => { 590 580 const items = slice.items; 591 581 const first = items[0]; ··· 617 607 }; 618 608 }; 619 609 620 - const createProfileSliceFilter = (did: At.Did): SliceFilter | undefined => { 610 + const createProfileSliceFilter = (did: At.DID): SliceFilter | undefined => { 621 611 return (slice) => { 622 612 const items = slice.items; 623 613 const first = items[0];
+1 -1
src/api/queries-cache/bookmark-feed.ts
··· 35 35 }; 36 36 }; 37 37 38 - export const findAllProfiles = (did: At.Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 38 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 39 39 return { 40 40 filter: { 41 41 queryKey: ['bookmarks-feed'],
+1 -1
src/api/queries-cache/notification-feed.ts
··· 38 38 }; 39 39 40 40 export const findAllProfiles = ( 41 - did: At.Did, 41 + did: At.DID, 42 42 ): CacheMatcher<AppBskyActorDefs.ProfileViewBasic | AppBskyActorDefs.ProfileView> => { 43 43 return { 44 44 filter: {
+1 -1
src/api/queries-cache/post-thread.ts
··· 54 54 }; 55 55 }; 56 56 57 - export const findAllProfiles = (did: At.Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 57 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 58 58 return { 59 59 filter: { 60 60 queryKey: ['post-thread'],
+1 -1
src/api/queries-cache/profile-autocomplete.ts
··· 2 2 3 3 import type { CacheMatcher } from '../cache/utils'; 4 4 5 - export const findAllProfiles = (did: At.Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 5 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 6 6 return { 7 7 filter: { 8 8 queryKey: ['profile-autocomplete'],
+1 -1
src/api/queries-cache/profile-list.ts
··· 4 4 import type { CacheMatcher } from '../cache/utils'; 5 5 import type { ProfilesListPage, ProfilesListWithSubjectPage } from '../types/profile-response'; 6 6 7 - export const findAllProfiles = (did: At.Did): CacheMatcher<AppBskyActorDefs.ProfileView> => { 7 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileView> => { 8 8 return { 9 9 filter: [ 10 10 { queryKey: ['profile-followers'] },
+1 -1
src/api/queries-cache/profile.ts
··· 2 2 3 3 import type { CacheMatcher } from '../cache/utils'; 4 4 5 - export const findAllProfiles = (did: At.Did): CacheMatcher<AppBskyActorDefs.ProfileViewDetailed> => { 5 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewDetailed> => { 6 6 return { 7 7 filter: { 8 8 queryKey: ['profile', did],
+1 -1
src/api/queries-cache/timeline.ts
··· 63 63 }; 64 64 }; 65 65 66 - export const findAllProfiles = (did: At.Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 66 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 67 67 return { 68 68 filter: { 69 69 queryKey: ['timeline'],
+10 -14
src/api/types/at-uri.ts
··· 5 5 export const ATURI_RE = 6 6 /^at:\/\/(did:[a-z]+:[a-zA-Z0-9._:%\-]*[a-zA-Z0-9._\-]|(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\/([a-zA-Z0-9-.]+)\/((?!\.{1,2}$)[a-zA-Z0-9_~.:-]{1,512})(?:#(\/[a-zA-Z0-9._~:@!$&%')(*+,;=\-[\]/\\]*))?$/; 7 7 8 - export interface ParsedCanonicalResourceUri { 9 - repo: At.Did; 10 - collection: At.Nsid; 11 - rkey: At.RecordKey; 8 + export interface ParsedAtUri { 9 + repo: string; 10 + collection: string; 11 + rkey: string; 12 12 fragment: string | undefined; 13 13 } 14 14 15 - export const parseCanonicalResourceUri = (str: string): ParsedCanonicalResourceUri => { 15 + export const parseAtUri = (str: string): ParsedAtUri => { 16 16 const match = ATURI_RE.exec(str); 17 - assert(match !== null, `failed to parse canonical-at-uri for ${str}`); 17 + assert(match !== null, `failed to parse at-uri for ${str}`); 18 18 19 19 return { 20 - repo: match[1] as At.Did, 21 - collection: match[2] as At.Nsid, 22 - rkey: match[3] as At.RecordKey, 20 + repo: match[1] as At.DID, 21 + collection: match[2], 22 + rkey: match[3], 23 23 fragment: match[4], 24 24 }; 25 25 }; 26 26 27 - export const makeAtUri = ( 28 - repo: At.Identifier, 29 - collection: keyof Records | (string & {}), 30 - rkey: At.RecordKey, 31 - ): At.ResourceUri => { 27 + export const makeAtUri = (repo: string, collection: keyof Records | (string & {}), rkey: string) => { 32 28 return `at://${repo}/${collection}/${rkey}`; 33 29 };
+2 -2
src/api/utils/bluesky/embed-view.ts
··· 1 1 import type { AppBskyEmbedRecordWithMedia, AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 3 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 4 5 5 export interface EmbedsView { 6 6 media?: AppBskyEmbedRecordWithMedia.View['media']; ··· 47 47 case 'app.bsky.embed.record#viewNotFound': 48 48 case 'app.bsky.embed.record#viewDetached': 49 49 case 'app.bsky.embed.record#viewBlocked': { 50 - const uri = parseCanonicalResourceUri(embed.uri); 50 + const uri = parseAtUri(embed.uri); 51 51 if (uri.collection === 'app.bsky.feed.post') { 52 52 return embed; 53 53 }
+8 -10
src/api/utils/did.ts
··· 1 - import { type Client, ok } from '@atcute/client'; 1 + import type { XRPC } from '@atcute/client'; 2 2 import type { At } from '@atcute/client/lexicons'; 3 3 4 4 import { isDid } from '../types/identity'; 5 5 6 - const getDid = async (client: Client, actor: At.Handle, signal?: AbortSignal) => { 7 - let did: At.Did; 6 + const getDid = async (rpc: XRPC, actor: string, signal?: AbortSignal) => { 7 + let did: At.DID; 8 8 if (isDid(actor)) { 9 9 did = actor; 10 10 } else { 11 - const data = await ok( 12 - client.get('com.atproto.identity.resolveHandle', { 13 - signal: signal, 14 - params: { handle: actor }, 15 - }), 16 - ); 11 + const response = await rpc.get('com.atproto.identity.resolveHandle', { 12 + signal: signal, 13 + params: { handle: actor }, 14 + }); 17 15 18 - did = data.did; 16 + did = response.data.did; 19 17 } 20 18 21 19 return did;
+5 -5
src/api/utils/error.ts
··· 1 - import { ClientResponseError } from '@atcute/client'; 1 + import { XRPCError } from '@atcute/client'; 2 2 import { TokenRefreshError } from '@atcute/oauth-browser-client'; 3 3 4 - export const formatXRPCError = (err: ClientResponseError): string => { 5 - const name = err.error; 4 + export const formatXRPCError = (err: XRPCError): string => { 5 + const name = err.kind; 6 6 return (name ? name + ': ' : '') + err.description; 7 7 }; 8 8 ··· 11 11 return `Account session is no longer valid`; 12 12 } 13 13 14 - if (err instanceof ClientResponseError) { 15 - const kind = err.error; 14 + if (err instanceof XRPCError) { 15 + const kind = err.kind; 16 16 17 17 if (kind === 'invalid_token') { 18 18 return `Account session is no longer valid`;
+30 -51
src/api/utils/records.ts
··· 1 - import { type Client, ok } from '@atcute/client'; 1 + import type { XRPC } from '@atcute/client'; 2 2 import type { 3 3 At, 4 4 ComAtprotoRepoGetRecord, ··· 9 9 type RecordType = keyof Records; 10 10 11 11 export interface CreateRecordOptions<K extends RecordType> { 12 - repo: At.Did; 12 + repo: At.DID; 13 13 collection: K; 14 14 rkey?: string; 15 15 record: Records[K]; ··· 17 17 validate?: boolean; 18 18 } 19 19 20 - export const createRecord = async <K extends RecordType>(client: Client, options: CreateRecordOptions<K>) => { 21 - const data = await ok( 22 - client.post('com.atproto.repo.createRecord', { 23 - input: options, 24 - }), 25 - ); 20 + export const createRecord = async <K extends RecordType>(rpc: XRPC, options: CreateRecordOptions<K>) => { 21 + const { data } = await rpc.call('com.atproto.repo.createRecord', { data: options }); 26 22 27 23 return data; 28 24 }; 29 25 30 26 export interface PutRecordOptions<K extends RecordType> { 31 - repo: At.Did; 27 + repo: At.DID; 32 28 collection: K; 33 29 rkey: string; 34 30 record: Records[K]; 35 31 swapCommit?: string; 36 - swapRecord?: At.Cid | null; 32 + swapRecord?: At.CID | null; 37 33 validate?: boolean; 38 34 } 39 35 40 - export const putRecord = async <K extends RecordType>(client: Client, options: PutRecordOptions<K>) => { 41 - const data = await ok( 42 - client.post('com.atproto.repo.putRecord', { 43 - input: options, 44 - }), 45 - ); 36 + export const putRecord = async <K extends RecordType>(rpc: XRPC, options: PutRecordOptions<K>) => { 37 + const { data } = await rpc.call('com.atproto.repo.putRecord', { data: options }); 46 38 47 39 return data; 48 40 }; 49 41 50 42 export interface DeleteRecordOptions<K extends RecordType> { 51 - repo: At.Did; 43 + repo: At.DID; 52 44 collection: K; 53 45 rkey: string; 54 46 swapCommit?: string; 55 47 swapRecord?: string; 56 48 } 57 49 58 - export const deleteRecord = async <K extends RecordType>(client: Client, options: DeleteRecordOptions<K>) => { 59 - await ok( 60 - client.post('com.atproto.repo.deleteRecord', { 61 - input: options, 62 - }), 63 - ); 50 + export const deleteRecord = async <K extends RecordType>(rpc: XRPC, options: DeleteRecordOptions<K>) => { 51 + await rpc.call('com.atproto.repo.deleteRecord', { 52 + data: options, 53 + }); 64 54 }; 65 55 66 56 export interface GetRecordOptions<K extends RecordType> { 67 - signal?: AbortSignal; 68 - repo: At.Did; 57 + repo: At.DID; 69 58 collection: K; 70 59 rkey: string; 71 60 cid?: string; ··· 76 65 } 77 66 78 67 export const getRecord = async <K extends RecordType>( 79 - client: Client, 68 + rpc: XRPC, 80 69 options: GetRecordOptions<K>, 81 70 ): Promise<GetRecordOutput<Records[K]>> => { 82 - const data = await ok( 83 - client.get('com.atproto.repo.getRecord', { 84 - signal: options.signal, 85 - params: { 86 - repo: options.repo, 87 - collection: options.collection, 88 - rkey: options.rkey, 89 - cid: options.cid, 90 - }, 91 - }), 92 - ); 71 + const { data } = await rpc.get('com.atproto.repo.getRecord', { 72 + params: options, 73 + }); 93 74 94 75 return data as any; 95 76 }; 96 77 97 78 export interface ListRecordsOptions<K extends RecordType> { 98 79 signal?: AbortSignal; 99 - repo: At.Did; 80 + repo: At.DID; 100 81 collection: K; 101 82 cursor?: string; 102 83 limit?: number; ··· 104 85 105 86 export interface ListRecordsOutput<T> extends ComAtprotoRepoListRecords.Output { 106 87 cursor?: string; 107 - records: { cid: At.Cid; uri: At.ResourceUri; value: T }[]; 88 + records: { cid: At.CID; uri: At.Uri; value: T }[]; 108 89 } 109 90 110 91 export const listRecords = async <K extends RecordType>( 111 - client: Client, 92 + rpc: XRPC, 112 93 options: ListRecordsOptions<K>, 113 94 ): Promise<ListRecordsOutput<Records[K]>> => { 114 - const data = await ok( 115 - client.get('com.atproto.repo.listRecords', { 116 - signal: options.signal, 117 - params: { 118 - repo: options.repo, 119 - collection: options.collection, 120 - limit: options.limit, 121 - cursor: options.cursor, 122 - }, 123 - }), 124 - ); 95 + const { data } = await rpc.get('com.atproto.repo.listRecords', { 96 + signal: options.signal, 97 + params: { 98 + repo: options.repo, 99 + collection: options.collection, 100 + limit: options.limit, 101 + cursor: options.cursor, 102 + }, 103 + }); 125 104 126 105 return data as any; 127 106 };
-4
src/basa-env.d.ts
··· 57 57 58 58 interface Queries { 59 59 'x.basa.describeServer': { 60 - response: { json: XBasaDescribeServer.Output }; 61 - /** @deprecated */ 62 60 output: XBasaDescribeServer.Output; 63 61 }; 64 62 'x.basa.translate': { 65 63 params: XBasaTranslate.Params; 66 - response: { json: XBasaTranslate.Output }; 67 - /** @deprecated */ 68 64 output: XBasaTranslate.Output; 69 65 }; 70 66 }
+2 -2
src/components/bookmarks/bookmark-feed-item.tsx
··· 6 6 import { getModerationUI } from '~/api/moderation'; 7 7 import { ContextContentList } from '~/api/moderation/constants'; 8 8 import { moderatePost } from '~/api/moderation/entities/post'; 9 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 9 + import { parseAtUri } from '~/api/types/at-uri'; 10 10 11 11 import { history } from '~/globals/navigation'; 12 12 ··· 40 40 41 41 const shadow = usePostShadow(post); 42 42 43 - const uri = parseCanonicalResourceUri(post.uri); 43 + const uri = parseAtUri(post.uri); 44 44 const authorHref = `/${author.did}`; 45 45 const href = `/${author.did}/${uri.rkey}`; 46 46
+8 -11
src/components/composer/composer-input.tsx
··· 12 12 createSignal, 13 13 } from 'solid-js'; 14 14 15 - import { ok } from '@atcute/client'; 16 15 import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 17 16 18 17 import { safeUrlParse } from '~/api/utils/strings'; ··· 63 62 const onChange = props.onChange; 64 63 const onSubmit = props.onSubmit; 65 64 66 - const { client } = useAgent(); 65 + const { rpc } = useAgent(); 67 66 68 67 const [inputCursor, setInputCursor] = createSignal<number>(); 69 68 const [menuSelection, setMenuSelection] = createSignal<number>(); ··· 136 135 const MATCH_LIMIT = 5; 137 136 138 137 if (type === Suggestion.MENTION) { 139 - const data = await ok( 140 - client.get('app.bsky.actor.searchActorsTypeahead', { 141 - params: { 142 - q: match.query, 143 - limit: MATCH_LIMIT, 144 - }, 145 - }), 146 - ); 138 + const response = await rpc.get('app.bsky.actor.searchActorsTypeahead', { 139 + params: { 140 + q: match.query, 141 + limit: MATCH_LIMIT, 142 + }, 143 + }); 147 144 148 - return data.actors.map((item) => ({ type: Suggestion.MENTION, data: item })); 145 + return response.data.actors.map((item) => ({ type: Suggestion.MENTION, data: item })); 149 146 } 150 147 151 148 assert(false, `expected match`);
+2 -3
src/components/composer/gifs/gif-search-dialog.tsx
··· 1 1 import { For, Match, Switch, createSignal } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 3 import { chunked } from '@mary/array-fns'; 5 4 6 5 import { type Gif, createGifSearchQuery } from '~/api/queries/composer-gif'; ··· 111 110 export default GifSearchDialog; 112 111 113 112 export interface GifMedia { 114 - embedUrl: At.GenericUri; 113 + embedUrl: string; 115 114 alt: string; 116 115 ratio: { width: number; height: number }; 117 116 ··· 129 128 const [, id, file] = /\/([^/]+?AAAAC)\/([^/]+?)\.gif\/?$/.exec(url)!; 130 129 131 130 return { 132 - embedUrl: (url + `?hh=${dimensions[1]}&ww=${dimensions[0]}`) as At.GenericUri, 131 + embedUrl: url + `?hh=${dimensions[1]}&ww=${dimensions[0]}`, 133 132 alt: gif.content_description, 134 133 ratio: { width: dimensions[0], height: dimensions[1] }, 135 134
+57 -73
src/components/composer/lib/api.ts
··· 1 1 import { nanoid } from 'nanoid/non-secure'; 2 2 3 - import { Client, ClientResponseError, ok, simpleFetchHandler } from '@atcute/client'; 3 + import { XRPC, XRPCError, simpleFetchHandler } from '@atcute/client'; 4 4 import type { 5 5 AppBskyEmbedImages, 6 6 AppBskyEmbedRecord, ··· 26 26 import { uploadBlob } from '~/api/queries/blob'; 27 27 import type { LinkMeta } from '~/api/queries/composer'; 28 28 import { resolveHandle } from '~/api/queries/handle'; 29 - import { makeAtUri, parseCanonicalResourceUri } from '~/api/types/at-uri'; 29 + import { makeAtUri, parseAtUri } from '~/api/types/at-uri'; 30 30 import { isDid } from '~/api/types/identity'; 31 31 import { getRecord } from '~/api/utils/records'; 32 32 import { trimRichText } from '~/api/utils/richtext'; ··· 57 57 let cidPromise: Promise<typeof import('./cid')>; 58 58 59 59 export const publish = async ({ agent, queryClient, state, onLog: log }: PublishOptions) => { 60 - const client = agent.client; 60 + const rpc = agent.rpc; 61 61 const did = agent.did!; 62 62 63 63 const now = new Date(); ··· 74 74 queryKey: ['post', replyUri], 75 75 staleTime: 30_000, 76 76 async queryFn(ctx) { 77 - const uri = parseCanonicalResourceUri(replyUri); 77 + const uri = parseAtUri(replyUri); 78 78 79 - let did: At.Did; 79 + let did: At.DID; 80 80 if (isDid(uri.repo)) { 81 81 did = uri.repo; 82 82 } else { 83 - did = await resolveHandle(client, uri.repo, ctx.signal); 83 + did = await resolveHandle(rpc, uri.repo, ctx.signal); 84 84 } 85 85 86 - const data = await ok( 87 - client.get('app.bsky.feed.getPosts', { 88 - signal: ctx.signal, 89 - params: { 90 - uris: [makeAtUri(did, uri.collection, uri.rkey)], 91 - }, 92 - }), 93 - ); 86 + const { data } = await rpc.get('app.bsky.feed.getPosts', { 87 + signal: ctx.signal, 88 + params: { 89 + uris: [makeAtUri(did, uri.collection, uri.rkey)], 90 + }, 91 + }); 94 92 95 93 const post = data.posts[0]; 96 94 ··· 115 113 } 116 114 117 115 if (state.redraftUri) { 118 - const uri = parseCanonicalResourceUri(state.redraftUri); 116 + const uri = parseAtUri(state.redraftUri); 119 117 120 118 writes.push({ 121 119 $type: 'com.atproto.repo.applyWrites#delete', ··· 228 226 229 227 log?.(`Posting`); 230 228 231 - await ok( 232 - client.post('com.atproto.repo.applyWrites', { 233 - input: { 234 - repo: did, 235 - writes: writes, 236 - }, 237 - }), 238 - ); 229 + await rpc.call('com.atproto.repo.applyWrites', { 230 + data: { 231 + repo: did, 232 + writes: writes, 233 + }, 234 + }); 239 235 240 236 if (state.redraftUri) { 241 237 updatePostShadow(queryClient, state.redraftUri, { deleted: true }); ··· 302 298 303 299 switch (source.type) { 304 300 case 'local': { 305 - const uploaded = await uploadBlob(client, source.blob); 301 + const uploaded = await uploadBlob(rpc, source.blob); 306 302 307 303 return { 308 304 image: uploaded, ··· 343 339 344 340 const blob = source.blob; 345 341 346 - const videoClient = new Client({ 347 - handler: simpleFetchHandler({ service: 'https://video.bsky.app' }), 348 - }); 342 + const videoRpc = new XRPC({ handler: simpleFetchHandler({ service: 'https://video.bsky.app' }) }); 349 343 350 344 // Get upload limit status 351 345 { ··· 366 360 // GET https://porcini.us-east.host.bsky.network/xrpc/chat.bsky.convo.getLog 367 361 // atproto-proxy: did:web:api.bsky.chat#bsky_chat 368 362 // 369 - const tokenData = await ok( 370 - client.get('com.atproto.server.getServiceAuth', { 371 - params: { 372 - aud: 'did:web:video.bsky.app', 373 - lxm: 'app.bsky.video.getUploadLimits', 374 - }, 375 - }), 376 - ); 363 + const { data: tokenData } = await rpc.get('com.atproto.server.getServiceAuth', { 364 + params: { 365 + aud: 'did:web:video.bsky.app', 366 + lxm: 'app.bsky.video.getUploadLimits', 367 + }, 368 + }); 377 369 378 - const data = await ok( 379 - videoClient.get('app.bsky.video.getUploadLimits', { 380 - headers: { 381 - authorization: `Bearer ${tokenData.token}`, 382 - }, 383 - }), 384 - ); 370 + const { data } = await videoRpc.get('app.bsky.video.getUploadLimits', { 371 + headers: { 372 + authorization: `Bearer ${tokenData.token}`, 373 + }, 374 + }); 385 375 386 376 if (!data.canUpload) { 387 377 let message = data.message || `You've reached the limit on video uploads`; ··· 418 408 419 409 // Create an access token *to the PDS*, allowing the video service to 420 410 // upload the final blobs to our repository on our behalf. 421 - const tokenData = await ok( 422 - client.get('com.atproto.server.getServiceAuth', { 423 - params: { 424 - // `did:web:porcini.us-east.host.bsky.network` 425 - aud: `did:web:${new URL(session.info.aud).host}`, 426 - lxm: 'com.atproto.repo.uploadBlob', 427 - exp: Date.now() / 1000 + 60 * 30, // 30 minutes 428 - }, 429 - }), 430 - ); 411 + const { data: tokenData } = await rpc.get('com.atproto.server.getServiceAuth', { 412 + params: { 413 + // `did:web:porcini.us-east.host.bsky.network` 414 + aud: `did:web:${new URL(session.info.aud).host}`, 415 + lxm: 'com.atproto.repo.uploadBlob', 416 + exp: Date.now() / 1000 + 60 * 30, // 30 minutes 417 + }, 418 + }); 431 419 432 420 jobId = await new Promise((resolve, reject) => { 433 421 const xhr = new XMLHttpRequest(); ··· 487 475 let status: AppBskyVideoDefs.JobStatus; 488 476 489 477 try { 490 - const data = await ok( 491 - videoClient.get('app.bsky.video.getJobStatus', { 492 - params: { 493 - jobId: jobId, 494 - }, 495 - }), 496 - ); 478 + const { data } = await videoRpc.get('app.bsky.video.getJobStatus', { 479 + params: { 480 + jobId: jobId, 481 + }, 482 + }); 497 483 498 484 status = data.jobStatus; 499 485 pollFailures = 0; ··· 560 546 561 547 log?.(`Uploading GIF thumbnail`); 562 548 const compressed = await compressPostImage(gifBlob); 563 - const blob = await uploadBlob(client, compressed.blob); 549 + const blob = await uploadBlob(rpc, compressed.blob); 564 550 565 551 thumbBlob = blob; 566 552 } ··· 598 584 log?.(`Uploading link thumbnail`); 599 585 600 586 const compressed = await compressPostImage(thumb); 601 - const blob = await uploadBlob(client, compressed.blob); 587 + const blob = await uploadBlob(rpc, compressed.blob); 602 588 603 589 thumbBlob = blob; 604 590 } ··· 683 669 if (type === 'link' || type === 'autolink') { 684 670 facets.push({ 685 671 index: index, 686 - features: [{ $type: 'app.bsky.richtext.facet#link', uri: token.url as At.GenericUri }], 672 + features: [{ $type: 'app.bsky.richtext.facet#link', uri: token.url }], 687 673 }); 688 674 } else if (type === 'mention') { 689 - const handle = token.handle as At.Handle; 675 + const handle = token.handle; 690 676 691 677 if (handle === 'handle.invalid') { 692 678 throw new InvalidHandleError(handle); 693 679 } 694 680 695 681 try { 696 - const data = await ok( 697 - client.get('com.atproto.identity.resolveHandle', { 698 - params: { 699 - handle: handle, 700 - }, 701 - }), 702 - ); 682 + const response = await rpc.get('com.atproto.identity.resolveHandle', { 683 + params: { 684 + handle: handle, 685 + }, 686 + }); 703 687 704 - const did = data.did; 688 + const did = response.data.did; 705 689 706 690 if (!hasSilent) { 707 691 facets.push({ ··· 715 699 }); 716 700 } 717 701 } catch (err) { 718 - if (err instanceof ClientResponseError && err.error === 'InvalidRequest') { 702 + if (err instanceof XRPCError && err.kind === 'InvalidRequest') { 719 703 throw new InvalidHandleError(handle); 720 704 } 721 705 ··· 727 711 features: [{ $type: 'app.bsky.richtext.facet#tag', tag: token.name }], 728 712 }); 729 713 } else if (type === 'emote') { 730 - const { value } = await getRecord(client, { 714 + const { value } = await getRecord(rpc, { 731 715 repo: did, 732 716 collection: 'blue.moji.collection.item', 733 717 rkey: token.name,
+2 -2
src/components/embeds/embed.tsx
··· 2 2 3 3 import { type ModerationCause, getModerationUI } from '~/api/moderation'; 4 4 import { ContextContentMedia } from '~/api/moderation/constants'; 5 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 5 + import { parseAtUri } from '~/api/types/at-uri'; 6 6 import { type MediaEmbedView, type RecordEmbedView, unwrapEmbedView } from '~/api/utils/bluesky/embed-view'; 7 7 8 8 import ContentHider from '../moderation/content-hider'; ··· 100 100 } 101 101 102 102 if (type === 'app.bsky.embed.record#viewNotFound' || type === 'app.bsky.embed.record#viewBlocked') { 103 - const uri = parseCanonicalResourceUri(embed.uri); 103 + const uri = parseAtUri(embed.uri); 104 104 105 105 if (type === 'app.bsky.embed.record#viewBlocked' && uri.collection === 'app.bsky.feed.post') { 106 106 return <QuoteBlockedEmbed embed={embed} uri={uri} />;
+2 -2
src/components/embeds/feed-embed.tsx
··· 5 5 6 6 import { moderateGeneric } from '~/api/moderation/entities/generic'; 7 7 import { precacheFeed } from '~/api/queries-cache/feed-precache'; 8 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 8 + import { parseAtUri } from '~/api/types/at-uri'; 9 9 10 10 import { inject } from '~/lib/states/singleton'; 11 11 import ModerationService from '~/lib/states/singletons/moderation'; ··· 26 26 27 27 const moderation = createMemo(() => moderateGeneric(feed, feed.creator.did, moderationOptions())); 28 28 29 - const href = `/${feed.creator.did}/feeds/${parseCanonicalResourceUri(feed.uri).rkey}`; 29 + const href = `/${feed.creator.did}/feeds/${parseAtUri(feed.uri).rkey}`; 30 30 31 31 return ( 32 32 <a
+2 -2
src/components/embeds/quote-blocked-embed.tsx
··· 1 1 import type { AppBskyEmbedRecord } from '@atcute/client/lexicons'; 2 2 3 - import type { ParsedCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import type { ParsedAtUri } from '~/api/types/at-uri'; 4 4 5 5 import BlockOutlinedIcon from '../icons-central/block-outline'; 6 6 7 7 export interface QuoteBlockedEmbedProps { 8 8 embed: AppBskyEmbedRecord.ViewBlocked; 9 - uri: ParsedCanonicalResourceUri; 9 + uri: ParsedAtUri; 10 10 } 11 11 12 12 const QuoteBlockedEmbed = ({ embed, uri }: QuoteBlockedEmbedProps) => {
+2 -2
src/components/embeds/quote-embed.tsx
··· 5 5 import { getModerationUI } from '~/api/moderation'; 6 6 import { ContextContentMedia } from '~/api/moderation/constants'; 7 7 import { moderateQuote } from '~/api/moderation/entities/quote'; 8 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 8 + import { parseAtUri } from '~/api/types/at-uri'; 9 9 import { unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view'; 10 10 11 11 import { inject } from '~/lib/states/singleton'; ··· 32 32 const record = quote.value as AppBskyFeedPost.Record; 33 33 const author = quote.author; 34 34 35 - const uri = parseCanonicalResourceUri(quote.uri); 35 + const uri = parseAtUri(quote.uri); 36 36 const href = `/${author.did}/${uri.rkey}`; 37 37 38 38 const text = record.text.trim();
+2 -4
src/components/error-view.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import { ClientResponseError } from '@atcute/client'; 3 + import { XRPCError } from '@atcute/client'; 4 4 import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 5 5 import { TokenRefreshError } from '@atcute/oauth-browser-client'; 6 6 import { useQueryClient } from '@mary/solid-query'; ··· 65 65 export default ErrorView; 66 66 67 67 const isInvalidTokenError = (err: unknown): boolean => { 68 - return ( 69 - err instanceof TokenRefreshError || (err instanceof ClientResponseError && err.error === 'invalid_token') 70 - ); 68 + return err instanceof TokenRefreshError || (err instanceof XRPCError && err.kind === 'invalid_token'); 71 69 };
+3 -3
src/components/explore/my-feeds-section.tsx
··· 1 1 import { For, createMemo } from 'solid-js'; 2 2 3 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 4 5 5 import type { SavedFeed } from '~/lib/preferences/account'; 6 6 import { useSession } from '~/lib/states/session'; ··· 55 55 let href: string; 56 56 switch (type) { 57 57 case 'generator': { 58 - const uri = parseCanonicalResourceUri(feed.info.uri); 58 + const uri = parseAtUri(feed.info.uri); 59 59 href = `/${uri.repo}/feeds/${uri.rkey}`; 60 60 break; 61 61 } 62 62 case 'list': { 63 - const uri = parseCanonicalResourceUri(feed.info.uri); 63 + const uri = parseAtUri(feed.info.uri); 64 64 href = `/${uri.repo}/lists/${uri.rkey}`; 65 65 break; 66 66 }
+6 -2
src/components/feeds/feed-info-prompt.tsx
··· 1 1 import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 3 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 4 5 5 import { useModalContext } from '~/globals/modals'; 6 6 7 7 import { formatLong } from '~/lib/intl/number'; 8 8 9 9 import Avatar from '~/components/avatar'; 10 + import Button from '~/components/button'; 11 + import Divider from '~/components/divider'; 10 12 import * as Prompt from '~/components/prompt'; 11 13 14 + import HeartOutlinedIcon from '../icons-central/heart-outline'; 15 + 12 16 export interface FeedInfoPromptProps { 13 17 /** Expected to be static */ 14 18 feed: AppBskyFeedDefs.GeneratorView; ··· 20 24 const feed = props.feed; 21 25 22 26 const authorUrl = `/${feed.creator.did}`; 23 - const feedUrl = `${authorUrl}/feeds/${parseCanonicalResourceUri(feed.uri).rkey}`; 27 + const feedUrl = `${authorUrl}/feeds/${parseAtUri(feed.uri).rkey}`; 24 28 25 29 return ( 26 30 <Prompt.Container maxWidth="md">
+2 -2
src/components/feeds/feed-item.tsx
··· 5 5 6 6 import { moderateGeneric } from '~/api/moderation/entities/generic'; 7 7 import { precacheFeed } from '~/api/queries-cache/feed-precache'; 8 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 8 + import { parseAtUri } from '~/api/types/at-uri'; 9 9 10 10 import { history } from '~/globals/navigation'; 11 11 ··· 27 27 const moderationOptions = inject(ModerationService); 28 28 29 29 const creator = item.creator; 30 - const href = `/${creator.did}/feeds/${parseCanonicalResourceUri(item.uri).rkey}`; 30 + const href = `/${creator.did}/feeds/${parseAtUri(item.uri).rkey}`; 31 31 32 32 const moderation = createMemo(() => moderateGeneric(item, creator.did, moderationOptions())); 33 33
+2 -2
src/components/feeds/feed-overflow-menu.tsx
··· 2 2 3 3 import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 5 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 5 + import { parseAtUri } from '~/api/types/at-uri'; 6 6 7 7 import { useModalContext } from '~/globals/modals'; 8 8 ··· 83 83 icon={OpenInNewOutlinedIcon} 84 84 label="Open in Bluesky app" 85 85 onClick={() => { 86 - const uri = `https://bsky.app/profile/${feed.creator.did}/feed/${parseCanonicalResourceUri(feed.uri).rkey}`; 86 + const uri = `https://bsky.app/profile/${feed.creator.did}/feed/${parseAtUri(feed.uri).rkey}`; 87 87 88 88 close(); 89 89 window.open(uri, '_blank');
+2 -2
src/components/lists/lib/utils.ts
··· 1 1 import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 2 2 3 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 4 5 5 export const getListPurposeLabel = (purpose: AppBskyGraphDefs.ListPurpose) => { 6 6 switch (purpose) { ··· 15 15 16 16 export const getListUrl = (list: AppBskyGraphDefs.ListView) => { 17 17 const did = list.creator.did; 18 - const { rkey } = parseCanonicalResourceUri(list.uri); 18 + const { rkey } = parseAtUri(list.uri); 19 19 20 20 switch (list.purpose) { 21 21 case 'app.bsky.graph.defs#curatelist':
+1 -1
src/components/main/sign-in-dialog.tsx
··· 27 27 } 28 28 29 29 export interface SignInDialogProps { 30 - relogin?: { did: At.Did; handle?: string }; 30 + relogin?: { did: At.DID; handle?: string }; 31 31 } 32 32 33 33 const SignInDialog = (props: SignInDialogProps) => {
+29 -32
src/components/moderation/block-account-prompt.tsx
··· 3 3 import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 4 4 import { QueryClient, createMutation } from '@mary/solid-query'; 5 5 6 - import { type ProfileShadowView, updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow'; 6 + import { updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow'; 7 7 import { createListMetaQuery } from '~/api/queries/list'; 8 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 8 + import { parseAtUri } from '~/api/types/at-uri'; 9 9 import { getCurrentDate } from '~/api/utils/misc'; 10 10 import { createRecord, deleteRecord } from '~/api/utils/records'; 11 11 ··· 22 22 import * as Prompt from '../prompt'; 23 23 24 24 export interface BlockAccountPrompt { 25 + /** Expected to be static */ 25 26 profile: AppBskyActorDefs.ProfileViewDetailed; 26 27 } 27 28 28 29 const BlockAccountPrompt = (props: BlockAccountPrompt) => { 29 - const profile = () => props.profile; 30 - const shadow = useProfileShadow(profile); 30 + const profile = props.profile; 31 + const shadow = useProfileShadow(props.profile); 31 32 32 33 return ( 33 34 <Switch> 34 - <Match when={profile().viewer?.blockingByList}> 35 - <BlockedByList profile={profile()} shadow={shadow()} /> 35 + <Match when={/* @once */ profile.viewer?.blockingByList}> 36 + <BlockedByList {...props} /> 36 37 </Match> 37 38 38 39 <Match when={shadow().blockUri}> 39 - <UnblockPrompt profile={profile()} shadow={shadow()} /> 40 + <UnblockPrompt {...props} /> 40 41 </Match> 41 42 42 43 <Match when> 43 - <BlockPrompt profile={profile()} shadow={shadow()} /> 44 + <BlockPrompt {...props} /> 44 45 </Match> 45 46 </Switch> 46 47 ); ··· 48 49 49 50 export default BlockAccountPrompt; 50 51 51 - interface BlockAccountPromptInnerProps extends BlockAccountPrompt { 52 - shadow: ProfileShadowView; 53 - } 54 - 55 - const BlockPrompt = (props: BlockAccountPromptInnerProps) => { 52 + const BlockPrompt = ({ profile }: BlockAccountPrompt) => { 56 53 const { close } = useModalContext(); 57 54 58 55 const { currentAccount } = useSession(); 59 - const { client } = useAgent(); 56 + const { rpc } = useAgent(); 60 57 61 58 const mutation = createMutation((queryClient) => ({ 62 59 async mutationFn() { 63 - return await createRecord(client, { 60 + return await createRecord(rpc, { 64 61 repo: currentAccount!.did, 65 62 collection: 'app.bsky.graph.block', 66 63 record: { 67 64 $type: 'app.bsky.graph.block', 68 65 createdAt: getCurrentDate(), 69 - subject: props.profile.did, 66 + subject: profile.did, 70 67 }, 71 68 }); 72 69 }, 73 70 onSuccess(ret) { 74 71 close(); 75 - updateProfileShadow(queryClient, props.profile.did, { blockUri: ret.uri }); 72 + updateProfileShadow(queryClient, profile.did, { blockUri: ret.uri }); 76 73 77 74 setTimeout(() => { 78 - resetThreadQueries(queryClient, props.profile.did); 75 + resetThreadQueries(queryClient, profile.did); 79 76 }, 1_500); 80 77 }, 81 78 onError() { ··· 85 82 86 83 return ( 87 84 <Prompt.Container maxWidth="md" disabled={mutation.isPending}> 88 - <Prompt.Title>{/* @once */ `Block @${props.profile.handle.toLowerCase()}?`}</Prompt.Title> 85 + <Prompt.Title>{/* @once */ `Block @${profile.handle.toLowerCase()}?`}</Prompt.Title> 89 86 90 87 <Prompt.Description>Here's what happens if you do:</Prompt.Description> 91 88 ··· 125 122 ); 126 123 }; 127 124 128 - const UnblockPrompt = (props: BlockAccountPromptInnerProps) => { 125 + const UnblockPrompt = ({ profile }: BlockAccountPrompt) => { 129 126 const { close } = useModalContext(); 130 127 131 - const { client } = useAgent(); 128 + const { rpc } = useAgent(); 129 + const { repo, rkey } = parseAtUri(profile.viewer!.blocking!); 132 130 133 131 const mutation = createMutation((queryClient) => ({ 134 132 async mutationFn() { 135 - const { repo, rkey } = parseCanonicalResourceUri(props.shadow.blockUri!); 136 - 137 - return await deleteRecord(client, { 138 - repo: repo as At.Did, 133 + return await deleteRecord(rpc, { 134 + repo: repo as At.DID, 139 135 collection: 'app.bsky.graph.block', 140 136 rkey: rkey, 141 137 }); 142 138 }, 143 139 onSuccess() { 144 140 close(); 145 - updateProfileShadow(queryClient, props.profile.did, { blockUri: undefined }); 141 + updateProfileShadow(queryClient, profile.did, { blockUri: undefined }); 146 142 147 143 setTimeout(() => { 148 - resetThreadQueries(queryClient, props.profile.did); 144 + resetThreadQueries(queryClient, profile.did); 149 145 }, 1_500); 150 146 }, 151 147 onError() { ··· 155 151 156 152 return ( 157 153 <Prompt.Container maxWidth="md" disabled={mutation.isPending}> 158 - <Prompt.Title>{/* @once */ `Unblock @${props.profile.handle.toLowerCase()}?`}</Prompt.Title> 154 + <Prompt.Title>{/* @once */ `Unblock @${profile.handle.toLowerCase()}?`}</Prompt.Title> 159 155 160 156 <Prompt.Description>Here's what happens if you do:</Prompt.Description> 161 157 ··· 195 191 ); 196 192 }; 197 193 198 - const BlockedByList = (props: BlockAccountPromptInnerProps) => { 194 + const BlockedByList = ({ profile }: BlockAccountPrompt) => { 199 195 const { close } = useModalContext(); 200 196 201 - const query = createListMetaQuery(() => props.profile.viewer!.blockingByList!.uri); 197 + const listBasic = profile.viewer!.blockingByList!; 198 + const query = createListMetaQuery(() => listBasic.uri); 202 199 203 200 return ( 204 201 <Prompt.Container> 205 - <Prompt.Title>{/* @once */ `Can't unblock @${props.profile.handle.toLowerCase()}`}</Prompt.Title> 202 + <Prompt.Title>{/* @once */ `Can't unblock @${profile.handle.toLowerCase()}`}</Prompt.Title> 206 203 <Prompt.Description> 207 204 You've currently opted to block all accounts that are in this moderation list: 208 205 </Prompt.Description> ··· 228 225 ); 229 226 }; 230 227 231 - const resetThreadQueries = (queryClient: QueryClient, did: At.Did) => { 228 + const resetThreadQueries = (queryClient: QueryClient, did: At.DID) => { 232 229 const substring = `at://${did}/`; 233 230 234 231 queryClient.resetQueries({
+12 -19
src/components/moderation/mute-account-prompt.tsx
··· 1 1 import { Match, Switch, onMount } from 'solid-js'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 5 4 import { createMutation } from '@mary/solid-query'; 6 5 ··· 50 49 const MutePrompt = ({ profile }: MuteAccountPromptProps) => { 51 50 const { close } = useModalContext(); 52 51 53 - const { client } = useAgent(); 52 + const { rpc } = useAgent(); 54 53 55 54 const mutation = createMutation((queryClient) => ({ 56 55 async mutationFn() { 57 - await ok( 58 - client.post('app.bsky.graph.muteActor', { 59 - as: null, 60 - input: { 61 - actor: profile.did, 62 - }, 63 - }), 64 - ); 56 + await rpc.call('app.bsky.graph.muteActor', { 57 + data: { 58 + actor: profile.did, 59 + }, 60 + }); 65 61 }, 66 62 onSuccess() { 67 63 close(); ··· 119 115 const UnmutePrompt = ({ profile }: MuteAccountPromptProps) => { 120 116 const { close } = useModalContext(); 121 117 122 - const { client } = useAgent(); 118 + const { rpc } = useAgent(); 123 119 124 120 const mutation = createMutation((queryClient) => ({ 125 121 async mutationFn() { 126 - await ok( 127 - client.post('app.bsky.graph.unmuteActor', { 128 - as: null, 129 - input: { 130 - actor: profile.did, 131 - }, 132 - }), 133 - ); 122 + await rpc.call('app.bsky.graph.unmuteActor', { 123 + data: { 124 + actor: profile.did, 125 + }, 126 + }); 134 127 }, 135 128 onSuccess() { 136 129 close();
+2 -2
src/components/notifications/notification-item.tsx
··· 19 19 NotificationSlice, 20 20 RepostNotificationSlice, 21 21 } from '~/api/queries/notification-feed'; 22 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 22 + import { parseAtUri } from '~/api/types/at-uri'; 23 23 import { type MediaEmbedView, unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view'; 24 24 25 25 import { history } from '~/globals/navigation'; ··· 95 95 } 96 96 } else { 97 97 const post = item.view; 98 - const uri = parseCanonicalResourceUri(post.uri); 98 + const uri = parseAtUri(post.uri); 99 99 href = `/${uri.repo}/${uri.rkey}`; 100 100 } 101 101
+7 -7
src/components/profiles/edit-profile-dialog.tsx
··· 1 1 import { Show, createMemo, createSignal } from 'solid-js'; 2 2 3 - import { ClientResponseError } from '@atcute/client'; 3 + import { XRPCError } from '@atcute/client'; 4 4 import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 5 5 import { createMutation } from '@mary/solid-query'; 6 6 ··· 34 34 const EditProfileDialog = ({ profile }: EditProfileDialogProps) => { 35 35 const { close } = useModalContext(); 36 36 37 - const { client } = useAgent(); 37 + const { rpc } = useAgent(); 38 38 const { currentAccount } = useSession(); 39 39 40 40 const snapshot = { ··· 78 78 let bannerPromise: Promise<At.Blob<any>> | undefined; 79 79 80 80 if ($avatar instanceof Blob) { 81 - avatarPromise = compressProfileImage($avatar, 1000, 1000).then((res) => uploadBlob(client, res.blob)); 81 + avatarPromise = compressProfileImage($avatar, 1000, 1000).then((res) => uploadBlob(rpc, res.blob)); 82 82 } 83 83 if ($banner instanceof Blob) { 84 - bannerPromise = compressProfileImage($banner, 3000, 1000).then((res) => uploadBlob(client, res.blob)); 84 + bannerPromise = compressProfileImage($banner, 3000, 1000).then((res) => uploadBlob(rpc, res.blob)); 85 85 } 86 86 87 87 let retriesRemaining = 3; 88 88 while (true) { 89 - const existing = await getRecord(client, { 89 + const existing = await getRecord(rpc, { 90 90 repo, 91 91 collection: 'app.bsky.actor.profile', 92 92 rkey: 'self', ··· 114 114 } 115 115 116 116 try { 117 - await putRecord(client, { 117 + await putRecord(rpc, { 118 118 repo, 119 119 collection: 'app.bsky.actor.profile', 120 120 rkey: 'self', ··· 122 122 swapRecord: existing?.cid ?? null, 123 123 }); 124 124 } catch (err) { 125 - if (err instanceof ClientResponseError && err.error === 'InvalidSwapError') { 125 + if (err instanceof XRPCError && err.kind === 'InvalidSwapError') { 126 126 if (retriesRemaining--) { 127 127 continue; 128 128 }
+2 -2
src/components/profiles/profile-view-header.tsx
··· 6 6 import { getModerationUI } from '~/api/moderation'; 7 7 import { ContextProfileMedia, ContextProfileView } from '~/api/moderation/constants'; 8 8 import { moderateProfile } from '~/api/moderation/entities/profile'; 9 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 9 + import { parseAtUri } from '~/api/types/at-uri'; 10 10 11 11 import { openModal } from '~/globals/modals'; 12 12 ··· 259 259 <Match when={viewer()?.mutedByList}> 260 260 {(list) => { 261 261 const href = () => { 262 - const uri = parseCanonicalResourceUri(list().uri); 262 + const uri = parseAtUri(list().uri); 263 263 return `/${uri.repo}/lists/${uri.rkey}`; 264 264 }; 265 265
+8 -11
src/components/search/suggestions/from-actor-autocompletion-view.tsx
··· 1 1 import { For, Show, createMemo } from 'solid-js'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import { createQuery, keepPreviousData } from '@mary/solid-query'; 5 4 6 5 import { createProfileQuery } from '~/api/queries/profile'; ··· 18 17 }) => { 19 18 const { currentAccount } = useSession(); 20 19 21 - const { client } = useAgent(); 20 + const { rpc } = useAgent(); 22 21 const isFocused = useIsFocused(); 23 22 24 23 const match = createMemo(() => { ··· 33 32 enabled: $match !== '' && isFocused(), 34 33 placeholderData: keepPreviousData, 35 34 async queryFn({ signal }) { 36 - const data = await ok( 37 - client.get('app.bsky.actor.searchActorsTypeahead', { 38 - signal, 39 - params: { 40 - q: $match, 41 - limit: 10, 42 - }, 43 - }), 44 - ); 35 + const { data } = await rpc.get('app.bsky.actor.searchActorsTypeahead', { 36 + signal, 37 + params: { 38 + q: $match, 39 + limit: 10, 40 + }, 41 + }); 45 42 46 43 return data; 47 44 },
+7 -10
src/components/settings/app-passwords/add-app-password-prompt.tsx
··· 1 1 import { Match, Switch, createSignal } from 'solid-js'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import { createMutation } from '@mary/solid-query'; 5 4 6 5 import { autofocusNode, modelChecked, modelText } from '~/lib/input-refs'; ··· 14 13 export interface AddAppPasswordPromptProps {} 15 14 16 15 const AddAppPasswordPrompt = ({}: AddAppPasswordPromptProps) => { 17 - const { client } = useAgent(); 16 + const { rpc } = useAgent(); 18 17 19 18 const [name, setName] = createSignal(''); 20 19 const [privileged, setPrivileged] = createSignal(false); ··· 23 22 const mutation = createMutation((queryClient) => { 24 23 return { 25 24 async mutationFn() { 26 - const data = await ok( 27 - client.post('com.atproto.server.createAppPassword', { 28 - input: { 29 - name: name().replace(/^\s+|\s+$|(?<=\s)\s+/g, ''), 30 - privileged: privileged(), 31 - }, 32 - }), 33 - ); 25 + const { data } = await rpc.call('com.atproto.server.createAppPassword', { 26 + data: { 27 + name: name().replace(/^\s+|\s+$|(?<=\s)\s+/g, ''), 28 + privileged: privileged(), 29 + }, 30 + }); 34 31 35 32 return data; 36 33 },
+5 -5
src/components/settings/bluemoji/add-emote-prompt.tsx
··· 42 42 const AddEmotePrompt = ({ blob, onAdd }: AddEmotePromptProps) => { 43 43 const { close } = useModalContext(); 44 44 45 - const { client } = useAgent(); 45 + const { rpc } = useAgent(); 46 46 const { currentAccount } = useSession(); 47 47 48 48 const blobUrl = URL.createObjectURL(blob); ··· 71 71 72 72 const { png_128, webp_128 } = await getCompressedEmotes(blob, cover() ? 'cover' : 'contain'); 73 73 74 - const orig_prom = uploadBlob(client, blob); 75 - const png_prom = png_128 !== blob ? uploadBlob(client, png_128) : orig_prom; 76 - const webp_prom = webp_128 !== blob ? uploadBlob(client, webp_128) : orig_prom; 74 + const orig_prom = uploadBlob(rpc, blob); 75 + const png_prom = png_128 !== blob ? uploadBlob(rpc, png_128) : orig_prom; 76 + const webp_prom = webp_128 !== blob ? uploadBlob(rpc, webp_128) : orig_prom; 77 77 78 78 const [orig_blob, png_blob, webp_blob] = await Promise.all([orig_prom, png_prom, webp_prom]); 79 79 80 - await createRecord(client, { 80 + await createRecord(rpc, { 81 81 repo: currentAccount!.did, 82 82 collection: 'blue.moji.collection.item', 83 83 rkey: $name,
+3 -3
src/components/settings/content-translation/add-basa-instance-prompt.tsx
··· 1 1 import { createMemo, createSignal } from 'solid-js'; 2 2 3 - import { Client, ok, simpleFetchHandler } from '@atcute/client'; 3 + import { XRPC, simpleFetchHandler } from '@atcute/client'; 4 4 import { createMutation } from '@mary/solid-query'; 5 5 6 6 import { formatQueryError } from '~/api/utils/error'; ··· 47 47 48 48 const mutation = createMutation(() => ({ 49 49 async mutationFn({ url }: { url: URL }) { 50 - const client = new Client({ handler: simpleFetchHandler({ service: url }) }); 51 - await ok(client.get('x.basa.describeServer')); 50 + const rpc = new XRPC({ handler: simpleFetchHandler({ service: url }) }); 51 + await rpc.get('x.basa.describeServer', {}); 52 52 }, 53 53 onSuccess(_data, { url }) { 54 54 const href = url.toString();
+2 -2
src/components/threads/highlighted-post.tsx
··· 7 7 import { ContextContentView } from '~/api/moderation/constants'; 8 8 import { moderatePost } from '~/api/moderation/entities/post'; 9 9 import { createPostLikeMutation, createPostRepostMutation } from '~/api/mutations/post'; 10 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 10 + import { parseAtUri } from '~/api/types/at-uri'; 11 11 12 12 import { primarySystemLanguage } from '~/globals/locales'; 13 13 import { openModal } from '~/globals/modals'; ··· 63 63 64 64 const shadow = usePostShadow(post); 65 65 66 - const uri = parseCanonicalResourceUri(post().uri); 66 + const uri = parseAtUri(post().uri); 67 67 const authorDid = author().did; 68 68 69 69 const isOurPost = currentAccount && authorDid === currentAccount.did;
+2 -2
src/components/threads/overflow-thread-item.tsx
··· 1 1 import type { OverflowAncestorItem, OverflowDescendantItem } from '~/api/models/post-thread'; 2 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 2 + import { parseAtUri } from '~/api/types/at-uri'; 3 3 4 4 import MoreHorizOutlinedIcon from '../icons-central/more-horiz-outline'; 5 5 ··· 20 20 return ( 21 21 <a 22 22 href={(() => { 23 - const uri = parseCanonicalResourceUri(props.item.uri); 23 + const uri = parseAtUri(props.item.uri); 24 24 return `/${uri.repo}/${uri.rkey}`; 25 25 })()} 26 26 class={
+3 -2
src/components/threads/post-thread-item.tsx
··· 9 9 import { ContextContentList } from '~/api/moderation/constants'; 10 10 import { moderatePost } from '~/api/moderation/entities/post'; 11 11 import { precacheProfile } from '~/api/queries-cache/profile-precache'; 12 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 12 + import { parseAtUri } from '~/api/types/at-uri'; 13 13 14 14 import { history } from '~/globals/navigation'; 15 15 ··· 54 54 55 55 const shadow = usePostShadow(post); 56 56 57 - const uri = parseCanonicalResourceUri(post().uri); 57 + const uri = parseAtUri(post().uri); 58 58 const authorHref = `/${author().did}`; 59 59 const href = `/${author().did}/${uri.rkey}`; 60 60 ··· 113 113 <div class="min-w-0 grow py-3"> 114 114 <PostMeta 115 115 post={/* @once */ post()} 116 + context={(item() as PostDescendantItem).context} 116 117 href={href} 117 118 authorHref={authorHref} 118 119 gutterBottom
+12 -12
src/components/threads/post-translation.tsx
··· 1 1 import { Match, Switch, createMemo, createSignal } from 'solid-js'; 2 2 3 - import { Client, ok, simpleFetchHandler } from '@atcute/client'; 3 + import { XRPC, simpleFetchHandler } from '@atcute/client'; 4 4 import { sampleOne } from '@mary/array-fns'; 5 5 import { createQuery } from '@mary/solid-query'; 6 6 ··· 66 66 targetLang = found; 67 67 } 68 68 69 - const client = new Client({ handler: simpleFetchHandler({ service: $instanceUrl! }) }); 70 - const data = await ok( 71 - client.get('x.basa.translate', { 72 - params: { 73 - engine: 'google', 74 - text: $text, 75 - from: $source, 76 - to: targetLang, 77 - }, 78 - }), 79 - ); 69 + console.log(targetLang); 70 + 71 + const rpc = new XRPC({ handler: simpleFetchHandler({ service: $instanceUrl! }) }); 72 + const { data } = await rpc.get('x.basa.translate', { 73 + params: { 74 + engine: 'google', 75 + text: $text, 76 + from: $source, 77 + to: targetLang, 78 + }, 79 + }); 80 80 81 81 return data; 82 82 },
+13 -54
src/components/timeline/delete-post-prompt.tsx
··· 1 - import { ClientResponseError, ok } from '@atcute/client'; 2 - import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons'; 1 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 3 2 import { useQueryClient } from '@mary/solid-query'; 4 3 5 4 import { updatePostShadow } from '~/api/cache/post-shadow'; 6 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 5 + import { parseAtUri } from '~/api/types/at-uri'; 6 + import { deleteRecord } from '~/api/utils/records'; 7 7 8 8 import { useAgent } from '~/lib/states/agent'; 9 9 import { useSession } from '~/lib/states/session'; ··· 19 19 20 20 const DeletePostPrompt = ({ post, onPostDelete }: DeletePostPromptProps) => { 21 21 const { currentAccount } = useSession(); 22 - const { client } = useAgent(); 22 + const { rpc } = useAgent(); 23 23 24 24 const queryClient = useQueryClient(); 25 25 26 - const onDelete = async () => { 27 - const uri = parseCanonicalResourceUri(post.uri); 28 - 29 - const write = await client.post('com.atproto.repo.applyWrites', { 30 - input: { 31 - repo: currentAccount!.did, 32 - writes: [ 33 - { 34 - $type: 'com.atproto.repo.applyWrites#delete', 35 - collection: 'app.bsky.feed.post', 36 - rkey: uri.rkey, 37 - }, 38 - ], 39 - }, 26 + const onDelete = () => { 27 + const uri = parseAtUri(post.uri); 28 + const promise = deleteRecord(rpc, { 29 + repo: currentAccount!.did, 30 + collection: 'app.bsky.feed.post', 31 + rkey: uri.rkey, 40 32 }); 41 33 42 - if (write.ok) { 43 - updatePostShadow(queryClient, post.uri, { deleted: true }); 44 - onPostDelete?.(); 45 - return; 46 - } 34 + updatePostShadow(queryClient, post.uri, { deleted: true }); 47 35 48 - if (write.data.error !== 'InternalServerError') { 49 - throw new ClientResponseError(write); 36 + if (onPostDelete) { 37 + promise.then(onPostDelete); 50 38 } 51 - 52 - await ok( 53 - client.post('com.atproto.repo.putRecord', { 54 - input: { 55 - repo: currentAccount!.did, 56 - collection: 'app.bsky.feed.post', 57 - rkey: uri.rkey, 58 - validate: false, 59 - record: { 60 - $type: 'app.bsky.feed.post', 61 - text: '', 62 - createdAt: '1970-01-01T00:00:00.000Z', 63 - } satisfies AppBskyFeedPost.Record, 64 - }, 65 - }), 66 - ); 67 - 68 - await ok( 69 - client.post('com.atproto.repo.deleteRecord', { 70 - input: { 71 - repo: currentAccount!.did, 72 - collection: 'app.bsky.feed.post', 73 - rkey: uri.rkey, 74 - }, 75 - }), 76 - ); 77 - 78 - updatePostShadow(queryClient, post.uri, { deleted: true }); 79 - onPostDelete?.(); 80 39 }; 81 40 82 41 return (
+5 -5
src/components/timeline/pin-post-prompt.tsx
··· 1 1 import { Match, Show, Switch, batch } from 'solid-js'; 2 2 3 - import { ClientResponseError } from '@atcute/client'; 3 + import { XRPCError } from '@atcute/client'; 4 4 import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 5 5 import { createMutation } from '@mary/solid-query'; 6 6 ··· 23 23 24 24 const PinPostPrompt = ({ post }: PinPostPromptProps) => { 25 25 const { currentAccount } = useSession(); 26 - const { client } = useAgent(); 26 + const { rpc } = useAgent(); 27 27 28 28 const { close } = useModalContext(); 29 29 ··· 40 40 updatePostShadow(queryClient, post.uri, { pinned: next }); 41 41 42 42 while (true) { 43 - const existing = await getRecord(client, { 43 + const existing = await getRecord(rpc, { 44 44 repo, 45 45 collection: 'app.bsky.actor.profile', 46 46 rkey: 'self', ··· 63 63 record.pinnedPost = next ? { uri: post.uri, cid: post.cid } : undefined; 64 64 65 65 try { 66 - await putRecord(client, { 66 + await putRecord(rpc, { 67 67 repo, 68 68 collection: 'app.bsky.actor.profile', 69 69 rkey: 'self', ··· 71 71 swapRecord: existing?.cid ?? null, 72 72 }); 73 73 } catch (err) { 74 - if (err instanceof ClientResponseError && err.error === 'InvalidSwapError') { 74 + if (err instanceof XRPCError && err.kind === 'InvalidSwapError') { 75 75 if (retriesRemaining--) { 76 76 continue; 77 77 }
+3 -3
src/components/timeline/post-feed-item.tsx
··· 9 9 import { ContextContentList } from '~/api/moderation/constants'; 10 10 import { moderatePost } from '~/api/moderation/entities/post'; 11 11 import { precacheProfile } from '~/api/queries-cache/profile-precache'; 12 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 12 + import { parseAtUri } from '~/api/types/at-uri'; 13 13 14 14 import { history } from '~/globals/navigation'; 15 15 ··· 36 36 /** Expected to be static */ 37 37 item: UiTimelineItem; 38 38 highlighted?: boolean; 39 - timelineDid?: At.Did; 39 + timelineDid?: At.DID; 40 40 } 41 41 42 42 const PostFeedItem = ({ item, highlighted, timelineDid }: PostFeedItemProps) => { ··· 55 55 56 56 const shadow = usePostShadow(post); 57 57 58 - const uri = parseCanonicalResourceUri(post.uri); 58 + const uri = parseAtUri(post.uri); 59 59 const authorHref = `/${authorDid}`; 60 60 const href = `/${authorDid}/${uri.rkey}`; 61 61
+23 -3
src/components/timeline/post-meta.tsx
··· 5 5 6 6 import { openModal } from '~/globals/modals'; 7 7 8 + import Avatar from '../avatar'; 9 + import HeartSolidIcon from '../icons-central/heart-solid'; 8 10 import MoreHorizOutlinedIcon from '../icons-central/more-horiz-outline'; 9 11 import TimeAgo from '../time-ago'; 10 12 ··· 13 15 export interface PostMetaProps { 14 16 /** Expected to be static */ 15 17 post: AppBskyFeedDefs.PostView; 18 + context?: AppBskyFeedDefs.ThreadContext; 19 + /** Expected to be static */ 16 20 authorHref: string; 21 + /** Expected to be static */ 17 22 href: string; 18 - compact?: boolean; 23 + /** Expected to be static */ 19 24 gutterBottom?: boolean; 20 25 onPostDelete?: () => void; 21 26 onPostRedraft?: () => void; 22 27 } 23 28 24 - const PostMeta = ({ post, authorHref, href, gutterBottom, onPostDelete, onPostRedraft }: PostMetaProps) => { 29 + const PostMeta = (props: PostMetaProps) => { 25 30 const queryClient = useQueryClient(); 26 31 32 + const post = props.post; 33 + const href = props.href; 34 + const authorHref = props.authorHref; 35 + const gutterBottom = props.gutterBottom; 36 + 37 + const onPostDelete = props.onPostDelete; 38 + const onPostRedraft = props.onPostRedraft; 39 + 27 40 const author = post.author; 28 41 const indexedAt = post.indexedAt; 29 42 ··· 53 66 </TimeAgo> 54 67 </div> 55 68 56 - <div class="shrink-0"> 69 + <div class="flex shrink-0 items-center gap-4"> 70 + {props.context?.rootAuthorLike && ( 71 + <div class="relative"> 72 + <Avatar type="user" size={null} class="h-[18px] w-[18px]" /> 73 + <HeartSolidIcon class="absolute -bottom-1 -left-1.5 h-[14px] w-[14px] stroke-background stroke-[3] text-p-red-600" /> 74 + </div> 75 + )} 76 + 57 77 <button 58 78 onClick={(ev) => { 59 79 const anchor = ev.currentTarget;
+2 -2
src/components/timeline/post-reply-context.tsx
··· 2 2 3 3 import type { UiTimelineItem } from '~/api/models/timeline'; 4 4 import { createProfileQuery } from '~/api/queries/profile'; 5 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 5 + import { parseAtUri } from '~/api/types/at-uri'; 6 6 7 7 import { useSession } from '~/lib/states/session'; 8 8 ··· 43 43 44 44 const raw = (post.record as AppBskyFeedPost.Record).reply?.parent; 45 45 if (raw) { 46 - const did = parseCanonicalResourceUri(raw.uri).repo; 46 + const did = parseAtUri(raw.uri).repo; 47 47 if (did === currentAccount?.did) { 48 48 return <div class="mb-0.5 flex text-de text-contrast-muted">Replying to you</div>; 49 49 }
+2 -2
src/components/timeline/post-share-menu.tsx
··· 1 1 import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons'; 2 2 3 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 4 import { serializeRichText } from '~/api/utils/richtext-stringify'; 5 5 6 6 import { useModalContext } from '~/globals/modals'; ··· 21 21 const post = props.post; 22 22 23 23 const did = post.author.did; 24 - const { rkey } = parseCanonicalResourceUri(post.uri); 24 + const { rkey } = parseAtUri(post.uri); 25 25 26 26 return ( 27 27 <Menu.Container anchor={props.anchor} placement="bottom-end">
+2 -2
src/components/timeline/revise-post-prompt.tsx
··· 1 1 import type { AppBskyFeedDefs, AppBskyFeedPost, AppBskyFeedThreadgate } from '@atcute/client/lexicons'; 2 2 3 - import { parseCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 4 import { type MediaEmbed, type RecordEmbed, unwrapEmbed } from '~/api/utils/bluesky/embed'; 5 5 import { serializeRichText } from '~/api/utils/richtext-stringify'; 6 6 ··· 133 133 const ref = embed.record; 134 134 135 135 const uri = ref.uri; 136 - const { collection } = parseCanonicalResourceUri(uri); 136 + const { collection } = parseAtUri(uri); 137 137 138 138 switch (collection) { 139 139 case 'app.bsky.feed.post': {
+1 -1
src/components/timeline/timeline-list.tsx
··· 9 9 10 10 export interface TimelineListProps { 11 11 params: TimelineParams; 12 - timelineDid?: At.Did; 12 + timelineDid?: At.DID; 13 13 } 14 14 15 15 const TimelineList = (props: TimelineListProps) => {
+1 -1
src/lib/atproto/labeler.ts
··· 3 3 import { mergeHeaders } from '@atcute/client/utils/http'; 4 4 5 5 export interface Labeler { 6 - did: At.Did; 6 + did: At.DID; 7 7 redact: boolean; 8 8 } 9 9
+2 -4
src/lib/preferences/account.ts
··· 28 28 29 29 export interface ModerationLabelerPreferences { 30 30 updated: number; 31 - definitions: Record<At.Did, ModerationLabeler>; 31 + definitions: Record<At.DID, ModerationLabeler>; 32 32 } 33 33 34 34 export type SavedFeed = SavedGeneratorFeed | SavedListFeed | SavedSearchFeed; ··· 53 53 } 54 54 55 55 export interface PersistedThreadgate { 56 - allow?: Array< 57 - { type: 'following' } | { type: 'follower' } | { type: 'mention' } | { type: 'list'; uri: At.ResourceUri } 58 - >; 56 + allow?: Array<{ type: 'following' } | { type: 'mention' } | { type: 'list'; uri: At.Uri }>; 59 57 } 60 58 61 59 export interface PersistedPostgate {
+2 -2
src/lib/preferences/sessions.ts
··· 2 2 3 3 export interface SessionPreferenceSchema { 4 4 $version: 1; 5 - active: At.Did | undefined; 5 + active: At.DID | undefined; 6 6 accounts: AccountData[]; 7 7 } 8 8 9 9 export interface AccountData { 10 10 /** Account DID */ 11 - readonly did: At.Did; 11 + readonly did: At.DID; 12 12 profile: AppBskyActorDefs.ProfileViewDetailed; 13 13 }
-4
src/lib/preferences/snippets/composer.ts
··· 11 11 switch (rule.$type) { 12 12 case 'app.bsky.feed.threadgate#followingRule': 13 13 return { type: 'following' }; 14 - case 'app.bsky.feed.threadgate#followerRule': 15 - return { type: 'follower' }; 16 14 case 'app.bsky.feed.threadgate#mentionRule': 17 15 return { type: 'mention' }; 18 16 case 'app.bsky.feed.threadgate#listRule': ··· 28 26 switch (rule.type) { 29 27 case 'following': 30 28 return { $type: 'app.bsky.feed.threadgate#followingRule' }; 31 - case 'follower': 32 - return { $type: 'app.bsky.feed.threadgate#followerRule' }; 33 29 case 'mention': 34 30 return { $type: 'app.bsky.feed.threadgate#mentionRule' }; 35 31 case 'list':
+5 -5
src/lib/states/agent.tsx
··· 1 1 import { type JSX, type ParentProps, createContext, createMemo, useContext } from 'solid-js'; 2 2 3 - import { Client, simpleFetchHandler } from '@atcute/client'; 3 + import { XRPC, simpleFetchHandler } from '@atcute/client'; 4 4 import type { At } from '@atcute/client/lexicons'; 5 5 import type { OAuthUserAgent } from '@atcute/oauth-browser-client'; 6 6 import { QueryClient, QueryClientProvider } from '@mary/solid-query'; ··· 14 14 import { useSession } from './session'; 15 15 16 16 export interface AgentContext { 17 - did: At.Did | null; 18 - client: Client; 17 + did: At.DID | null; 18 + rpc: XRPC; 19 19 handler: OAuthUserAgent | null; 20 20 persister: ReturnType<typeof createQueryPersister>; 21 21 } ··· 32 32 return { 33 33 did: currentAccount.did, 34 34 handler: currentAccount.agent ?? null, 35 - client: currentAccount.client, 35 + rpc: currentAccount.rpc, 36 36 persister: createQueryPersister({ name: `queryCache-${currentAccount.did}` }), 37 37 }; 38 38 } ··· 40 40 return { 41 41 did: null, 42 42 handler: null, 43 - client: new Client({ handler: simpleFetchHandler({ service: DEFAULT_APPVIEW_URL }) }), 43 + rpc: new XRPC({ handler: simpleFetchHandler({ service: DEFAULT_APPVIEW_URL }) }), 44 44 persister: createQueryPersister({ name: `queryCache-public` }), 45 45 }; 46 46 });
+16 -16
src/lib/states/session.tsx
··· 10 10 useContext, 11 11 } from 'solid-js'; 12 12 13 - import { Client, ClientResponseError, type FetchHandler, type FetchHandlerObject } from '@atcute/client'; 13 + import { type FetchHandler, type FetchHandlerObject, XRPC, XRPCError } from '@atcute/client'; 14 14 import type { At } from '@atcute/client/lexicons'; 15 15 import { OAuthUserAgent, deleteStoredSession, getSession } from '@atcute/oauth-browser-client'; 16 16 import { mapDefined } from '@mary/array-fns'; ··· 27 27 import { assert } from '../utils/invariant'; 28 28 29 29 export interface CurrentAccountState { 30 - readonly did: At.Did; 30 + readonly did: At.DID; 31 31 readonly data: AccountData; 32 32 readonly preferences: PerAccountPreferenceSchema; 33 33 34 - readonly client: Client; 34 + readonly rpc: XRPC; 35 35 readonly agent: OAuthUserAgent | undefined; 36 36 readonly _cleanup: () => void; 37 37 } ··· 40 40 readonly currentAccount: CurrentAccountState | undefined; 41 41 42 42 getAccounts(): AccountData[]; 43 - resumeSession(did: At.Did): Promise<void>; 44 - removeAccount(did: At.Did): Promise<void>; 43 + resumeSession(did: At.DID): Promise<void>; 44 + removeAccount(did: At.DID): Promise<void>; 45 45 46 46 logout(): Promise<void>; 47 47 } ··· 60 60 }; 61 61 62 62 const createAccountState = ( 63 - did: At.Did, 63 + did: At.DID, 64 64 session: OAuthUserAgent | undefined, 65 - client: Client, 65 + rpc: XRPC, 66 66 ): CurrentAccountState => { 67 67 return createRoot((cleanup): CurrentAccountState => { 68 68 const preferences = createAccountPreferences(did); ··· 75 75 76 76 const labelers = createMemo((): Labeler[] => { 77 77 return Object.entries(preferences.moderation.labelers).map(([did, info]): Labeler => { 78 - return { did: did as At.Did, redact: info.redact }; 78 + return { did: did as At.DID, redact: info.redact }; 79 79 }); 80 80 }); 81 81 82 82 // A bit of a hack, but works right now. 83 - client.handler = attachLabelerHeaders(client.handler, labelers); 83 + rpc.handle = attachLabelerHeaders(rpc.handle, labelers); 84 84 85 85 createEffect(() => { 86 86 const signal = abortable(); ··· 129 129 return $data; 130 130 }, 131 131 132 - client: client, 132 + rpc: rpc, 133 133 agent: session, 134 134 _cleanup: cleanup, 135 135 }; ··· 144 144 getAccounts(): AccountData[] { 145 145 return sessions.accounts; 146 146 }, 147 - async resumeSession(did: At.Did): Promise<void> { 147 + async resumeSession(did: At.DID): Promise<void> { 148 148 const account = sessions.accounts.find((acc) => acc.did === did); 149 149 if (!account) { 150 150 return; ··· 181 181 // Dirty hack to account for the fact that we aren't dumping the user 182 182 // directly to the login modal. 183 183 handler = () => { 184 - throw new ClientResponseError({ status: 400, data: { error: 'invalid_token' } }); 184 + throw new XRPCError(400, { kind: 'invalid_token' }); 185 185 }; 186 186 } 187 187 188 - const rpc = new Client({ handler }); 188 + const rpc = new XRPC({ handler }); 189 189 190 190 signal.throwIfAborted(); 191 191 ··· 197 197 }); 198 198 }, 199 199 200 - async removeAccount(did: At.Did): Promise<void> { 200 + async removeAccount(did: At.DID): Promise<void> { 201 201 const $state = untrack(state); 202 202 const isLoggedIn = $state !== undefined && $state.did === did; 203 203 ··· 246 246 return session; 247 247 }; 248 248 249 - const createAccountPreferences = (did: At.Did) => { 249 + const createAccountPreferences = (did: At.DID) => { 250 250 const key = `account-${did}`; 251 251 return createReactiveLocalStorage<PerAccountPreferenceSchema>(key, (version, prev) => { 252 252 if (version === 0) { ··· 282 282 }, 283 283 displayName: 'Popular With Friends', 284 284 description: '', 285 - avatar: '' as At.GenericUri, 285 + avatar: '', 286 286 indexedAt: '0000-00-00T00:00:00.000Z', 287 287 }, 288 288 },
+11 -30
src/lib/states/singleton.tsx
··· 1 - import { type ParentProps, createContext, createRoot, getOwner, useContext } from 'solid-js'; 1 + import { type ParentProps, createContext, getOwner, runWithOwner, useContext } from 'solid-js'; 2 2 3 3 import { assert } from '../utils/invariant'; 4 4 5 - interface Singleton<T> { 6 - n: string; 7 - c: () => T; 8 - } 9 - 10 - interface SingletonContext { 11 - inject<T>(singleton: Singleton<T>): T; 5 + export interface SingletonContext { 6 + inject<T>(construct: () => T): T; 12 7 } 13 8 14 9 const Context = createContext<SingletonContext>(); 15 10 16 11 export const SingletonProvider = (props: ParentProps) => { 17 12 const owner = getOwner(); 18 - const registry = new Map< 19 - string, 20 - { 21 - c: any; 22 - v: any; 23 - d: () => void; 24 - } 25 - >(); 13 + const instances = new Map<() => any, any>(); 26 14 27 15 const context: SingletonContext = { 28 - inject({ n: name, c: construct }) { 29 - let registered = registry.get(name); 30 - if (registered === undefined || registered.c !== construct) { 31 - registered?.d(); 32 - registered = createRoot((dispose) => ({ c: construct, d: dispose, v: construct() }), owner); 33 - 34 - registry.set(name, registered); 16 + inject(construct) { 17 + let instance = instances.get(construct); 18 + if (instance === undefined) { 19 + instances.set(construct, (instance = runWithOwner(owner, construct))); 35 20 } 36 21 37 - return registered.v; 22 + return instance; 38 23 }, 39 24 }; 40 25 41 26 return <Context.Provider value={context}>{props.children}</Context.Provider>; 42 27 }; 43 28 44 - export const define = <T,>(name: string, construct: () => T): Singleton<T> => { 45 - return { n: name, c: construct }; 46 - }; 47 - 48 - export const inject = <T,>(singleton: Singleton<T>): T => { 29 + export const inject = <T,>(construct: () => T): T => { 49 30 const context = useContext(Context); 50 31 assert(context !== undefined, `Expected inject to be called under <SingletonProvider>`); 51 32 52 - return context.inject(singleton); 33 + return context.inject(construct); 53 34 };
+2 -3
src/lib/states/singletons/bookmarks.ts
··· 5 5 import { assert } from '~/lib/utils/invariant'; 6 6 7 7 import { useSession } from '../session'; 8 - import { define } from '../singleton'; 9 8 10 - const BookmarksService = define('bookmarks', () => { 9 + const BookmarksService = () => { 11 10 const { currentAccount } = useSession(); 12 11 13 12 let promise: Promise<IDBPDatabase<BookmarkDBSchema>> | undefined; ··· 52 51 })()); 53 52 }, 54 53 }; 55 - }); 54 + }; 56 55 57 56 export default BookmarksService;
+24 -24
src/lib/states/singletons/moderation.ts
··· 1 1 import { createMemo } from 'solid-js'; 2 2 import { unwrap } from 'solid-js/store'; 3 3 4 - import { ok } from '@atcute/client'; 5 - import type { At } from '@atcute/client/lexicons'; 4 + import type { AppBskyLabelerDefs, At } from '@atcute/client/lexicons'; 6 5 import { mapDefined } from '@mary/array-fns'; 7 - import { createBatchedFetch } from '@mary/batch-fetch'; 8 - import { type QueryFunctionContext as QC, createQueries } from '@mary/solid-query'; 6 + import { createQueries } from '@mary/solid-query'; 9 7 10 8 import { BLUESKY_MODERATION_DID } from '~/api/defaults'; 11 9 import type { ModerationLabeler, ModerationOptions, ModerationPreferences } from '~/api/moderation'; 12 10 import { interpretLabelerDefinition } from '~/api/moderation/labeler'; 13 11 12 + import { createBatchedFetch } from '~/lib/utils/batch-fetch'; 13 + 14 14 import { useAgent } from '../agent'; 15 15 import { useSession } from '../session'; 16 - import { define } from '../singleton'; 17 16 18 - const ModerationService = define('moderation', () => { 19 - const { client, persister } = useAgent(); 17 + type Labeler = AppBskyLabelerDefs.LabelerViewDetailed; 18 + 19 + const ModerationService = () => { 20 + const { rpc, persister } = useAgent(); 20 21 const { currentAccount } = useSession(); 21 22 22 23 const modPreferences = createMemo((): ModerationPreferences => { ··· 38 39 return currentAccount.preferences.moderation; 39 40 }); 40 41 41 - const fetchLabeler = createBatchedFetch<At.Did, ModerationLabeler>({ 42 + const fetchLabeler = createBatchedFetch<At.DID, At.DID, ModerationLabeler>({ 42 43 limit: 20, 43 44 timeout: 1, 44 - idFromResource: (labeler) => labeler.did, 45 - async fetch(dids, signal) { 46 - const data = await ok( 47 - client.get('app.bsky.labeler.getServices', { 48 - signal, 49 - params: { 50 - dids: dids, 51 - detailed: true, 52 - }, 53 - }), 54 - ); 45 + idFromQuery: (query) => query, 46 + idFromData: (data) => data.did, 47 + async fetch(dids) { 48 + const { data } = await rpc.get('app.bsky.labeler.getServices', { 49 + params: { 50 + dids: dids, 51 + detailed: true, 52 + }, 53 + }); 55 54 56 - const views = data.views.filter((view) => view.$type === 'app.bsky.labeler.defs#labelerViewDetailed'); 55 + const views = data.views as Labeler[]; 56 + 57 57 return views.map((view) => interpretLabelerDefinition(view)); 58 58 }, 59 59 }); ··· 61 61 const labelerDefs = createQueries(() => { 62 62 return { 63 63 queries: Object.keys(modPreferences().labelers).map((_did) => { 64 - const did = _did as At.Did; 64 + const did = _did as At.DID; 65 65 66 66 return { 67 67 queryKey: ['labeler-definition', did], 68 - queryFn: ({ signal }: QC) => fetchLabeler(did, signal), 68 + queryFn: () => fetchLabeler(did), 69 69 staleTime: 21600000, // 6 hours 70 70 gcTime: 86400000, // 24 hours 71 71 refetchOnWindowFocus: true, ··· 76 76 const defs = mapDefined(results, (result) => result.data); 77 77 const fields = Object.fromEntries(defs.map((def) => [def.did, def])); 78 78 79 - return fields as Record<At.Did, ModerationLabeler>; 79 + return fields as Record<At.DID, ModerationLabeler>; 80 80 }, 81 81 }; 82 82 }); ··· 90 90 }); 91 91 92 92 return modOptions; 93 - }); 93 + }; 94 94 95 95 export default ModerationService;
+106
src/lib/utils/batch-fetch.ts
··· 1 + // we would sometimes rely on fetching multiple individual posts, and it would 2 + // be preferrable if it can be batched. 3 + 4 + type Promisable<T> = T | Promise<T>; 5 + 6 + export type QueryId = string | number; 7 + 8 + export interface BatchedFetchOptions<Query, Id extends QueryId, Data> { 9 + limit: number; 10 + timeout: number; 11 + fetch: (queries: Query[]) => Promisable<Data[]>; 12 + key?: (query: Query) => string | number; 13 + idFromQuery: (query: Query) => Id; 14 + idFromData: (data: Data) => Id; 15 + } 16 + 17 + interface BatchedFetchMap<Query, Id, Data> { 18 + key: string | number | undefined; 19 + timeout: any; 20 + queries: Query[]; 21 + pending: Map<Id, PromiseWithResolvers<Data>>; 22 + } 23 + 24 + export class ResourceMissingError extends Error { 25 + name = 'ResourceMissingError'; 26 + } 27 + 28 + /*#__NO_SIDE_EFFECTS__*/ 29 + export const createBatchedFetch = <Query, Id extends QueryId, Data>( 30 + options: BatchedFetchOptions<Query, Id, Data>, 31 + ) => { 32 + const { limit, timeout, fetch, key: _key, idFromData, idFromQuery } = options; 33 + 34 + let curr: BatchedFetchMap<Query, Id, Data> | undefined; 35 + 36 + return (query: Query): Promise<Data> => { 37 + const id = idFromQuery(query); 38 + const key = _key?.(query); 39 + 40 + let map = curr; 41 + 42 + if (!map || map.queries.length >= limit || map.key !== key) { 43 + map = curr = { 44 + key, 45 + timeout: undefined, 46 + queries: [], 47 + pending: new Map(), 48 + }; 49 + } 50 + 51 + let deferred = map.pending.get(id); 52 + 53 + if (!deferred) { 54 + deferred = Promise.withResolvers<Data>(); 55 + 56 + map.queries.push(query); 57 + map.pending.set(id, deferred); 58 + } 59 + 60 + clearTimeout(map.timeout); 61 + 62 + map.timeout = setTimeout(() => { 63 + if (curr === map) { 64 + curr = undefined; 65 + } 66 + 67 + perform(map!, fetch, idFromData); 68 + }, timeout); 69 + 70 + return deferred.promise; 71 + }; 72 + }; 73 + 74 + const perform = async <Query, Id extends QueryId, Data>( 75 + map: BatchedFetchMap<Query, Id, Data>, 76 + fetch: (queries: Query[]) => Promisable<Data[]>, 77 + idFromData: (data: Data) => Id, 78 + ) => { 79 + const queries = map.queries; 80 + const pending = map.pending; 81 + 82 + let errored = false; 83 + 84 + try { 85 + const dataset = await fetch(queries); 86 + 87 + for (const data of dataset) { 88 + const id = idFromData(data); 89 + const deferred = pending.get(id); 90 + 91 + deferred?.resolve(data); 92 + } 93 + } catch (error) { 94 + errored = true; 95 + 96 + for (const deferred of pending.values()) { 97 + deferred.reject(error); 98 + } 99 + } finally { 100 + if (!errored) { 101 + for (const deferred of pending.values()) { 102 + deferred.reject(new ResourceMissingError()); 103 + } 104 + } 105 + } 106 + };
+6 -12
src/lib/utils/invariant.ts
··· 1 - export const assert: { 2 - (condition: any, message?: string): asserts condition; 3 - } = (condition, message): asserts condition => { 1 + export function assert(condition: any, message?: string): asserts condition { 4 2 if (import.meta.env.DEV && !condition) { 5 3 throw new Error(`Assertion failed` + (message ? `: ${message}` : ``)); 6 4 } 7 - }; 5 + } 8 6 9 - export const assertStrong: { 10 - (condition: any, message?: string): asserts condition; 11 - } = (condition, message): asserts condition => { 7 + export function assertStrong(condition: any, message?: string): asserts condition { 12 8 if (!condition) { 13 9 if (import.meta.env.DEV) { 14 10 throw new Error(`Assertion failed` + (message ? `: ${message}` : ``)); ··· 16 12 17 13 throw new Error(`Assertion failed`); 18 14 } 19 - }; 15 + } 20 16 21 - export const assertUnreachable: { 22 - (_: never, message?: string): never; 23 - } = (_, message) => { 17 + export function assertUnreachable(_: never, message?: string): never { 24 18 assertStrong(false, message); 25 - }; 19 + }
+5 -1
src/main.tsx
··· 39 39 }, 40 40 }); 41 41 42 + localStorage.removeItem('oauth-dpopNonces'); 43 + localStorage.removeItem('oauth-sessions'); 44 + localStorage.removeItem('oauth-states'); 45 + 42 46 const InnerApp = () => { 43 47 const [ready, setReady] = createSignal(false); 44 48 const session = useSession(); 45 49 46 50 onMount(() => { 47 - const resumeAccount = async (did: At.Did | undefined) => { 51 + const resumeAccount = async (did: At.DID | undefined) => { 48 52 try { 49 53 if (did) { 50 54 await session.resumeSession(did);
+2 -2
src/views/bluemoji-emotes.tsx
··· 45 45 openModal(() => <AddEmotePrompt blob={blob} onAdd={() => {}} />); 46 46 }; 47 47 48 - const { client } = useAgent(); 48 + const { rpc } = useAgent(); 49 49 const { currentAccount } = useSession(); 50 50 51 51 const query = createInfiniteQuery(() => ({ 52 52 queryKey: ['bluemoji', 'emotes'], 53 53 async queryFn(ctx) { 54 - return listRecords(client, { 54 + return listRecords(rpc, { 55 55 repo: currentAccount!.did, 56 56 collection: 'blue.moji.collection.item', 57 57 limit: 100,
+7 -9
src/views/oauth-callback.tsx
··· 1 1 import { Match, Switch, createResource } from 'solid-js'; 2 2 3 - import { Client, ok } from '@atcute/client'; 3 + import { XRPC } from '@atcute/client'; 4 4 import { 5 5 AuthorizationError, 6 6 OAuthResponseError, ··· 27 27 const did = session.info.sub; 28 28 29 29 const agent = new OAuthUserAgent(session); 30 - const client = new Client({ handler: agent }); 30 + const rpc = new XRPC({ handler: agent }); 31 31 32 - const profile = await ok( 33 - client.get('app.bsky.actor.getProfile', { 34 - params: { 35 - actor: did, 36 - }, 37 - }), 38 - ); 32 + const { data: profile } = await rpc.get('app.bsky.actor.getProfile', { 33 + params: { 34 + actor: did, 35 + }, 36 + }); 39 37 40 38 { 41 39 // Update UI preferences
+1 -6
src/views/post-likes.tsx
··· 1 - import type { At } from '@atcute/client/lexicons'; 2 - 3 1 import { createSubjectLikersQuery } from '~/api/queries/subject-likers'; 4 2 import { makeAtUri } from '~/api/types/at-uri'; 5 3 ··· 12 10 import VirtualItem from '~/components/virtual-item'; 13 11 14 12 const PostLikesPage = () => { 15 - const { did, rkey } = useParams<{ 16 - did: At.Did; 17 - rkey: At.RecordKey; 18 - }>(); 13 + const { did, rkey } = useParams(); 19 14 20 15 const uri = makeAtUri(did, 'app.bsky.feed.post', rkey); 21 16 const likers = createSubjectLikersQuery(() => uri);
+1 -6
src/views/post-quotes.tsx
··· 1 - import type { At } from '@atcute/client/lexicons'; 2 - 3 1 import { createPostQuotesQuery } from '~/api/queries/post-quotes'; 4 2 import { makeAtUri } from '~/api/types/at-uri'; 5 3 ··· 11 9 import VirtualItem from '~/components/virtual-item'; 12 10 13 11 const PostQuotesPage = () => { 14 - const { did, rkey } = useParams<{ 15 - did: At.Did; 16 - rkey: At.RecordKey; 17 - }>(); 12 + const { did, rkey } = useParams(); 18 13 19 14 const uri = makeAtUri(did, 'app.bsky.feed.post', rkey); 20 15 const quotes = createPostQuotesQuery(() => uri);
+1 -6
src/views/post-reposts.tsx
··· 1 - import type { At } from '@atcute/client/lexicons'; 2 - 3 1 import { createSubjectRepostersQuery } from '~/api/queries/subject-reposters'; 4 2 import { makeAtUri } from '~/api/types/at-uri'; 5 3 ··· 12 10 import VirtualItem from '~/components/virtual-item'; 13 11 14 12 const PostLikesPage = () => { 15 - const { did, rkey } = useParams<{ 16 - did: At.Did; 17 - rkey: At.RecordKey; 18 - }>(); 13 + const { did, rkey } = useParams(); 19 14 20 15 const uri = makeAtUri(did, 'app.bsky.feed.post', rkey); 21 16 const reposters = createSubjectRepostersQuery(() => uri);
+7 -10
src/views/post-thread.tsx
··· 1 1 import { For, Match, Switch, createEffect, createMemo, createSignal } from 'solid-js'; 2 2 3 - import { ClientResponseError } from '@atcute/client'; 3 + import { XRPCError } from '@atcute/client'; 4 4 import type { AppBskyFeedDefs, AppBskyFeedPost, At, Brand } from '@atcute/client/lexicons'; 5 5 import { useQueryClient } from '@mary/solid-query'; 6 6 ··· 38 38 import VirtualItem from '~/components/virtual-item'; 39 39 40 40 const PostThreadPage = () => { 41 - const { didOrHandle, rkey } = useParams<{ 42 - didOrHandle: At.Identifier; 43 - rkey: At.RecordKey; 44 - }>(); 41 + const { didOrHandle, rkey } = useParams(); 45 42 46 43 const queryClient = useQueryClient(); 47 44 ··· 78 75 79 76 <Switch> 80 77 <Match when={query.error} keyed> 81 - {(err) => { 82 - if (err instanceof ClientResponseError) { 83 - if (err.error === 'NotFound') { 78 + {(error) => { 79 + if (error instanceof XRPCError) { 80 + if (error.kind === 'NotFound') { 84 81 return ( 85 82 <div class="px-4 py-3"> 86 83 <div class="rounded-md border border-outline p-3"> ··· 91 88 } 92 89 } 93 90 94 - return <ErrorView error={err} onRetry={() => query.refetch()} />; 91 + return <ErrorView error={error} onRetry={() => query.refetch()} />; 95 92 }} 96 93 </Match> 97 94 ··· 105 102 const data = accessor(); 106 103 const type = data.$type; 107 104 108 - let did: At.Did | undefined; 105 + let did: At.DID | undefined; 109 106 110 107 if (type === 'app.bsky.feed.defs#threadViewPost') { 111 108 did = data.post.author.did;
+1 -6
src/views/profile-curation-list.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 - 5 3 import { createListMetaQuery } from '~/api/queries/list'; 6 4 import { makeAtUri } from '~/api/types/at-uri'; 7 5 ··· 13 11 import TimelineList from '~/components/timeline/timeline-list'; 14 12 15 13 const CurationListPage = () => { 16 - const { did, rkey } = useParams<{ 17 - did: At.Did; 18 - rkey: At.RecordKey; 19 - }>(); 14 + const { did, rkey } = useParams(); 20 15 21 16 const uri = makeAtUri(did, 'app.bsky.graph.list', rkey); 22 17 const meta = createListMetaQuery(() => uri);
+1 -5
src/views/profile-feed.tsx
··· 1 1 import { Match, Show, Switch } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 3 import { useQueryClient } from '@mary/solid-query'; 5 4 6 5 import { createFeedMetaQuery } from '~/api/queries/feed'; ··· 24 23 import TimelineList from '~/components/timeline/timeline-list'; 25 24 26 25 const FeedPage = () => { 27 - const { didOrHandle, rkey } = useParams<{ 28 - didOrHandle: At.Identifier; 29 - rkey: At.RecordKey; 30 - }>(); 26 + const { didOrHandle, rkey } = useParams(); 31 27 32 28 const queryClient = useQueryClient(); 33 29
+1 -5
src/views/profile-feeds.tsx
··· 1 - import type { At } from '@atcute/client/lexicons'; 2 - 3 1 import { createProfileQuery } from '~/api/queries/profile'; 4 2 import { createProfileFeedsQuery } from '~/api/queries/profile-feeds'; 5 3 ··· 11 9 import VirtualItem from '~/components/virtual-item'; 12 10 13 11 const ProfileFeedsPage = () => { 14 - const { did } = useParams<{ 15 - did: At.Did; 16 - }>(); 12 + const { did } = useParams(); 17 13 18 14 const feeds = createProfileFeedsQuery(() => did); 19 15 const profile = createProfileQuery(() => did);
+1 -5
src/views/profile-followers.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 - 5 3 import { createProfileFollowersQuery } from '~/api/queries/profile-followers'; 6 4 7 5 import { useParams, useTitle } from '~/lib/navigation/router'; ··· 13 11 import VirtualItem from '~/components/virtual-item'; 14 12 15 13 const ProfileFollowersPage = () => { 16 - const { did } = useParams<{ 17 - did: At.Did; 18 - }>(); 14 + const { did } = useParams(); 19 15 20 16 const followers = createProfileFollowersQuery(() => did); 21 17 const subject = createMemo(() => followers.data?.pages[0].subject);
+1 -5
src/views/profile-following.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 - 5 3 import { createProfileFollowingQuery } from '~/api/queries/profile-following'; 6 4 7 5 import { useParams, useTitle } from '~/lib/navigation/router'; ··· 13 11 import VirtualItem from '~/components/virtual-item'; 14 12 15 13 const ProfileFollowingPage = () => { 16 - const { did } = useParams<{ 17 - did: At.Did; 18 - }>(); 14 + const { did } = useParams(); 19 15 20 16 const following = createProfileFollowingQuery(() => did); 21 17 const subject = createMemo(() => following.data?.pages[0].subject);
+1 -5
src/views/profile-known-followers.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 - 5 3 import { createProfileKnownFollowersQuery } from '~/api/queries/profile-known-followers'; 6 4 7 5 import { useParams, useTitle } from '~/lib/navigation/router'; ··· 13 11 import VirtualItem from '~/components/virtual-item'; 14 12 15 13 const ProfileKnownFollowersPage = () => { 16 - const { did } = useParams<{ 17 - did: At.Did; 18 - }>(); 14 + const { did } = useParams(); 19 15 20 16 const followers = createProfileKnownFollowersQuery(() => did); 21 17 const subject = createMemo(() => followers.data?.pages[0].subject);
+4 -4
src/views/profile-labels.tsx
··· 49 49 const { did } = useParams(); 50 50 const { currentAccount } = useSession(); 51 51 52 - const query = createLabelerMetaQuery(() => did as At.Did); 52 + const query = createLabelerMetaQuery(() => did as At.DID); 53 53 54 54 const config = createMemo(() => { 55 55 if (!currentAccount) { ··· 57 57 } 58 58 59 59 const preferences = currentAccount.preferences; 60 - return preferences.moderation.labelers[did as At.Did]; 60 + return preferences.moderation.labelers[did as At.DID]; 61 61 }); 62 62 63 63 useTitle(() => { ··· 98 98 const preferences = currentAccount!.preferences; 99 99 const labelers = preferences.moderation.labelers; 100 100 101 - labelers[did as At.Did] = { 101 + labelers[did as At.DID] = { 102 102 labels: {}, 103 103 privileged: false, 104 104 redact: false, ··· 140 140 const preferences = currentAccount!.preferences; 141 141 const labelers = preferences.moderation.labelers; 142 142 143 - delete labelers[did as At.Did]; 143 + delete labelers[did as At.DID]; 144 144 }} 145 145 /> 146 146 ));
+1 -5
src/views/profile-list.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 3 import { useQueryClient } from '@mary/solid-query'; 5 4 6 5 import { createListMetaQuery } from '~/api/queries/list'; ··· 16 15 import * as Page from '~/components/page'; 17 16 18 17 const ListStubPage = () => { 19 - const { didOrHandle, rkey } = useParams<{ 20 - didOrHandle: At.Identifier; 21 - rkey: At.RecordKey; 22 - }>(); 18 + const { didOrHandle, rkey } = useParams(); 23 19 24 20 const queryClient = useQueryClient(); 25 21
+1 -5
src/views/profile-lists.tsx
··· 1 - import type { At } from '@atcute/client/lexicons'; 2 - 3 1 import { createProfileQuery } from '~/api/queries/profile'; 4 2 import { createProfileListsQuery } from '~/api/queries/profile-lists'; 5 3 ··· 10 8 import PagedList from '~/components/paged-list'; 11 9 12 10 const ProfileListsPage = () => { 13 - const { did } = useParams<{ 14 - did: At.Did; 15 - }>(); 11 + const { did } = useParams(); 16 12 17 13 const lists = createProfileListsQuery(() => did); 18 14 const profile = createProfileQuery(() => did);
+3 -6
src/views/profile-moderation-list.tsx
··· 1 1 import { Match, Show, Switch, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyGraphDefs, At } from '@atcute/client/lexicons'; 3 + import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 4 4 import { useQueryClient } from '@mary/solid-query'; 5 5 6 6 import { ContextContentMedia } from '~/api/moderation/constants'; ··· 29 29 import VirtualItem from '~/components/virtual-item'; 30 30 31 31 const ProfileModerationListPage = () => { 32 - const { did, rkey } = useParams<{ 33 - did: At.Did; 34 - rkey: At.RecordKey; 35 - }>(); 32 + const { did, rkey } = useParams(); 36 33 37 34 const uri = makeAtUri(did, 'app.bsky.graph.list', rkey); 38 35 const query = createListMetaQuery(() => uri); ··· 163 160 ); 164 161 }; 165 162 166 - const MembersList = ({ uri }: { uri: At.ResourceUri }) => { 163 + const MembersList = ({ uri }: { uri: string }) => { 167 164 const members = createListMembersQuery(() => uri); 168 165 169 166 return (
+1 -5
src/views/profile-search.tsx
··· 1 1 import { createSignal } from 'solid-js'; 2 2 3 - import type { At } from '@atcute/client/lexicons'; 4 - 5 3 import { createProfileQuery } from '~/api/queries/profile'; 6 4 import { isDid } from '~/api/types/identity'; 7 5 ··· 16 14 import SearchSuggestionsView from '~/components/search/search-suggestions-view'; 17 15 18 16 const ProfileSearchPage = () => { 19 - const { didOrHandle } = useParams<{ 20 - didOrHandle: At.Identifier; 21 - }>(); 17 + const { didOrHandle } = useParams(); 22 18 23 19 const [query, setQuery] = createSignal(''); 24 20 const profile = createProfileQuery(() => didOrHandle);
+9 -11
src/views/profile.tsx
··· 1 1 import { Match, Show, Switch, createMemo } from 'solid-js'; 2 2 3 - import { ClientResponseError } from '@atcute/client'; 4 - import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 3 + import { XRPCError } from '@atcute/client'; 4 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 5 5 import { useQueryClient } from '@mary/solid-query'; 6 6 7 7 import { useProfileShadow } from '~/api/cache/profile-shadow'; ··· 31 31 import VirtualItem from '~/components/virtual-item'; 32 32 33 33 const ProfilePage = () => { 34 - const { didOrHandle } = useParams<{ 35 - didOrHandle: At.Identifier; 36 - }>(); 34 + const { didOrHandle } = useParams(); 37 35 38 36 const queryClient = useQueryClient(); 39 37 const profile = createProfileQuery(() => didOrHandle); ··· 117 115 <Match when={profile.error} keyed> 118 116 {(err) => { 119 117 if ( 120 - err instanceof ClientResponseError && 121 - (err.error === 'InvalidRequest' || 122 - err.error === 'AccountTakedown' || 123 - err.error === 'AccountDeactivated') 118 + err instanceof XRPCError && 119 + (err.kind === 'InvalidRequest' || 120 + err.kind === 'AccountTakedown' || 121 + err.kind === 'AccountDeactivated') 124 122 ) { 125 123 const text = 126 - err.error === 'AccountTakedown' 124 + err.kind === 'AccountTakedown' 127 125 ? `This account is taken down` 128 - : err.error === 'AccountDeactivated' 126 + : err.kind === 'AccountDeactivated' 129 127 ? `This account has deactivated` 130 128 : `This account doesn't exist`; 131 129
+6 -7
src/views/settings-account.tsx
··· 1 - import { ok } from '@atcute/client'; 2 1 import { createQuery } from '@mary/solid-query'; 3 2 4 3 import { useTitle } from '~/lib/navigation/router'; ··· 8 7 import * as Page from '~/components/page'; 9 8 10 9 const AccountSettingsPage = () => { 11 - const { did, client, persister } = useAgent(); 10 + const { did, rpc, persister } = useAgent(); 12 11 13 12 const repo = createQuery(() => ({ 14 13 queryKey: ['describe-repo'], 15 14 persister: persister as any, 16 15 async queryFn() { 17 - const [repo, server] = await Promise.all([ 18 - ok(client.get('com.atproto.repo.describeRepo', { params: { repo: did! } })), 19 - ok(client.get('com.atproto.server.describeServer')), 16 + const [repoResponse, serverResponse] = await Promise.all([ 17 + rpc.get('com.atproto.repo.describeRepo', { params: { repo: did! } }), 18 + rpc.handle('/xrpc/com.atproto.server.describeServer', {}), 20 19 ]); 21 20 22 21 return { 23 - handle: repo.handle, 24 - pds: server.did.replace(/^did:web:/, ''), 22 + handle: repoResponse.data.handle, 23 + pds: new URL(serverResponse.url).host, 25 24 }; 26 25 }, 27 26 }));
+6 -10
src/views/settings-app-passwords.tsx
··· 1 1 import { For, Match, Show, Switch } from 'solid-js'; 2 2 3 - import { ok } from '@atcute/client'; 4 3 import type { ComAtprotoServerListAppPasswords } from '@atcute/client/lexicons'; 5 4 import { createMutation, createQuery } from '@mary/solid-query'; 6 5 ··· 23 22 import AddAppPasswordPrompt from '~/components/settings/app-passwords/add-app-password-prompt'; 24 23 25 24 const AppPasswordsSettingsPage = () => { 26 - const { client } = useAgent(); 25 + const { rpc } = useAgent(); 27 26 28 27 const passwords = createQuery(() => { 29 28 return { 30 29 queryKey: ['app-passwords'], 31 30 async queryFn() { 32 - const data = await ok(client.get('com.atproto.server.listAppPasswords')); 31 + const { data } = await rpc.get('com.atproto.server.listAppPasswords', {}); 33 32 34 33 return data.passwords; 35 34 }, ··· 106 105 } 107 106 108 107 const PasswordEntry = ({ item }: PasswordEntryProps) => { 109 - const { client } = useAgent(); 108 + const { rpc } = useAgent(); 110 109 111 110 const isPrivileged = item.privileged; 112 111 113 112 const mutation = createMutation((queryClient) => { 114 113 return { 115 114 async mutationFn() { 116 - await ok( 117 - client.post('com.atproto.server.revokeAppPassword', { 118 - as: null, 119 - input: { name: item.name }, 120 - }), 121 - ); 115 + await rpc.call('com.atproto.server.revokeAppPassword', { 116 + data: { name: item.name }, 117 + }); 122 118 }, 123 119 async onSuccess() { 124 120 await queryClient.invalidateQueries({ queryKey: ['app-passwords'] });