personal web client for Bluesky
typescript solidjs bluesky atcute

Compare changes

Choose any two refs to compare.

Changed files
+2662 -2738
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
+24 -28
package.json
··· 8 8 "fmt": "prettier --cache --write ." 9 9 }, 10 10 "dependencies": { 11 - "@atcute/atproto": "^3.1.0", 12 - "@atcute/bluemoji": "^3.1.0", 13 - "@atcute/bluesky": "^3.1.0", 11 + "@atcute/bluemoji": "^1.0.4", 12 + "@atcute/bluesky": "^1.0.15", 14 13 "@atcute/bluesky-richtext-parser": "^1.0.7", 15 - "@atcute/bluesky-richtext-segmenter": "^2.0.3", 14 + "@atcute/bluesky-richtext-segmenter": "^1.0.5", 16 15 "@atcute/bluesky-search-parser": "^0.1.0", 17 - "@atcute/cbor": "^2.2.4", 18 - "@atcute/cid": "^2.2.3", 19 - "@atcute/client": "^4.0.3", 20 - "@atcute/lexicons": "^1.0.4", 21 - "@atcute/oauth-browser-client": "^1.0.25", 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", 22 20 "@atcute/tid": "^1.0.2", 23 - "@atlaskit/pragmatic-drag-and-drop": "1.6.0", 24 - "@atlaskit/pragmatic-drag-and-drop-hitbox": "1.0.3", 25 - "@floating-ui/dom": "^1.7.0", 21 + "@atlaskit/pragmatic-drag-and-drop": "^1.5.2", 22 + "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3", 23 + "@floating-ui/dom": "^1.6.13", 26 24 "@floating-ui/utils": "^0.2.9", 27 - "@kelinci/basa-lexicons": "^1.0.0", 28 - "@mary/array-fns": "jsr:^0.1.4", 29 - "@mary/async-iterator-fns": "jsr:^0.1.1", 30 - "@mary/batch-fetch": "jsr:^0.1.0", 31 - "@mary/date-fns": "jsr:^0.1.3", 32 - "@mary/events": "jsr:^0.2.0", 33 - "@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", 34 30 "@mary/solid-freeze": "npm:@externdefs/solid-freeze@^0.1.1", 35 31 "@mary/solid-query": "npm:@externdefs/solid-query@^0.1.5", 36 32 "comlink": "^4.4.2", 37 - "hls.js": "^1.6.2", 38 - "idb": "^8.0.3", 33 + "hls.js": "^1.6.0", 34 + "idb": "^8.0.2", 39 35 "nanoid": "^5.1.5", 40 36 "solid-floating-ui": "~0.2.1", 41 - "solid-js": "^1.9.7", 42 - "webm-muxer": "^5.1.2" 37 + "solid-js": "^1.9.5", 38 + "webm-muxer": "^5.1.1" 43 39 }, 44 40 "devDependencies": { 45 41 "@trivago/prettier-plugin-sort-imports": "^5.2.2", 46 42 "@types/dom-close-watcher": "^1.0.0", 47 - "@types/dom-webcodecs": "^0.1.15", 43 + "@types/dom-webcodecs": "^0.1.14", 48 44 "autoprefixer": "^10.4.21", 49 45 "babel-plugin-transform-typescript-const-enums": "^0.1.0", 50 46 "prettier": "^3.5.3", 51 47 "prettier-plugin-tailwindcss": "^0.6.11", 52 48 "tailwindcss": "^3.4.17", 53 - "terser": "^5.40.0", 54 - "typescript": "~5.8.3", 55 - "vite": "^6.3.5", 49 + "terser": "^5.39.0", 50 + "typescript": "5.7.2", 51 + "vite": "6.0.5", 56 52 "vite-plugin-pwa": "0.21.0", 57 53 "vite-plugin-solid": "^2.11.6", 58 - "wrangler": "^4.18.0" 54 + "wrangler": "^4.6.0" 59 55 }, 60 56 "pnpm": { 61 57 "patchedDependencies": {
+17 -17
patches/solid-js.patch
··· 1 1 diff --git a/dist/solid.js b/dist/solid.js 2 - index a36e31312a461cdf9999e22aa893ef29162750c8..6de1f7f7d608e07baa9edbc6f0ee394f7f9b4411 100644 2 + index 2571609363d5758d32e2aa88489acca146a6d308..4a1e0bf4e523fb075340e0c2ccef0a4a9ab12f7f 100644 3 3 --- a/dist/solid.js 4 4 +++ b/dist/solid.js 5 - @@ -1468,7 +1468,6 @@ function Show(props) { 6 - const child = props.children; 7 - const fn = typeof child === "function" && child.length > 0; 8 - return fn ? untrack(() => child(keyed ? c : () => { 9 - - if (!untrack(condition)) throw narrowedError("Show"); 10 - return conditionValue(); 11 - })) : child; 12 - } 13 - @@ -1500,7 +1499,6 @@ function Switch(props) { 14 - const child = mp.children; 15 - const fn = typeof child === "function" && child.length > 0; 16 - return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => { 17 - - if (untrack(switchFunc)()?.[0] !== index) throw narrowedError("Match"); 18 - return conditionValue(); 19 - })) : child; 20 - }, undefined, undefined); 5 + @@ -1581,7 +1581,6 @@ function Show(props) { 6 + keyed 7 + ? c 8 + : () => { 9 + - if (!untrack(condition)) throw narrowedError("Show"); 10 + return props.when; 11 + } 12 + ) 13 + @@ -1628,7 +1627,6 @@ function Switch(props) { 14 + keyed 15 + ? when 16 + : () => { 17 + - if (untrack(evalConditions)[0] !== index) throw narrowedError("Match"); 18 + return cond.when; 19 + } 20 + )
+1231 -1275
pnpm-lock.yaml
··· 17 17 hash: 0b06407b66b7af88765fb6e01e112677a8c09ce518cb4f547cee8a0044471acd 18 18 path: patches/@tanstack__query-core@5.17.19.patch 19 19 solid-js: 20 - hash: 9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7 20 + hash: 9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c 21 21 path: patches/solid-js.patch 22 22 vite-plugin-pwa: 23 23 hash: 003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325 ··· 30 30 31 31 .: 32 32 dependencies: 33 - '@atcute/atproto': 34 - specifier: ^3.1.0 35 - version: 3.1.0 36 33 '@atcute/bluemoji': 37 - specifier: ^3.1.0 38 - version: 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) 39 36 '@atcute/bluesky': 40 - specifier: ^3.1.0 41 - version: 3.1.0 37 + specifier: ^1.0.15 38 + version: 1.0.15(@atcute/client@2.0.9) 42 39 '@atcute/bluesky-richtext-parser': 43 40 specifier: ^1.0.7 44 41 version: 1.0.7 45 42 '@atcute/bluesky-richtext-segmenter': 46 - specifier: ^2.0.3 47 - version: 2.0.3 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) 48 45 '@atcute/bluesky-search-parser': 49 46 specifier: ^0.1.0 50 47 version: 0.1.0 51 48 '@atcute/cbor': 52 - specifier: ^2.2.4 53 - version: 2.2.4 49 + specifier: ^2.2.0 50 + version: 2.2.0 54 51 '@atcute/cid': 55 - specifier: ^2.2.3 56 - version: 2.2.3 52 + specifier: ^2.2.0 53 + version: 2.2.0 57 54 '@atcute/client': 58 - specifier: ^4.0.3 59 - version: 4.0.3 60 - '@atcute/lexicons': 61 - specifier: ^1.0.4 62 - version: 1.0.4 55 + specifier: ^2.0.9 56 + version: 2.0.9 63 57 '@atcute/oauth-browser-client': 64 - specifier: ^1.0.25 65 - version: 1.0.25 58 + specifier: ^1.0.16 59 + version: 1.0.16 66 60 '@atcute/tid': 67 61 specifier: ^1.0.2 68 62 version: 1.0.2 69 63 '@atlaskit/pragmatic-drag-and-drop': 70 - specifier: 1.6.0 71 - version: 1.6.0 64 + specifier: ^1.5.2 65 + version: 1.5.2 72 66 '@atlaskit/pragmatic-drag-and-drop-hitbox': 73 - specifier: 1.0.3 67 + specifier: ^1.0.3 74 68 version: 1.0.3 75 69 '@floating-ui/dom': 76 - specifier: ^1.7.0 77 - version: 1.7.0 70 + specifier: ^1.6.13 71 + version: 1.6.13 78 72 '@floating-ui/utils': 79 73 specifier: ^0.2.9 80 74 version: 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea) 81 - '@kelinci/basa-lexicons': 82 - specifier: ^1.0.0 83 - version: 1.0.0 84 75 '@mary/array-fns': 85 - specifier: jsr:^0.1.4 76 + specifier: npm:@jsr/mary__array-fns@^0.1.4 86 77 version: '@jsr/mary__array-fns@0.1.4' 87 78 '@mary/async-iterator-fns': 88 - specifier: jsr:^0.1.1 79 + specifier: npm:@jsr/mary__async-iterator-fns@^0.1.1 89 80 version: '@jsr/mary__async-iterator-fns@0.1.1' 90 - '@mary/batch-fetch': 91 - specifier: jsr:^0.1.0 92 - version: '@jsr/mary__batch-fetch@0.1.0' 93 81 '@mary/date-fns': 94 - specifier: jsr:^0.1.3 82 + specifier: npm:@jsr/mary__date-fns@^0.1.3 95 83 version: '@jsr/mary__date-fns@0.1.3' 96 84 '@mary/events': 97 - specifier: jsr:^0.2.0 85 + specifier: npm:@jsr/mary__events@^0.2.0 98 86 version: '@jsr/mary__events@0.2.0' 99 87 '@mary/exif-rm': 100 - specifier: jsr:^0.2.2 88 + specifier: npm:@jsr/mary__exif-rm@^0.2.2 101 89 version: '@jsr/mary__exif-rm@0.2.2' 102 90 '@mary/solid-freeze': 103 91 specifier: npm:@externdefs/solid-freeze@^0.1.1 104 - version: '@externdefs/solid-freeze@0.1.1(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))' 92 + version: '@externdefs/solid-freeze@0.1.1(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))' 105 93 '@mary/solid-query': 106 94 specifier: npm:@externdefs/solid-query@^0.1.5 107 - version: '@externdefs/solid-query@0.1.5(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))' 95 + version: '@externdefs/solid-query@0.1.5(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))' 108 96 comlink: 109 97 specifier: ^4.4.2 110 98 version: 4.4.2 111 99 hls.js: 112 - specifier: ^1.6.2 113 - version: 1.6.2 100 + specifier: ^1.6.0 101 + version: 1.6.0 114 102 idb: 115 - specifier: ^8.0.3 116 - version: 8.0.3 103 + specifier: ^8.0.2 104 + version: 8.0.2 117 105 nanoid: 118 106 specifier: ^5.1.5 119 107 version: 5.1.5 120 108 solid-floating-ui: 121 109 specifier: ~0.2.1 122 - version: 0.2.1(@floating-ui/dom@1.7.0)(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)) 110 + version: 0.2.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)) 123 111 solid-js: 124 - specifier: ^1.9.7 125 - version: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7) 112 + specifier: ^1.9.5 113 + version: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 126 114 webm-muxer: 127 - specifier: ^5.1.2 128 - version: 5.1.2 115 + specifier: ^5.1.1 116 + version: 5.1.1 129 117 devDependencies: 130 118 '@trivago/prettier-plugin-sort-imports': 131 119 specifier: ^5.2.2 ··· 134 122 specifier: ^1.0.0 135 123 version: 1.0.0 136 124 '@types/dom-webcodecs': 137 - specifier: ^0.1.15 138 - version: 0.1.15 125 + specifier: ^0.1.14 126 + version: 0.1.14 139 127 autoprefixer: 140 128 specifier: ^10.4.21 141 - version: 10.4.21(postcss@8.5.4) 129 + version: 10.4.21(postcss@8.5.3) 142 130 babel-plugin-transform-typescript-const-enums: 143 131 specifier: ^0.1.0 144 - version: 0.1.0(@babel/core@7.27.3) 132 + version: 0.1.0(@babel/core@7.26.10) 145 133 prettier: 146 134 specifier: ^3.5.3 147 135 version: 3.5.3 ··· 152 140 specifier: ^3.4.17 153 141 version: 3.4.17 154 142 terser: 155 - specifier: ^5.40.0 156 - version: 5.40.0 143 + specifier: ^5.39.0 144 + version: 5.39.0 157 145 typescript: 158 - specifier: ~5.8.3 159 - version: 5.8.3 146 + specifier: 5.7.2 147 + version: 5.7.2 160 148 vite: 161 - specifier: ^6.3.5 162 - version: 6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0) 149 + specifier: 6.0.5 150 + version: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0) 163 151 vite-plugin-pwa: 164 152 specifier: 0.21.0 165 - version: 0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0)) 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)) 166 154 vite-plugin-solid: 167 155 specifier: ^2.11.6 168 - version: 2.11.6(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))(vite@6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0)) 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)) 169 157 wrangler: 170 - specifier: ^4.18.0 171 - version: 4.18.0 158 + specifier: ^4.6.0 159 + version: 4.6.0 172 160 173 161 packages: 174 162 ··· 186 174 peerDependencies: 187 175 ajv: '>=8' 188 176 189 - '@atcute/atproto@3.1.0': 190 - resolution: {integrity: sha512-aJbDsY7FcIh8APWKAimBtshPwqoRE056tc0UV6vw4TW4e3nYaHedoJmKhlh/k8KQWxyw64MQThNGMaC89HNoTg==} 191 - 192 - '@atcute/bluemoji@3.1.0': 193 - resolution: {integrity: sha512-8EfcEDrXlStvu57WVcGSeDWfbEDKTjfI43rk+oohe2sdYU113ObTe8Pv1vW0DRfOYcQqR4+eF2SbpvXE6//24g==} 177 + '@atcute/bluemoji@1.0.4': 178 + resolution: {integrity: sha512-Rzujybon6EFuycWPID5bzjYIVdPPWWjVfPqELhByJTLe2vq3SlEubUCmz3VfhDu/Bb8wlBP2tIT5w4oq3vJLrg==} 179 + peerDependencies: 180 + '@atcute/bluesky': ^1.0.0 181 + '@atcute/client': ^1.0.0 || ^2.0.0 194 182 195 183 '@atcute/bluesky-richtext-parser@1.0.7': 196 184 resolution: {integrity: sha512-nOvU699OXiGMbyswao7JJnY0C9WkwE7PVC/m5WWt0UN9fsXSOor9IZWw+v9SATp+94BTJoG38XyUomUaJnoQRA==} 197 185 198 - '@atcute/bluesky-richtext-segmenter@2.0.3': 199 - resolution: {integrity: sha512-8Jy2EHdqx0mKI0k8l4h2cnaBN1pGgSzSazO0Gp85ttIQmgynZsQX6l4OWgaQx0aNZFmqZRXJ7N0rj/b2dlO1eQ==} 186 + '@atcute/bluesky-richtext-segmenter@1.0.5': 187 + resolution: {integrity: sha512-D0FfmJVwppky9naL1OGKcQjtgO0lDLhkG4iCQHpShuHhEZ9FUdf3eUb/eQpVRNJGaJ4ShjEOHA6FlAizcjMkGQ==} 188 + peerDependencies: 189 + '@atcute/bluesky': ^1.0.0 190 + '@atcute/client': ^1.0.0 || ^2.0.0 200 191 201 192 '@atcute/bluesky-search-parser@0.1.0': 202 193 resolution: {integrity: sha512-bTClwD9VGwaECOyWe1mf8V6t+7/77e3tiUHTE6CSrHXOJ/yM8N2xbn+dIi2ki2JLHvgvBN9wsWpFLykgfWhBaw==} 203 194 204 - '@atcute/bluesky@3.1.0': 205 - resolution: {integrity: sha512-i5ABWnRpw+YsMyUz9jkkrbN0m3Fz8qLy4nIMPs4IoSKgO/UjmZFvfIkabXUOUHcnHPgph2yViXA1buzTR0RNWQ==} 195 + '@atcute/bluesky@1.0.15': 196 + resolution: {integrity: sha512-+EFiybmKQ97aBAgtaD+cKRJER5AMn3cZMkEwEg/pDdWyzxYJ9m1UgemmLdTgI8VrxPufKqdXS2nl7uO7TY6BPA==} 197 + peerDependencies: 198 + '@atcute/client': ^1.0.0 || ^2.0.0 206 199 207 - '@atcute/cbor@2.2.4': 208 - resolution: {integrity: sha512-8Y/OTM8zs5VInOCjfx4f9Idiiz7ygM/FkfWv/HW3/ZUsXczn1xk7GzTBbm4P5crn4C5luwDGpO7FwClMOERrow==} 200 + '@atcute/cbor@2.2.0': 201 + resolution: {integrity: sha512-W3ttcDJHiB5N6MbfEpJbTINZSjg0KB8gpBds8UWOGmybqUnuz43HZkFSpF/Vom0KilYg6QWU/ZM4X8SXZE+kow==} 209 202 210 - '@atcute/cid@2.2.3': 211 - resolution: {integrity: sha512-WEzNSL1EuCVtCQDFYEBIm4dEP6PcMEwi8IYUVIWvT77eO5EjY58F63z5T4qMABxSBM0+L4kqMxypdL1Fzf6LZw==} 203 + '@atcute/cid@2.2.0': 204 + resolution: {integrity: sha512-ty+WjGcTfi1JJtcRNz6bsJMqT69lEIl4Ts7vl4U8SBHbxjbb6Tk/pcnQZVClKRYduRoZ1XhS9n5qOSIbIMctDA==} 212 205 213 - '@atcute/client@4.0.3': 214 - resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==} 206 + '@atcute/client@2.0.9': 207 + resolution: {integrity: sha512-QNDm9gMP6x9LY77ArwY+urQOBtQW74/onEAz42c40JxRm6Rl9K9cU4ROvNKJ+5cpVmEm1sthEWVRmDr5CSZENA==} 215 208 216 - '@atcute/identity@1.0.2': 217 - resolution: {integrity: sha512-SrDPHuEarEHj9bx7NfYn7DYG6kIgJIMRU581iOCIaVaiZ1WhE9D8QxTxeYG/rbGNSa85E891ECp1sQcKiBN0kg==} 218 - 219 - '@atcute/lexicons@1.0.4': 220 - resolution: {integrity: sha512-VyGJuGKAIeE+71UT9aSMJJdvfxfXsdsGMG9acv9rnGT7enVy4TD5XoYQy7TCHZ4YpxXzuHkqjyAqBz95c4WkRg==} 221 - 222 - '@atcute/multibase@1.1.4': 223 - resolution: {integrity: sha512-NUf5AeeSOmuZHGU+4GAaMtISJoG+ZHtW/vUVA4lK/YDt/7LODAW0Fd0NNIIUPVUoW0xJS6zSEIWvwLLuxmEHhA==} 209 + '@atcute/multibase@1.1.2': 210 + resolution: {integrity: sha512-KFX+c7a/u2jSNcRw0rLaUHG/XEKf1A1c8XF5soHnsb1JMCShihf/anfZ1kJ4no/IlIp9HEHV3PQRQO2sWL6ASQ==} 224 211 225 - '@atcute/oauth-browser-client@1.0.25': 226 - resolution: {integrity: sha512-MEdPKFastbiXxQrbu176ullBtWzb7bWTZyacL6afCljXoDv/ET6r3c5vCPe6LvCw9oXlQPos1NZie2fbK1Lmnw==} 212 + '@atcute/oauth-browser-client@1.0.16': 213 + resolution: {integrity: sha512-BKkA4TPyaLIO+hVxcxZoDfLFUgsd3A47UyzWAbe3BpSoN8Kywy/CqWuAVlqdiUhO1iG+vVqGQhjKy4UxutaU4g==} 227 214 228 215 '@atcute/tid@1.0.2': 229 216 resolution: {integrity: sha512-ahmjroNyeDPJhtuf3+HTJropaH04HmJ8fhntDu73Gpz/RkAF7+nkz6kcP2QTgfvMCgMPAJUdskAAP82GPDTY9w==} 230 217 231 - '@atcute/uint8array@1.0.3': 232 - resolution: {integrity: sha512-M/K+ihiVW8Pl2PFLzaC4E3l4JaZ1IH05Q0AbPWUC4cVHnd/gZ/1kAF5ngdtGvJeDMirHZ2VAy7OmAsPwR/2nlA==} 218 + '@atcute/uint8array@1.0.1': 219 + resolution: {integrity: sha512-AAnlFKyfDRgb9GNZJbhQ6OuMhbmNPirQyapb8KnmcEhxQZ3+tt+4NcwqekEegY4MpNqSTYeeTdyxq0wGZv1JHg==} 233 220 234 221 '@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3': 235 222 resolution: {integrity: sha512-/Sbu/HqN2VGLYBhnsG7SbRNg98XKkbF6L7XDdBi+izRybfaK1FeMfodPpm/xnBHPJzwYMdkE0qtLyv6afhgMUA==} 236 223 237 - '@atlaskit/pragmatic-drag-and-drop@1.6.0': 238 - resolution: {integrity: sha512-J5ZnU6h0wjda1M1BKimzt4oRKeyVsTQzlRUqlbIUjfNioWFdSnIkPogWIn9tV2B68jphL1QNuZdEkKxcJygU2w==} 224 + '@atlaskit/pragmatic-drag-and-drop@1.5.2': 225 + resolution: {integrity: sha512-fDuTwlDD11r3ev5tLJ6JnzQUiG9v77c8zGcNdO7RRNtZZbOHam8CFhmyFGY4E/mLjvgYng0UkcyCrSBc4FXYZw==} 239 226 240 - '@babel/code-frame@7.27.1': 241 - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 227 + '@babel/code-frame@7.26.2': 228 + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 242 229 engines: {node: '>=6.9.0'} 243 230 244 - '@babel/compat-data@7.27.3': 245 - resolution: {integrity: sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==} 231 + '@babel/compat-data@7.26.8': 232 + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 246 233 engines: {node: '>=6.9.0'} 247 234 248 - '@babel/core@7.27.3': 249 - resolution: {integrity: sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==} 235 + '@babel/core@7.26.10': 236 + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} 250 237 engines: {node: '>=6.9.0'} 251 238 252 - '@babel/generator@7.27.3': 253 - resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} 239 + '@babel/generator@7.27.0': 240 + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} 254 241 engines: {node: '>=6.9.0'} 255 242 256 - '@babel/helper-annotate-as-pure@7.27.3': 257 - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} 243 + '@babel/helper-annotate-as-pure@7.25.9': 244 + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} 258 245 engines: {node: '>=6.9.0'} 259 246 260 - '@babel/helper-compilation-targets@7.27.2': 261 - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} 247 + '@babel/helper-compilation-targets@7.27.0': 248 + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} 262 249 engines: {node: '>=6.9.0'} 263 250 264 - '@babel/helper-create-class-features-plugin@7.27.1': 265 - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} 251 + '@babel/helper-create-class-features-plugin@7.27.0': 252 + resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} 266 253 engines: {node: '>=6.9.0'} 267 254 peerDependencies: 268 255 '@babel/core': ^7.0.0 269 256 270 - '@babel/helper-create-regexp-features-plugin@7.27.1': 271 - resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} 257 + '@babel/helper-create-regexp-features-plugin@7.27.0': 258 + resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} 272 259 engines: {node: '>=6.9.0'} 273 260 peerDependencies: 274 261 '@babel/core': ^7.0.0 ··· 278 265 peerDependencies: 279 266 '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 280 267 281 - '@babel/helper-member-expression-to-functions@7.27.1': 282 - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} 268 + '@babel/helper-member-expression-to-functions@7.25.9': 269 + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} 283 270 engines: {node: '>=6.9.0'} 284 271 285 272 '@babel/helper-module-imports@7.18.6': 286 273 resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 287 274 engines: {node: '>=6.9.0'} 288 275 289 - '@babel/helper-module-imports@7.27.1': 290 - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 276 + '@babel/helper-module-imports@7.25.9': 277 + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 291 278 engines: {node: '>=6.9.0'} 292 279 293 - '@babel/helper-module-transforms@7.27.3': 294 - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} 280 + '@babel/helper-module-transforms@7.26.0': 281 + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 295 282 engines: {node: '>=6.9.0'} 296 283 peerDependencies: 297 284 '@babel/core': ^7.0.0 298 285 299 - '@babel/helper-optimise-call-expression@7.27.1': 300 - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} 286 + '@babel/helper-optimise-call-expression@7.25.9': 287 + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} 301 288 engines: {node: '>=6.9.0'} 302 289 303 - '@babel/helper-plugin-utils@7.27.1': 304 - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 290 + '@babel/helper-plugin-utils@7.26.5': 291 + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 305 292 engines: {node: '>=6.9.0'} 306 293 307 - '@babel/helper-remap-async-to-generator@7.27.1': 308 - resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} 294 + '@babel/helper-remap-async-to-generator@7.25.9': 295 + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} 309 296 engines: {node: '>=6.9.0'} 310 297 peerDependencies: 311 298 '@babel/core': ^7.0.0 312 299 313 - '@babel/helper-replace-supers@7.27.1': 314 - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} 300 + '@babel/helper-replace-supers@7.26.5': 301 + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} 315 302 engines: {node: '>=6.9.0'} 316 303 peerDependencies: 317 304 '@babel/core': ^7.0.0 318 305 319 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': 320 - 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==} 321 308 engines: {node: '>=6.9.0'} 322 309 323 - '@babel/helper-string-parser@7.27.1': 324 - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 310 + '@babel/helper-string-parser@7.25.9': 311 + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 325 312 engines: {node: '>=6.9.0'} 326 313 327 - '@babel/helper-validator-identifier@7.27.1': 328 - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 314 + '@babel/helper-validator-identifier@7.25.9': 315 + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 329 316 engines: {node: '>=6.9.0'} 330 317 331 - '@babel/helper-validator-option@7.27.1': 332 - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 318 + '@babel/helper-validator-option@7.25.9': 319 + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 333 320 engines: {node: '>=6.9.0'} 334 321 335 - '@babel/helper-wrap-function@7.27.1': 336 - resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} 322 + '@babel/helper-wrap-function@7.25.9': 323 + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} 337 324 engines: {node: '>=6.9.0'} 338 325 339 - '@babel/helpers@7.27.3': 340 - resolution: {integrity: sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==} 326 + '@babel/helpers@7.27.0': 327 + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} 341 328 engines: {node: '>=6.9.0'} 342 329 343 - '@babel/parser@7.27.3': 344 - resolution: {integrity: sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==} 330 + '@babel/parser@7.27.0': 331 + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} 345 332 engines: {node: '>=6.0.0'} 346 333 hasBin: true 347 334 348 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': 349 - 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==} 350 337 engines: {node: '>=6.9.0'} 351 338 peerDependencies: 352 339 '@babel/core': ^7.0.0 353 340 354 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': 355 - 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==} 356 343 engines: {node: '>=6.9.0'} 357 344 peerDependencies: 358 345 '@babel/core': ^7.0.0 359 346 360 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': 361 - 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==} 362 349 engines: {node: '>=6.9.0'} 363 350 peerDependencies: 364 351 '@babel/core': ^7.0.0 365 352 366 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': 367 - 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==} 368 355 engines: {node: '>=6.9.0'} 369 356 peerDependencies: 370 357 '@babel/core': ^7.13.0 371 358 372 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': 373 - 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==} 374 361 engines: {node: '>=6.9.0'} 375 362 peerDependencies: 376 363 '@babel/core': ^7.0.0 ··· 381 368 peerDependencies: 382 369 '@babel/core': ^7.0.0-0 383 370 384 - '@babel/plugin-syntax-import-assertions@7.27.1': 385 - resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} 371 + '@babel/plugin-syntax-import-assertions@7.26.0': 372 + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} 386 373 engines: {node: '>=6.9.0'} 387 374 peerDependencies: 388 375 '@babel/core': ^7.0.0-0 389 376 390 - '@babel/plugin-syntax-import-attributes@7.27.1': 391 - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} 377 + '@babel/plugin-syntax-import-attributes@7.26.0': 378 + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} 392 379 engines: {node: '>=6.9.0'} 393 380 peerDependencies: 394 381 '@babel/core': ^7.0.0-0 395 382 396 - '@babel/plugin-syntax-jsx@7.27.1': 397 - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} 383 + '@babel/plugin-syntax-jsx@7.25.9': 384 + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} 398 385 engines: {node: '>=6.9.0'} 399 386 peerDependencies: 400 387 '@babel/core': ^7.0.0-0 ··· 405 392 peerDependencies: 406 393 '@babel/core': ^7.0.0 407 394 408 - '@babel/plugin-transform-arrow-functions@7.27.1': 409 - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} 395 + '@babel/plugin-transform-arrow-functions@7.25.9': 396 + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} 410 397 engines: {node: '>=6.9.0'} 411 398 peerDependencies: 412 399 '@babel/core': ^7.0.0-0 413 400 414 - '@babel/plugin-transform-async-generator-functions@7.27.1': 415 - 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==} 416 403 engines: {node: '>=6.9.0'} 417 404 peerDependencies: 418 405 '@babel/core': ^7.0.0-0 419 406 420 - '@babel/plugin-transform-async-to-generator@7.27.1': 421 - resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} 407 + '@babel/plugin-transform-async-to-generator@7.25.9': 408 + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} 422 409 engines: {node: '>=6.9.0'} 423 410 peerDependencies: 424 411 '@babel/core': ^7.0.0-0 425 412 426 - '@babel/plugin-transform-block-scoped-functions@7.27.1': 427 - resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} 413 + '@babel/plugin-transform-block-scoped-functions@7.26.5': 414 + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} 428 415 engines: {node: '>=6.9.0'} 429 416 peerDependencies: 430 417 '@babel/core': ^7.0.0-0 431 418 432 - '@babel/plugin-transform-block-scoping@7.27.3': 433 - resolution: {integrity: sha512-+F8CnfhuLhwUACIJMLWnjz6zvzYM2r0yeIHKlbgfw7ml8rOMJsXNXV/hyRcb3nb493gRs4WvYpQAndWj/qQmkQ==} 419 + '@babel/plugin-transform-block-scoping@7.27.0': 420 + resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==} 434 421 engines: {node: '>=6.9.0'} 435 422 peerDependencies: 436 423 '@babel/core': ^7.0.0-0 437 424 438 - '@babel/plugin-transform-class-properties@7.27.1': 439 - resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} 425 + '@babel/plugin-transform-class-properties@7.25.9': 426 + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} 440 427 engines: {node: '>=6.9.0'} 441 428 peerDependencies: 442 429 '@babel/core': ^7.0.0-0 443 430 444 - '@babel/plugin-transform-class-static-block@7.27.1': 445 - resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} 431 + '@babel/plugin-transform-class-static-block@7.26.0': 432 + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} 446 433 engines: {node: '>=6.9.0'} 447 434 peerDependencies: 448 435 '@babel/core': ^7.12.0 449 436 450 - '@babel/plugin-transform-classes@7.27.1': 451 - resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} 437 + '@babel/plugin-transform-classes@7.25.9': 438 + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} 452 439 engines: {node: '>=6.9.0'} 453 440 peerDependencies: 454 441 '@babel/core': ^7.0.0-0 455 442 456 - '@babel/plugin-transform-computed-properties@7.27.1': 457 - resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} 443 + '@babel/plugin-transform-computed-properties@7.25.9': 444 + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} 458 445 engines: {node: '>=6.9.0'} 459 446 peerDependencies: 460 447 '@babel/core': ^7.0.0-0 461 448 462 - '@babel/plugin-transform-destructuring@7.27.3': 463 - resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==} 449 + '@babel/plugin-transform-destructuring@7.25.9': 450 + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} 464 451 engines: {node: '>=6.9.0'} 465 452 peerDependencies: 466 453 '@babel/core': ^7.0.0-0 467 454 468 - '@babel/plugin-transform-dotall-regex@7.27.1': 469 - resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} 455 + '@babel/plugin-transform-dotall-regex@7.25.9': 456 + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} 470 457 engines: {node: '>=6.9.0'} 471 458 peerDependencies: 472 459 '@babel/core': ^7.0.0-0 473 460 474 - '@babel/plugin-transform-duplicate-keys@7.27.1': 475 - 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==} 476 463 engines: {node: '>=6.9.0'} 477 464 peerDependencies: 478 465 '@babel/core': ^7.0.0-0 479 466 480 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': 481 - 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==} 482 469 engines: {node: '>=6.9.0'} 483 470 peerDependencies: 484 471 '@babel/core': ^7.0.0 485 472 486 - '@babel/plugin-transform-dynamic-import@7.27.1': 487 - resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} 473 + '@babel/plugin-transform-dynamic-import@7.25.9': 474 + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} 488 475 engines: {node: '>=6.9.0'} 489 476 peerDependencies: 490 477 '@babel/core': ^7.0.0-0 491 478 492 - '@babel/plugin-transform-exponentiation-operator@7.27.1': 493 - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} 479 + '@babel/plugin-transform-exponentiation-operator@7.26.3': 480 + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} 494 481 engines: {node: '>=6.9.0'} 495 482 peerDependencies: 496 483 '@babel/core': ^7.0.0-0 497 484 498 - '@babel/plugin-transform-export-namespace-from@7.27.1': 499 - 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==} 500 487 engines: {node: '>=6.9.0'} 501 488 peerDependencies: 502 489 '@babel/core': ^7.0.0-0 503 490 504 - '@babel/plugin-transform-for-of@7.27.1': 505 - resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} 491 + '@babel/plugin-transform-for-of@7.26.9': 492 + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} 506 493 engines: {node: '>=6.9.0'} 507 494 peerDependencies: 508 495 '@babel/core': ^7.0.0-0 509 496 510 - '@babel/plugin-transform-function-name@7.27.1': 511 - resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} 497 + '@babel/plugin-transform-function-name@7.25.9': 498 + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} 512 499 engines: {node: '>=6.9.0'} 513 500 peerDependencies: 514 501 '@babel/core': ^7.0.0-0 515 502 516 - '@babel/plugin-transform-json-strings@7.27.1': 517 - resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} 503 + '@babel/plugin-transform-json-strings@7.25.9': 504 + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} 518 505 engines: {node: '>=6.9.0'} 519 506 peerDependencies: 520 507 '@babel/core': ^7.0.0-0 521 508 522 - '@babel/plugin-transform-literals@7.27.1': 523 - resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} 509 + '@babel/plugin-transform-literals@7.25.9': 510 + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} 524 511 engines: {node: '>=6.9.0'} 525 512 peerDependencies: 526 513 '@babel/core': ^7.0.0-0 527 514 528 - '@babel/plugin-transform-logical-assignment-operators@7.27.1': 529 - resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} 515 + '@babel/plugin-transform-logical-assignment-operators@7.25.9': 516 + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} 530 517 engines: {node: '>=6.9.0'} 531 518 peerDependencies: 532 519 '@babel/core': ^7.0.0-0 533 520 534 - '@babel/plugin-transform-member-expression-literals@7.27.1': 535 - resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} 521 + '@babel/plugin-transform-member-expression-literals@7.25.9': 522 + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} 536 523 engines: {node: '>=6.9.0'} 537 524 peerDependencies: 538 525 '@babel/core': ^7.0.0-0 539 526 540 - '@babel/plugin-transform-modules-amd@7.27.1': 541 - resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} 527 + '@babel/plugin-transform-modules-amd@7.25.9': 528 + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} 542 529 engines: {node: '>=6.9.0'} 543 530 peerDependencies: 544 531 '@babel/core': ^7.0.0-0 545 532 546 - '@babel/plugin-transform-modules-commonjs@7.27.1': 547 - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} 533 + '@babel/plugin-transform-modules-commonjs@7.26.3': 534 + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} 548 535 engines: {node: '>=6.9.0'} 549 536 peerDependencies: 550 537 '@babel/core': ^7.0.0-0 551 538 552 - '@babel/plugin-transform-modules-systemjs@7.27.1': 553 - 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==} 554 541 engines: {node: '>=6.9.0'} 555 542 peerDependencies: 556 543 '@babel/core': ^7.0.0-0 557 544 558 - '@babel/plugin-transform-modules-umd@7.27.1': 559 - resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} 545 + '@babel/plugin-transform-modules-umd@7.25.9': 546 + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} 560 547 engines: {node: '>=6.9.0'} 561 548 peerDependencies: 562 549 '@babel/core': ^7.0.0-0 563 550 564 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': 565 - 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==} 566 553 engines: {node: '>=6.9.0'} 567 554 peerDependencies: 568 555 '@babel/core': ^7.0.0 569 556 570 - '@babel/plugin-transform-new-target@7.27.1': 571 - resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} 557 + '@babel/plugin-transform-new-target@7.25.9': 558 + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} 572 559 engines: {node: '>=6.9.0'} 573 560 peerDependencies: 574 561 '@babel/core': ^7.0.0-0 575 562 576 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': 577 - resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} 563 + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': 564 + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} 578 565 engines: {node: '>=6.9.0'} 579 566 peerDependencies: 580 567 '@babel/core': ^7.0.0-0 581 568 582 - '@babel/plugin-transform-numeric-separator@7.27.1': 583 - resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} 569 + '@babel/plugin-transform-numeric-separator@7.25.9': 570 + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} 584 571 engines: {node: '>=6.9.0'} 585 572 peerDependencies: 586 573 '@babel/core': ^7.0.0-0 587 574 588 - '@babel/plugin-transform-object-rest-spread@7.27.3': 589 - resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==} 575 + '@babel/plugin-transform-object-rest-spread@7.25.9': 576 + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} 590 577 engines: {node: '>=6.9.0'} 591 578 peerDependencies: 592 579 '@babel/core': ^7.0.0-0 593 580 594 - '@babel/plugin-transform-object-super@7.27.1': 595 - resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} 581 + '@babel/plugin-transform-object-super@7.25.9': 582 + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} 596 583 engines: {node: '>=6.9.0'} 597 584 peerDependencies: 598 585 '@babel/core': ^7.0.0-0 599 586 600 - '@babel/plugin-transform-optional-catch-binding@7.27.1': 601 - resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} 587 + '@babel/plugin-transform-optional-catch-binding@7.25.9': 588 + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} 602 589 engines: {node: '>=6.9.0'} 603 590 peerDependencies: 604 591 '@babel/core': ^7.0.0-0 605 592 606 - '@babel/plugin-transform-optional-chaining@7.27.1': 607 - resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} 593 + '@babel/plugin-transform-optional-chaining@7.25.9': 594 + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} 608 595 engines: {node: '>=6.9.0'} 609 596 peerDependencies: 610 597 '@babel/core': ^7.0.0-0 611 598 612 - '@babel/plugin-transform-parameters@7.27.1': 613 - resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} 599 + '@babel/plugin-transform-parameters@7.25.9': 600 + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} 614 601 engines: {node: '>=6.9.0'} 615 602 peerDependencies: 616 603 '@babel/core': ^7.0.0-0 617 604 618 - '@babel/plugin-transform-private-methods@7.27.1': 619 - 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==} 620 607 engines: {node: '>=6.9.0'} 621 608 peerDependencies: 622 609 '@babel/core': ^7.0.0-0 623 610 624 - '@babel/plugin-transform-private-property-in-object@7.27.1': 625 - resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} 611 + '@babel/plugin-transform-private-property-in-object@7.25.9': 612 + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} 626 613 engines: {node: '>=6.9.0'} 627 614 peerDependencies: 628 615 '@babel/core': ^7.0.0-0 629 616 630 - '@babel/plugin-transform-property-literals@7.27.1': 631 - 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==} 632 619 engines: {node: '>=6.9.0'} 633 620 peerDependencies: 634 621 '@babel/core': ^7.0.0-0 635 622 636 - '@babel/plugin-transform-regenerator@7.27.1': 637 - resolution: {integrity: sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==} 623 + '@babel/plugin-transform-regenerator@7.27.0': 624 + resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==} 638 625 engines: {node: '>=6.9.0'} 639 626 peerDependencies: 640 627 '@babel/core': ^7.0.0-0 641 628 642 - '@babel/plugin-transform-regexp-modifiers@7.27.1': 643 - resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} 629 + '@babel/plugin-transform-regexp-modifiers@7.26.0': 630 + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} 644 631 engines: {node: '>=6.9.0'} 645 632 peerDependencies: 646 633 '@babel/core': ^7.0.0 647 634 648 - '@babel/plugin-transform-reserved-words@7.27.1': 649 - resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} 635 + '@babel/plugin-transform-reserved-words@7.25.9': 636 + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} 650 637 engines: {node: '>=6.9.0'} 651 638 peerDependencies: 652 639 '@babel/core': ^7.0.0-0 653 640 654 - '@babel/plugin-transform-shorthand-properties@7.27.1': 655 - resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} 641 + '@babel/plugin-transform-shorthand-properties@7.25.9': 642 + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} 656 643 engines: {node: '>=6.9.0'} 657 644 peerDependencies: 658 645 '@babel/core': ^7.0.0-0 659 646 660 - '@babel/plugin-transform-spread@7.27.1': 661 - resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} 647 + '@babel/plugin-transform-spread@7.25.9': 648 + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} 662 649 engines: {node: '>=6.9.0'} 663 650 peerDependencies: 664 651 '@babel/core': ^7.0.0-0 665 652 666 - '@babel/plugin-transform-sticky-regex@7.27.1': 667 - 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==} 668 655 engines: {node: '>=6.9.0'} 669 656 peerDependencies: 670 657 '@babel/core': ^7.0.0-0 671 658 672 - '@babel/plugin-transform-template-literals@7.27.1': 673 - 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==} 674 661 engines: {node: '>=6.9.0'} 675 662 peerDependencies: 676 663 '@babel/core': ^7.0.0-0 677 664 678 - '@babel/plugin-transform-typeof-symbol@7.27.1': 679 - resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} 665 + '@babel/plugin-transform-typeof-symbol@7.27.0': 666 + resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==} 680 667 engines: {node: '>=6.9.0'} 681 668 peerDependencies: 682 669 '@babel/core': ^7.0.0-0 683 670 684 - '@babel/plugin-transform-unicode-escapes@7.27.1': 685 - resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} 671 + '@babel/plugin-transform-unicode-escapes@7.25.9': 672 + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} 686 673 engines: {node: '>=6.9.0'} 687 674 peerDependencies: 688 675 '@babel/core': ^7.0.0-0 689 676 690 - '@babel/plugin-transform-unicode-property-regex@7.27.1': 691 - 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==} 692 679 engines: {node: '>=6.9.0'} 693 680 peerDependencies: 694 681 '@babel/core': ^7.0.0-0 695 682 696 - '@babel/plugin-transform-unicode-regex@7.27.1': 697 - 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==} 698 685 engines: {node: '>=6.9.0'} 699 686 peerDependencies: 700 687 '@babel/core': ^7.0.0-0 701 688 702 - '@babel/plugin-transform-unicode-sets-regex@7.27.1': 703 - resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} 689 + '@babel/plugin-transform-unicode-sets-regex@7.25.9': 690 + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} 704 691 engines: {node: '>=6.9.0'} 705 692 peerDependencies: 706 693 '@babel/core': ^7.0.0 707 694 708 - '@babel/preset-env@7.27.2': 709 - resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==} 695 + '@babel/preset-env@7.26.9': 696 + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} 710 697 engines: {node: '>=6.9.0'} 711 698 peerDependencies: 712 699 '@babel/core': ^7.0.0-0 ··· 716 703 peerDependencies: 717 704 '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 718 705 719 - '@babel/runtime@7.27.3': 720 - resolution: {integrity: sha512-7EYtGezsdiDMyY80+65EzwiGmcJqpmcZCojSXaRgdrBaGtWTgDZKq69cPIVped6MkIM78cTQ2GOiEYjwOlG4xw==} 706 + '@babel/runtime@7.27.0': 707 + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} 721 708 engines: {node: '>=6.9.0'} 722 709 723 - '@babel/template@7.27.2': 724 - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 710 + '@babel/template@7.27.0': 711 + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} 725 712 engines: {node: '>=6.9.0'} 726 713 727 - '@babel/traverse@7.27.3': 728 - resolution: {integrity: sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==} 714 + '@babel/traverse@7.27.0': 715 + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} 729 716 engines: {node: '>=6.9.0'} 730 717 731 - '@babel/types@7.27.3': 732 - resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} 718 + '@babel/types@7.27.0': 719 + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} 733 720 engines: {node: '>=6.9.0'} 734 721 735 - '@badrap/valita@0.4.5': 736 - resolution: {integrity: sha512-4QwGbuhh/JesHRQj79mO/l37PvJj4l/tlAu7+S1n4h47qwaNpZ0WDvIwUGLYUsdi9uQ5UPpiG9wb1Wm3XUFBUQ==} 737 - engines: {node: '>= 18'} 738 - 739 722 '@cloudflare/kv-asset-handler@0.4.0': 740 723 resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} 741 724 engines: {node: '>=18.0.0'} 742 725 743 - '@cloudflare/unenv-preset@2.3.2': 744 - resolution: {integrity: sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg==} 726 + '@cloudflare/unenv-preset@2.3.1': 727 + resolution: {integrity: sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==} 745 728 peerDependencies: 746 - unenv: 2.0.0-rc.17 747 - workerd: ^1.20250508.0 729 + unenv: 2.0.0-rc.15 730 + workerd: ^1.20250320.0 748 731 peerDependenciesMeta: 749 732 workerd: 750 733 optional: true 751 734 752 - '@cloudflare/workerd-darwin-64@1.20250525.0': 753 - resolution: {integrity: sha512-L5l+7sSJJT2+riR5rS3Q3PKNNySPjWfRIeaNGMVRi1dPO6QPi4lwuxfRUFNoeUdilZJUVPfSZvTtj9RedsKznQ==} 735 + '@cloudflare/workerd-darwin-64@1.20250321.0': 736 + resolution: {integrity: sha512-y273GfLaNCxkL8hTfo0c8FZKkOPdq+CPZAKJXPWB+YpS1JCOULu6lNTptpD7ZtF14dTYPkn5Weug31TTlviJmw==} 754 737 engines: {node: '>=16'} 755 738 cpu: [x64] 756 739 os: [darwin] 757 740 758 - '@cloudflare/workerd-darwin-arm64@1.20250525.0': 759 - resolution: {integrity: sha512-Y3IbIdrF/vJWh/WBvshwcSyUh175VAiLRW7963S1dXChrZ1N5wuKGQm9xY69cIGVtitpMJWWW3jLq7J/Xxwm0Q==} 741 + '@cloudflare/workerd-darwin-arm64@1.20250321.0': 742 + resolution: {integrity: sha512-qvf7/gkkQq7fAsoMlntJSimN/WfwQqxi2oL0aWZMGodTvs/yRHO2I4oE0eOihVdK1BXyBHJXNxEvNDBjF0+Yuw==} 760 743 engines: {node: '>=16'} 761 744 cpu: [arm64] 762 745 os: [darwin] 763 746 764 - '@cloudflare/workerd-linux-64@1.20250525.0': 765 - resolution: {integrity: sha512-KSyQPAby+c6cpENoO0ayCQlY6QIh28l/+QID7VC1SLXfiNHy+hPNsH1vVBTST6CilHVAQSsy9tCZ9O9XECB8yg==} 747 + '@cloudflare/workerd-linux-64@1.20250321.0': 748 + resolution: {integrity: sha512-AEp3xjWFrNPO/h0StCOgOb0bWCcNThnkESpy91Wf4mfUF2p7tOCdp37Nk/1QIRqSxnfv4Hgxyi7gcWud9cJuMw==} 766 749 engines: {node: '>=16'} 767 750 cpu: [x64] 768 751 os: [linux] 769 752 770 - '@cloudflare/workerd-linux-arm64@1.20250525.0': 771 - resolution: {integrity: sha512-Nt0FUxS2kQhJUea4hMCNPaetkrAFDhPnNX/ntwcqVlGgnGt75iaAhupWJbU0GB+gIWlKeuClUUnDZqKbicoKyg==} 753 + '@cloudflare/workerd-linux-arm64@1.20250321.0': 754 + resolution: {integrity: sha512-wRWyMIoPIS1UBXCisW0FYTgGsfZD4AVS0hXA5nuLc0c21CvzZpmmTjqEWMcwPFenwy/MNL61NautVOC4qJqQ3Q==} 772 755 engines: {node: '>=16'} 773 756 cpu: [arm64] 774 757 os: [linux] 775 758 776 - '@cloudflare/workerd-windows-64@1.20250525.0': 777 - resolution: {integrity: sha512-mwTj+9f3uIa4NEXR1cOa82PjLa6dbrb3J+KCVJFYIaq7e63VxEzOchCXS4tublT2pmOhmFqkgBMXrxozxNkR2Q==} 759 + '@cloudflare/workerd-windows-64@1.20250321.0': 760 + resolution: {integrity: sha512-8vYP3QYO0zo2faUDfWl88jjfUvz7Si9GS3mUYaTh/TR9LcAUtsO7muLxPamqEyoxNFtbQgy08R4rTid94KRi3w==} 778 761 engines: {node: '>=16'} 779 762 cpu: [x64] 780 763 os: [win32] ··· 783 766 resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 784 767 engines: {node: '>=12'} 785 768 786 - '@emnapi/runtime@1.4.3': 787 - 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==} 788 771 789 - '@esbuild/aix-ppc64@0.25.4': 790 - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} 772 + '@esbuild/aix-ppc64@0.24.0': 773 + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} 791 774 engines: {node: '>=18'} 792 775 cpu: [ppc64] 793 776 os: [aix] 794 777 795 - '@esbuild/aix-ppc64@0.25.5': 796 - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} 778 + '@esbuild/aix-ppc64@0.24.2': 779 + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} 797 780 engines: {node: '>=18'} 798 781 cpu: [ppc64] 799 782 os: [aix] 800 783 801 - '@esbuild/android-arm64@0.25.4': 802 - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} 784 + '@esbuild/android-arm64@0.24.0': 785 + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} 803 786 engines: {node: '>=18'} 804 787 cpu: [arm64] 805 788 os: [android] 806 789 807 - '@esbuild/android-arm64@0.25.5': 808 - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} 790 + '@esbuild/android-arm64@0.24.2': 791 + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 809 792 engines: {node: '>=18'} 810 793 cpu: [arm64] 811 794 os: [android] 812 795 813 - '@esbuild/android-arm@0.25.4': 814 - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} 796 + '@esbuild/android-arm@0.24.0': 797 + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} 815 798 engines: {node: '>=18'} 816 799 cpu: [arm] 817 800 os: [android] 818 801 819 - '@esbuild/android-arm@0.25.5': 820 - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} 802 + '@esbuild/android-arm@0.24.2': 803 + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} 821 804 engines: {node: '>=18'} 822 805 cpu: [arm] 823 806 os: [android] 824 807 825 - '@esbuild/android-x64@0.25.4': 826 - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} 808 + '@esbuild/android-x64@0.24.0': 809 + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} 827 810 engines: {node: '>=18'} 828 811 cpu: [x64] 829 812 os: [android] 830 813 831 - '@esbuild/android-x64@0.25.5': 832 - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} 814 + '@esbuild/android-x64@0.24.2': 815 + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} 833 816 engines: {node: '>=18'} 834 817 cpu: [x64] 835 818 os: [android] 836 819 837 - '@esbuild/darwin-arm64@0.25.4': 838 - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} 820 + '@esbuild/darwin-arm64@0.24.0': 821 + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} 839 822 engines: {node: '>=18'} 840 823 cpu: [arm64] 841 824 os: [darwin] 842 825 843 - '@esbuild/darwin-arm64@0.25.5': 844 - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} 826 + '@esbuild/darwin-arm64@0.24.2': 827 + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} 845 828 engines: {node: '>=18'} 846 829 cpu: [arm64] 847 830 os: [darwin] 848 831 849 - '@esbuild/darwin-x64@0.25.4': 850 - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} 832 + '@esbuild/darwin-x64@0.24.0': 833 + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} 851 834 engines: {node: '>=18'} 852 835 cpu: [x64] 853 836 os: [darwin] 854 837 855 - '@esbuild/darwin-x64@0.25.5': 856 - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} 838 + '@esbuild/darwin-x64@0.24.2': 839 + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 857 840 engines: {node: '>=18'} 858 841 cpu: [x64] 859 842 os: [darwin] 860 843 861 - '@esbuild/freebsd-arm64@0.25.4': 862 - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} 844 + '@esbuild/freebsd-arm64@0.24.0': 845 + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} 863 846 engines: {node: '>=18'} 864 847 cpu: [arm64] 865 848 os: [freebsd] 866 849 867 - '@esbuild/freebsd-arm64@0.25.5': 868 - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} 850 + '@esbuild/freebsd-arm64@0.24.2': 851 + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} 869 852 engines: {node: '>=18'} 870 853 cpu: [arm64] 871 854 os: [freebsd] 872 855 873 - '@esbuild/freebsd-x64@0.25.4': 874 - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} 856 + '@esbuild/freebsd-x64@0.24.0': 857 + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} 875 858 engines: {node: '>=18'} 876 859 cpu: [x64] 877 860 os: [freebsd] 878 861 879 - '@esbuild/freebsd-x64@0.25.5': 880 - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} 862 + '@esbuild/freebsd-x64@0.24.2': 863 + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} 881 864 engines: {node: '>=18'} 882 865 cpu: [x64] 883 866 os: [freebsd] 884 867 885 - '@esbuild/linux-arm64@0.25.4': 886 - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} 868 + '@esbuild/linux-arm64@0.24.0': 869 + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} 887 870 engines: {node: '>=18'} 888 871 cpu: [arm64] 889 872 os: [linux] 890 873 891 - '@esbuild/linux-arm64@0.25.5': 892 - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} 874 + '@esbuild/linux-arm64@0.24.2': 875 + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} 893 876 engines: {node: '>=18'} 894 877 cpu: [arm64] 895 878 os: [linux] 896 879 897 - '@esbuild/linux-arm@0.25.4': 898 - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} 880 + '@esbuild/linux-arm@0.24.0': 881 + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} 899 882 engines: {node: '>=18'} 900 883 cpu: [arm] 901 884 os: [linux] 902 885 903 - '@esbuild/linux-arm@0.25.5': 904 - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} 886 + '@esbuild/linux-arm@0.24.2': 887 + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} 905 888 engines: {node: '>=18'} 906 889 cpu: [arm] 907 890 os: [linux] 908 891 909 - '@esbuild/linux-ia32@0.25.4': 910 - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} 892 + '@esbuild/linux-ia32@0.24.0': 893 + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} 911 894 engines: {node: '>=18'} 912 895 cpu: [ia32] 913 896 os: [linux] 914 897 915 - '@esbuild/linux-ia32@0.25.5': 916 - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} 898 + '@esbuild/linux-ia32@0.24.2': 899 + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 917 900 engines: {node: '>=18'} 918 901 cpu: [ia32] 919 902 os: [linux] 920 903 921 - '@esbuild/linux-loong64@0.25.4': 922 - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} 904 + '@esbuild/linux-loong64@0.24.0': 905 + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} 923 906 engines: {node: '>=18'} 924 907 cpu: [loong64] 925 908 os: [linux] 926 909 927 - '@esbuild/linux-loong64@0.25.5': 928 - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} 910 + '@esbuild/linux-loong64@0.24.2': 911 + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} 929 912 engines: {node: '>=18'} 930 913 cpu: [loong64] 931 914 os: [linux] 932 915 933 - '@esbuild/linux-mips64el@0.25.4': 934 - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} 916 + '@esbuild/linux-mips64el@0.24.0': 917 + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} 935 918 engines: {node: '>=18'} 936 919 cpu: [mips64el] 937 920 os: [linux] 938 921 939 - '@esbuild/linux-mips64el@0.25.5': 940 - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} 922 + '@esbuild/linux-mips64el@0.24.2': 923 + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} 941 924 engines: {node: '>=18'} 942 925 cpu: [mips64el] 943 926 os: [linux] 944 927 945 - '@esbuild/linux-ppc64@0.25.4': 946 - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} 928 + '@esbuild/linux-ppc64@0.24.0': 929 + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} 947 930 engines: {node: '>=18'} 948 931 cpu: [ppc64] 949 932 os: [linux] 950 933 951 - '@esbuild/linux-ppc64@0.25.5': 952 - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} 934 + '@esbuild/linux-ppc64@0.24.2': 935 + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} 953 936 engines: {node: '>=18'} 954 937 cpu: [ppc64] 955 938 os: [linux] 956 939 957 - '@esbuild/linux-riscv64@0.25.4': 958 - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} 940 + '@esbuild/linux-riscv64@0.24.0': 941 + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} 959 942 engines: {node: '>=18'} 960 943 cpu: [riscv64] 961 944 os: [linux] 962 945 963 - '@esbuild/linux-riscv64@0.25.5': 964 - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} 946 + '@esbuild/linux-riscv64@0.24.2': 947 + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} 965 948 engines: {node: '>=18'} 966 949 cpu: [riscv64] 967 950 os: [linux] 968 951 969 - '@esbuild/linux-s390x@0.25.4': 970 - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} 952 + '@esbuild/linux-s390x@0.24.0': 953 + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} 971 954 engines: {node: '>=18'} 972 955 cpu: [s390x] 973 956 os: [linux] 974 957 975 - '@esbuild/linux-s390x@0.25.5': 976 - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} 958 + '@esbuild/linux-s390x@0.24.2': 959 + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 977 960 engines: {node: '>=18'} 978 961 cpu: [s390x] 979 962 os: [linux] 980 963 981 - '@esbuild/linux-x64@0.25.4': 982 - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} 964 + '@esbuild/linux-x64@0.24.0': 965 + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} 983 966 engines: {node: '>=18'} 984 967 cpu: [x64] 985 968 os: [linux] 986 969 987 - '@esbuild/linux-x64@0.25.5': 988 - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} 970 + '@esbuild/linux-x64@0.24.2': 971 + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} 989 972 engines: {node: '>=18'} 990 973 cpu: [x64] 991 974 os: [linux] 992 975 993 - '@esbuild/netbsd-arm64@0.25.4': 994 - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} 976 + '@esbuild/netbsd-arm64@0.24.2': 977 + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 995 978 engines: {node: '>=18'} 996 979 cpu: [arm64] 997 980 os: [netbsd] 998 981 999 - '@esbuild/netbsd-arm64@0.25.5': 1000 - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} 1001 - engines: {node: '>=18'} 1002 - cpu: [arm64] 1003 - os: [netbsd] 1004 - 1005 - '@esbuild/netbsd-x64@0.25.4': 1006 - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} 982 + '@esbuild/netbsd-x64@0.24.0': 983 + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} 1007 984 engines: {node: '>=18'} 1008 985 cpu: [x64] 1009 986 os: [netbsd] 1010 987 1011 - '@esbuild/netbsd-x64@0.25.5': 1012 - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} 988 + '@esbuild/netbsd-x64@0.24.2': 989 + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} 1013 990 engines: {node: '>=18'} 1014 991 cpu: [x64] 1015 992 os: [netbsd] 1016 993 1017 - '@esbuild/openbsd-arm64@0.25.4': 1018 - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} 994 + '@esbuild/openbsd-arm64@0.24.0': 995 + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} 1019 996 engines: {node: '>=18'} 1020 997 cpu: [arm64] 1021 998 os: [openbsd] 1022 999 1023 - '@esbuild/openbsd-arm64@0.25.5': 1024 - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} 1000 + '@esbuild/openbsd-arm64@0.24.2': 1001 + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 1025 1002 engines: {node: '>=18'} 1026 1003 cpu: [arm64] 1027 1004 os: [openbsd] 1028 1005 1029 - '@esbuild/openbsd-x64@0.25.4': 1030 - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} 1006 + '@esbuild/openbsd-x64@0.24.0': 1007 + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} 1031 1008 engines: {node: '>=18'} 1032 1009 cpu: [x64] 1033 1010 os: [openbsd] 1034 1011 1035 - '@esbuild/openbsd-x64@0.25.5': 1036 - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} 1012 + '@esbuild/openbsd-x64@0.24.2': 1013 + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 1037 1014 engines: {node: '>=18'} 1038 1015 cpu: [x64] 1039 1016 os: [openbsd] 1040 1017 1041 - '@esbuild/sunos-x64@0.25.4': 1042 - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} 1018 + '@esbuild/sunos-x64@0.24.0': 1019 + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} 1043 1020 engines: {node: '>=18'} 1044 1021 cpu: [x64] 1045 1022 os: [sunos] 1046 1023 1047 - '@esbuild/sunos-x64@0.25.5': 1048 - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} 1024 + '@esbuild/sunos-x64@0.24.2': 1025 + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} 1049 1026 engines: {node: '>=18'} 1050 1027 cpu: [x64] 1051 1028 os: [sunos] 1052 1029 1053 - '@esbuild/win32-arm64@0.25.4': 1054 - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} 1030 + '@esbuild/win32-arm64@0.24.0': 1031 + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} 1055 1032 engines: {node: '>=18'} 1056 1033 cpu: [arm64] 1057 1034 os: [win32] 1058 1035 1059 - '@esbuild/win32-arm64@0.25.5': 1060 - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} 1036 + '@esbuild/win32-arm64@0.24.2': 1037 + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 1061 1038 engines: {node: '>=18'} 1062 1039 cpu: [arm64] 1063 1040 os: [win32] 1064 1041 1065 - '@esbuild/win32-ia32@0.25.4': 1066 - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} 1042 + '@esbuild/win32-ia32@0.24.0': 1043 + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} 1067 1044 engines: {node: '>=18'} 1068 1045 cpu: [ia32] 1069 1046 os: [win32] 1070 1047 1071 - '@esbuild/win32-ia32@0.25.5': 1072 - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} 1048 + '@esbuild/win32-ia32@0.24.2': 1049 + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} 1073 1050 engines: {node: '>=18'} 1074 1051 cpu: [ia32] 1075 1052 os: [win32] 1076 1053 1077 - '@esbuild/win32-x64@0.25.4': 1078 - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} 1054 + '@esbuild/win32-x64@0.24.0': 1055 + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} 1079 1056 engines: {node: '>=18'} 1080 1057 cpu: [x64] 1081 1058 os: [win32] 1082 1059 1083 - '@esbuild/win32-x64@0.25.5': 1084 - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} 1060 + '@esbuild/win32-x64@0.24.2': 1061 + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 1085 1062 engines: {node: '>=18'} 1086 1063 cpu: [x64] 1087 1064 os: [win32] ··· 1100 1077 resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} 1101 1078 engines: {node: '>=14'} 1102 1079 1103 - '@floating-ui/core@1.7.0': 1104 - resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} 1080 + '@floating-ui/core@1.6.9': 1081 + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} 1105 1082 1106 - '@floating-ui/dom@1.7.0': 1107 - resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} 1083 + '@floating-ui/dom@1.6.13': 1084 + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} 1108 1085 1109 1086 '@floating-ui/utils@0.2.9': 1110 1087 resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} ··· 1248 1225 '@jsr/mary__async-iterator-fns@0.1.1': 1249 1226 resolution: {integrity: sha512-ef/TDpu6yGTAb4fbGEjSFPO7u49WrxJeXa9T6fvmjlpEfR84qxrjTR6MEUQ1hMySD0+O9yQKvBl/KL5x7K9+iA==, tarball: https://npm.jsr.io/~/11/@jsr/mary__async-iterator-fns/0.1.1.tgz} 1250 1227 1251 - '@jsr/mary__batch-fetch@0.1.0': 1252 - resolution: {integrity: sha512-A5SmTfDUMjr+AaJA+wFg4eKKVQm6/51CYTg5ssO+vcnaCJoP1Y0RURG6VkMno9QUholf3AAldfzRgQOXDZbFgg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__batch-fetch/0.1.0.tgz} 1253 - 1254 1228 '@jsr/mary__date-fns@0.1.3': 1255 1229 resolution: {integrity: sha512-kjS04BESEHO9ZTqjOxk4ip8DsAdVDmt/jC5V4zVIYq3VD/04+WJK9kjdQda23eVZMuF9ZZY0zMswU7UXG+PSrg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__date-fns/0.1.3.tgz} 1256 1230 ··· 1259 1233 1260 1234 '@jsr/mary__exif-rm@0.2.2': 1261 1235 resolution: {integrity: sha512-+ZpLaC+1CyqWhH608Sqd6/yTG0pOlokn2tCXha7s1SMQ+GLKo4Nn/PskTeeP9Pt+6gNYSu6ednoSlRvXb2ZGxg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__exif-rm/0.2.2.tgz} 1262 - 1263 - '@kelinci/basa-lexicons@1.0.0': 1264 - resolution: {integrity: sha512-QND0ktwpGySoHhqRUrLZ3YybyHnOkV6mGCLn75yJWl9PpKIMh/gmAyvXIo1ZuzSHu4v6xcSyi3A78QoH4MhTGw==} 1265 1236 1266 1237 '@nodelib/fs.scandir@2.1.5': 1267 1238 resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} ··· 1343 1314 rollup: 1344 1315 optional: true 1345 1316 1346 - '@rollup/rollup-android-arm-eabi@4.41.1': 1347 - resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==} 1317 + '@rollup/rollup-android-arm-eabi@4.37.0': 1318 + resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} 1348 1319 cpu: [arm] 1349 1320 os: [android] 1350 1321 1351 - '@rollup/rollup-android-arm64@4.41.1': 1352 - resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==} 1322 + '@rollup/rollup-android-arm64@4.37.0': 1323 + resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} 1353 1324 cpu: [arm64] 1354 1325 os: [android] 1355 1326 1356 - '@rollup/rollup-darwin-arm64@4.41.1': 1357 - resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==} 1327 + '@rollup/rollup-darwin-arm64@4.37.0': 1328 + resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} 1358 1329 cpu: [arm64] 1359 1330 os: [darwin] 1360 1331 1361 - '@rollup/rollup-darwin-x64@4.41.1': 1362 - resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==} 1332 + '@rollup/rollup-darwin-x64@4.37.0': 1333 + resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} 1363 1334 cpu: [x64] 1364 1335 os: [darwin] 1365 1336 1366 - '@rollup/rollup-freebsd-arm64@4.41.1': 1367 - resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==} 1337 + '@rollup/rollup-freebsd-arm64@4.37.0': 1338 + resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} 1368 1339 cpu: [arm64] 1369 1340 os: [freebsd] 1370 1341 1371 - '@rollup/rollup-freebsd-x64@4.41.1': 1372 - resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==} 1342 + '@rollup/rollup-freebsd-x64@4.37.0': 1343 + resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} 1373 1344 cpu: [x64] 1374 1345 os: [freebsd] 1375 1346 1376 - '@rollup/rollup-linux-arm-gnueabihf@4.41.1': 1377 - resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==} 1347 + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 1348 + resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} 1378 1349 cpu: [arm] 1379 1350 os: [linux] 1380 1351 1381 - '@rollup/rollup-linux-arm-musleabihf@4.41.1': 1382 - resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==} 1352 + '@rollup/rollup-linux-arm-musleabihf@4.37.0': 1353 + resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} 1383 1354 cpu: [arm] 1384 1355 os: [linux] 1385 1356 1386 - '@rollup/rollup-linux-arm64-gnu@4.41.1': 1387 - resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==} 1357 + '@rollup/rollup-linux-arm64-gnu@4.37.0': 1358 + resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} 1388 1359 cpu: [arm64] 1389 1360 os: [linux] 1390 1361 1391 - '@rollup/rollup-linux-arm64-musl@4.41.1': 1392 - resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==} 1362 + '@rollup/rollup-linux-arm64-musl@4.37.0': 1363 + resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} 1393 1364 cpu: [arm64] 1394 1365 os: [linux] 1395 1366 1396 - '@rollup/rollup-linux-loongarch64-gnu@4.41.1': 1397 - resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==} 1367 + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 1368 + resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} 1398 1369 cpu: [loong64] 1399 1370 os: [linux] 1400 1371 1401 - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': 1402 - resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==} 1372 + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 1373 + resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} 1403 1374 cpu: [ppc64] 1404 1375 os: [linux] 1405 1376 1406 - '@rollup/rollup-linux-riscv64-gnu@4.41.1': 1407 - resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==} 1377 + '@rollup/rollup-linux-riscv64-gnu@4.37.0': 1378 + resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} 1408 1379 cpu: [riscv64] 1409 1380 os: [linux] 1410 1381 1411 - '@rollup/rollup-linux-riscv64-musl@4.41.1': 1412 - resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==} 1382 + '@rollup/rollup-linux-riscv64-musl@4.37.0': 1383 + resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} 1413 1384 cpu: [riscv64] 1414 1385 os: [linux] 1415 1386 1416 - '@rollup/rollup-linux-s390x-gnu@4.41.1': 1417 - resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==} 1387 + '@rollup/rollup-linux-s390x-gnu@4.37.0': 1388 + resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} 1418 1389 cpu: [s390x] 1419 1390 os: [linux] 1420 1391 1421 - '@rollup/rollup-linux-x64-gnu@4.41.1': 1422 - resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==} 1392 + '@rollup/rollup-linux-x64-gnu@4.37.0': 1393 + resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} 1423 1394 cpu: [x64] 1424 1395 os: [linux] 1425 1396 1426 - '@rollup/rollup-linux-x64-musl@4.41.1': 1427 - resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==} 1397 + '@rollup/rollup-linux-x64-musl@4.37.0': 1398 + resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} 1428 1399 cpu: [x64] 1429 1400 os: [linux] 1430 1401 1431 - '@rollup/rollup-win32-arm64-msvc@4.41.1': 1432 - resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==} 1402 + '@rollup/rollup-win32-arm64-msvc@4.37.0': 1403 + resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} 1433 1404 cpu: [arm64] 1434 1405 os: [win32] 1435 1406 1436 - '@rollup/rollup-win32-ia32-msvc@4.41.1': 1437 - resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==} 1407 + '@rollup/rollup-win32-ia32-msvc@4.37.0': 1408 + resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} 1438 1409 cpu: [ia32] 1439 1410 os: [win32] 1440 1411 1441 - '@rollup/rollup-win32-x64-msvc@4.41.1': 1442 - resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==} 1412 + '@rollup/rollup-win32-x64-msvc@4.37.0': 1413 + resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} 1443 1414 cpu: [x64] 1444 1415 os: [win32] 1445 1416 ··· 1468 1439 '@types/babel__core@7.20.5': 1469 1440 resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 1470 1441 1471 - '@types/babel__generator@7.27.0': 1472 - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 1442 + '@types/babel__generator@7.6.8': 1443 + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 1473 1444 1474 1445 '@types/babel__template@7.4.4': 1475 1446 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} ··· 1480 1451 '@types/dom-close-watcher@1.0.0': 1481 1452 resolution: {integrity: sha512-7pL0By56sVVGMSJ3HdSY+u08Id0ljStCaf1VnGFxwfpuNdA0HMz0sl2J24eSi9M6ptl9ySkVK35jF75Fn8trUg==} 1482 1453 1483 - '@types/dom-webcodecs@0.1.15': 1484 - resolution: {integrity: sha512-omOlCPvTWyPm4ZE5bZUhlSvnHM2ZWM2U+1cPiYFL/e8aV5O9MouELp+L4dMKNTON0nTeHqEg+KWDfFQMY5Wkaw==} 1454 + '@types/dom-webcodecs@0.1.14': 1455 + resolution: {integrity: sha512-ba9aF0qARLLQpLihONIRbj8VvAdUxO+5jIxlscVcDAQTcJmq5qVr781+ino5qbQUJUmO21cLP2eLeXYWzao5Vg==} 1485 1456 1486 1457 '@types/estree@0.0.39': 1487 1458 resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} 1459 + 1460 + '@types/estree@1.0.6': 1461 + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 1488 1462 1489 1463 '@types/estree@1.0.7': 1490 1464 resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} ··· 1558 1532 peerDependencies: 1559 1533 postcss: ^8.1.0 1560 1534 1561 - babel-plugin-jsx-dom-expressions@0.39.8: 1562 - resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} 1535 + babel-plugin-jsx-dom-expressions@0.39.7: 1536 + resolution: {integrity: sha512-8GzVmFla7jaTNWW8W+lTMl9YGva4/06CtwJjySnkYtt8G1v9weCzc2SuF1DfrudcCNb2Doetc1FRg33swBYZCA==} 1563 1537 peerDependencies: 1564 1538 '@babel/core': ^7.20.12 1565 1539 ··· 1583 1557 peerDependencies: 1584 1558 '@babel/core': ^7.24.4 1585 1559 1586 - babel-preset-solid@1.9.6: 1587 - resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} 1560 + babel-preset-solid@1.9.5: 1561 + resolution: {integrity: sha512-85I3osODJ1LvZbv8wFozROV1vXq32BubqHXAGu73A//TRs3NLI1OFP83AQBUTSQHwgZQmARjHlJciym3we+V+w==} 1588 1562 peerDependencies: 1589 1563 '@babel/core': ^7.0.0 1590 1564 ··· 1611 1585 resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 1612 1586 engines: {node: '>=8'} 1613 1587 1614 - browserslist@4.25.0: 1615 - resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} 1588 + browserslist@4.24.4: 1589 + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 1616 1590 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1617 1591 hasBin: true 1618 1592 ··· 1623 1597 resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 1624 1598 engines: {node: '>= 6'} 1625 1599 1626 - caniuse-lite@1.0.30001720: 1627 - resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==} 1600 + caniuse-lite@1.0.30001707: 1601 + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} 1628 1602 1629 1603 chalk@4.1.2: 1630 1604 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} ··· 1668 1642 convert-source-map@2.0.0: 1669 1643 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1670 1644 1671 - cookie@0.7.2: 1672 - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 1645 + cookie@0.5.0: 1646 + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1673 1647 engines: {node: '>= 0.6'} 1674 1648 1675 - core-js-compat@3.42.0: 1676 - resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} 1649 + core-js-compat@3.41.0: 1650 + resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} 1677 1651 1678 1652 cross-spawn@7.0.6: 1679 1653 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} ··· 1694 1668 data-uri-to-buffer@2.0.2: 1695 1669 resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} 1696 1670 1697 - debug@4.4.1: 1698 - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 1671 + debug@4.4.0: 1672 + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 1699 1673 engines: {node: '>=6.0'} 1700 1674 peerDependencies: 1701 1675 supports-color: '*' ··· 1710 1684 defu@6.1.4: 1711 1685 resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 1712 1686 1713 - detect-libc@2.0.4: 1714 - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} 1687 + detect-libc@2.0.3: 1688 + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 1715 1689 engines: {node: '>=8'} 1716 1690 1717 1691 didyoumean@1.2.2: ··· 1728 1702 engines: {node: '>=0.10.0'} 1729 1703 hasBin: true 1730 1704 1731 - electron-to-chromium@1.5.161: 1732 - resolution: {integrity: sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==} 1705 + electron-to-chromium@1.5.128: 1706 + resolution: {integrity: sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==} 1733 1707 1734 1708 emoji-regex@8.0.0: 1735 1709 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} ··· 1737 1711 emoji-regex@9.2.2: 1738 1712 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1739 1713 1740 - entities@6.0.0: 1741 - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} 1714 + entities@4.5.0: 1715 + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1742 1716 engines: {node: '>=0.12'} 1743 1717 1744 - esbuild@0.25.4: 1745 - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} 1718 + esbuild@0.24.0: 1719 + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} 1746 1720 engines: {node: '>=18'} 1747 1721 hasBin: true 1748 1722 1749 - esbuild@0.25.5: 1750 - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} 1723 + esbuild@0.24.2: 1724 + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} 1751 1725 engines: {node: '>=18'} 1752 1726 hasBin: true 1753 1727 ··· 1755 1729 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1756 1730 engines: {node: '>=6'} 1757 1731 1758 - esm-env@1.2.2: 1759 - resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 1760 - 1761 1732 estree-walker@1.0.1: 1762 1733 resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} 1763 1734 ··· 1772 1743 resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} 1773 1744 engines: {node: '>=6'} 1774 1745 1775 - exsolve@1.0.5: 1776 - resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} 1746 + exsolve@1.0.4: 1747 + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} 1777 1748 1778 1749 fast-deep-equal@3.1.3: 1779 1750 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} ··· 1791 1762 fastq@1.19.1: 1792 1763 resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1793 1764 1794 - fdir@6.4.5: 1795 - resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} 1765 + fdir@6.4.3: 1766 + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 1796 1767 peerDependencies: 1797 1768 picomatch: ^3 || ^4 1798 1769 peerDependenciesMeta: ··· 1865 1836 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1866 1837 engines: {node: '>=8'} 1867 1838 1868 - hls.js@1.6.2: 1869 - resolution: {integrity: sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==} 1839 + hls.js@1.6.0: 1840 + resolution: {integrity: sha512-AlW8ymcDKZuKtzXCUmEy4nOcHRkebnShH6t6hC2+QJQP0WXlTUSSO9Kp22uSEYdCgpwkXEJsfOhqxrgO2tDctQ==} 1870 1841 1871 1842 html-entities@2.3.3: 1872 1843 resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} ··· 1874 1845 idb@7.1.1: 1875 1846 resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} 1876 1847 1877 - idb@8.0.3: 1878 - resolution: {integrity: sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==} 1848 + idb@8.0.2: 1849 + resolution: {integrity: sha512-CX70rYhx7GDDQzwwQMDwF6kDRQi5vVs6khHUumDrMecBylKkwvZ8HWvKV08AGb7VbpoGCWUQ4aHzNDgoUiOIUg==} 1879 1850 1880 1851 inflight@1.0.6: 1881 1852 resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} ··· 2021 1992 engines: {node: '>=10.0.0'} 2022 1993 hasBin: true 2023 1994 2024 - miniflare@4.20250525.0: 2025 - resolution: {integrity: sha512-F5XRDn9WqxUaHphUT8qwy5WXC/3UwbBRJTdjjP5uwHX82vypxIlHNyHziZnplPLhQa1kbSdIY7wfuP1XJyyYZw==} 1995 + miniflare@4.20250321.1: 1996 + resolution: {integrity: sha512-pQuVtF6vQ1zMvPCo3Z19mzSFjgnlEnybzNzAJZipsqIk6kMXpYBZq+d8cWmeQFkBYlgeZKeKJ4EBKT6KapfTNg==} 2026 1997 engines: {node: '>=18.0.0'} 2027 1998 hasBin: true 2028 1999 ··· 2089 2060 package-json-from-dist@1.0.1: 2090 2061 resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 2091 2062 2092 - parse5@7.3.0: 2093 - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 2063 + parse5@7.2.1: 2064 + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 2094 2065 2095 2066 path-is-absolute@1.0.1: 2096 2067 resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} ··· 2169 2140 postcss-value-parser@4.2.0: 2170 2141 resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2171 2142 2172 - postcss@8.5.4: 2173 - resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} 2143 + postcss@8.5.3: 2144 + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 2174 2145 engines: {node: ^10 || ^12 || >=14} 2175 2146 2176 2147 prettier-plugin-tailwindcss@0.6.11: ··· 2271 2242 regenerate@1.4.2: 2272 2243 resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} 2273 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==} 2250 + 2274 2251 regexpu-core@6.2.0: 2275 2252 resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} 2276 2253 engines: {node: '>=4'} ··· 2300 2277 engines: {node: '>=10.0.0'} 2301 2278 hasBin: true 2302 2279 2303 - rollup@4.41.1: 2304 - resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==} 2280 + rollup@4.37.0: 2281 + resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} 2305 2282 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2306 2283 hasBin: true 2307 2284 ··· 2312 2289 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2313 2290 hasBin: true 2314 2291 2315 - semver@7.7.2: 2316 - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 2292 + semver@7.7.1: 2293 + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 2317 2294 engines: {node: '>=10'} 2318 2295 hasBin: true 2319 2296 2320 2297 serialize-javascript@6.0.2: 2321 2298 resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} 2322 2299 2323 - seroval-plugins@1.3.2: 2324 - resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} 2300 + seroval-plugins@1.2.1: 2301 + resolution: {integrity: sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==} 2325 2302 engines: {node: '>=10'} 2326 2303 peerDependencies: 2327 2304 seroval: ^1.0 2328 2305 2329 - seroval@1.3.2: 2330 - resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 2306 + seroval@1.2.1: 2307 + resolution: {integrity: sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==} 2331 2308 engines: {node: '>=10'} 2332 2309 2333 2310 sharp@0.33.5: ··· 2359 2336 '@floating-ui/dom': ^1.0 2360 2337 solid-js: ^1.3 2361 2338 2362 - solid-js@1.9.7: 2363 - resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} 2339 + solid-js@1.9.5: 2340 + resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==} 2364 2341 2365 2342 solid-refresh@0.6.3: 2366 2343 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 2443 2420 resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} 2444 2421 engines: {node: '>=10'} 2445 2422 2446 - terser@5.40.0: 2447 - resolution: {integrity: sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==} 2423 + terser@5.39.0: 2424 + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} 2448 2425 engines: {node: '>=10'} 2449 2426 hasBin: true 2450 2427 ··· 2455 2432 thenify@3.3.1: 2456 2433 resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2457 2434 2458 - tinyglobby@0.2.14: 2459 - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} 2435 + tinyglobby@0.2.12: 2436 + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} 2460 2437 engines: {node: '>=12.0.0'} 2461 2438 2462 2439 to-regex-range@5.0.1: ··· 2476 2453 resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} 2477 2454 engines: {node: '>=10'} 2478 2455 2479 - typescript@5.8.3: 2480 - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 2456 + typescript@5.7.2: 2457 + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 2481 2458 engines: {node: '>=14.17'} 2482 2459 hasBin: true 2483 2460 2484 - ufo@1.6.1: 2485 - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 2461 + ufo@1.5.4: 2462 + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 2486 2463 2487 2464 undici@5.29.0: 2488 2465 resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} 2489 2466 engines: {node: '>=14.0'} 2490 2467 2491 - unenv@2.0.0-rc.17: 2492 - resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} 2468 + unenv@2.0.0-rc.15: 2469 + resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} 2493 2470 2494 2471 unicode-canonical-property-names-ecmascript@2.0.1: 2495 2472 resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} ··· 2551 2528 '@testing-library/jest-dom': 2552 2529 optional: true 2553 2530 2554 - vite@6.3.5: 2555 - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} 2531 + vite@6.0.5: 2532 + resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==} 2556 2533 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 2557 2534 hasBin: true 2558 2535 peerDependencies: ··· 2602 2579 webidl-conversions@4.0.2: 2603 2580 resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2604 2581 2605 - webm-muxer@5.1.2: 2606 - resolution: {integrity: sha512-gl9pXKRD/zr/njtW6P2Z/a4qSWFHjEL1OxMjoRVR10eZCw0b/J3Z0pX5RAX8x03Q78P585KVxQQkd4lWuek5rQ==} 2582 + webm-muxer@5.1.1: 2583 + resolution: {integrity: sha512-oqGiFrwVr0LoVEIgSIISV+CURkPje1K2WiTzH+FUT4A70PcZHSPkwihBxwr+jumr76sQmhMHo9mvP82AuNiCiA==} 2607 2584 2608 2585 whatwg-url@7.1.0: 2609 2586 resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} ··· 2662 2639 workbox-window@7.3.0: 2663 2640 resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==} 2664 2641 2665 - workerd@1.20250525.0: 2666 - resolution: {integrity: sha512-SXJgLREy/Aqw2J71Oah0Pbu+SShbqbTExjVQyRBTM1r7MG7fS5NUlknhnt6sikjA/t4cO09Bi8OJqHdTkrcnYQ==} 2642 + workerd@1.20250321.0: 2643 + resolution: {integrity: sha512-vyuz9pdJ+7o1lC79vQ2UVRLXPARa2Lq94PbTfqEcYQeSxeR9X+YqhNq2yysv8Zs5vpokmexLCtMniPp9u+2LVQ==} 2667 2644 engines: {node: '>=16'} 2668 2645 hasBin: true 2669 2646 2670 - wrangler@4.18.0: 2671 - resolution: {integrity: sha512-/ng0KI9io97SNsBU1rheADBLLTE5Djybgsi4gXuvH1RBKJGpyj1xWvZ2fuWu8vAonit3EiZkwtERTm6kESHP3A==} 2647 + wrangler@4.6.0: 2648 + resolution: {integrity: sha512-2a2ZD0adlvxQ1H+nRKkuuD0dkgaYTOPlC7gBolItk5TfqOSliEV4m6DtZtKtJp33ioM+Uy6TlEWPpA2TrDveEQ==} 2672 2649 engines: {node: '>=18.0.0'} 2673 2650 hasBin: true 2674 2651 peerDependencies: 2675 - '@cloudflare/workers-types': ^4.20250525.0 2652 + '@cloudflare/workers-types': ^4.20250321.0 2676 2653 peerDependenciesMeta: 2677 2654 '@cloudflare/workers-types': 2678 2655 optional: true ··· 2703 2680 yallist@3.1.1: 2704 2681 resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2705 2682 2706 - yaml@2.8.0: 2707 - resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} 2708 - engines: {node: '>= 14.6'} 2683 + yaml@2.7.0: 2684 + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} 2685 + engines: {node: '>= 14'} 2709 2686 hasBin: true 2710 2687 2711 - youch@3.3.4: 2712 - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} 2688 + youch@3.2.3: 2689 + resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==} 2713 2690 2714 2691 zod@3.22.3: 2715 2692 resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} ··· 2730 2707 jsonpointer: 5.0.1 2731 2708 leven: 3.1.0 2732 2709 2733 - '@atcute/atproto@3.1.0': 2710 + '@atcute/bluemoji@1.0.4(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)': 2734 2711 dependencies: 2735 - '@atcute/lexicons': 1.0.4 2736 - 2737 - '@atcute/bluemoji@3.1.0': 2738 - dependencies: 2739 - '@atcute/atproto': 3.1.0 2740 - '@atcute/bluesky': 3.1.0 2741 - '@atcute/lexicons': 1.0.4 2712 + '@atcute/bluesky': 1.0.15(@atcute/client@2.0.9) 2713 + '@atcute/client': 2.0.9 2742 2714 2743 2715 '@atcute/bluesky-richtext-parser@1.0.7': {} 2744 2716 2745 - '@atcute/bluesky-richtext-segmenter@2.0.3': 2717 + '@atcute/bluesky-richtext-segmenter@1.0.5(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)': 2746 2718 dependencies: 2747 - '@atcute/bluesky': 3.1.0 2748 - '@atcute/lexicons': 1.0.4 2719 + '@atcute/bluesky': 1.0.15(@atcute/client@2.0.9) 2720 + '@atcute/client': 2.0.9 2749 2721 2750 2722 '@atcute/bluesky-search-parser@0.1.0': {} 2751 2723 2752 - '@atcute/bluesky@3.1.0': 2724 + '@atcute/bluesky@1.0.15(@atcute/client@2.0.9)': 2753 2725 dependencies: 2754 - '@atcute/atproto': 3.1.0 2755 - '@atcute/lexicons': 1.0.4 2726 + '@atcute/client': 2.0.9 2756 2727 2757 - '@atcute/cbor@2.2.4': 2728 + '@atcute/cbor@2.2.0': 2758 2729 dependencies: 2759 - '@atcute/cid': 2.2.3 2760 - '@atcute/multibase': 1.1.4 2761 - '@atcute/uint8array': 1.0.3 2730 + '@atcute/cid': 2.2.0 2731 + '@atcute/multibase': 1.1.2 2732 + '@atcute/uint8array': 1.0.1 2762 2733 2763 - '@atcute/cid@2.2.3': 2734 + '@atcute/cid@2.2.0': 2764 2735 dependencies: 2765 - '@atcute/multibase': 1.1.4 2766 - '@atcute/uint8array': 1.0.3 2736 + '@atcute/multibase': 1.1.2 2737 + '@atcute/uint8array': 1.0.1 2767 2738 2768 - '@atcute/client@4.0.3': 2769 - dependencies: 2770 - '@atcute/identity': 1.0.2 2771 - '@atcute/lexicons': 1.0.4 2739 + '@atcute/client@2.0.9': {} 2772 2740 2773 - '@atcute/identity@1.0.2': 2741 + '@atcute/multibase@1.1.2': 2774 2742 dependencies: 2775 - '@atcute/lexicons': 1.0.4 2776 - '@badrap/valita': 0.4.5 2777 - 2778 - '@atcute/lexicons@1.0.4': 2779 - dependencies: 2780 - esm-env: 1.2.2 2781 - 2782 - '@atcute/multibase@1.1.4': 2783 - dependencies: 2784 - '@atcute/uint8array': 1.0.3 2743 + '@atcute/uint8array': 1.0.1 2785 2744 2786 - '@atcute/oauth-browser-client@1.0.25': 2745 + '@atcute/oauth-browser-client@1.0.16': 2787 2746 dependencies: 2788 - '@atcute/client': 4.0.3 2789 - '@atcute/identity': 1.0.2 2790 - '@atcute/lexicons': 1.0.4 2791 - '@atcute/multibase': 1.1.4 2792 - '@atcute/uint8array': 1.0.3 2793 - nanoid: 5.1.5 2747 + '@atcute/client': 2.0.9 2748 + '@atcute/multibase': 1.1.2 2749 + '@atcute/uint8array': 1.0.1 2794 2750 2795 2751 '@atcute/tid@1.0.2': {} 2796 2752 2797 - '@atcute/uint8array@1.0.3': {} 2753 + '@atcute/uint8array@1.0.1': {} 2798 2754 2799 2755 '@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3': 2800 2756 dependencies: 2801 - '@atlaskit/pragmatic-drag-and-drop': 1.6.0 2802 - '@babel/runtime': 7.27.3 2757 + '@atlaskit/pragmatic-drag-and-drop': 1.5.2 2758 + '@babel/runtime': 7.27.0 2803 2759 2804 - '@atlaskit/pragmatic-drag-and-drop@1.6.0': 2760 + '@atlaskit/pragmatic-drag-and-drop@1.5.2': 2805 2761 dependencies: 2806 - '@babel/runtime': 7.27.3 2762 + '@babel/runtime': 7.27.0 2807 2763 bind-event-listener: 3.0.0 2808 2764 raf-schd: 4.0.3 2809 2765 2810 - '@babel/code-frame@7.27.1': 2766 + '@babel/code-frame@7.26.2': 2811 2767 dependencies: 2812 - '@babel/helper-validator-identifier': 7.27.1 2768 + '@babel/helper-validator-identifier': 7.25.9 2813 2769 js-tokens: 4.0.0 2814 2770 picocolors: 1.1.1 2815 2771 2816 - '@babel/compat-data@7.27.3': {} 2772 + '@babel/compat-data@7.26.8': {} 2817 2773 2818 - '@babel/core@7.27.3': 2774 + '@babel/core@7.26.10': 2819 2775 dependencies: 2820 2776 '@ampproject/remapping': 2.3.0 2821 - '@babel/code-frame': 7.27.1 2822 - '@babel/generator': 7.27.3 2823 - '@babel/helper-compilation-targets': 7.27.2 2824 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3) 2825 - '@babel/helpers': 7.27.3 2826 - '@babel/parser': 7.27.3 2827 - '@babel/template': 7.27.2 2828 - '@babel/traverse': 7.27.3 2829 - '@babel/types': 7.27.3 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 2830 2786 convert-source-map: 2.0.0 2831 - debug: 4.4.1 2787 + debug: 4.4.0 2832 2788 gensync: 1.0.0-beta.2 2833 2789 json5: 2.2.3 2834 2790 semver: 6.3.1 2835 2791 transitivePeerDependencies: 2836 2792 - supports-color 2837 2793 2838 - '@babel/generator@7.27.3': 2794 + '@babel/generator@7.27.0': 2839 2795 dependencies: 2840 - '@babel/parser': 7.27.3 2841 - '@babel/types': 7.27.3 2796 + '@babel/parser': 7.27.0 2797 + '@babel/types': 7.27.0 2842 2798 '@jridgewell/gen-mapping': 0.3.8 2843 2799 '@jridgewell/trace-mapping': 0.3.25 2844 2800 jsesc: 3.1.0 2845 2801 2846 - '@babel/helper-annotate-as-pure@7.27.3': 2802 + '@babel/helper-annotate-as-pure@7.25.9': 2847 2803 dependencies: 2848 - '@babel/types': 7.27.3 2804 + '@babel/types': 7.27.0 2849 2805 2850 - '@babel/helper-compilation-targets@7.27.2': 2806 + '@babel/helper-compilation-targets@7.27.0': 2851 2807 dependencies: 2852 - '@babel/compat-data': 7.27.3 2853 - '@babel/helper-validator-option': 7.27.1 2854 - browserslist: 4.25.0 2808 + '@babel/compat-data': 7.26.8 2809 + '@babel/helper-validator-option': 7.25.9 2810 + browserslist: 4.24.4 2855 2811 lru-cache: 5.1.1 2856 2812 semver: 6.3.1 2857 2813 2858 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.3)': 2814 + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': 2859 2815 dependencies: 2860 - '@babel/core': 7.27.3 2861 - '@babel/helper-annotate-as-pure': 7.27.3 2862 - '@babel/helper-member-expression-to-functions': 7.27.1 2863 - '@babel/helper-optimise-call-expression': 7.27.1 2864 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.3) 2865 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 2866 - '@babel/traverse': 7.27.3 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 2867 2823 semver: 6.3.1 2868 2824 transitivePeerDependencies: 2869 2825 - supports-color 2870 2826 2871 - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.3)': 2827 + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)': 2872 2828 dependencies: 2873 - '@babel/core': 7.27.3 2874 - '@babel/helper-annotate-as-pure': 7.27.3 2829 + '@babel/core': 7.26.10 2830 + '@babel/helper-annotate-as-pure': 7.25.9 2875 2831 regexpu-core: 6.2.0 2876 2832 semver: 6.3.1 2877 2833 2878 - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.3)': 2834 + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10)': 2879 2835 dependencies: 2880 - '@babel/core': 7.27.3 2881 - '@babel/helper-compilation-targets': 7.27.2 2882 - '@babel/helper-plugin-utils': 7.27.1 2883 - debug: 4.4.1 2836 + '@babel/core': 7.26.10 2837 + '@babel/helper-compilation-targets': 7.27.0 2838 + '@babel/helper-plugin-utils': 7.26.5 2839 + debug: 4.4.0 2884 2840 lodash.debounce: 4.0.8 2885 2841 resolve: 1.22.10 2886 2842 transitivePeerDependencies: 2887 2843 - supports-color 2888 2844 2889 - '@babel/helper-member-expression-to-functions@7.27.1': 2845 + '@babel/helper-member-expression-to-functions@7.25.9': 2890 2846 dependencies: 2891 - '@babel/traverse': 7.27.3 2892 - '@babel/types': 7.27.3 2847 + '@babel/traverse': 7.27.0 2848 + '@babel/types': 7.27.0 2893 2849 transitivePeerDependencies: 2894 2850 - supports-color 2895 2851 2896 2852 '@babel/helper-module-imports@7.18.6': 2897 2853 dependencies: 2898 - '@babel/types': 7.27.3 2854 + '@babel/types': 7.27.0 2899 2855 2900 - '@babel/helper-module-imports@7.27.1': 2856 + '@babel/helper-module-imports@7.25.9': 2901 2857 dependencies: 2902 - '@babel/traverse': 7.27.3 2903 - '@babel/types': 7.27.3 2858 + '@babel/traverse': 7.27.0 2859 + '@babel/types': 7.27.0 2904 2860 transitivePeerDependencies: 2905 2861 - supports-color 2906 2862 2907 - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.3)': 2863 + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': 2908 2864 dependencies: 2909 - '@babel/core': 7.27.3 2910 - '@babel/helper-module-imports': 7.27.1 2911 - '@babel/helper-validator-identifier': 7.27.1 2912 - '@babel/traverse': 7.27.3 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 2913 2869 transitivePeerDependencies: 2914 2870 - supports-color 2915 2871 2916 - '@babel/helper-optimise-call-expression@7.27.1': 2872 + '@babel/helper-optimise-call-expression@7.25.9': 2917 2873 dependencies: 2918 - '@babel/types': 7.27.3 2874 + '@babel/types': 7.27.0 2919 2875 2920 - '@babel/helper-plugin-utils@7.27.1': {} 2876 + '@babel/helper-plugin-utils@7.26.5': {} 2921 2877 2922 - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.3)': 2878 + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': 2923 2879 dependencies: 2924 - '@babel/core': 7.27.3 2925 - '@babel/helper-annotate-as-pure': 7.27.3 2926 - '@babel/helper-wrap-function': 7.27.1 2927 - '@babel/traverse': 7.27.3 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 2928 2884 transitivePeerDependencies: 2929 2885 - supports-color 2930 2886 2931 - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.3)': 2887 + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': 2932 2888 dependencies: 2933 - '@babel/core': 7.27.3 2934 - '@babel/helper-member-expression-to-functions': 7.27.1 2935 - '@babel/helper-optimise-call-expression': 7.27.1 2936 - '@babel/traverse': 7.27.3 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 2937 2893 transitivePeerDependencies: 2938 2894 - supports-color 2939 2895 2940 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': 2896 + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': 2941 2897 dependencies: 2942 - '@babel/traverse': 7.27.3 2943 - '@babel/types': 7.27.3 2898 + '@babel/traverse': 7.27.0 2899 + '@babel/types': 7.27.0 2944 2900 transitivePeerDependencies: 2945 2901 - supports-color 2946 2902 2947 - '@babel/helper-string-parser@7.27.1': {} 2903 + '@babel/helper-string-parser@7.25.9': {} 2948 2904 2949 - '@babel/helper-validator-identifier@7.27.1': {} 2905 + '@babel/helper-validator-identifier@7.25.9': {} 2950 2906 2951 - '@babel/helper-validator-option@7.27.1': {} 2907 + '@babel/helper-validator-option@7.25.9': {} 2952 2908 2953 - '@babel/helper-wrap-function@7.27.1': 2909 + '@babel/helper-wrap-function@7.25.9': 2954 2910 dependencies: 2955 - '@babel/template': 7.27.2 2956 - '@babel/traverse': 7.27.3 2957 - '@babel/types': 7.27.3 2911 + '@babel/template': 7.27.0 2912 + '@babel/traverse': 7.27.0 2913 + '@babel/types': 7.27.0 2958 2914 transitivePeerDependencies: 2959 2915 - supports-color 2960 2916 2961 - '@babel/helpers@7.27.3': 2917 + '@babel/helpers@7.27.0': 2962 2918 dependencies: 2963 - '@babel/template': 7.27.2 2964 - '@babel/types': 7.27.3 2919 + '@babel/template': 7.27.0 2920 + '@babel/types': 7.27.0 2965 2921 2966 - '@babel/parser@7.27.3': 2922 + '@babel/parser@7.27.0': 2967 2923 dependencies: 2968 - '@babel/types': 7.27.3 2924 + '@babel/types': 7.27.0 2969 2925 2970 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.3)': 2926 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': 2971 2927 dependencies: 2972 - '@babel/core': 7.27.3 2973 - '@babel/helper-plugin-utils': 7.27.1 2974 - '@babel/traverse': 7.27.3 2928 + '@babel/core': 7.26.10 2929 + '@babel/helper-plugin-utils': 7.26.5 2930 + '@babel/traverse': 7.27.0 2975 2931 transitivePeerDependencies: 2976 2932 - supports-color 2977 2933 2978 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.3)': 2934 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)': 2979 2935 dependencies: 2980 - '@babel/core': 7.27.3 2981 - '@babel/helper-plugin-utils': 7.27.1 2936 + '@babel/core': 7.26.10 2937 + '@babel/helper-plugin-utils': 7.26.5 2982 2938 2983 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.3)': 2939 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)': 2984 2940 dependencies: 2985 - '@babel/core': 7.27.3 2986 - '@babel/helper-plugin-utils': 7.27.1 2941 + '@babel/core': 7.26.10 2942 + '@babel/helper-plugin-utils': 7.26.5 2987 2943 2988 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.3)': 2944 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)': 2989 2945 dependencies: 2990 - '@babel/core': 7.27.3 2991 - '@babel/helper-plugin-utils': 7.27.1 2992 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 2993 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.3) 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) 2994 2950 transitivePeerDependencies: 2995 2951 - supports-color 2996 2952 2997 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.3)': 2953 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)': 2998 2954 dependencies: 2999 - '@babel/core': 7.27.3 3000 - '@babel/helper-plugin-utils': 7.27.1 3001 - '@babel/traverse': 7.27.3 2955 + '@babel/core': 7.26.10 2956 + '@babel/helper-plugin-utils': 7.26.5 2957 + '@babel/traverse': 7.27.0 3002 2958 transitivePeerDependencies: 3003 2959 - supports-color 3004 2960 3005 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.3)': 2961 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)': 3006 2962 dependencies: 3007 - '@babel/core': 7.27.3 2963 + '@babel/core': 7.26.10 3008 2964 3009 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.3)': 2965 + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)': 3010 2966 dependencies: 3011 - '@babel/core': 7.27.3 3012 - '@babel/helper-plugin-utils': 7.27.1 2967 + '@babel/core': 7.26.10 2968 + '@babel/helper-plugin-utils': 7.26.5 3013 2969 3014 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.3)': 2970 + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': 3015 2971 dependencies: 3016 - '@babel/core': 7.27.3 3017 - '@babel/helper-plugin-utils': 7.27.1 2972 + '@babel/core': 7.26.10 2973 + '@babel/helper-plugin-utils': 7.26.5 3018 2974 3019 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.3)': 2975 + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': 3020 2976 dependencies: 3021 - '@babel/core': 7.27.3 3022 - '@babel/helper-plugin-utils': 7.27.1 2977 + '@babel/core': 7.26.10 2978 + '@babel/helper-plugin-utils': 7.26.5 3023 2979 3024 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.3)': 2980 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)': 3025 2981 dependencies: 3026 - '@babel/core': 7.27.3 3027 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3028 - '@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 3029 2985 3030 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.3)': 2986 + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)': 3031 2987 dependencies: 3032 - '@babel/core': 7.27.3 3033 - '@babel/helper-plugin-utils': 7.27.1 2988 + '@babel/core': 7.26.10 2989 + '@babel/helper-plugin-utils': 7.26.5 3034 2990 3035 - '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.3)': 2991 + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)': 3036 2992 dependencies: 3037 - '@babel/core': 7.27.3 3038 - '@babel/helper-plugin-utils': 7.27.1 3039 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.3) 3040 - '@babel/traverse': 7.27.3 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 3041 2997 transitivePeerDependencies: 3042 2998 - supports-color 3043 2999 3044 - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.3)': 3000 + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)': 3045 3001 dependencies: 3046 - '@babel/core': 7.27.3 3047 - '@babel/helper-module-imports': 7.27.1 3048 - '@babel/helper-plugin-utils': 7.27.1 3049 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.3) 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) 3050 3006 transitivePeerDependencies: 3051 3007 - supports-color 3052 3008 3053 - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.3)': 3009 + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)': 3054 3010 dependencies: 3055 - '@babel/core': 7.27.3 3056 - '@babel/helper-plugin-utils': 7.27.1 3011 + '@babel/core': 7.26.10 3012 + '@babel/helper-plugin-utils': 7.26.5 3057 3013 3058 - '@babel/plugin-transform-block-scoping@7.27.3(@babel/core@7.27.3)': 3014 + '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10)': 3059 3015 dependencies: 3060 - '@babel/core': 7.27.3 3061 - '@babel/helper-plugin-utils': 7.27.1 3016 + '@babel/core': 7.26.10 3017 + '@babel/helper-plugin-utils': 7.26.5 3062 3018 3063 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.3)': 3019 + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)': 3064 3020 dependencies: 3065 - '@babel/core': 7.27.3 3066 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) 3067 - '@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 3068 3024 transitivePeerDependencies: 3069 3025 - supports-color 3070 3026 3071 - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.3)': 3027 + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)': 3072 3028 dependencies: 3073 - '@babel/core': 7.27.3 3074 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) 3075 - '@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 3076 3032 transitivePeerDependencies: 3077 3033 - supports-color 3078 3034 3079 - '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.3)': 3035 + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)': 3080 3036 dependencies: 3081 - '@babel/core': 7.27.3 3082 - '@babel/helper-annotate-as-pure': 7.27.3 3083 - '@babel/helper-compilation-targets': 7.27.2 3084 - '@babel/helper-plugin-utils': 7.27.1 3085 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.3) 3086 - '@babel/traverse': 7.27.3 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 3087 3043 globals: 11.12.0 3088 3044 transitivePeerDependencies: 3089 3045 - supports-color 3090 3046 3091 - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.3)': 3047 + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)': 3092 3048 dependencies: 3093 - '@babel/core': 7.27.3 3094 - '@babel/helper-plugin-utils': 7.27.1 3095 - '@babel/template': 7.27.2 3049 + '@babel/core': 7.26.10 3050 + '@babel/helper-plugin-utils': 7.26.5 3051 + '@babel/template': 7.27.0 3096 3052 3097 - '@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.27.3)': 3053 + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)': 3098 3054 dependencies: 3099 - '@babel/core': 7.27.3 3100 - '@babel/helper-plugin-utils': 7.27.1 3055 + '@babel/core': 7.26.10 3056 + '@babel/helper-plugin-utils': 7.26.5 3101 3057 3102 - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.3)': 3058 + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)': 3103 3059 dependencies: 3104 - '@babel/core': 7.27.3 3105 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3106 - '@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 3107 3063 3108 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.3)': 3064 + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)': 3109 3065 dependencies: 3110 - '@babel/core': 7.27.3 3111 - '@babel/helper-plugin-utils': 7.27.1 3066 + '@babel/core': 7.26.10 3067 + '@babel/helper-plugin-utils': 7.26.5 3112 3068 3113 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.3)': 3069 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': 3114 3070 dependencies: 3115 - '@babel/core': 7.27.3 3116 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3117 - '@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 3118 3074 3119 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.3)': 3075 + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)': 3120 3076 dependencies: 3121 - '@babel/core': 7.27.3 3122 - '@babel/helper-plugin-utils': 7.27.1 3077 + '@babel/core': 7.26.10 3078 + '@babel/helper-plugin-utils': 7.26.5 3123 3079 3124 - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.3)': 3080 + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)': 3125 3081 dependencies: 3126 - '@babel/core': 7.27.3 3127 - '@babel/helper-plugin-utils': 7.27.1 3082 + '@babel/core': 7.26.10 3083 + '@babel/helper-plugin-utils': 7.26.5 3128 3084 3129 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.3)': 3085 + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)': 3130 3086 dependencies: 3131 - '@babel/core': 7.27.3 3132 - '@babel/helper-plugin-utils': 7.27.1 3087 + '@babel/core': 7.26.10 3088 + '@babel/helper-plugin-utils': 7.26.5 3133 3089 3134 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.3)': 3090 + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)': 3135 3091 dependencies: 3136 - '@babel/core': 7.27.3 3137 - '@babel/helper-plugin-utils': 7.27.1 3138 - '@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 3139 3095 transitivePeerDependencies: 3140 3096 - supports-color 3141 3097 3142 - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.3)': 3098 + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)': 3143 3099 dependencies: 3144 - '@babel/core': 7.27.3 3145 - '@babel/helper-compilation-targets': 7.27.2 3146 - '@babel/helper-plugin-utils': 7.27.1 3147 - '@babel/traverse': 7.27.3 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 3148 3104 transitivePeerDependencies: 3149 3105 - supports-color 3150 3106 3151 - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.3)': 3107 + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)': 3152 3108 dependencies: 3153 - '@babel/core': 7.27.3 3154 - '@babel/helper-plugin-utils': 7.27.1 3109 + '@babel/core': 7.26.10 3110 + '@babel/helper-plugin-utils': 7.26.5 3155 3111 3156 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.3)': 3112 + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)': 3157 3113 dependencies: 3158 - '@babel/core': 7.27.3 3159 - '@babel/helper-plugin-utils': 7.27.1 3114 + '@babel/core': 7.26.10 3115 + '@babel/helper-plugin-utils': 7.26.5 3160 3116 3161 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.3)': 3117 + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)': 3162 3118 dependencies: 3163 - '@babel/core': 7.27.3 3164 - '@babel/helper-plugin-utils': 7.27.1 3119 + '@babel/core': 7.26.10 3120 + '@babel/helper-plugin-utils': 7.26.5 3165 3121 3166 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.3)': 3122 + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)': 3167 3123 dependencies: 3168 - '@babel/core': 7.27.3 3169 - '@babel/helper-plugin-utils': 7.27.1 3124 + '@babel/core': 7.26.10 3125 + '@babel/helper-plugin-utils': 7.26.5 3170 3126 3171 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.3)': 3127 + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)': 3172 3128 dependencies: 3173 - '@babel/core': 7.27.3 3174 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3) 3175 - '@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 3176 3132 transitivePeerDependencies: 3177 3133 - supports-color 3178 3134 3179 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3)': 3135 + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': 3180 3136 dependencies: 3181 - '@babel/core': 7.27.3 3182 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3) 3183 - '@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 3184 3140 transitivePeerDependencies: 3185 3141 - supports-color 3186 3142 3187 - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.3)': 3143 + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)': 3188 3144 dependencies: 3189 - '@babel/core': 7.27.3 3190 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3) 3191 - '@babel/helper-plugin-utils': 7.27.1 3192 - '@babel/helper-validator-identifier': 7.27.1 3193 - '@babel/traverse': 7.27.3 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 3194 3150 transitivePeerDependencies: 3195 3151 - supports-color 3196 3152 3197 - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.3)': 3153 + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)': 3198 3154 dependencies: 3199 - '@babel/core': 7.27.3 3200 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3) 3201 - '@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 3202 3158 transitivePeerDependencies: 3203 3159 - supports-color 3204 3160 3205 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.3)': 3161 + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': 3206 3162 dependencies: 3207 - '@babel/core': 7.27.3 3208 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3209 - '@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 3210 3166 3211 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.3)': 3167 + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)': 3212 3168 dependencies: 3213 - '@babel/core': 7.27.3 3214 - '@babel/helper-plugin-utils': 7.27.1 3169 + '@babel/core': 7.26.10 3170 + '@babel/helper-plugin-utils': 7.26.5 3215 3171 3216 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.3)': 3172 + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)': 3217 3173 dependencies: 3218 - '@babel/core': 7.27.3 3219 - '@babel/helper-plugin-utils': 7.27.1 3174 + '@babel/core': 7.26.10 3175 + '@babel/helper-plugin-utils': 7.26.5 3220 3176 3221 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.3)': 3177 + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)': 3222 3178 dependencies: 3223 - '@babel/core': 7.27.3 3224 - '@babel/helper-plugin-utils': 7.27.1 3179 + '@babel/core': 7.26.10 3180 + '@babel/helper-plugin-utils': 7.26.5 3225 3181 3226 - '@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.27.3)': 3182 + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)': 3227 3183 dependencies: 3228 - '@babel/core': 7.27.3 3229 - '@babel/helper-compilation-targets': 7.27.2 3230 - '@babel/helper-plugin-utils': 7.27.1 3231 - '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.3) 3232 - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.3) 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) 3233 3188 3234 - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.3)': 3189 + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)': 3235 3190 dependencies: 3236 - '@babel/core': 7.27.3 3237 - '@babel/helper-plugin-utils': 7.27.1 3238 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.3) 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) 3239 3194 transitivePeerDependencies: 3240 3195 - supports-color 3241 3196 3242 - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.3)': 3197 + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)': 3243 3198 dependencies: 3244 - '@babel/core': 7.27.3 3245 - '@babel/helper-plugin-utils': 7.27.1 3199 + '@babel/core': 7.26.10 3200 + '@babel/helper-plugin-utils': 7.26.5 3246 3201 3247 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.3)': 3202 + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)': 3248 3203 dependencies: 3249 - '@babel/core': 7.27.3 3250 - '@babel/helper-plugin-utils': 7.27.1 3251 - '@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 3252 3207 transitivePeerDependencies: 3253 3208 - supports-color 3254 3209 3255 - '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.3)': 3210 + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)': 3256 3211 dependencies: 3257 - '@babel/core': 7.27.3 3258 - '@babel/helper-plugin-utils': 7.27.1 3212 + '@babel/core': 7.26.10 3213 + '@babel/helper-plugin-utils': 7.26.5 3259 3214 3260 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.3)': 3215 + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)': 3261 3216 dependencies: 3262 - '@babel/core': 7.27.3 3263 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) 3264 - '@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 3265 3220 transitivePeerDependencies: 3266 3221 - supports-color 3267 3222 3268 - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.3)': 3223 + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)': 3269 3224 dependencies: 3270 - '@babel/core': 7.27.3 3271 - '@babel/helper-annotate-as-pure': 7.27.3 3272 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) 3273 - '@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 3274 3229 transitivePeerDependencies: 3275 3230 - supports-color 3276 3231 3277 - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.3)': 3232 + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)': 3278 3233 dependencies: 3279 - '@babel/core': 7.27.3 3280 - '@babel/helper-plugin-utils': 7.27.1 3234 + '@babel/core': 7.26.10 3235 + '@babel/helper-plugin-utils': 7.26.5 3281 3236 3282 - '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.3)': 3237 + '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)': 3283 3238 dependencies: 3284 - '@babel/core': 7.27.3 3285 - '@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 3286 3242 3287 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.3)': 3243 + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)': 3288 3244 dependencies: 3289 - '@babel/core': 7.27.3 3290 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3291 - '@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 3292 3248 3293 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.3)': 3249 + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)': 3294 3250 dependencies: 3295 - '@babel/core': 7.27.3 3296 - '@babel/helper-plugin-utils': 7.27.1 3251 + '@babel/core': 7.26.10 3252 + '@babel/helper-plugin-utils': 7.26.5 3297 3253 3298 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.3)': 3254 + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)': 3299 3255 dependencies: 3300 - '@babel/core': 7.27.3 3301 - '@babel/helper-plugin-utils': 7.27.1 3256 + '@babel/core': 7.26.10 3257 + '@babel/helper-plugin-utils': 7.26.5 3302 3258 3303 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.3)': 3259 + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)': 3304 3260 dependencies: 3305 - '@babel/core': 7.27.3 3306 - '@babel/helper-plugin-utils': 7.27.1 3307 - '@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 3308 3264 transitivePeerDependencies: 3309 3265 - supports-color 3310 3266 3311 - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.3)': 3267 + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)': 3312 3268 dependencies: 3313 - '@babel/core': 7.27.3 3314 - '@babel/helper-plugin-utils': 7.27.1 3269 + '@babel/core': 7.26.10 3270 + '@babel/helper-plugin-utils': 7.26.5 3315 3271 3316 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.3)': 3272 + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)': 3317 3273 dependencies: 3318 - '@babel/core': 7.27.3 3319 - '@babel/helper-plugin-utils': 7.27.1 3274 + '@babel/core': 7.26.10 3275 + '@babel/helper-plugin-utils': 7.26.5 3320 3276 3321 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.3)': 3277 + '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10)': 3322 3278 dependencies: 3323 - '@babel/core': 7.27.3 3324 - '@babel/helper-plugin-utils': 7.27.1 3279 + '@babel/core': 7.26.10 3280 + '@babel/helper-plugin-utils': 7.26.5 3325 3281 3326 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.3)': 3282 + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)': 3327 3283 dependencies: 3328 - '@babel/core': 7.27.3 3329 - '@babel/helper-plugin-utils': 7.27.1 3284 + '@babel/core': 7.26.10 3285 + '@babel/helper-plugin-utils': 7.26.5 3330 3286 3331 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.3)': 3287 + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)': 3332 3288 dependencies: 3333 - '@babel/core': 7.27.3 3334 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3335 - '@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 3336 3292 3337 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.3)': 3293 + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)': 3338 3294 dependencies: 3339 - '@babel/core': 7.27.3 3340 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3341 - '@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 3342 3298 3343 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.3)': 3299 + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)': 3344 3300 dependencies: 3345 - '@babel/core': 7.27.3 3346 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) 3347 - '@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 3348 3304 3349 - '@babel/preset-env@7.27.2(@babel/core@7.27.3)': 3305 + '@babel/preset-env@7.26.9(@babel/core@7.26.10)': 3350 3306 dependencies: 3351 - '@babel/compat-data': 7.27.3 3352 - '@babel/core': 7.27.3 3353 - '@babel/helper-compilation-targets': 7.27.2 3354 - '@babel/helper-plugin-utils': 7.27.1 3355 - '@babel/helper-validator-option': 7.27.1 3356 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.3) 3357 - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.3) 3358 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.3) 3359 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.3) 3360 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.3) 3361 - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.3) 3362 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.3) 3363 - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.3) 3364 - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.3) 3365 - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.3) 3366 - '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.3) 3367 - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.3) 3368 - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.3) 3369 - '@babel/plugin-transform-block-scoping': 7.27.3(@babel/core@7.27.3) 3370 - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.3) 3371 - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.3) 3372 - '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.3) 3373 - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.3) 3374 - '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.3) 3375 - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.3) 3376 - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.3) 3377 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.3) 3378 - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.3) 3379 - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.3) 3380 - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.3) 3381 - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.3) 3382 - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.3) 3383 - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.3) 3384 - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.3) 3385 - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.3) 3386 - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.3) 3387 - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.3) 3388 - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.3) 3389 - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.3) 3390 - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.3) 3391 - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.3) 3392 - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.3) 3393 - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.3) 3394 - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.3) 3395 - '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.27.3) 3396 - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.3) 3397 - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.3) 3398 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.3) 3399 - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.3) 3400 - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.3) 3401 - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.3) 3402 - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.3) 3403 - '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.3) 3404 - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.3) 3405 - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.3) 3406 - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.3) 3407 - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.3) 3408 - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.3) 3409 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.3) 3410 - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.3) 3411 - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.3) 3412 - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.3) 3413 - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.3) 3414 - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.3) 3415 - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.3) 3416 - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.3) 3417 - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.3) 3418 - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.3) 3419 - 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 3420 3376 semver: 6.3.1 3421 3377 transitivePeerDependencies: 3422 3378 - supports-color 3423 3379 3424 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.3)': 3380 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)': 3425 3381 dependencies: 3426 - '@babel/core': 7.27.3 3427 - '@babel/helper-plugin-utils': 7.27.1 3428 - '@babel/types': 7.27.3 3382 + '@babel/core': 7.26.10 3383 + '@babel/helper-plugin-utils': 7.26.5 3384 + '@babel/types': 7.27.0 3429 3385 esutils: 2.0.3 3430 3386 3431 - '@babel/runtime@7.27.3': {} 3387 + '@babel/runtime@7.27.0': 3388 + dependencies: 3389 + regenerator-runtime: 0.14.1 3432 3390 3433 - '@babel/template@7.27.2': 3391 + '@babel/template@7.27.0': 3434 3392 dependencies: 3435 - '@babel/code-frame': 7.27.1 3436 - '@babel/parser': 7.27.3 3437 - '@babel/types': 7.27.3 3393 + '@babel/code-frame': 7.26.2 3394 + '@babel/parser': 7.27.0 3395 + '@babel/types': 7.27.0 3438 3396 3439 - '@babel/traverse@7.27.3': 3397 + '@babel/traverse@7.27.0': 3440 3398 dependencies: 3441 - '@babel/code-frame': 7.27.1 3442 - '@babel/generator': 7.27.3 3443 - '@babel/parser': 7.27.3 3444 - '@babel/template': 7.27.2 3445 - '@babel/types': 7.27.3 3446 - debug: 4.4.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 + debug: 4.4.0 3447 3405 globals: 11.12.0 3448 3406 transitivePeerDependencies: 3449 3407 - supports-color 3450 3408 3451 - '@babel/types@7.27.3': 3409 + '@babel/types@7.27.0': 3452 3410 dependencies: 3453 - '@babel/helper-string-parser': 7.27.1 3454 - '@babel/helper-validator-identifier': 7.27.1 3455 - 3456 - '@badrap/valita@0.4.5': {} 3411 + '@babel/helper-string-parser': 7.25.9 3412 + '@babel/helper-validator-identifier': 7.25.9 3457 3413 3458 3414 '@cloudflare/kv-asset-handler@0.4.0': 3459 3415 dependencies: 3460 3416 mime: 3.0.0 3461 3417 3462 - '@cloudflare/unenv-preset@2.3.2(unenv@2.0.0-rc.17)(workerd@1.20250525.0)': 3418 + '@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0)': 3463 3419 dependencies: 3464 - unenv: 2.0.0-rc.17 3420 + unenv: 2.0.0-rc.15 3465 3421 optionalDependencies: 3466 - workerd: 1.20250525.0 3422 + workerd: 1.20250321.0 3467 3423 3468 - '@cloudflare/workerd-darwin-64@1.20250525.0': 3424 + '@cloudflare/workerd-darwin-64@1.20250321.0': 3469 3425 optional: true 3470 3426 3471 - '@cloudflare/workerd-darwin-arm64@1.20250525.0': 3427 + '@cloudflare/workerd-darwin-arm64@1.20250321.0': 3472 3428 optional: true 3473 3429 3474 - '@cloudflare/workerd-linux-64@1.20250525.0': 3430 + '@cloudflare/workerd-linux-64@1.20250321.0': 3475 3431 optional: true 3476 3432 3477 - '@cloudflare/workerd-linux-arm64@1.20250525.0': 3433 + '@cloudflare/workerd-linux-arm64@1.20250321.0': 3478 3434 optional: true 3479 3435 3480 - '@cloudflare/workerd-windows-64@1.20250525.0': 3436 + '@cloudflare/workerd-windows-64@1.20250321.0': 3481 3437 optional: true 3482 3438 3483 3439 '@cspotcode/source-map-support@0.8.1': 3484 3440 dependencies: 3485 3441 '@jridgewell/trace-mapping': 0.3.9 3486 3442 3487 - '@emnapi/runtime@1.4.3': 3443 + '@emnapi/runtime@1.4.0': 3488 3444 dependencies: 3489 3445 tslib: 2.8.1 3490 3446 optional: true 3491 3447 3492 - '@esbuild/aix-ppc64@0.25.4': 3448 + '@esbuild/aix-ppc64@0.24.0': 3493 3449 optional: true 3494 3450 3495 - '@esbuild/aix-ppc64@0.25.5': 3451 + '@esbuild/aix-ppc64@0.24.2': 3496 3452 optional: true 3497 3453 3498 - '@esbuild/android-arm64@0.25.4': 3454 + '@esbuild/android-arm64@0.24.0': 3499 3455 optional: true 3500 3456 3501 - '@esbuild/android-arm64@0.25.5': 3457 + '@esbuild/android-arm64@0.24.2': 3502 3458 optional: true 3503 3459 3504 - '@esbuild/android-arm@0.25.4': 3460 + '@esbuild/android-arm@0.24.0': 3505 3461 optional: true 3506 3462 3507 - '@esbuild/android-arm@0.25.5': 3463 + '@esbuild/android-arm@0.24.2': 3508 3464 optional: true 3509 3465 3510 - '@esbuild/android-x64@0.25.4': 3466 + '@esbuild/android-x64@0.24.0': 3511 3467 optional: true 3512 3468 3513 - '@esbuild/android-x64@0.25.5': 3469 + '@esbuild/android-x64@0.24.2': 3514 3470 optional: true 3515 3471 3516 - '@esbuild/darwin-arm64@0.25.4': 3472 + '@esbuild/darwin-arm64@0.24.0': 3517 3473 optional: true 3518 3474 3519 - '@esbuild/darwin-arm64@0.25.5': 3475 + '@esbuild/darwin-arm64@0.24.2': 3520 3476 optional: true 3521 3477 3522 - '@esbuild/darwin-x64@0.25.4': 3478 + '@esbuild/darwin-x64@0.24.0': 3523 3479 optional: true 3524 3480 3525 - '@esbuild/darwin-x64@0.25.5': 3481 + '@esbuild/darwin-x64@0.24.2': 3526 3482 optional: true 3527 3483 3528 - '@esbuild/freebsd-arm64@0.25.4': 3484 + '@esbuild/freebsd-arm64@0.24.0': 3529 3485 optional: true 3530 3486 3531 - '@esbuild/freebsd-arm64@0.25.5': 3487 + '@esbuild/freebsd-arm64@0.24.2': 3532 3488 optional: true 3533 3489 3534 - '@esbuild/freebsd-x64@0.25.4': 3490 + '@esbuild/freebsd-x64@0.24.0': 3535 3491 optional: true 3536 3492 3537 - '@esbuild/freebsd-x64@0.25.5': 3493 + '@esbuild/freebsd-x64@0.24.2': 3538 3494 optional: true 3539 3495 3540 - '@esbuild/linux-arm64@0.25.4': 3496 + '@esbuild/linux-arm64@0.24.0': 3541 3497 optional: true 3542 3498 3543 - '@esbuild/linux-arm64@0.25.5': 3499 + '@esbuild/linux-arm64@0.24.2': 3544 3500 optional: true 3545 3501 3546 - '@esbuild/linux-arm@0.25.4': 3502 + '@esbuild/linux-arm@0.24.0': 3547 3503 optional: true 3548 3504 3549 - '@esbuild/linux-arm@0.25.5': 3505 + '@esbuild/linux-arm@0.24.2': 3550 3506 optional: true 3551 3507 3552 - '@esbuild/linux-ia32@0.25.4': 3508 + '@esbuild/linux-ia32@0.24.0': 3553 3509 optional: true 3554 3510 3555 - '@esbuild/linux-ia32@0.25.5': 3511 + '@esbuild/linux-ia32@0.24.2': 3556 3512 optional: true 3557 3513 3558 - '@esbuild/linux-loong64@0.25.4': 3514 + '@esbuild/linux-loong64@0.24.0': 3559 3515 optional: true 3560 3516 3561 - '@esbuild/linux-loong64@0.25.5': 3517 + '@esbuild/linux-loong64@0.24.2': 3562 3518 optional: true 3563 3519 3564 - '@esbuild/linux-mips64el@0.25.4': 3520 + '@esbuild/linux-mips64el@0.24.0': 3565 3521 optional: true 3566 3522 3567 - '@esbuild/linux-mips64el@0.25.5': 3523 + '@esbuild/linux-mips64el@0.24.2': 3568 3524 optional: true 3569 3525 3570 - '@esbuild/linux-ppc64@0.25.4': 3526 + '@esbuild/linux-ppc64@0.24.0': 3571 3527 optional: true 3572 3528 3573 - '@esbuild/linux-ppc64@0.25.5': 3529 + '@esbuild/linux-ppc64@0.24.2': 3574 3530 optional: true 3575 3531 3576 - '@esbuild/linux-riscv64@0.25.4': 3532 + '@esbuild/linux-riscv64@0.24.0': 3577 3533 optional: true 3578 3534 3579 - '@esbuild/linux-riscv64@0.25.5': 3535 + '@esbuild/linux-riscv64@0.24.2': 3580 3536 optional: true 3581 3537 3582 - '@esbuild/linux-s390x@0.25.4': 3538 + '@esbuild/linux-s390x@0.24.0': 3583 3539 optional: true 3584 3540 3585 - '@esbuild/linux-s390x@0.25.5': 3541 + '@esbuild/linux-s390x@0.24.2': 3586 3542 optional: true 3587 3543 3588 - '@esbuild/linux-x64@0.25.4': 3544 + '@esbuild/linux-x64@0.24.0': 3589 3545 optional: true 3590 3546 3591 - '@esbuild/linux-x64@0.25.5': 3547 + '@esbuild/linux-x64@0.24.2': 3592 3548 optional: true 3593 3549 3594 - '@esbuild/netbsd-arm64@0.25.4': 3550 + '@esbuild/netbsd-arm64@0.24.2': 3595 3551 optional: true 3596 3552 3597 - '@esbuild/netbsd-arm64@0.25.5': 3553 + '@esbuild/netbsd-x64@0.24.0': 3598 3554 optional: true 3599 3555 3600 - '@esbuild/netbsd-x64@0.25.4': 3556 + '@esbuild/netbsd-x64@0.24.2': 3601 3557 optional: true 3602 3558 3603 - '@esbuild/netbsd-x64@0.25.5': 3559 + '@esbuild/openbsd-arm64@0.24.0': 3604 3560 optional: true 3605 3561 3606 - '@esbuild/openbsd-arm64@0.25.4': 3562 + '@esbuild/openbsd-arm64@0.24.2': 3607 3563 optional: true 3608 3564 3609 - '@esbuild/openbsd-arm64@0.25.5': 3565 + '@esbuild/openbsd-x64@0.24.0': 3610 3566 optional: true 3611 3567 3612 - '@esbuild/openbsd-x64@0.25.4': 3568 + '@esbuild/openbsd-x64@0.24.2': 3613 3569 optional: true 3614 3570 3615 - '@esbuild/openbsd-x64@0.25.5': 3571 + '@esbuild/sunos-x64@0.24.0': 3616 3572 optional: true 3617 3573 3618 - '@esbuild/sunos-x64@0.25.4': 3574 + '@esbuild/sunos-x64@0.24.2': 3619 3575 optional: true 3620 3576 3621 - '@esbuild/sunos-x64@0.25.5': 3577 + '@esbuild/win32-arm64@0.24.0': 3622 3578 optional: true 3623 3579 3624 - '@esbuild/win32-arm64@0.25.4': 3580 + '@esbuild/win32-arm64@0.24.2': 3625 3581 optional: true 3626 3582 3627 - '@esbuild/win32-arm64@0.25.5': 3583 + '@esbuild/win32-ia32@0.24.0': 3628 3584 optional: true 3629 3585 3630 - '@esbuild/win32-ia32@0.25.4': 3586 + '@esbuild/win32-ia32@0.24.2': 3631 3587 optional: true 3632 3588 3633 - '@esbuild/win32-ia32@0.25.5': 3589 + '@esbuild/win32-x64@0.24.0': 3634 3590 optional: true 3635 3591 3636 - '@esbuild/win32-x64@0.25.4': 3592 + '@esbuild/win32-x64@0.24.2': 3637 3593 optional: true 3638 3594 3639 - '@esbuild/win32-x64@0.25.5': 3640 - optional: true 3641 - 3642 - '@externdefs/solid-freeze@0.1.1(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))': 3595 + '@externdefs/solid-freeze@0.1.1(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))': 3643 3596 dependencies: 3644 - solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7) 3597 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 3645 3598 3646 - '@externdefs/solid-query@0.1.5(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))': 3599 + '@externdefs/solid-query@0.1.5(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))': 3647 3600 dependencies: 3648 3601 '@tanstack/query-core': 5.17.19(patch_hash=0b06407b66b7af88765fb6e01e112677a8c09ce518cb4f547cee8a0044471acd) 3649 - solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7) 3602 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 3650 3603 3651 3604 '@fastify/busboy@2.1.1': {} 3652 3605 3653 - '@floating-ui/core@1.7.0': 3606 + '@floating-ui/core@1.6.9': 3654 3607 dependencies: 3655 3608 '@floating-ui/utils': 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea) 3656 3609 3657 - '@floating-ui/dom@1.7.0': 3610 + '@floating-ui/dom@1.6.13': 3658 3611 dependencies: 3659 - '@floating-ui/core': 1.7.0 3612 + '@floating-ui/core': 1.6.9 3660 3613 '@floating-ui/utils': 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea) 3661 3614 3662 3615 '@floating-ui/utils@0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea)': {} ··· 3727 3680 3728 3681 '@img/sharp-wasm32@0.33.5': 3729 3682 dependencies: 3730 - '@emnapi/runtime': 1.4.3 3683 + '@emnapi/runtime': 1.4.0 3731 3684 optional: true 3732 3685 3733 3686 '@img/sharp-win32-ia32@0.33.5': ··· 3776 3729 3777 3730 '@jsr/mary__async-iterator-fns@0.1.1': {} 3778 3731 3779 - '@jsr/mary__batch-fetch@0.1.0': {} 3780 - 3781 3732 '@jsr/mary__date-fns@0.1.3': {} 3782 3733 3783 3734 '@jsr/mary__events@0.2.0': {} 3784 3735 3785 3736 '@jsr/mary__exif-rm@0.2.2': {} 3786 3737 3787 - '@kelinci/basa-lexicons@1.0.0': 3788 - dependencies: 3789 - '@atcute/lexicons': 1.0.4 3790 - 3791 3738 '@nodelib/fs.scandir@2.1.5': 3792 3739 dependencies: 3793 3740 '@nodelib/fs.stat': 2.0.5 ··· 3813 3760 '@pkgjs/parseargs@0.11.0': 3814 3761 optional: true 3815 3762 3816 - '@rollup/plugin-babel@5.3.1(@babel/core@7.27.3)(@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)': 3817 3764 dependencies: 3818 - '@babel/core': 7.27.3 3819 - '@babel/helper-module-imports': 7.27.1 3765 + '@babel/core': 7.26.10 3766 + '@babel/helper-module-imports': 7.25.9 3820 3767 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) 3821 3768 rollup: 2.79.2 3822 3769 optionalDependencies: ··· 3844 3791 dependencies: 3845 3792 serialize-javascript: 6.0.2 3846 3793 smob: 1.5.0 3847 - terser: 5.40.0 3794 + terser: 5.39.0 3848 3795 optionalDependencies: 3849 3796 rollup: 2.79.2 3850 3797 ··· 3863 3810 optionalDependencies: 3864 3811 rollup: 2.79.2 3865 3812 3866 - '@rollup/rollup-android-arm-eabi@4.41.1': 3813 + '@rollup/rollup-android-arm-eabi@4.37.0': 3867 3814 optional: true 3868 3815 3869 - '@rollup/rollup-android-arm64@4.41.1': 3816 + '@rollup/rollup-android-arm64@4.37.0': 3870 3817 optional: true 3871 3818 3872 - '@rollup/rollup-darwin-arm64@4.41.1': 3819 + '@rollup/rollup-darwin-arm64@4.37.0': 3873 3820 optional: true 3874 3821 3875 - '@rollup/rollup-darwin-x64@4.41.1': 3822 + '@rollup/rollup-darwin-x64@4.37.0': 3876 3823 optional: true 3877 3824 3878 - '@rollup/rollup-freebsd-arm64@4.41.1': 3825 + '@rollup/rollup-freebsd-arm64@4.37.0': 3879 3826 optional: true 3880 3827 3881 - '@rollup/rollup-freebsd-x64@4.41.1': 3828 + '@rollup/rollup-freebsd-x64@4.37.0': 3882 3829 optional: true 3883 3830 3884 - '@rollup/rollup-linux-arm-gnueabihf@4.41.1': 3831 + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 3885 3832 optional: true 3886 3833 3887 - '@rollup/rollup-linux-arm-musleabihf@4.41.1': 3834 + '@rollup/rollup-linux-arm-musleabihf@4.37.0': 3888 3835 optional: true 3889 3836 3890 - '@rollup/rollup-linux-arm64-gnu@4.41.1': 3837 + '@rollup/rollup-linux-arm64-gnu@4.37.0': 3891 3838 optional: true 3892 3839 3893 - '@rollup/rollup-linux-arm64-musl@4.41.1': 3840 + '@rollup/rollup-linux-arm64-musl@4.37.0': 3894 3841 optional: true 3895 3842 3896 - '@rollup/rollup-linux-loongarch64-gnu@4.41.1': 3843 + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 3897 3844 optional: true 3898 3845 3899 - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': 3846 + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 3900 3847 optional: true 3901 3848 3902 - '@rollup/rollup-linux-riscv64-gnu@4.41.1': 3849 + '@rollup/rollup-linux-riscv64-gnu@4.37.0': 3903 3850 optional: true 3904 3851 3905 - '@rollup/rollup-linux-riscv64-musl@4.41.1': 3852 + '@rollup/rollup-linux-riscv64-musl@4.37.0': 3906 3853 optional: true 3907 3854 3908 - '@rollup/rollup-linux-s390x-gnu@4.41.1': 3855 + '@rollup/rollup-linux-s390x-gnu@4.37.0': 3909 3856 optional: true 3910 3857 3911 - '@rollup/rollup-linux-x64-gnu@4.41.1': 3858 + '@rollup/rollup-linux-x64-gnu@4.37.0': 3912 3859 optional: true 3913 3860 3914 - '@rollup/rollup-linux-x64-musl@4.41.1': 3861 + '@rollup/rollup-linux-x64-musl@4.37.0': 3915 3862 optional: true 3916 3863 3917 - '@rollup/rollup-win32-arm64-msvc@4.41.1': 3864 + '@rollup/rollup-win32-arm64-msvc@4.37.0': 3918 3865 optional: true 3919 3866 3920 - '@rollup/rollup-win32-ia32-msvc@4.41.1': 3867 + '@rollup/rollup-win32-ia32-msvc@4.37.0': 3921 3868 optional: true 3922 3869 3923 - '@rollup/rollup-win32-x64-msvc@4.41.1': 3870 + '@rollup/rollup-win32-x64-msvc@4.37.0': 3924 3871 optional: true 3925 3872 3926 3873 '@surma/rollup-plugin-off-main-thread@2.2.3': ··· 3934 3881 3935 3882 '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)': 3936 3883 dependencies: 3937 - '@babel/generator': 7.27.3 3938 - '@babel/parser': 7.27.3 3939 - '@babel/traverse': 7.27.3 3940 - '@babel/types': 7.27.3 3884 + '@babel/generator': 7.27.0 3885 + '@babel/parser': 7.27.0 3886 + '@babel/traverse': 7.27.0 3887 + '@babel/types': 7.27.0 3941 3888 javascript-natural-sort: 0.7.1 3942 3889 lodash: 4.17.21 3943 3890 prettier: 3.5.3 ··· 3946 3893 3947 3894 '@types/babel__core@7.20.5': 3948 3895 dependencies: 3949 - '@babel/parser': 7.27.3 3950 - '@babel/types': 7.27.3 3951 - '@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 3952 3899 '@types/babel__template': 7.4.4 3953 3900 '@types/babel__traverse': 7.20.7 3954 3901 3955 - '@types/babel__generator@7.27.0': 3902 + '@types/babel__generator@7.6.8': 3956 3903 dependencies: 3957 - '@babel/types': 7.27.3 3904 + '@babel/types': 7.27.0 3958 3905 3959 3906 '@types/babel__template@7.4.4': 3960 3907 dependencies: 3961 - '@babel/parser': 7.27.3 3962 - '@babel/types': 7.27.3 3908 + '@babel/parser': 7.27.0 3909 + '@babel/types': 7.27.0 3963 3910 3964 3911 '@types/babel__traverse@7.20.7': 3965 3912 dependencies: 3966 - '@babel/types': 7.27.3 3913 + '@babel/types': 7.27.0 3967 3914 3968 3915 '@types/dom-close-watcher@1.0.0': {} 3969 3916 3970 - '@types/dom-webcodecs@0.1.15': {} 3917 + '@types/dom-webcodecs@0.1.14': {} 3971 3918 3972 3919 '@types/estree@0.0.39': {} 3973 3920 3921 + '@types/estree@1.0.6': {} 3922 + 3974 3923 '@types/estree@1.0.7': {} 3975 3924 3976 3925 '@types/resolve@1.20.2': {} ··· 4019 3968 4020 3969 at-least-node@1.0.0: {} 4021 3970 4022 - autoprefixer@10.4.21(postcss@8.5.4): 3971 + autoprefixer@10.4.21(postcss@8.5.3): 4023 3972 dependencies: 4024 - browserslist: 4.25.0 4025 - caniuse-lite: 1.0.30001720 3973 + browserslist: 4.24.4 3974 + caniuse-lite: 1.0.30001707 4026 3975 fraction.js: 4.3.7 4027 3976 normalize-range: 0.1.2 4028 3977 picocolors: 1.1.1 4029 - postcss: 8.5.4 3978 + postcss: 8.5.3 4030 3979 postcss-value-parser: 4.2.0 4031 3980 4032 - babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.27.3): 3981 + babel-plugin-jsx-dom-expressions@0.39.7(@babel/core@7.26.10): 4033 3982 dependencies: 4034 - '@babel/core': 7.27.3 3983 + '@babel/core': 7.26.10 4035 3984 '@babel/helper-module-imports': 7.18.6 4036 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.3) 4037 - '@babel/types': 7.27.3 3985 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) 3986 + '@babel/types': 7.27.0 4038 3987 html-entities: 2.3.3 4039 - parse5: 7.3.0 3988 + parse5: 7.2.1 4040 3989 validate-html-nesting: 1.2.2 4041 3990 4042 - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.3): 3991 + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10): 4043 3992 dependencies: 4044 - '@babel/compat-data': 7.27.3 4045 - '@babel/core': 7.27.3 4046 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.3) 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) 4047 3996 semver: 6.3.1 4048 3997 transitivePeerDependencies: 4049 3998 - supports-color 4050 3999 4051 - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.3): 4000 + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10): 4052 4001 dependencies: 4053 - '@babel/core': 7.27.3 4054 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.3) 4055 - 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 4056 4005 transitivePeerDependencies: 4057 4006 - supports-color 4058 4007 4059 - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.3): 4008 + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10): 4060 4009 dependencies: 4061 - '@babel/core': 7.27.3 4062 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.3) 4010 + '@babel/core': 7.26.10 4011 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) 4063 4012 transitivePeerDependencies: 4064 4013 - supports-color 4065 4014 4066 - babel-plugin-transform-typescript-const-enums@0.1.0(@babel/core@7.27.3): 4015 + babel-plugin-transform-typescript-const-enums@0.1.0(@babel/core@7.26.10): 4067 4016 dependencies: 4068 - '@babel/core': 7.27.3 4069 - '@babel/helper-plugin-utils': 7.27.1 4070 - '@babel/types': 7.27.3 4017 + '@babel/core': 7.26.10 4018 + '@babel/helper-plugin-utils': 7.26.5 4019 + '@babel/types': 7.27.0 4071 4020 4072 - babel-preset-solid@1.9.6(@babel/core@7.27.3): 4021 + babel-preset-solid@1.9.5(@babel/core@7.26.10): 4073 4022 dependencies: 4074 - '@babel/core': 7.27.3 4075 - babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.27.3) 4023 + '@babel/core': 7.26.10 4024 + babel-plugin-jsx-dom-expressions: 0.39.7(@babel/core@7.26.10) 4076 4025 4077 4026 balanced-match@1.0.2: {} 4078 4027 ··· 4095 4044 dependencies: 4096 4045 fill-range: 7.1.1 4097 4046 4098 - browserslist@4.25.0: 4047 + browserslist@4.24.4: 4099 4048 dependencies: 4100 - caniuse-lite: 1.0.30001720 4101 - electron-to-chromium: 1.5.161 4049 + caniuse-lite: 1.0.30001707 4050 + electron-to-chromium: 1.5.128 4102 4051 node-releases: 2.0.19 4103 - update-browserslist-db: 1.1.3(browserslist@4.25.0) 4052 + update-browserslist-db: 1.1.3(browserslist@4.24.4) 4104 4053 4105 4054 buffer-from@1.1.2: {} 4106 4055 4107 4056 camelcase-css@2.0.1: {} 4108 4057 4109 - caniuse-lite@1.0.30001720: {} 4058 + caniuse-lite@1.0.30001707: {} 4110 4059 4111 4060 chalk@4.1.2: 4112 4061 dependencies: ··· 4135 4084 dependencies: 4136 4085 color-name: 1.1.4 4137 4086 simple-swizzle: 0.2.2 4087 + optional: true 4138 4088 4139 4089 color@4.2.3: 4140 4090 dependencies: 4141 4091 color-convert: 2.0.1 4142 4092 color-string: 1.9.1 4093 + optional: true 4143 4094 4144 4095 comlink@4.4.2: {} 4145 4096 ··· 4153 4104 4154 4105 convert-source-map@2.0.0: {} 4155 4106 4156 - cookie@0.7.2: {} 4107 + cookie@0.5.0: {} 4157 4108 4158 - core-js-compat@3.42.0: 4109 + core-js-compat@3.41.0: 4159 4110 dependencies: 4160 - browserslist: 4.25.0 4111 + browserslist: 4.24.4 4161 4112 4162 4113 cross-spawn@7.0.6: 4163 4114 dependencies: ··· 4173 4124 4174 4125 data-uri-to-buffer@2.0.2: {} 4175 4126 4176 - debug@4.4.1: 4127 + debug@4.4.0: 4177 4128 dependencies: 4178 4129 ms: 2.1.3 4179 4130 ··· 4181 4132 4182 4133 defu@6.1.4: {} 4183 4134 4184 - detect-libc@2.0.4: {} 4135 + detect-libc@2.0.3: 4136 + optional: true 4185 4137 4186 4138 didyoumean@1.2.2: {} 4187 4139 ··· 4193 4145 dependencies: 4194 4146 jake: 10.9.2 4195 4147 4196 - electron-to-chromium@1.5.161: {} 4148 + electron-to-chromium@1.5.128: {} 4197 4149 4198 4150 emoji-regex@8.0.0: {} 4199 4151 4200 4152 emoji-regex@9.2.2: {} 4201 4153 4202 - entities@6.0.0: {} 4154 + entities@4.5.0: {} 4203 4155 4204 - esbuild@0.25.4: 4156 + esbuild@0.24.0: 4205 4157 optionalDependencies: 4206 - '@esbuild/aix-ppc64': 0.25.4 4207 - '@esbuild/android-arm': 0.25.4 4208 - '@esbuild/android-arm64': 0.25.4 4209 - '@esbuild/android-x64': 0.25.4 4210 - '@esbuild/darwin-arm64': 0.25.4 4211 - '@esbuild/darwin-x64': 0.25.4 4212 - '@esbuild/freebsd-arm64': 0.25.4 4213 - '@esbuild/freebsd-x64': 0.25.4 4214 - '@esbuild/linux-arm': 0.25.4 4215 - '@esbuild/linux-arm64': 0.25.4 4216 - '@esbuild/linux-ia32': 0.25.4 4217 - '@esbuild/linux-loong64': 0.25.4 4218 - '@esbuild/linux-mips64el': 0.25.4 4219 - '@esbuild/linux-ppc64': 0.25.4 4220 - '@esbuild/linux-riscv64': 0.25.4 4221 - '@esbuild/linux-s390x': 0.25.4 4222 - '@esbuild/linux-x64': 0.25.4 4223 - '@esbuild/netbsd-arm64': 0.25.4 4224 - '@esbuild/netbsd-x64': 0.25.4 4225 - '@esbuild/openbsd-arm64': 0.25.4 4226 - '@esbuild/openbsd-x64': 0.25.4 4227 - '@esbuild/sunos-x64': 0.25.4 4228 - '@esbuild/win32-arm64': 0.25.4 4229 - '@esbuild/win32-ia32': 0.25.4 4230 - '@esbuild/win32-x64': 0.25.4 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 4231 4182 4232 - esbuild@0.25.5: 4183 + esbuild@0.24.2: 4233 4184 optionalDependencies: 4234 - '@esbuild/aix-ppc64': 0.25.5 4235 - '@esbuild/android-arm': 0.25.5 4236 - '@esbuild/android-arm64': 0.25.5 4237 - '@esbuild/android-x64': 0.25.5 4238 - '@esbuild/darwin-arm64': 0.25.5 4239 - '@esbuild/darwin-x64': 0.25.5 4240 - '@esbuild/freebsd-arm64': 0.25.5 4241 - '@esbuild/freebsd-x64': 0.25.5 4242 - '@esbuild/linux-arm': 0.25.5 4243 - '@esbuild/linux-arm64': 0.25.5 4244 - '@esbuild/linux-ia32': 0.25.5 4245 - '@esbuild/linux-loong64': 0.25.5 4246 - '@esbuild/linux-mips64el': 0.25.5 4247 - '@esbuild/linux-ppc64': 0.25.5 4248 - '@esbuild/linux-riscv64': 0.25.5 4249 - '@esbuild/linux-s390x': 0.25.5 4250 - '@esbuild/linux-x64': 0.25.5 4251 - '@esbuild/netbsd-arm64': 0.25.5 4252 - '@esbuild/netbsd-x64': 0.25.5 4253 - '@esbuild/openbsd-arm64': 0.25.5 4254 - '@esbuild/openbsd-x64': 0.25.5 4255 - '@esbuild/sunos-x64': 0.25.5 4256 - '@esbuild/win32-arm64': 0.25.5 4257 - '@esbuild/win32-ia32': 0.25.5 4258 - '@esbuild/win32-x64': 0.25.5 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 4259 4210 4260 4211 escalade@3.2.0: {} 4261 - 4262 - esm-env@1.2.2: {} 4263 4212 4264 4213 estree-walker@1.0.1: {} 4265 4214 ··· 4269 4218 4270 4219 exit-hook@2.2.1: {} 4271 4220 4272 - exsolve@1.0.5: {} 4221 + exsolve@1.0.4: {} 4273 4222 4274 4223 fast-deep-equal@3.1.3: {} 4275 4224 ··· 4289 4238 dependencies: 4290 4239 reusify: 1.1.0 4291 4240 4292 - fdir@6.4.5(picomatch@4.0.2): 4241 + fdir@6.4.3(picomatch@4.0.2): 4293 4242 optionalDependencies: 4294 4243 picomatch: 4.0.2 4295 4244 ··· 4363 4312 4364 4313 has-flag@4.0.0: {} 4365 4314 4366 - hls.js@1.6.2: {} 4315 + hls.js@1.6.0: {} 4367 4316 4368 4317 html-entities@2.3.3: {} 4369 4318 4370 4319 idb@7.1.1: {} 4371 4320 4372 - idb@8.0.3: {} 4321 + idb@8.0.2: {} 4373 4322 4374 4323 inflight@1.0.6: 4375 4324 dependencies: ··· 4378 4327 4379 4328 inherits@2.0.4: {} 4380 4329 4381 - is-arrayish@0.3.2: {} 4330 + is-arrayish@0.3.2: 4331 + optional: true 4382 4332 4383 4333 is-binary-path@2.1.0: 4384 4334 dependencies: ··· 4478 4428 4479 4429 mime@3.0.0: {} 4480 4430 4481 - miniflare@4.20250525.0: 4431 + miniflare@4.20250321.1: 4482 4432 dependencies: 4483 4433 '@cspotcode/source-map-support': 0.8.1 4484 4434 acorn: 8.14.0 4485 4435 acorn-walk: 8.3.2 4486 4436 exit-hook: 2.2.1 4487 4437 glob-to-regexp: 0.4.1 4488 - sharp: 0.33.5 4489 4438 stoppable: 1.1.0 4490 4439 undici: 5.29.0 4491 - workerd: 1.20250525.0 4440 + workerd: 1.20250321.0 4492 4441 ws: 8.18.0 4493 - youch: 3.3.4 4442 + youch: 3.2.3 4494 4443 zod: 3.22.3 4495 4444 transitivePeerDependencies: 4496 4445 - bufferutil ··· 4542 4491 4543 4492 package-json-from-dist@1.0.1: {} 4544 4493 4545 - parse5@7.3.0: 4494 + parse5@7.2.1: 4546 4495 dependencies: 4547 - entities: 6.0.0 4496 + entities: 4.5.0 4548 4497 4549 4498 path-is-absolute@1.0.1: {} 4550 4499 ··· 4571 4520 4572 4521 pirates@4.0.7: {} 4573 4522 4574 - postcss-import@15.1.0(postcss@8.5.4): 4523 + postcss-import@15.1.0(postcss@8.5.3): 4575 4524 dependencies: 4576 - postcss: 8.5.4 4525 + postcss: 8.5.3 4577 4526 postcss-value-parser: 4.2.0 4578 4527 read-cache: 1.0.0 4579 4528 resolve: 1.22.10 4580 4529 4581 - postcss-js@4.0.1(postcss@8.5.4): 4530 + postcss-js@4.0.1(postcss@8.5.3): 4582 4531 dependencies: 4583 4532 camelcase-css: 2.0.1 4584 - postcss: 8.5.4 4533 + postcss: 8.5.3 4585 4534 4586 - postcss-load-config@4.0.2(postcss@8.5.4): 4535 + postcss-load-config@4.0.2(postcss@8.5.3): 4587 4536 dependencies: 4588 4537 lilconfig: 3.1.3 4589 - yaml: 2.8.0 4538 + yaml: 2.7.0 4590 4539 optionalDependencies: 4591 - postcss: 8.5.4 4540 + postcss: 8.5.3 4592 4541 4593 - postcss-nested@6.2.0(postcss@8.5.4): 4542 + postcss-nested@6.2.0(postcss@8.5.3): 4594 4543 dependencies: 4595 - postcss: 8.5.4 4544 + postcss: 8.5.3 4596 4545 postcss-selector-parser: 6.1.2 4597 4546 4598 4547 postcss-selector-parser@6.1.2: ··· 4602 4551 4603 4552 postcss-value-parser@4.2.0: {} 4604 4553 4605 - postcss@8.5.4: 4554 + postcss@8.5.3: 4606 4555 dependencies: 4607 4556 nanoid: 3.3.11 4608 4557 picocolors: 1.1.1 ··· 4645 4594 regenerate: 1.4.2 4646 4595 4647 4596 regenerate@1.4.2: {} 4597 + 4598 + regenerator-runtime@0.14.1: {} 4599 + 4600 + regenerator-transform@0.15.2: 4601 + dependencies: 4602 + '@babel/runtime': 7.27.0 4648 4603 4649 4604 regexpu-core@6.2.0: 4650 4605 dependencies: ··· 4675 4630 optionalDependencies: 4676 4631 fsevents: 2.3.3 4677 4632 4678 - rollup@4.41.1: 4633 + rollup@4.37.0: 4679 4634 dependencies: 4680 - '@types/estree': 1.0.7 4635 + '@types/estree': 1.0.6 4681 4636 optionalDependencies: 4682 - '@rollup/rollup-android-arm-eabi': 4.41.1 4683 - '@rollup/rollup-android-arm64': 4.41.1 4684 - '@rollup/rollup-darwin-arm64': 4.41.1 4685 - '@rollup/rollup-darwin-x64': 4.41.1 4686 - '@rollup/rollup-freebsd-arm64': 4.41.1 4687 - '@rollup/rollup-freebsd-x64': 4.41.1 4688 - '@rollup/rollup-linux-arm-gnueabihf': 4.41.1 4689 - '@rollup/rollup-linux-arm-musleabihf': 4.41.1 4690 - '@rollup/rollup-linux-arm64-gnu': 4.41.1 4691 - '@rollup/rollup-linux-arm64-musl': 4.41.1 4692 - '@rollup/rollup-linux-loongarch64-gnu': 4.41.1 4693 - '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1 4694 - '@rollup/rollup-linux-riscv64-gnu': 4.41.1 4695 - '@rollup/rollup-linux-riscv64-musl': 4.41.1 4696 - '@rollup/rollup-linux-s390x-gnu': 4.41.1 4697 - '@rollup/rollup-linux-x64-gnu': 4.41.1 4698 - '@rollup/rollup-linux-x64-musl': 4.41.1 4699 - '@rollup/rollup-win32-arm64-msvc': 4.41.1 4700 - '@rollup/rollup-win32-ia32-msvc': 4.41.1 4701 - '@rollup/rollup-win32-x64-msvc': 4.41.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 4702 4657 fsevents: 2.3.3 4703 4658 4704 4659 run-parallel@1.2.0: ··· 4707 4662 4708 4663 semver@6.3.1: {} 4709 4664 4710 - semver@7.7.2: {} 4665 + semver@7.7.1: 4666 + optional: true 4711 4667 4712 4668 serialize-javascript@6.0.2: 4713 4669 dependencies: 4714 4670 randombytes: 2.1.0 4715 4671 4716 - seroval-plugins@1.3.2(seroval@1.3.2): 4672 + seroval-plugins@1.2.1(seroval@1.2.1): 4717 4673 dependencies: 4718 - seroval: 1.3.2 4674 + seroval: 1.2.1 4719 4675 4720 - seroval@1.3.2: {} 4676 + seroval@1.2.1: {} 4721 4677 4722 4678 sharp@0.33.5: 4723 4679 dependencies: 4724 4680 color: 4.2.3 4725 - detect-libc: 2.0.4 4726 - semver: 7.7.2 4681 + detect-libc: 2.0.3 4682 + semver: 7.7.1 4727 4683 optionalDependencies: 4728 4684 '@img/sharp-darwin-arm64': 0.33.5 4729 4685 '@img/sharp-darwin-x64': 0.33.5 ··· 4744 4700 '@img/sharp-wasm32': 0.33.5 4745 4701 '@img/sharp-win32-ia32': 0.33.5 4746 4702 '@img/sharp-win32-x64': 0.33.5 4703 + optional: true 4747 4704 4748 4705 shebang-command@2.0.0: 4749 4706 dependencies: ··· 4756 4713 simple-swizzle@0.2.2: 4757 4714 dependencies: 4758 4715 is-arrayish: 0.3.2 4716 + optional: true 4759 4717 4760 4718 smob@1.5.0: {} 4761 4719 4762 - solid-floating-ui@0.2.1(@floating-ui/dom@1.7.0)(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)): 4720 + solid-floating-ui@0.2.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)): 4763 4721 dependencies: 4764 - '@floating-ui/dom': 1.7.0 4765 - solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7) 4722 + '@floating-ui/dom': 1.6.13 4723 + solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c) 4766 4724 4767 - solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7): 4725 + solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c): 4768 4726 dependencies: 4769 4727 csstype: 3.1.3 4770 - seroval: 1.3.2 4771 - seroval-plugins: 1.3.2(seroval@1.3.2) 4728 + seroval: 1.2.1 4729 + seroval-plugins: 1.2.1(seroval@1.2.1) 4772 4730 4773 - solid-refresh@0.6.3(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)): 4731 + solid-refresh@0.6.3(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)): 4774 4732 dependencies: 4775 - '@babel/generator': 7.27.3 4776 - '@babel/helper-module-imports': 7.27.1 4777 - '@babel/types': 7.27.3 4778 - solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7) 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) 4779 4737 transitivePeerDependencies: 4780 4738 - supports-color 4781 4739 ··· 4861 4819 normalize-path: 3.0.0 4862 4820 object-hash: 3.0.0 4863 4821 picocolors: 1.1.1 4864 - postcss: 8.5.4 4865 - postcss-import: 15.1.0(postcss@8.5.4) 4866 - postcss-js: 4.0.1(postcss@8.5.4) 4867 - postcss-load-config: 4.0.2(postcss@8.5.4) 4868 - postcss-nested: 6.2.0(postcss@8.5.4) 4822 + postcss: 8.5.3 4823 + postcss-import: 15.1.0(postcss@8.5.3) 4824 + postcss-js: 4.0.1(postcss@8.5.3) 4825 + postcss-load-config: 4.0.2(postcss@8.5.3) 4826 + postcss-nested: 6.2.0(postcss@8.5.3) 4869 4827 postcss-selector-parser: 6.1.2 4870 4828 resolve: 1.22.10 4871 4829 sucrase: 3.35.0 ··· 4881 4839 type-fest: 0.16.0 4882 4840 unique-string: 2.0.0 4883 4841 4884 - terser@5.40.0: 4842 + terser@5.39.0: 4885 4843 dependencies: 4886 4844 '@jridgewell/source-map': 0.3.6 4887 4845 acorn: 8.14.1 ··· 4896 4854 dependencies: 4897 4855 any-promise: 1.3.0 4898 4856 4899 - tinyglobby@0.2.14: 4857 + tinyglobby@0.2.12: 4900 4858 dependencies: 4901 - fdir: 6.4.5(picomatch@4.0.2) 4859 + fdir: 6.4.3(picomatch@4.0.2) 4902 4860 picomatch: 4.0.2 4903 4861 4904 4862 to-regex-range@5.0.1: ··· 4916 4874 4917 4875 type-fest@0.16.0: {} 4918 4876 4919 - typescript@5.8.3: {} 4877 + typescript@5.7.2: {} 4920 4878 4921 - ufo@1.6.1: {} 4879 + ufo@1.5.4: {} 4922 4880 4923 4881 undici@5.29.0: 4924 4882 dependencies: 4925 4883 '@fastify/busboy': 2.1.1 4926 4884 4927 - unenv@2.0.0-rc.17: 4885 + unenv@2.0.0-rc.15: 4928 4886 dependencies: 4929 4887 defu: 6.1.4 4930 - exsolve: 1.0.5 4888 + exsolve: 1.0.4 4931 4889 ohash: 2.0.11 4932 4890 pathe: 2.0.3 4933 - ufo: 1.6.1 4891 + ufo: 1.5.4 4934 4892 4935 4893 unicode-canonical-property-names-ecmascript@2.0.1: {} 4936 4894 ··· 4951 4909 4952 4910 upath@1.2.0: {} 4953 4911 4954 - update-browserslist-db@1.1.3(browserslist@4.25.0): 4912 + update-browserslist-db@1.1.3(browserslist@4.24.4): 4955 4913 dependencies: 4956 - browserslist: 4.25.0 4914 + browserslist: 4.24.4 4957 4915 escalade: 3.2.0 4958 4916 picocolors: 1.1.1 4959 4917 ··· 4961 4919 4962 4920 validate-html-nesting@1.2.2: {} 4963 4921 4964 - vite-plugin-pwa@0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0)): 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)): 4965 4923 dependencies: 4966 - debug: 4.4.1 4924 + debug: 4.4.0 4967 4925 pretty-bytes: 6.1.1 4968 - tinyglobby: 0.2.14 4969 - vite: 6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0) 4926 + tinyglobby: 0.2.12 4927 + vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0) 4970 4928 workbox-build: 7.3.0(@types/babel__core@7.20.5) 4971 4929 workbox-window: 7.3.0 4972 4930 transitivePeerDependencies: 4973 4931 - '@types/babel__core' 4974 4932 - supports-color 4975 4933 4976 - vite-plugin-solid@2.11.6(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))(vite@6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0)): 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)): 4977 4935 dependencies: 4978 - '@babel/core': 7.27.3 4936 + '@babel/core': 7.26.10 4979 4937 '@types/babel__core': 7.20.5 4980 - babel-preset-solid: 1.9.6(@babel/core@7.27.3) 4938 + babel-preset-solid: 1.9.5(@babel/core@7.26.10) 4981 4939 merge-anything: 5.1.7 4982 - solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7) 4983 - solid-refresh: 0.6.3(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)) 4984 - vite: 6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0) 4985 - vitefu: 1.0.6(vite@6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0)) 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)) 4986 4944 transitivePeerDependencies: 4987 4945 - supports-color 4988 4946 4989 - vite@6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0): 4947 + vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0): 4990 4948 dependencies: 4991 - esbuild: 0.25.5 4992 - fdir: 6.4.5(picomatch@4.0.2) 4993 - picomatch: 4.0.2 4994 - postcss: 8.5.4 4995 - rollup: 4.41.1 4996 - tinyglobby: 0.2.14 4949 + esbuild: 0.24.0 4950 + postcss: 8.5.3 4951 + rollup: 4.37.0 4997 4952 optionalDependencies: 4998 4953 fsevents: 2.3.3 4999 4954 jiti: 1.21.7 5000 - terser: 5.40.0 5001 - yaml: 2.8.0 4955 + terser: 5.39.0 4956 + yaml: 2.7.0 5002 4957 5003 - vitefu@1.0.6(vite@6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0)): 4958 + vitefu@1.0.6(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)): 5004 4959 optionalDependencies: 5005 - vite: 6.3.5(jiti@1.21.7)(terser@5.40.0)(yaml@2.8.0) 4960 + vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0) 5006 4961 5007 4962 webidl-conversions@4.0.2: {} 5008 4963 5009 - webm-muxer@5.1.2: 4964 + webm-muxer@5.1.1: 5010 4965 dependencies: 5011 - '@types/dom-webcodecs': 0.1.15 4966 + '@types/dom-webcodecs': 0.1.14 5012 4967 '@types/wicg-file-system-access': 2020.9.8 5013 4968 5014 4969 whatwg-url@7.1.0: ··· 5033 4988 workbox-build@7.3.0(@types/babel__core@7.20.5): 5034 4989 dependencies: 5035 4990 '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) 5036 - '@babel/core': 7.27.3 5037 - '@babel/preset-env': 7.27.2(@babel/core@7.27.3) 5038 - '@babel/runtime': 7.27.3 5039 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.3)(@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) 5040 4995 '@rollup/plugin-node-resolve': 15.3.1(rollup@2.79.2) 5041 4996 '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) 5042 4997 '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) ··· 5134 5089 '@types/trusted-types': 2.0.7 5135 5090 workbox-core: 7.3.0 5136 5091 5137 - workerd@1.20250525.0: 5092 + workerd@1.20250321.0: 5138 5093 optionalDependencies: 5139 - '@cloudflare/workerd-darwin-64': 1.20250525.0 5140 - '@cloudflare/workerd-darwin-arm64': 1.20250525.0 5141 - '@cloudflare/workerd-linux-64': 1.20250525.0 5142 - '@cloudflare/workerd-linux-arm64': 1.20250525.0 5143 - '@cloudflare/workerd-windows-64': 1.20250525.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 5144 5099 5145 - wrangler@4.18.0: 5100 + wrangler@4.6.0: 5146 5101 dependencies: 5147 5102 '@cloudflare/kv-asset-handler': 0.4.0 5148 - '@cloudflare/unenv-preset': 2.3.2(unenv@2.0.0-rc.17)(workerd@1.20250525.0) 5103 + '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0) 5149 5104 blake3-wasm: 2.1.5 5150 - esbuild: 0.25.4 5151 - miniflare: 4.20250525.0 5105 + esbuild: 0.24.2 5106 + miniflare: 4.20250321.1 5152 5107 path-to-regexp: 6.3.0 5153 - unenv: 2.0.0-rc.17 5154 - workerd: 1.20250525.0 5108 + unenv: 2.0.0-rc.15 5109 + workerd: 1.20250321.0 5155 5110 optionalDependencies: 5156 5111 fsevents: 2.3.3 5112 + sharp: 0.33.5 5157 5113 transitivePeerDependencies: 5158 5114 - bufferutil 5159 5115 - utf-8-validate ··· 5176 5132 5177 5133 yallist@3.1.1: {} 5178 5134 5179 - yaml@2.8.0: {} 5135 + yaml@2.7.0: {} 5180 5136 5181 - youch@3.3.4: 5137 + youch@3.2.3: 5182 5138 dependencies: 5183 - cookie: 0.7.2 5139 + cookie: 0.5.0 5184 5140 mustache: 4.2.0 5185 5141 stacktracey: 2.1.8 5186 5142
+1 -1
src/api/cache/post-shadow.ts
··· 1 1 import { type Accessor, batch, createRenderEffect, createSignal, onCleanup } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 import { EventEmitter } from '@mary/events'; 5 5 import type { QueryClient } from '@mary/solid-query'; 6 6
+4 -5
src/api/cache/profile-shadow.ts
··· 1 1 import { type Accessor, batch, createRenderEffect, createSignal, onCleanup } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 4 - import type { Did } from '@atcute/lexicons'; 3 + import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 5 4 import { EventEmitter } from '@mary/events'; 6 5 import type { QueryClient } from '@mary/solid-query'; 7 6 ··· 34 33 | AppBskyActorDefs.ProfileViewBasic 35 34 | AppBskyActorDefs.ProfileViewDetailed; 36 35 37 - const emitter = new EventEmitter<{ [uri: Did]: [] }>(); 36 + const emitter = new EventEmitter<{ [uri: At.DID]: [] }>(); 38 37 const shadows = new WeakMap<AllProfileView, ProfileShadow>(); 39 38 40 39 export const useProfileShadow = (profile: AccessorMaybe<AllProfileView>): Accessor<ProfileShadowView> => { ··· 67 66 }; 68 67 }; 69 68 70 - export const updateProfileShadow = (queryClient: QueryClient, did: Did, value: Partial<ProfileShadow>) => { 69 + export const updateProfileShadow = (queryClient: QueryClient, did: At.DID, value: Partial<ProfileShadow>) => { 71 70 for (const profile of findProfilesInCache(queryClient, did)) { 72 71 shadows.set(profile, { ...shadows.get(profile), ...value }); 73 72 } ··· 75 74 batch(() => emitter.emit(did)); 76 75 }; 77 76 78 - export function findProfilesInCache(queryClient: QueryClient, did: Did): Generator<AllProfileView> { 77 + export function findProfilesInCache(queryClient: QueryClient, did: At.DID): Generator<AllProfileView> { 79 78 return iterateQueryCache<AllProfileView>(queryClient, [ 80 79 findAllProfilesInBookmarkFeed(did), 81 80 findAllProfilesInNotificationFeed(did),
+14 -7
src/api/models/post-thread.tsx
··· 1 - import type { AppBskyFeedDefs, AppBskyFeedGetPostThread, AppBskyFeedPost } from '@atcute/bluesky'; 2 - import type { $type, Did } from '@atcute/lexicons'; 1 + import type { 2 + AppBskyFeedDefs, 3 + AppBskyFeedGetPostThread, 4 + AppBskyFeedPost, 5 + At, 6 + Brand, 7 + } from '@atcute/client/lexicons'; 3 8 4 9 import type { ThreadViewPreferences } from '~/lib/preferences/account'; 5 10 ··· 64 69 export interface PostDescendantItem extends BaseDescendant { 65 70 type: 'post'; 66 71 post: AppBskyFeedDefs.PostView; 72 + context: AppBskyFeedDefs.ThreadContext | undefined; 67 73 prev: boolean; 68 74 next: boolean; 69 75 } ··· 82 88 83 89 export const fillModerationCache = ( 84 90 cache: ThreadModerationCache, 85 - thread: AppBskyFeedGetPostThread.$output['thread'], 91 + thread: AppBskyFeedGetPostThread.Output['thread'], 86 92 options: ModerationOptions, 87 93 ) => { 88 94 if (thread.$type === 'app.bsky.feed.defs#threadViewPost') { ··· 111 117 moderationOptions, 112 118 selfDid, 113 119 }: { 114 - thread: $type.enforce<AppBskyFeedDefs.ThreadViewPost>; 120 + thread: Brand.Union<AppBskyFeedDefs.ThreadViewPost>; 115 121 preferences: ThreadViewPreferences; 116 122 moderationOptions: ModerationOptions; 117 - selfDid?: Did; 123 + selfDid?: At.DID; 118 124 }): ThreadData => { 119 125 const { followsFirst, sort, treeView } = preferences; 120 126 ··· 161 167 162 168 if (last && last.type === 'post') { 163 169 const post = last.post; 164 - const reply = (post.record as AppBskyFeedPost.Main).reply; 170 + const reply = (post.record as AppBskyFeedPost.Record).reply; 165 171 166 172 if (reply) { 167 173 const uri = reply.parent.uri; ··· 200 206 201 207 // Filter the replies to only what we want 202 208 const items = replies.filter( 203 - (x): x is $type.enforce<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost> => { 209 + (x): x is Brand.Union<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost> => { 204 210 return ( 205 211 x.$type === 'app.bsky.feed.defs#threadViewPost' || 206 212 (x.$type === 'app.bsky.feed.defs#blockedPost' && !x.author.viewer?.blockedBy) ··· 324 330 id: post.uri, 325 331 type: 'post', 326 332 post: post, 333 + context: reply.threadContext, 327 334 prev: depth !== 0, 328 335 next: children.length !== 0, 329 336 lines: nlines,
+1 -1
src/api/models/timeline.ts
··· 1 - import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/bluesky'; 1 + import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 3 3 type Post = AppBskyFeedDefs.PostView; 4 4 type TimelineItem = AppBskyFeedDefs.FeedViewPost;
+2 -3
src/api/moderation/entities/generic.ts
··· 1 - import type { ComAtprotoLabelDefs } from '@atcute/atproto'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { At, ComAtprotoLabelDefs } from '@atcute/client/lexicons'; 3 2 4 3 import { type ModerationCause, type ModerationOptions, decideLabelModeration } from '..'; 5 4 import { TargetContent } from '../constants'; 6 5 7 6 export const moderateGeneric = ( 8 7 item: { labels?: ComAtprotoLabelDefs.Label[] }, 9 - userDid: Did, 8 + userDid: At.DID, 10 9 opts: ModerationOptions, 11 10 ) => { 12 11 const accu: ModerationCause[] = [];
+2 -2
src/api/moderation/entities/post.ts
··· 1 - import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons'; 2 2 3 3 import { unwrapPostEmbedText } from '~/api/utils/post'; 4 4 ··· 14 14 15 15 export const moderatePost = (post: AppBskyFeedDefs.PostView, opts: ModerationOptions) => { 16 16 const author = post.author; 17 - const record = post.record as AppBskyFeedPost.Main; 17 + const record = post.record as AppBskyFeedPost.Record; 18 18 const text = record.text + unwrapPostEmbedText(record.embed); 19 19 20 20 const accu: ModerationCause[] = moderateProfile(author, opts);
+1 -1
src/api/moderation/entities/profile.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 2 2 3 3 import { 4 4 type ModerationCause,
+2 -2
src/api/moderation/entities/quote.ts
··· 1 - import type { AppBskyEmbedRecord, AppBskyFeedPost } from '@atcute/bluesky'; 1 + import type { AppBskyEmbedRecord, AppBskyFeedPost } from '@atcute/client/lexicons'; 2 2 3 3 import { unwrapPostEmbedText } from '~/api/utils/post'; 4 4 ··· 14 14 15 15 export const moderateQuote = (quote: AppBskyEmbedRecord.ViewRecord, opts: ModerationOptions) => { 16 16 const author = quote.author; 17 - const record = quote.value as AppBskyFeedPost.Main; 17 + const record = quote.value as AppBskyFeedPost.Record; 18 18 const text = record.text + unwrapPostEmbedText(record.embed); 19 19 20 20 const accu: ModerationCause[] = moderateProfile(author, opts);
+6 -7
src/api/moderation/index.ts
··· 1 - import type { ComAtprotoLabelDefs } from '@atcute/atproto'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { At, ComAtprotoLabelDefs } from '@atcute/client/lexicons'; 3 2 4 3 import { 5 4 BlurContent, ··· 281 280 282 281 export interface ModerationLabeler { 283 282 /** DID of the labeler */ 284 - did: Did; 283 + did: At.DID; 285 284 /** Profile details of the labeler */ 286 285 profile: { 287 286 avatar?: string; ··· 310 309 /** Preferences for global-defined labels */ 311 310 labels: LabelPreferenceMapping; 312 311 /** Preferences for labels from subscribed labelers */ 313 - labelers: Record<Did, ModerationLabelerPreferences>; 312 + labelers: Record<At.DID, ModerationLabelerPreferences>; 314 313 /** Keyword filters */ 315 314 keywords: KeywordFilter[]; 316 315 317 316 /** List of users to hide reposts from */ 318 - hideReposts: Did[]; 317 + hideReposts: At.DID[]; 319 318 } 320 319 321 320 export interface ModerationOptions { 322 321 _filtersCache?: [raw: string, match: RegExp][]; 323 322 324 323 preferences: ModerationPreferences; 325 - labelerDefinitions: Record<Did, ModerationLabeler>; 324 + labelerDefinitions: Record<At.DID, ModerationLabeler>; 326 325 } 327 326 328 327 export const decideLabelModeration = ( 329 328 accu: ModerationCause[], 330 329 target: LabelTarget, 331 330 labels: Label[] | undefined, 332 - userDid: Did, 331 + userDid: At.DID, 333 332 opts: ModerationOptions, 334 333 ) => { 335 334 if (labels /* && labels.length > 0 */) {
+1 -1
src/api/moderation/labeler.ts
··· 1 - import type { AppBskyLabelerDefs } from '@atcute/bluesky'; 1 + import type { AppBskyLabelerDefs } from '@atcute/client/lexicons'; 2 2 import { mapDefined } from '@mary/array-fns'; 3 3 4 4 import type { LabelDefinitionMapping, ModerationLabeler } from '.';
+10 -10
src/api/mutations/post.ts
··· 1 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 import { useQueryClient } from '@mary/solid-query'; 3 3 4 4 import { useAgent } from '~/lib/states/agent'; 5 5 import { useSession } from '~/lib/states/session'; 6 6 7 7 import { type PostShadowView, updatePostShadow } from '../cache/post-shadow'; 8 - import { assertCanonicalResourceUri } 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 = assertCanonicalResourceUri(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 = assertCanonicalResourceUri(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,
+6 -6
src/api/mutations/profile.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 2 2 import { useQueryClient } from '@mary/solid-query'; 3 3 4 4 import { useAgent } from '~/lib/states/agent'; 5 5 import { useSession } from '~/lib/states/session'; 6 6 7 7 import { type ProfileShadowView, updateProfileShadow } from '../cache/profile-shadow'; 8 - import { assertCanonicalResourceUri } 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 = assertCanonicalResourceUri(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,
+4 -9
src/api/queries/blob.ts
··· 1 - import { type Client, ok } from '@atcute/client'; 2 - import type { Blob as AtpBlob } from '@atcute/lexicons'; 1 + import type { XRPC } from '@atcute/client'; 2 + import type { At } from '@atcute/client/lexicons'; 3 3 4 - export const uploadBlob = async (client: Client, blob: Blob): Promise<AtpBlob<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 };
+8 -11
src/api/queries/bookmark-feed.ts
··· 1 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 2 1 import { tokenize } from '@atcute/bluesky-search-parser'; 3 - import { ok } from '@atcute/client'; 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'; 6 5 import { createInfiniteQuery, createQuery } from '@mary/solid-query'; ··· 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 { GenericUri } from '@atcute/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: 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 GenericUri, 59 + uri: $uri, 61 60 title: data.title, 62 61 description: data.description, 63 62 thumb: thumb,
+12 -16
src/api/queries/feed.ts
··· 1 1 import { modifyMutable, reconcile } from 'solid-js/store'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 4 - import { ok } from '@atcute/client'; 5 - import { type Did } from '@atcute/lexicons'; 3 + import type { AppBskyFeedDefs, At } from '@atcute/client/lexicons'; 6 4 import { createQuery } from '@mary/solid-query'; 7 5 8 6 import type { SavedGeneratorFeed } from '~/lib/preferences/account'; ··· 10 8 import { useSession } from '~/lib/states/session'; 11 9 import { omit } from '~/lib/utils/misc'; 12 10 13 - import { assertCanonicalResourceUri, makeAtUri } from '../types/at-uri'; 11 + import { makeAtUri, parseAtUri } from '../types/at-uri'; 14 12 import { isDid } from '../types/identity'; 15 13 16 14 import { resolveHandle } from './handle'; 17 15 18 16 export const createFeedMetaQuery = (feedUri: () => string) => { 19 - const { client } = useAgent(); 17 + const { rpc } = useAgent(); 20 18 const { currentAccount } = useSession(); 21 19 22 20 return createQuery((queryClient) => { ··· 25 23 return { 26 24 queryKey: ['feed-meta', $feedUri], 27 25 async queryFn(ctx): Promise<AppBskyFeedDefs.GeneratorView> { 28 - const uri = assertCanonicalResourceUri($feedUri); 26 + const uri = parseAtUri($feedUri); 29 27 30 - let did: Did; 28 + let did: At.DID; 31 29 if (isDid(uri.repo)) { 32 30 did = uri.repo; 33 31 } else { 34 - did = await resolveHandle(client, uri.repo, ctx.signal); 32 + did = await resolveHandle(rpc, uri.repo, ctx.signal); 35 33 } 36 34 37 - const data = await ok( 38 - client.get('app.bsky.feed.getFeedGenerator', { 39 - signal: ctx.signal, 40 - params: { 41 - feed: makeAtUri(did, uri.collection, uri.rkey), 42 - }, 43 - }), 44 - ); 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 + }); 45 41 46 42 if (currentAccount) { 47 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 { Handle } from '@atcute/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: () => 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: 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 };
+14 -17
src/api/queries/labeler.ts
··· 1 - import type { AppBskyLabelerDefs } from '@atcute/bluesky'; 2 - import { ClientResponseError, ok } from '@atcute/client'; 3 - import type { Did } from '@atcute/lexicons'; 1 + import { XRPCError } from '@atcute/client'; 2 + import type { AppBskyLabelerDefs, At } from '@atcute/client/lexicons'; 4 3 import { createQuery } from '@mary/solid-query'; 5 4 6 5 import { useAgent } from '~/lib/states/agent'; 7 6 8 7 import { interpretLabelerDefinition } from '../moderation/labeler'; 9 8 10 - export const createLabelerMetaQuery = (did: () => Did) => { 11 - const { client } = useAgent(); 9 + export const createLabelerMetaQuery = (did: () => At.DID) => { 10 + const { rpc } = useAgent(); 12 11 13 12 const query = createQuery(() => { 14 13 const $did = did(); ··· 16 15 return { 17 16 queryKey: ['labeler-definition', $did], 18 17 async queryFn(ctx) { 19 - const data = await ok( 20 - client.get('app.bsky.labeler.getServices', { 21 - signal: ctx.signal, 22 - params: { 23 - dids: [$did], 24 - detailed: true, 25 - }, 26 - }), 27 - ); 18 + const { data } = await rpc.get('app.bsky.labeler.getServices', { 19 + signal: ctx.signal, 20 + params: { 21 + dids: [$did], 22 + detailed: true, 23 + }, 24 + }); 28 25 29 26 const service = data.views[0] as AppBskyLabelerDefs.LabelerViewDetailed; 30 27 31 28 if (!service) { 32 - throw new ClientResponseError({ 33 - status: 400, 34 - data: { error: `NotFound`, message: `Labeler not found: ${$did}` }, 29 + throw new XRPCError(400, { 30 + kind: 'NotFound', 31 + description: `Labeler not found: ${$did}`, 35 32 }); 36 33 } 37 34
+10 -14
src/api/queries/list-members.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { ResourceUri } from '@atcute/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: () => 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,
+13 -17
src/api/queries/list.ts
··· 1 1 import { modifyMutable, reconcile } from 'solid-js/store'; 2 2 3 - import type { AppBskyGraphDefs } from '@atcute/bluesky'; 4 - import { ok } from '@atcute/client'; 5 - import { type Did } from '@atcute/lexicons'; 3 + import type { AppBskyGraphDefs, At } from '@atcute/client/lexicons'; 6 4 import { createQuery } from '@mary/solid-query'; 7 5 8 6 import type { SavedListFeed } from '~/lib/preferences/account'; ··· 10 8 import { useSession } from '~/lib/states/session'; 11 9 import { omit } from '~/lib/utils/misc'; 12 10 13 - import { assertCanonicalResourceUri, makeAtUri } from '../types/at-uri'; 11 + import { makeAtUri, parseAtUri } from '../types/at-uri'; 14 12 import { isDid } from '../types/identity'; 15 13 16 14 import { resolveHandle } from './handle'; 17 15 18 16 export const createListMetaQuery = (listUri: () => string) => { 19 - const { client } = useAgent(); 17 + const { rpc } = useAgent(); 20 18 const { currentAccount } = useSession(); 21 19 22 20 return createQuery((queryClient) => { ··· 25 23 return { 26 24 queryKey: ['list-meta', $listUri], 27 25 async queryFn(ctx) { 28 - const uri = assertCanonicalResourceUri($listUri); 26 + const uri = parseAtUri($listUri); 29 27 30 - let did: Did; 28 + let did: At.DID; 31 29 if (isDid(uri.repo)) { 32 30 did = uri.repo; 33 31 } else { 34 - did = await resolveHandle(client, uri.repo, ctx.signal); 32 + did = await resolveHandle(rpc, uri.repo, ctx.signal); 35 33 } 36 34 37 - const data = await ok( 38 - client.get('app.bsky.graph.getList', { 39 - signal: ctx.signal, 40 - params: { 41 - list: makeAtUri(did, uri.collection, uri.rkey), 42 - limit: 1, 43 - }, 44 - }), 45 - ); 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 + }); 46 42 47 43 if (currentAccount) { 48 44 const found = currentAccount.preferences.feeds.find((item): item is SavedListFeed => {
+24 -31
src/api/queries/my-lists.ts
··· 1 - import type { AppBskyGraphDefs } from '@atcute/bluesky'; 2 - import { ok } from '@atcute/client'; 1 + import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 3 2 import { createQuery } from '@mary/solid-query'; 4 3 5 4 import { useAgent } from '~/lib/states/agent'; ··· 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 },
+22 -33
src/api/queries/notification-feed.tsx
··· 1 1 import { createSignal } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs, AppBskyNotificationListNotifications } from '@atcute/bluesky'; 4 - import { ok } from '@atcute/client'; 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 { assertCanonicalResourceUri } 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 - assertCanonicalResourceUri(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,
+12 -16
src/api/queries/post-quotes.ts
··· 1 - import type { AppBskyFeedGetQuotes } from '@atcute/bluesky'; 2 - import { ok } from '@atcute/client'; 3 - import type { ResourceUri } from '@atcute/lexicons'; 1 + import type { AppBskyFeedGetQuotes } from '@atcute/client/lexicons'; 4 2 import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 5 3 6 4 import { useAgent } from '~/lib/states/agent'; 7 5 8 - export const createPostQuotesQuery = (uri: () => ResourceUri) => { 9 - const { client } = useAgent(); 6 + export const createPostQuotesQuery = (uri: () => string) => { 7 + const { rpc } = useAgent(); 10 8 11 9 return createInfiniteQuery(() => { 12 10 const $uri = uri(); ··· 14 12 return { 15 13 queryKey: ['post-quotes', $uri], 16 14 structuralSharing: false, 17 - async queryFn(ctx: QC<never, string | undefined>): Promise<AppBskyFeedGetQuotes.$output> { 18 - const data = await ok( 19 - client.get('app.bsky.feed.getQuotes', { 20 - signal: ctx.signal, 21 - params: { 22 - uri: $uri, 23 - limit: 50, 24 - cursor: ctx.pageParam, 25 - }, 26 - }), 27 - ); 15 + async queryFn(ctx: QC<never, string | undefined>): Promise<AppBskyFeedGetQuotes.Output> { 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 + }); 28 24 29 25 return data; 30 26 },
+17 -23
src/api/queries/post-thread.ts
··· 1 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 2 - import { ClientResponseError, ok } from '@atcute/client'; 3 - import type { $type, ResourceUri } from '@atcute/lexicons'; 1 + import { XRPCError } from '@atcute/client'; 2 + import type { AppBskyFeedDefs, Brand } from '@atcute/client/lexicons'; 4 3 import { createQuery } from '@mary/solid-query'; 5 4 6 5 import { useAgent } from '~/lib/states/agent'; ··· 10 9 const MAX_HEIGHT = 10; 11 10 const MAX_DEPTH = 4; 12 11 13 - type ThreadReturn = $type.enforce<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost>; 12 + type ThreadReturn = Brand.Union<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost>; 14 13 15 - export const usePostThreadQuery = (uri: () => ResourceUri) => { 16 - const { client } = useAgent(); 14 + export const usePostThreadQuery = (uri: () => string) => { 15 + const { rpc } = useAgent(); 17 16 18 17 return createQuery((queryClient) => { 19 18 const $uri = uri(); ··· 22 21 queryKey: ['post-thread', $uri], 23 22 structuralSharing: false, 24 23 async queryFn(ctx): Promise<ThreadReturn> { 25 - const data = await ok( 26 - client.get('app.bsky.feed.getPostThread', { 27 - signal: ctx.signal, 28 - params: { 29 - uri: $uri, 30 - depth: MAX_DEPTH, 31 - parentHeight: MAX_HEIGHT, 32 - }, 33 - }), 34 - ); 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 + }); 35 32 36 33 const thread = data.thread; 37 34 38 35 if (thread.$type === 'app.bsky.feed.defs#notFoundPost') { 39 - throw new ClientResponseError({ 40 - status: 400, 41 - data: { 42 - error: `NotFound`, 43 - message: `Post not found: ${$uri}`, 44 - }, 36 + throw new XRPCError(400, { 37 + kind: 'NotFound', 38 + description: `Post not found: ${$uri}`, 45 39 }); 46 40 } 47 41 ··· 57 51 // Break if either: 58 52 // - This isn't a quote embed transformed into a post view 59 53 // - We've went through 10 post views 60 - if (!('$transform' in post) || ++step >= 10) { 54 + if (!('$transform' in found) || ++step >= 10) { 61 55 break; 62 56 } 63 57 }
+12 -15
src/api/queries/post.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import { type Did } from '@atcute/lexicons'; 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 { assertCanonicalResourceUri, makeAtUri } 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 = assertCanonicalResourceUri($postUri); 21 + const uri = parseAtUri($postUri); 23 22 24 - let did: 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 { ActorIdentifier } from '@atcute/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: () => ActorIdentifier) => { 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 -15
src/api/queries/profile-followers.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 2 - import { ok } from '@atcute/client'; 3 - import type { ActorIdentifier } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 2 import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 5 3 6 4 import { useAgent } from '~/lib/states/agent'; 7 5 8 6 import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response'; 9 7 10 - export const createProfileFollowersQuery = (didOrHandle: () => ActorIdentifier) => { 11 - const { client } = useAgent(); 8 + export const createProfileFollowersQuery = (didOrHandle: () => string) => { 9 + const { rpc } = useAgent(); 12 10 13 11 return createInfiniteQuery((queryClient) => { 14 12 const $didOrHandle = didOrHandle(); ··· 16 14 return { 17 15 queryKey: ['profile-followers', $didOrHandle], 18 16 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> { 19 - const data = await ok( 20 - client.get('app.bsky.graph.getFollowers', { 21 - signal: ctx.signal, 22 - params: { 23 - actor: $didOrHandle, 24 - limit: 50, 25 - cursor: ctx.pageParam, 26 - }, 27 - }), 28 - ); 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 + }); 29 25 30 26 return toProfilesListWithSubjectPage(data, 'followers'); 31 27 },
+11 -15
src/api/queries/profile-following.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 2 - import { ok } from '@atcute/client'; 3 - import type { ActorIdentifier } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 2 import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 5 3 6 4 import { useAgent } from '~/lib/states/agent'; 7 5 8 6 import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response'; 9 7 10 - export const createProfileFollowingQuery = (didOrHandle: () => ActorIdentifier) => { 11 - const { client } = useAgent(); 8 + export const createProfileFollowingQuery = (didOrHandle: () => string) => { 9 + const { rpc } = useAgent(); 12 10 13 11 return createInfiniteQuery((queryClient) => { 14 12 const $didOrHandle = didOrHandle(); ··· 16 14 return { 17 15 queryKey: ['profile-following', $didOrHandle], 18 16 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> { 19 - const data = await ok( 20 - client.get('app.bsky.graph.getFollows', { 21 - signal: ctx.signal, 22 - params: { 23 - actor: $didOrHandle, 24 - limit: 50, 25 - cursor: ctx.pageParam, 26 - }, 27 - }), 28 - ); 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 + }); 29 25 30 26 return toProfilesListWithSubjectPage(data, 'follows'); 31 27 },
+11 -15
src/api/queries/profile-known-followers.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 2 - import { ok } from '@atcute/client'; 3 - import type { ActorIdentifier } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 2 import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query'; 5 3 6 4 import { useAgent } from '~/lib/states/agent'; 7 5 8 6 import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response'; 9 7 10 - export const createProfileKnownFollowersQuery = (didOrHandle: () => ActorIdentifier) => { 11 - const { client } = useAgent(); 8 + export const createProfileKnownFollowersQuery = (didOrHandle: () => string) => { 9 + const { rpc } = useAgent(); 12 10 13 11 return createInfiniteQuery((queryClient) => { 14 12 const $didOrHandle = didOrHandle(); ··· 16 14 return { 17 15 queryKey: ['profile-known-followers', $didOrHandle], 18 16 async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> { 19 - const data = await ok( 20 - client.get('app.bsky.graph.getKnownFollowers', { 21 - signal: ctx.signal, 22 - params: { 23 - actor: $didOrHandle, 24 - limit: 50, 25 - cursor: ctx.pageParam, 26 - }, 27 - }), 28 - ); 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 + }); 29 25 30 26 return toProfilesListWithSubjectPage(data, 'followers'); 31 27 },
+10 -14
src/api/queries/profile-lists.ts
··· 1 - import { ok } from '@atcute/client'; 2 - import type { ActorIdentifier } from '@atcute/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: () => ActorIdentifier) => { 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;
+18 -14
src/api/queries/profile.ts
··· 1 1 import { modifyMutable, reconcile } from 'solid-js/store'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 4 - import { ok } from '@atcute/client'; 5 - import type { ActorIdentifier } from '@atcute/lexicons'; 3 + import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 6 4 import { createQuery } from '@mary/solid-query'; 7 5 8 6 import { useAgent } from '~/lib/states/agent'; 9 7 import { useSession } from '~/lib/states/session'; 10 8 9 + import { findProfilesInCache } from '../cache/profile-shadow'; 11 10 import { dequal } from '../utils/dequal'; 12 11 13 12 export interface ProfileQueryOptions { ··· 15 14 gcTime?: number; 16 15 } 17 16 18 - export const createProfileQuery = (didOrHandle: () => ActorIdentifier, opts: ProfileQueryOptions = {}) => { 19 - const { client } = useAgent(); 17 + export const createProfileQuery = (didOrHandle: () => string, opts: ProfileQueryOptions = {}) => { 18 + const { rpc } = useAgent(); 20 19 const { currentAccount } = useSession(); 21 20 22 21 return createQuery((queryClient) => { ··· 27 26 staleTime: opts.staleTime, 28 27 gcTime: opts.gcTime, 29 28 async queryFn(ctx): Promise<AppBskyActorDefs.ProfileViewDetailed> { 30 - const data = await ok( 31 - client.get('app.bsky.actor.getProfile', { 32 - signal: ctx.signal, 33 - params: { 34 - actor: $didOrHandle!, 35 - }, 36 - }), 37 - ); 29 + const { data } = await rpc.get('app.bsky.actor.getProfile', { 30 + signal: ctx.signal, 31 + params: { 32 + actor: $didOrHandle!, 33 + }, 34 + }); 38 35 39 36 if (currentAccount !== undefined && currentAccount.did === data.did) { 40 37 // Unset `knownFollowers` as we don't need that on our own profile. ··· 54 51 return data; 55 52 }, 56 53 placeholderData(): AppBskyActorDefs.ProfileViewDetailed | undefined { 57 - 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 + } 58 62 }, 59 63 initialData(): AppBskyActorDefs.ProfileViewDetailed | undefined { 60 64 if (currentAccount !== undefined && currentAccount.did === $didOrHandle) {
+11 -14
src/api/queries/search-feeds.ts
··· 1 - import type { AppBskyUnspeccedGetPopularFeedGenerators } from '@atcute/bluesky'; 2 - import { ok } from '@atcute/client'; 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(); ··· 14 13 queryKey: ['search-feeds', q], 15 14 async queryFn( 16 15 ctx: QC<never, string | undefined>, 17 - ): 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 - ); 16 + ): Promise<AppBskyUnspeccedGetPopularFeedGenerators.Output> { 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 { ResourceUri } from '@atcute/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: () => 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 { ResourceUri } from '@atcute/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: () => 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 },
+82 -98
src/api/queries/timeline.ts
··· 1 1 import { createEffect, createMemo, createRenderEffect, onCleanup, untrack } from 'solid-js'; 2 2 3 - import { 4 - type AppBskyFeedDefs, 5 - type AppBskyFeedGetTimeline, 6 - type AppBskyFeedPost, 7 - unwrapRawRecordEmbed, 8 - unwrapRecordEmbed, 9 - } from '@atcute/bluesky'; 10 - import { type Client, ok } from '@atcute/client'; 11 - import { type Did, type ResourceUri } from '@atcute/lexicons'; 3 + import type { XRPC } from '@atcute/client'; 4 + import type { AppBskyFeedDefs, AppBskyFeedGetTimeline, AppBskyFeedPost, At } from '@atcute/client/lexicons'; 12 5 import { type FalsyValue, definite } from '@mary/array-fns'; 13 6 import { type InfiniteData, createInfiniteQuery, createQuery, useQueryClient } from '@mary/solid-query'; 14 7 ··· 38 31 getModerationUI, 39 32 } from '../moderation'; 40 33 import { ContextContentList, PreferenceHide, TargetContent } from '../moderation/constants'; 41 - import { assertCanonicalResourceUri } from '../types/at-uri'; 34 + import { parseAtUri } from '../types/at-uri'; 35 + import { unwrapRecordEmbed } from '../utils/bluesky/embed'; 36 + import { unwrapRecordEmbedView } from '../utils/bluesky/embed-view'; 42 37 import { EQUALS_DEQUAL } from '../utils/dequal'; 43 38 import { unwrapPostEmbedText } from '../utils/post'; 44 39 import { resetInfiniteData, wrapQuery } from '../utils/query'; 45 40 46 - type PostRecord = AppBskyFeedPost.Main; 41 + type PostRecord = AppBskyFeedPost.Record; 47 42 48 43 export interface FollowingTimelineParams { 49 44 type: 'following'; ··· 54 49 55 50 export interface FeedTimelineParams { 56 51 type: 'feed'; 57 - uri: ResourceUri; 52 + uri: string; 58 53 showReplies: boolean; 59 54 showReposts: boolean; 60 55 showQuotes: boolean; ··· 62 57 63 58 export interface ListTimelineParams { 64 59 type: 'list'; 65 - uri: ResourceUri; 60 + uri: string; 66 61 showReplies: boolean; 67 62 showQuotes: boolean; 68 63 } 69 64 70 65 export interface ProfileTimelineParams { 71 66 type: 'profile'; 72 - actor: Did; 67 + actor: At.DID; 73 68 tab: 'posts' | 'replies' | 'likes' | 'media'; 74 69 } 75 70 ··· 131 126 export const useTimelineQuery = (_params: () => TimelineParams) => { 132 127 const getParams = createMemo(() => _params(), EQUALS_DEQUAL); 133 128 134 - const { client } = useAgent(); 129 + const { rpc } = useAgent(); 135 130 const { currentAccount } = useSession(); 136 131 const queryClient = useQueryClient(); 137 132 ··· 200 195 postFilter = createLabelPostFilter(moderation); 201 196 } 202 197 203 - const timeline = await fetchPage(client, params, limit, cursor, ctx.signal); 198 + const timeline = await fetchPage(rpc, params, limit, cursor, ctx.signal); 204 199 205 200 const feed = timeline.feed; 206 201 const newCursor = timeline.cursor; ··· 243 238 // const offset = params.type !== 'profile' ? timelineData!.pages[0].pinAmount : 0; 244 239 const offset = timelineData!.pages[0].pinAmount; 245 240 246 - const timeline = await fetchPage(client, params, offset + 1, undefined, ctx.signal); 241 + const timeline = await fetchPage(rpc, params, offset + 1, undefined, ctx.signal); 247 242 const feed = timeline.feed; 248 243 249 244 return { hash: getTimelineHash(feed) }; ··· 313 308 314 309 //// Raw fetch 315 310 const fetchPage = async ( 316 - client: Client, 311 + rpc: XRPC, 317 312 params: TimelineParams, 318 313 limit: number, 319 314 cursor: string | undefined, 320 315 signal: AbortSignal, 321 - ): Promise<AppBskyFeedGetTimeline.$output> => { 316 + ): Promise<AppBskyFeedGetTimeline.Output> => { 322 317 const type = params.type; 323 318 324 319 if (type === 'following') { 325 - const data = await ok( 326 - client.get('app.bsky.feed.getTimeline', { 327 - signal: signal, 328 - params: { 329 - algorithm: 'reverse-chronological', 330 - cursor: cursor, 331 - limit: limit, 332 - }, 333 - }), 334 - ); 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 + }); 335 328 336 - return data; 329 + return response.data; 337 330 } else if (type === 'feed') { 338 - const data = await ok( 339 - client.get('app.bsky.feed.getFeed', { 340 - signal: signal, 341 - headers: { 342 - 'accent-language': navigator.languages.join(','), 343 - }, 344 - params: { 345 - feed: params.uri, 346 - cursor: cursor, 347 - limit: limit, 348 - }, 349 - }), 350 - ); 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; 351 344 352 345 return { 353 346 // Discover feed, wooo. ··· 355 348 feed: data.feed, 356 349 }; 357 350 } else if (type === 'list') { 358 - const data = await ok( 359 - 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', { 360 364 signal: signal, 361 365 params: { 362 - list: params.uri, 366 + actor: params.actor, 363 367 cursor: cursor, 364 368 limit: limit, 365 369 }, 366 - }), 367 - ); 370 + }); 368 371 369 - return data; 370 - } else if (type === 'profile') { 371 - if (params.tab === 'likes') { 372 - const data = await ok( 373 - client.get('app.bsky.feed.getActorLikes', { 374 - signal: signal, 375 - params: { 376 - actor: params.actor, 377 - cursor: cursor, 378 - limit: limit, 379 - }, 380 - }), 381 - ); 382 - 383 - return data; 372 + return response.data; 384 373 } else { 385 - const data = await ok( 386 - client.get('app.bsky.feed.getAuthorFeed', { 387 - signal: signal, 388 - params: { 389 - actor: params.actor, 390 - cursor: cursor, 391 - limit: limit, 392 - includePins: params.tab !== 'media', 393 - filter: 394 - params.tab === 'media' 395 - ? 'posts_with_media' 396 - : params.tab === 'replies' 397 - ? 'posts_with_replies' 398 - : 'posts_and_author_threads', 399 - }, 400 - }), 401 - ); 402 - 403 - return data; 404 - } 405 - } else if (type === 'search') { 406 - const data = await ok( 407 - client.get('app.bsky.feed.searchPosts', { 374 + const response = await rpc.get('app.bsky.feed.getAuthorFeed', { 408 375 signal: signal, 409 376 params: { 410 - sort: params.sort, 411 - q: params.query, 377 + actor: params.actor, 412 378 cursor: cursor, 413 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', 414 387 }, 415 - }), 416 - ); 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; 417 404 418 405 return { cursor: data.cursor, feed: data.posts.map((view) => ({ post: view })) }; 419 406 } else { ··· 537 524 const createHideQuotesFilter = (): PostFilter => { 538 525 return (item) => { 539 526 const post = item.post.record as PostRecord; 540 - const record = unwrapRawRecordEmbed(post.embed); 527 + const record = unwrapRecordEmbed(post.embed); 541 528 542 - return ( 543 - record === undefined || 544 - assertCanonicalResourceUri(record.record.uri).collection === 'app.bsky.feed.post' 545 - ); 529 + return record === undefined || parseAtUri(record.record.uri).collection === 'app.bsky.feed.post'; 546 530 }; 547 531 }; 548 532 549 533 const createHideQuotesFromMutedFilter = (): PostFilter => { 550 534 return (item) => { 551 535 const post = item.post; 552 - const record = unwrapRecordEmbed(post.embed); 536 + const record = unwrapRecordEmbedView(post.embed); 553 537 554 538 return ( 555 539 record === undefined || ··· 591 575 }; 592 576 }; 593 577 594 - const createHomeSliceFilter = (uid: Did, followsOnly: boolean): SliceFilter | undefined => { 578 + const createHomeSliceFilter = (uid: At.DID, followsOnly: boolean): SliceFilter | undefined => { 595 579 return (slice) => { 596 580 const items = slice.items; 597 581 const first = items[0]; ··· 623 607 }; 624 608 }; 625 609 626 - const createProfileSliceFilter = (did: Did): SliceFilter | undefined => { 610 + const createProfileSliceFilter = (did: At.DID): SliceFilter | undefined => { 627 611 return (slice) => { 628 612 const items = slice.items; 629 613 const first = items[0];
+2 -3
src/api/queries-cache/bookmark-feed.ts
··· 1 - import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs, AppBskyFeedDefs, At } from '@atcute/client/lexicons'; 3 2 import type { InfiniteData } from '@mary/solid-query'; 4 3 5 4 import type { CacheMatcher } from '../cache/utils'; ··· 36 35 }; 37 36 }; 38 37 39 - export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 38 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 40 39 return { 41 40 filter: { 42 41 queryKey: ['bookmarks-feed'],
+1 -1
src/api/queries-cache/feed-precache.ts
··· 1 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 import type { QueryClient } from '@mary/solid-query'; 3 3 4 4 export const precacheFeed = (queryClient: QueryClient, feed: AppBskyFeedDefs.GeneratorView) => {
+1 -1
src/api/queries-cache/list-precache.ts
··· 1 - import type { AppBskyGraphDefs } from '@atcute/bluesky'; 1 + import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 2 2 import type { QueryClient } from '@mary/solid-query'; 3 3 4 4 export const precacheList = (
+2 -3
src/api/queries-cache/notification-feed.ts
··· 1 - import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs, AppBskyFeedDefs, At } from '@atcute/client/lexicons'; 3 2 import type { InfiniteData } from '@mary/solid-query'; 4 3 5 4 import type { CacheMatcher } from '../cache/utils'; ··· 39 38 }; 40 39 41 40 export const findAllProfiles = ( 42 - did: Did, 41 + did: At.DID, 43 42 ): CacheMatcher<AppBskyActorDefs.ProfileViewBasic | AppBskyActorDefs.ProfileView> => { 44 43 return { 45 44 filter: {
+2 -2
src/api/queries-cache/post-quotes.ts
··· 1 - import type { AppBskyFeedDefs, AppBskyFeedGetQuotes } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs, AppBskyFeedGetQuotes } from '@atcute/client/lexicons'; 2 2 import type { InfiniteData } from '@mary/solid-query'; 3 3 4 4 import type { CacheMatcher } from '../cache/utils'; ··· 9 9 filter: { 10 10 queryKey: ['post-quotes'], 11 11 }, 12 - *iterate(data: InfiniteData<AppBskyFeedGetQuotes.$output>) { 12 + *iterate(data: InfiniteData<AppBskyFeedGetQuotes.Output>) { 13 13 for (const page of data.pages) { 14 14 for (const post of page.posts) { 15 15 if (post.uri === uri) {
+12 -8
src/api/queries-cache/post-thread.ts
··· 1 - import type { AppBskyActorDefs, AppBskyFeedDefs, AppBskyFeedGetPostThread } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { 2 + AppBskyActorDefs, 3 + AppBskyFeedDefs, 4 + AppBskyFeedGetPostThread, 5 + At, 6 + } from '@atcute/client/lexicons'; 3 7 4 8 import type { CacheMatcher } from '../cache/utils'; 5 9 import { embedViewRecordToPostView, getEmbeddedPost } from '../utils/post'; 6 10 7 - type Thread = AppBskyFeedGetPostThread.$output['thread']; 8 - 9 - function* traverseThread(node: Thread): Generator<AppBskyFeedDefs.ThreadViewPost> { 11 + function* traverseThread( 12 + node: AppBskyFeedGetPostThread.Output['thread'], 13 + ): Generator<AppBskyFeedDefs.ThreadViewPost> { 10 14 if (node.$type === 'app.bsky.feed.defs#threadViewPost') { 11 15 const parent = node.parent; 12 16 const replies = node.replies; ··· 31 35 filter: { 32 36 queryKey: ['post-thread'], 33 37 }, 34 - *iterate(data: Thread) { 38 + *iterate(data: AppBskyFeedGetPostThread.Output['thread']) { 35 39 for (const thread of traverseThread(data)) { 36 40 const post = thread.post; 37 41 ··· 50 54 }; 51 55 }; 52 56 53 - export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 57 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 54 58 return { 55 59 filter: { 56 60 queryKey: ['post-thread'], 57 61 }, 58 - *iterate(data: Thread) { 62 + *iterate(data: AppBskyFeedGetPostThread.Output['thread']) { 59 63 for (const thread of traverseThread(data)) { 60 64 const post = thread.post; 61 65
+3 -4
src/api/queries-cache/profile-autocomplete.ts
··· 1 - import type { AppBskyActorDefs, AppBskyActorSearchActorsTypeahead } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs, AppBskyActorSearchActorsTypeahead, At } from '@atcute/client/lexicons'; 3 2 4 3 import type { CacheMatcher } from '../cache/utils'; 5 4 6 - export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 5 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 7 6 return { 8 7 filter: { 9 8 queryKey: ['profile-autocomplete'], 10 9 }, 11 - *iterate(data: AppBskyActorSearchActorsTypeahead.$output) { 10 + *iterate(data: AppBskyActorSearchActorsTypeahead.Output) { 12 11 for (const profile of data.actors) { 13 12 if (profile.did === did) { 14 13 yield profile;
+2 -3
src/api/queries-cache/profile-list.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 3 2 import type { InfiniteData } from '@mary/solid-query'; 4 3 5 4 import type { CacheMatcher } from '../cache/utils'; 6 5 import type { ProfilesListPage, ProfilesListWithSubjectPage } from '../types/profile-response'; 7 6 8 - export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileView> => { 7 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileView> => { 9 8 return { 10 9 filter: [ 11 10 { queryKey: ['profile-followers'] },
+1 -1
src/api/queries-cache/profile-precache.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 2 2 import type { QueryClient } from '@mary/solid-query'; 3 3 4 4 export const precacheProfile = (
+2 -3
src/api/queries-cache/profile.ts
··· 1 - import { AppBskyActorDefs } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 3 2 4 3 import type { CacheMatcher } from '../cache/utils'; 5 4 6 - export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewDetailed> => { 5 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewDetailed> => { 7 6 return { 8 7 filter: { 9 8 queryKey: ['profile', did],
+2 -3
src/api/queries-cache/timeline.ts
··· 1 - import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs, AppBskyFeedDefs, At } from '@atcute/client/lexicons'; 3 2 import type { InfiniteData } from '@mary/solid-query'; 4 3 5 4 import type { CacheMatcher } from '../cache/utils'; ··· 64 63 }; 65 64 }; 66 65 67 - export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 66 + export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => { 68 67 return { 69 68 filter: { 70 69 queryKey: ['timeline'],
+21 -21
src/api/types/at-uri.ts
··· 1 - import { 2 - type ActorIdentifier, 3 - type Nsid, 4 - type ParsedCanonicalResourceUri, 5 - type RecordKey, 6 - type ResourceUri, 7 - parseCanonicalResourceUri, 8 - } from '@atcute/lexicons'; 9 - import type { Records } from '@atcute/lexicons/ambient'; 1 + import type { At, Records } from '@atcute/client/lexicons'; 10 2 11 3 import { assert } from '~/lib/utils/invariant'; 12 4 13 - // #__NO_SIDE_EFFECTS__ 14 - export const assertCanonicalResourceUri = (input: string): ParsedCanonicalResourceUri => { 15 - const result = parseCanonicalResourceUri(input); 16 - if (!result.ok) { 17 - assert(false, result.error); 18 - } 5 + export const ATURI_RE = 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._~:@!$&%')(*+,;=\-[\]/\\]*))?$/; 19 7 20 - return result.value; 8 + export interface ParsedAtUri { 9 + repo: string; 10 + collection: string; 11 + rkey: string; 12 + fragment: string | undefined; 13 + } 14 + 15 + export const parseAtUri = (str: string): ParsedAtUri => { 16 + const match = ATURI_RE.exec(str); 17 + assert(match !== null, `failed to parse at-uri for ${str}`); 18 + 19 + return { 20 + repo: match[1] as At.DID, 21 + collection: match[2], 22 + rkey: match[3], 23 + fragment: match[4], 24 + }; 21 25 }; 22 26 23 - export const makeAtUri = ( 24 - repo: ActorIdentifier, 25 - collection: keyof Records | (Nsid & {}), 26 - rkey: RecordKey, 27 - ): ResourceUri => { 27 + export const makeAtUri = (repo: string, collection: keyof Records | (string & {}), rkey: string) => { 28 28 return `at://${repo}/${collection}/${rkey}`; 29 29 };
+1 -1
src/api/types/profile-response.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 2 2 3 3 export interface ProfilesListPage { 4 4 cursor: string | undefined;
+56
src/api/utils/bluesky/embed-view.ts
··· 1 + import type { AppBskyEmbedRecordWithMedia, AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 + 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 + 5 + export interface EmbedsView { 6 + media?: AppBskyEmbedRecordWithMedia.View['media']; 7 + record?: AppBskyEmbedRecordWithMedia.View['record']['record']; 8 + } 9 + 10 + export type MediaEmbedView = NonNullable<EmbedsView['media']>; 11 + export type RecordEmbedView = NonNullable<EmbedsView['record']>; 12 + 13 + export const unwrapMediaEmbedView = (embed: AppBskyFeedDefs.PostView['embed']): EmbedsView['media'] => { 14 + switch (embed?.$type) { 15 + case 'app.bsky.embed.recordWithMedia#view': 16 + return embed.media; 17 + case 'app.bsky.embed.record#view': 18 + return; 19 + } 20 + 21 + return embed; 22 + }; 23 + 24 + export const unwrapRecordEmbedView = (embed: AppBskyFeedDefs.PostView['embed']): EmbedsView['record'] => { 25 + switch (embed?.$type) { 26 + case 'app.bsky.embed.recordWithMedia#view': 27 + return embed.record.record; 28 + 29 + case 'app.bsky.embed.record#view': 30 + return embed.record; 31 + } 32 + }; 33 + 34 + export const unwrapEmbedView = (embed: AppBskyFeedDefs.PostView['embed']): EmbedsView => { 35 + return { 36 + media: unwrapMediaEmbedView(embed), 37 + record: unwrapRecordEmbedView(embed), 38 + }; 39 + }; 40 + 41 + export const getQuoteEmbedView = (embed: RecordEmbedView | undefined) => { 42 + switch (embed?.$type) { 43 + case 'app.bsky.embed.record#viewRecord': { 44 + return embed; 45 + } 46 + 47 + case 'app.bsky.embed.record#viewNotFound': 48 + case 'app.bsky.embed.record#viewDetached': 49 + case 'app.bsky.embed.record#viewBlocked': { 50 + const uri = parseAtUri(embed.uri); 51 + if (uri.collection === 'app.bsky.feed.post') { 52 + return embed; 53 + } 54 + } 55 + } 56 + };
+37
src/api/utils/bluesky/embed.ts
··· 1 + import type { AppBskyEmbedRecordWithMedia, AppBskyFeedPost } from '@atcute/client/lexicons'; 2 + 3 + export interface Embeds { 4 + media?: AppBskyEmbedRecordWithMedia.Main['media']; 5 + record?: AppBskyEmbedRecordWithMedia.Main['record']; 6 + } 7 + 8 + export type MediaEmbed = NonNullable<Embeds['media']>; 9 + export type RecordEmbed = NonNullable<Embeds['record']>; 10 + 11 + export const unwrapMediaEmbed = (embed: AppBskyFeedPost.Record['embed']): Embeds['media'] => { 12 + switch (embed?.$type) { 13 + case 'app.bsky.embed.recordWithMedia': 14 + return embed.media; 15 + case 'app.bsky.embed.record': 16 + return; 17 + } 18 + 19 + return embed; 20 + }; 21 + 22 + export const unwrapRecordEmbed = (embed: AppBskyFeedPost.Record['embed']): Embeds['record'] => { 23 + switch (embed?.$type) { 24 + case 'app.bsky.embed.recordWithMedia': 25 + return embed.record; 26 + 27 + case 'app.bsky.embed.record': 28 + return embed; 29 + } 30 + }; 31 + 32 + export const unwrapEmbed = (embed: AppBskyFeedPost.Record['embed']): Embeds => { 33 + return { 34 + media: unwrapMediaEmbed(embed), 35 + record: unwrapRecordEmbed(embed), 36 + }; 37 + };
+9 -11
src/api/utils/did.ts
··· 1 - import { type Client, ok } from '@atcute/client'; 2 - import type { Did, Handle } from '@atcute/lexicons'; 1 + import type { XRPC } from '@atcute/client'; 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: Handle, signal?: AbortSignal) => { 7 - let did: 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`;
+4 -6
src/api/utils/post.ts
··· 4 4 AppBskyEmbedRecord, 5 5 AppBskyFeedDefs, 6 6 AppBskyFeedPost, 7 - } from '@atcute/bluesky'; 8 - import type { $type } from '@atcute/lexicons'; 7 + Brand, 8 + } from '@atcute/client/lexicons'; 9 9 10 - type RecordEmbed = AppBskyFeedPost.Main['embed']; 10 + type RecordEmbed = AppBskyFeedPost.Record['embed']; 11 11 type ViewEmbed = AppBskyFeedDefs.PostView['embed']; 12 12 13 13 export const unwrapPostEmbedText = (embed: RecordEmbed | ViewEmbed): string => { ··· 35 35 type RecordMedia = AppBskyEmbedExternal.Main | AppBskyEmbedImages.Main; 36 36 type ViewMedia = AppBskyEmbedExternal.View | AppBskyEmbedImages.View; 37 37 38 - const getMediaEmbed = ( 39 - embed: RecordEmbed | ViewEmbed, 40 - ): $type.enforce<RecordMedia | ViewMedia> | undefined => { 38 + const getMediaEmbed = (embed: RecordEmbed | ViewEmbed): Brand.Union<RecordMedia | ViewMedia> | undefined => { 41 39 if (embed) { 42 40 const type = embed.$type; 43 41
+44 -62
src/api/utils/records.ts
··· 1 - import type { ComAtprotoRepoGetRecord, ComAtprotoRepoListRecords } from '@atcute/atproto'; 2 - import { type Client, ok } from '@atcute/client'; 3 - import type { Cid, Did, InferInput, ResourceUri } from '@atcute/lexicons'; 4 - import type { Records } from '@atcute/lexicons/ambient'; 1 + import type { XRPC } from '@atcute/client'; 2 + import type { 3 + At, 4 + ComAtprotoRepoGetRecord, 5 + ComAtprotoRepoListRecords, 6 + Records, 7 + } from '@atcute/client/lexicons'; 5 8 6 9 type RecordType = keyof Records; 7 10 8 11 export interface CreateRecordOptions<K extends RecordType> { 9 - repo: Did; 12 + repo: At.DID; 10 13 collection: K; 11 14 rkey?: string; 12 - record: InferInput<Records[K]>; 15 + record: Records[K]; 13 16 swapCommit?: string; 14 17 validate?: boolean; 15 18 } 16 19 17 - export const createRecord = async <K extends RecordType>(client: Client, options: CreateRecordOptions<K>) => { 18 - const data = await ok( 19 - client.post('com.atproto.repo.createRecord', { 20 - input: options as any, 21 - }), 22 - ); 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 }); 23 22 24 23 return data; 25 24 }; 26 25 27 26 export interface PutRecordOptions<K extends RecordType> { 28 - repo: Did; 27 + repo: At.DID; 29 28 collection: K; 30 29 rkey: string; 31 - record: InferInput<Records[K]>; 30 + record: Records[K]; 32 31 swapCommit?: string; 33 - swapRecord?: Cid | null; 32 + swapRecord?: At.CID | null; 34 33 validate?: boolean; 35 34 } 36 35 37 - export const putRecord = async <K extends RecordType>(client: Client, options: PutRecordOptions<K>) => { 38 - const data = await ok( 39 - client.post('com.atproto.repo.putRecord', { 40 - input: options as any, 41 - }), 42 - ); 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 }); 43 38 44 39 return data; 45 40 }; 46 41 47 42 export interface DeleteRecordOptions<K extends RecordType> { 48 - repo: Did; 43 + repo: At.DID; 49 44 collection: K; 50 45 rkey: string; 51 46 swapCommit?: string; 52 47 swapRecord?: string; 53 48 } 54 49 55 - export const deleteRecord = async <K extends RecordType>(client: Client, options: DeleteRecordOptions<K>) => { 56 - await ok( 57 - client.post('com.atproto.repo.deleteRecord', { 58 - input: options, 59 - }), 60 - ); 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 + }); 61 54 }; 62 55 63 56 export interface GetRecordOptions<K extends RecordType> { 64 - signal?: AbortSignal; 65 - repo: Did; 57 + repo: At.DID; 66 58 collection: K; 67 59 rkey: string; 68 60 cid?: string; 69 61 } 70 62 71 - export type GetRecordOutput<T> = ComAtprotoRepoGetRecord.$output & { 63 + export interface GetRecordOutput<T> extends ComAtprotoRepoGetRecord.Output { 72 64 value: T; 73 - }; 65 + } 74 66 75 67 export const getRecord = async <K extends RecordType>( 76 - client: Client, 68 + rpc: XRPC, 77 69 options: GetRecordOptions<K>, 78 - ): Promise<GetRecordOutput<InferInput<Records[K]>>> => { 79 - const data = await ok( 80 - client.get('com.atproto.repo.getRecord', { 81 - signal: options.signal, 82 - params: { 83 - repo: options.repo, 84 - collection: options.collection, 85 - rkey: options.rkey, 86 - cid: options.cid, 87 - }, 88 - }), 89 - ); 70 + ): Promise<GetRecordOutput<Records[K]>> => { 71 + const { data } = await rpc.get('com.atproto.repo.getRecord', { 72 + params: options, 73 + }); 90 74 91 75 return data as any; 92 76 }; 93 77 94 78 export interface ListRecordsOptions<K extends RecordType> { 95 79 signal?: AbortSignal; 96 - repo: Did; 80 + repo: At.DID; 97 81 collection: K; 98 82 cursor?: string; 99 83 limit?: number; 100 84 } 101 85 102 - export type ListRecordsOutput<T> = ComAtprotoRepoListRecords.$output & { 86 + export interface ListRecordsOutput<T> extends ComAtprotoRepoListRecords.Output { 103 87 cursor?: string; 104 - records: { cid: Cid; uri: ResourceUri; value: T }[]; 105 - }; 88 + records: { cid: At.CID; uri: At.Uri; value: T }[]; 89 + } 106 90 107 91 export const listRecords = async <K extends RecordType>( 108 - client: Client, 92 + rpc: XRPC, 109 93 options: ListRecordsOptions<K>, 110 - ): Promise<ListRecordsOutput<InferInput<Records[K]>>> => { 111 - const data = await ok( 112 - client.get('com.atproto.repo.listRecords', { 113 - signal: options.signal, 114 - params: { 115 - repo: options.repo, 116 - collection: options.collection, 117 - limit: options.limit, 118 - cursor: options.cursor, 119 - }, 120 - }), 121 - ); 94 + ): Promise<ListRecordsOutput<Records[K]>> => { 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 + }); 122 104 123 105 return data as any; 124 106 };
+1 -1
src/api/utils/richtext-stringify.ts
··· 1 - import type { AppBskyRichtextFacet } from '@atcute/bluesky'; 2 1 import { segmentize } from '@atcute/bluesky-richtext-segmenter'; 2 + import type { AppBskyRichtextFacet } from '@atcute/client/lexicons'; 3 3 4 4 import { isLinkValid } from './strings'; 5 5
+17
src/atcute-env.d.ts
··· 1 + import type { AppBskyRichtextFacet } from '@atcute/client/lexicons'; 2 + 3 + declare module '@atcute/client/lexicons' { 4 + namespace AppBskyRichtextFacet { 5 + type FacetFeature = Brand.Union<Link | Mention | Tag | BlueMojiRichtextFacet.Main>; 6 + 7 + interface Main { 8 + features: FacetFeature[]; 9 + } 10 + } 11 + } 12 + 13 + declare module '@atcute/bluesky-richtext-segmenter' { 14 + export interface RichtextSegment { 15 + features: AppBskyRichtextFacet.FacetFeature[] | undefined; 16 + } 17 + }
+69
src/basa-env.d.ts
··· 1 + /* eslint-disable */ 2 + // This file is automatically generated, do not edit! 3 + import '@atcute/client/lexicons'; 4 + 5 + declare module '@atcute/client/lexicons' { 6 + /** Describes the translation proxy instance */ 7 + namespace XBasaDescribeServer { 8 + interface Params {} 9 + type Input = undefined; 10 + interface Output { 11 + engines: Engines; 12 + } 13 + interface Engine { 14 + [Brand.Type]?: 'x.basa.describeServer#engine'; 15 + /** Supported language codes */ 16 + languages: string[]; 17 + } 18 + interface Engines { 19 + [Brand.Type]?: 'x.basa.describeServer#engines'; 20 + deepl?: Engine; 21 + google?: Engine; 22 + } 23 + } 24 + 25 + /** Translates a given text into another language */ 26 + namespace XBasaTranslate { 27 + interface Params { 28 + /** Text needing translation */ 29 + text: string; 30 + /** Target language */ 31 + to: string; 32 + /** 33 + * Which translation service to use 34 + * @default "google" 35 + */ 36 + engine?: 'google' | 'deepl'; 37 + /** 38 + * Source language 39 + * @default "auto" 40 + */ 41 + from?: string; 42 + } 43 + type Input = undefined; 44 + interface Output { 45 + /** Translated text */ 46 + result: string; 47 + /** Deteced language from source text */ 48 + sourceLanguage?: string; 49 + /** Transliteration of source text */ 50 + sourceTransliteration?: string; 51 + /** Transliteration of translated text */ 52 + targetTransliteration?: string; 53 + } 54 + } 55 + 56 + interface Records {} 57 + 58 + interface Queries { 59 + 'x.basa.describeServer': { 60 + output: XBasaDescribeServer.Output; 61 + }; 62 + 'x.basa.translate': { 63 + params: XBasaTranslate.Params; 64 + output: XBasaTranslate.Output; 65 + }; 66 + } 67 + 68 + interface Procedures {} 69 + }
+1 -1
src/components/avatar.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 3 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 4 5 5 import { type ModerationCause, getModerationUI } from '~/api/moderation'; 6 6 import { ContextProfileMedia, type ModerationContext } from '~/api/moderation/constants';
+1 -1
src/components/bookmarks/add-post-to-folder-dialog.tsx
··· 1 1 import { For, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 import { intersection } from '@mary/array-fns'; 5 5 import { useQueryClient } from '@mary/solid-query'; 6 6
+4 -5
src/components/bookmarks/bookmark-feed-item.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedPost } from '@atcute/bluesky'; 3 + import type { AppBskyFeedPost } from '@atcute/client/lexicons'; 4 4 5 5 import { usePostShadow } from '~/api/cache/post-shadow'; 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 { assertCanonicalResourceUri } from '~/api/types/at-uri'; 9 + import { parseAtUri } from '~/api/types/at-uri'; 10 10 11 11 import { history } from '~/globals/navigation'; 12 12 ··· 35 35 const { post, stale } = item; 36 36 37 37 const author = post.author; 38 - const record = post.record as AppBskyFeedPost.Main; 38 + const record = post.record as AppBskyFeedPost.Record; 39 39 const embed = post.embed; 40 40 41 41 const shadow = usePostShadow(post); 42 42 43 - const uri = assertCanonicalResourceUri(post.uri); 44 - 43 + const uri = parseAtUri(post.uri); 45 44 const authorHref = `/${author.did}`; 46 45 const href = `/${author.did}/${uri.rkey}`; 47 46
+1 -1
src/components/composer/composer-dialog.tsx
··· 13 13 } from 'solid-js'; 14 14 import { createMutable, unwrap } from 'solid-js/store'; 15 15 16 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 16 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 17 17 import { type CreateQueryResult, useQueryClient } from '@mary/solid-query'; 18 18 19 19 import { GLOBAL_LABELS, getLocalizedLabel } from '~/api/moderation';
+9 -12
src/components/composer/composer-input.tsx
··· 12 12 createSignal, 13 13 } from 'solid-js'; 14 14 15 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 16 - import { ok } from '@atcute/client'; 15 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 17 16 18 17 import { safeUrlParse } from '~/api/utils/strings'; 19 18 ··· 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`);
+4 -3
src/components/composer/composer-reply-context.tsx
··· 1 1 import { Match, Switch, createMemo } from 'solid-js'; 2 2 3 - import { type AppBskyFeedPost, unwrapMediaEmbed } from '@atcute/bluesky'; 3 + import type { AppBskyFeedPost } from '@atcute/client/lexicons'; 4 4 5 5 import { getModerationUI } from '~/api/moderation'; 6 6 import { ContextContentMedia } from '~/api/moderation/constants'; 7 7 import { moderatePost } from '~/api/moderation/entities/post'; 8 8 import { createPostQuery } from '~/api/queries/post'; 9 + import { unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view'; 9 10 import { formatQueryError } from '~/api/utils/error'; 10 11 11 12 import { inject } from '~/lib/states/singleton'; ··· 33 34 <Match when={query.data} keyed> 34 35 {(post) => { 35 36 const author = post.author; 36 - const record = post.record as AppBskyFeedPost.Main; 37 + const record = post.record as AppBskyFeedPost.Record; 37 38 38 39 const moderation = createMemo(() => moderatePost(post, moderationOptions())); 39 40 const shouldBlurImage = () => getModerationUI(moderation(), ContextContentMedia).b.length !== 0; 40 41 41 - const media = unwrapMediaEmbed(post.embed); 42 + const media = unwrapMediaEmbedView(post.embed); 42 43 43 44 return ( 44 45 <div class="relative flex gap-3 px-4 pt-3">
+2 -3
src/components/composer/dialogs/composed-interaction-dialog.tsx
··· 1 1 import { For, Match, Switch, batch, createEffect, createMemo, createSignal, untrack } from 'solid-js'; 2 2 3 - import type { AppBskyFeedThreadgate } from '@atcute/bluesky'; 4 - import type { $type } from '@atcute/lexicons'; 3 + import type { AppBskyFeedThreadgate, Brand } from '@atcute/client/lexicons'; 5 4 6 5 import { createMyListsQuery } from '~/api/queries/my-lists'; 7 6 import { dequal } from '~/api/utils/dequal'; ··· 240 239 <Boxed.List> 241 240 <For each={lists.data}> 242 241 {(list) => { 243 - const rule: $type.enforce<AppBskyFeedThreadgate.ListRule> = { 242 + const rule: Brand.Union<AppBskyFeedThreadgate.ListRule> = { 244 243 $type: 'app.bsky.feed.threadgate#listRule', 245 244 list: list.uri, 246 245 };
+1 -1
src/components/composer/embeds/quote-embed.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import type { AppBskyEmbedRecord } from '@atcute/bluesky'; 3 + import type { AppBskyEmbedRecord } from '@atcute/client/lexicons'; 4 4 5 5 import { createPostQuery } from '~/api/queries/post'; 6 6
+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 { GenericUri } from '@atcute/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: 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 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
+82 -99
src/components/composer/lib/api.ts
··· 1 1 import { nanoid } from 'nanoid/non-secure'; 2 2 3 - import type { 4 - ComAtprotoLabelDefs, 5 - ComAtprotoRepoApplyWrites, 6 - ComAtprotoRepoStrongRef, 7 - } from '@atcute/atproto'; 8 - import type { BlueMojiRichtextFacet } from '@atcute/bluemoji'; 3 + import { XRPC, XRPCError, simpleFetchHandler } from '@atcute/client'; 9 4 import type { 10 5 AppBskyEmbedImages, 11 6 AppBskyEmbedRecord, ··· 17 12 AppBskyGraphDefs, 18 13 AppBskyRichtextFacet, 19 14 AppBskyVideoDefs, 20 - } from '@atcute/bluesky'; 21 - import { Client, ClientResponseError, ok, simpleFetchHandler } from '@atcute/client'; 22 - import { type $type, type Blob as AtpBlob, type Did, type GenericUri, type Handle } from '@atcute/lexicons'; 15 + At, 16 + BlueMojiRichtextFacet, 17 + Brand, 18 + ComAtprotoLabelDefs, 19 + ComAtprotoRepoApplyWrites, 20 + ComAtprotoRepoStrongRef, 21 + } from '@atcute/client/lexicons'; 23 22 import * as TID from '@atcute/tid'; 24 23 import type { QueryClient } from '@mary/solid-query'; 25 24 ··· 27 26 import { uploadBlob } from '~/api/queries/blob'; 28 27 import type { LinkMeta } from '~/api/queries/composer'; 29 28 import { resolveHandle } from '~/api/queries/handle'; 30 - import { assertCanonicalResourceUri, makeAtUri } from '~/api/types/at-uri'; 29 + import { makeAtUri, parseAtUri } from '~/api/types/at-uri'; 31 30 import { isDid } from '~/api/types/identity'; 32 31 import { getRecord } from '~/api/utils/records'; 33 32 import { trimRichText } from '~/api/utils/richtext'; ··· 58 57 let cidPromise: Promise<typeof import('./cid')>; 59 58 60 59 export const publish = async ({ agent, queryClient, state, onLog: log }: PublishOptions) => { 61 - const client = agent.client; 60 + const rpc = agent.rpc; 62 61 const did = agent.did!; 63 62 64 63 const now = new Date(); 65 - const writes: ComAtprotoRepoApplyWrites.$input['writes'] = []; 64 + const writes: ComAtprotoRepoApplyWrites.Input['writes'] = []; 66 65 67 66 let reply: AppBskyFeedPost.ReplyRef | undefined; 68 67 let rkey: string | undefined; ··· 75 74 queryKey: ['post', replyUri], 76 75 staleTime: 30_000, 77 76 async queryFn(ctx) { 78 - const uri = assertCanonicalResourceUri(replyUri); 77 + const uri = parseAtUri(replyUri); 79 78 80 - let did: Did; 79 + let did: At.DID; 81 80 if (isDid(uri.repo)) { 82 81 did = uri.repo; 83 82 } else { 84 - did = await resolveHandle(client, uri.repo, ctx.signal); 83 + did = await resolveHandle(rpc, uri.repo, ctx.signal); 85 84 } 86 85 87 - const data = await ok( 88 - client.get('app.bsky.feed.getPosts', { 89 - signal: ctx.signal, 90 - params: { 91 - uris: [makeAtUri(did, uri.collection, uri.rkey)], 92 - }, 93 - }), 94 - ); 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 + }); 95 92 96 93 const post = data.posts[0]; 97 94 ··· 103 100 }, 104 101 }); 105 102 106 - const root = (post.record as AppBskyFeedPost.Main).reply?.root; 103 + const root = (post.record as AppBskyFeedPost.Record).reply?.root; 107 104 const ref: ComAtprotoRepoStrongRef.Main = { 108 105 uri: post.uri, 109 106 cid: post.cid, ··· 116 113 } 117 114 118 115 if (state.redraftUri) { 119 - const uri = assertCanonicalResourceUri(state.redraftUri); 116 + const uri = parseAtUri(state.redraftUri); 120 117 121 118 writes.push({ 122 119 $type: 'com.atproto.repo.applyWrites#delete', ··· 142 139 143 140 // Get the self-labels 144 141 const labels = getEmbedLabels(post.embed); 145 - let selfLabels: $type.enforce<ComAtprotoLabelDefs.SelfLabels> | undefined; 142 + let selfLabels: Brand.Union<ComAtprotoLabelDefs.SelfLabels> | undefined; 146 143 147 144 if (labels?.length) { 148 145 selfLabels = { ··· 152 149 } 153 150 154 151 // Now form the record 155 - const record: AppBskyFeedPost.Main = { 152 + const record: AppBskyFeedPost.Record = { 156 153 $type: 'app.bsky.feed.post', 157 154 createdAt: now.toISOString(), 158 155 text: rt.text, ··· 172 169 173 170 // If this is the first post, and we have a threadgate set, create one now. 174 171 if (idx === 0 && !reply && state.threadgate.allow) { 175 - const threadgateRecord: AppBskyFeedThreadgate.Main = { 172 + const threadgateRecord: AppBskyFeedThreadgate.Record = { 176 173 $type: 'app.bsky.feed.threadgate', 177 174 createdAt: now.toISOString(), 178 175 post: uri, ··· 189 186 190 187 // If we have a postgate set, create one for this post. 191 188 if (state.postgate.embeddingRules?.length) { 192 - const postgateRecord: AppBskyFeedPostgate.Main = { 189 + const postgateRecord: AppBskyFeedPostgate.Record = { 193 190 $type: 'app.bsky.feed.postgate', 194 191 createdAt: now.toISOString(), 195 192 post: uri, ··· 229 226 230 227 log?.(`Posting`); 231 228 232 - await ok( 233 - client.post('com.atproto.repo.applyWrites', { 234 - input: { 235 - repo: did, 236 - writes: writes, 237 - }, 238 - }), 239 - ); 229 + await rpc.call('com.atproto.repo.applyWrites', { 230 + data: { 231 + repo: did, 232 + writes: writes, 233 + }, 234 + }); 240 235 241 236 if (state.redraftUri) { 242 237 updatePostShadow(queryClient, state.redraftUri, { deleted: true }); ··· 244 239 245 240 return writes; 246 241 247 - async function resolveEmbed(root: PostEmbed): Promise<AppBskyFeedPost.Main['embed']> { 242 + async function resolveEmbed(root: PostEmbed): Promise<AppBskyFeedPost.Record['embed']> { 248 243 let pMedia: Promise<AppBskyEmbedRecordWithMedia.Main['media']> | undefined; 249 - let pRecord: Promise<$type.enforce<AppBskyEmbedRecord.Main>> | undefined; 244 + let pRecord: Promise<Brand.Union<AppBskyEmbedRecord.Main>> | undefined; 250 245 251 246 if (root.media) { 252 247 pMedia = resolveMediaEmbed(root.media); ··· 303 298 304 299 switch (source.type) { 305 300 case 'local': { 306 - const uploaded = await uploadBlob(client, source.blob); 301 + const uploaded = await uploadBlob(rpc, source.blob); 307 302 308 303 return { 309 304 image: uploaded, ··· 344 339 345 340 const blob = source.blob; 346 341 347 - const videoClient = new Client({ 348 - handler: simpleFetchHandler({ service: 'https://video.bsky.app' }), 349 - }); 342 + const videoRpc = new XRPC({ handler: simpleFetchHandler({ service: 'https://video.bsky.app' }) }); 350 343 351 344 // Get upload limit status 352 345 { ··· 367 360 // GET https://porcini.us-east.host.bsky.network/xrpc/chat.bsky.convo.getLog 368 361 // atproto-proxy: did:web:api.bsky.chat#bsky_chat 369 362 // 370 - const tokenData = await ok( 371 - client.get('com.atproto.server.getServiceAuth', { 372 - params: { 373 - aud: 'did:web:video.bsky.app', 374 - lxm: 'app.bsky.video.getUploadLimits', 375 - }, 376 - }), 377 - ); 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 + }); 378 369 379 - const data = await ok( 380 - videoClient.get('app.bsky.video.getUploadLimits', { 381 - headers: { 382 - authorization: `Bearer ${tokenData.token}`, 383 - }, 384 - }), 385 - ); 370 + const { data } = await videoRpc.get('app.bsky.video.getUploadLimits', { 371 + headers: { 372 + authorization: `Bearer ${tokenData.token}`, 373 + }, 374 + }); 386 375 387 376 if (!data.canUpload) { 388 377 let message = data.message || `You've reached the limit on video uploads`; ··· 419 408 420 409 // Create an access token *to the PDS*, allowing the video service to 421 410 // upload the final blobs to our repository on our behalf. 422 - const tokenData = await ok( 423 - client.get('com.atproto.server.getServiceAuth', { 424 - params: { 425 - // `did:web:porcini.us-east.host.bsky.network` 426 - aud: `did:web:${new URL(session.info.aud).host}`, 427 - lxm: 'com.atproto.repo.uploadBlob', 428 - exp: Date.now() / 1000 + 60 * 30, // 30 minutes 429 - }, 430 - }), 431 - ); 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 + }); 432 419 433 420 jobId = await new Promise((resolve, reject) => { 434 421 const xhr = new XMLHttpRequest(); ··· 478 465 } 479 466 480 467 // Check the upload status 481 - let result: AtpBlob<any>; 468 + let result: At.Blob<any>; 482 469 { 483 470 let pollFailures = 0; 484 471 ··· 488 475 let status: AppBskyVideoDefs.JobStatus; 489 476 490 477 try { 491 - const data = await ok( 492 - videoClient.get('app.bsky.video.getJobStatus', { 493 - params: { 494 - jobId: jobId, 495 - }, 496 - }), 497 - ); 478 + const { data } = await videoRpc.get('app.bsky.video.getJobStatus', { 479 + params: { 480 + jobId: jobId, 481 + }, 482 + }); 498 483 499 484 status = data.jobStatus; 500 485 pollFailures = 0; ··· 510 495 const state = status.state; 511 496 512 497 if (state === 'JOB_STATE_COMPLETED') { 513 - if (!status.blob || !('$type' in status.blob)) { 498 + if (!status.blob) { 514 499 throw new PublishError(`Unexpected error when processing video`); 515 500 } 516 501 ··· 548 533 const gif = embed.gif; 549 534 const alt = embed.alt; 550 535 551 - let thumbBlob: AtpBlob<any> | undefined; 536 + let thumbBlob: At.Blob<any> | undefined; 552 537 553 538 { 554 539 log?.(`Retrieving GIF thumbnail`); ··· 561 546 562 547 log?.(`Uploading GIF thumbnail`); 563 548 const compressed = await compressPostImage(gifBlob); 564 - const blob = await uploadBlob(client, compressed.blob); 549 + const blob = await uploadBlob(rpc, compressed.blob); 565 550 566 551 thumbBlob = blob; 567 552 } ··· 593 578 594 579 // compress... upload... 595 580 const thumb = meta.thumb; 596 - let thumbBlob: AtpBlob<any> | undefined; 581 + let thumbBlob: At.Blob<any> | undefined; 597 582 598 583 if (thumb !== undefined) { 599 584 log?.(`Uploading link thumbnail`); 600 585 601 586 const compressed = await compressPostImage(thumb); 602 - const blob = await uploadBlob(client, compressed.blob); 587 + const blob = await uploadBlob(rpc, compressed.blob); 603 588 604 589 thumbBlob = blob; 605 590 } ··· 617 602 618 603 async function resolveRecordEmbed( 619 604 record: PostRecordEmbed, 620 - ): Promise<$type.enforce<AppBskyEmbedRecord.Main>> { 605 + ): Promise<Brand.Union<AppBskyEmbedRecord.Main>> { 621 606 const type = record.type; 622 607 623 608 if (type === 'feed') { ··· 684 669 if (type === 'link' || type === 'autolink') { 685 670 facets.push({ 686 671 index: index, 687 - features: [{ $type: 'app.bsky.richtext.facet#link', uri: token.url as GenericUri }], 672 + features: [{ $type: 'app.bsky.richtext.facet#link', uri: token.url }], 688 673 }); 689 674 } else if (type === 'mention') { 690 - const handle = token.handle as Handle; 675 + const handle = token.handle; 691 676 692 677 if (handle === 'handle.invalid') { 693 678 throw new InvalidHandleError(handle); 694 679 } 695 680 696 681 try { 697 - const data = await ok( 698 - client.get('com.atproto.identity.resolveHandle', { 699 - params: { 700 - handle: handle, 701 - }, 702 - }), 703 - ); 682 + const response = await rpc.get('com.atproto.identity.resolveHandle', { 683 + params: { 684 + handle: handle, 685 + }, 686 + }); 704 687 705 - const did = data.did; 688 + const did = response.data.did; 706 689 707 690 if (!hasSilent) { 708 691 facets.push({ ··· 716 699 }); 717 700 } 718 701 } catch (err) { 719 - if (err instanceof ClientResponseError && err.error === 'InvalidRequest') { 702 + if (err instanceof XRPCError && err.kind === 'InvalidRequest') { 720 703 throw new InvalidHandleError(handle); 721 704 } 722 705 ··· 728 711 features: [{ $type: 'app.bsky.richtext.facet#tag', tag: token.name }], 729 712 }); 730 713 } else if (type === 'emote') { 731 - const { value } = await getRecord(client, { 714 + const { value } = await getRecord(rpc, { 732 715 repo: did, 733 716 collection: 'blue.moji.collection.item', 734 717 rkey: token.name, ··· 736 719 737 720 const raws = value.formats; 738 721 739 - const cids: $type.enforce<BlueMojiRichtextFacet.Formats_v0> = { 722 + const cids: Brand.Union<BlueMojiRichtextFacet.Formats_v0> = { 740 723 $type: 'blue.moji.richtext.facet#formats_v0', 741 724 }; 742 725 ··· 749 732 cids.lottie = true; 750 733 } 751 734 752 - if (raws.gif_128 && '$type' in raws.gif_128) { 735 + if (raws.gif_128) { 753 736 cids.gif_128 = raws.gif_128.ref.$link; 754 737 } 755 738 756 - if (raws.png_128 && '$type' in raws.png_128) { 739 + if (raws.png_128) { 757 740 cids.png_128 = raws.png_128.ref.$link; 758 741 } 759 742 760 - if (raws.webp_128 && '$type' in raws.webp_128) { 743 + if (raws.webp_128) { 761 744 cids.webp_128 = raws.webp_128.ref.$link; 762 745 } 763 746 } 764 747 765 - const facet: $type.enforce<BlueMojiRichtextFacet.Main> = { 748 + const facet: Brand.Union<BlueMojiRichtextFacet.Main> = { 766 749 $type: 'blue.moji.richtext.facet', 767 750 did: did, 768 751 name: value.name,
+9 -4
src/components/composer/lib/state.tsx
··· 1 1 import { unwrap } from 'solid-js/store'; 2 2 3 - import type { AppBskyEmbedDefs, AppBskyEmbedExternal, AppBskyFeedDefs } from '@atcute/bluesky'; 4 - import type { $type, Blob as AtpBlob } from '@atcute/lexicons'; 3 + import type { 4 + AppBskyEmbedDefs, 5 + AppBskyEmbedExternal, 6 + AppBskyFeedDefs, 7 + At, 8 + Brand, 9 + } from '@atcute/client/lexicons'; 5 10 6 11 import { primarySystemLanguage } from '~/globals/locales'; 7 12 ··· 33 38 34 39 export interface RemoteMediaSource { 35 40 type: 'remote'; 36 - blob: AtpBlob; 41 + blob: At.Blob; 37 42 aspectRatio?: AppBskyEmbedDefs.AspectRatio; 38 43 } 39 44 ··· 84 89 85 90 export interface RemoteLinkSource { 86 91 type: 'remote'; 87 - state: $type.enforce<AppBskyEmbedExternal.Main>; 92 + state: Brand.Union<AppBskyEmbedExternal.Main>; 88 93 } 89 94 90 95 export type LinkSource = UriLinkSource | RemoteLinkSource;
+7 -6
src/components/embeds/embed.tsx
··· 1 - import { type AppBskyFeedDefs, type MediaEmbed, type RecordEmbed, unwrapEmbed } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 3 3 import { type ModerationCause, getModerationUI } from '~/api/moderation'; 4 4 import { ContextContentMedia } from '~/api/moderation/constants'; 5 - import { assertCanonicalResourceUri } from '~/api/types/at-uri'; 5 + import { parseAtUri } from '~/api/types/at-uri'; 6 + import { type MediaEmbedView, type RecordEmbedView, unwrapEmbedView } from '~/api/utils/bluesky/embed-view'; 6 7 7 8 import ContentHider from '../moderation/content-hider'; 8 9 ··· 25 26 } 26 27 27 28 const Embed = (props: EmbedProps) => { 28 - const { media, record } = unwrapEmbed(props.embed); 29 + const { media, record } = unwrapEmbedView(props.embed); 29 30 30 31 const gutterTop = props.gutterTop; 31 32 const large = props.large; ··· 42 43 43 44 interface MediaEmbedProps { 44 45 /** Expected to be static */ 45 - embed: MediaEmbed; 46 + embed: MediaEmbedView; 46 47 moderation?: ModerationCause[]; 47 48 } 48 49 ··· 75 76 76 77 interface RecordEmbedProps { 77 78 /** Expected to be static */ 78 - embed: RecordEmbed; 79 + embed: RecordEmbedView; 79 80 /** Expected to be static */ 80 81 large?: boolean; 81 82 } ··· 99 100 } 100 101 101 102 if (type === 'app.bsky.embed.record#viewNotFound' || type === 'app.bsky.embed.record#viewBlocked') { 102 - const uri = assertCanonicalResourceUri(embed.uri); 103 + const uri = parseAtUri(embed.uri); 103 104 104 105 if (type === 'app.bsky.embed.record#viewBlocked' && uri.collection === 'app.bsky.feed.post') { 105 106 return <QuoteBlockedEmbed embed={embed} uri={uri} />;
+1 -1
src/components/embeds/external-embed.tsx
··· 1 1 import { type JSX, createSignal } from 'solid-js'; 2 2 3 - import type { AppBskyEmbedExternal } from '@atcute/bluesky'; 3 + import type { AppBskyEmbedExternal } from '@atcute/client/lexicons'; 4 4 5 5 import { safeUrlParse } from '~/api/utils/strings'; 6 6
+3 -3
src/components/embeds/feed-embed.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 import { useQueryClient } from '@mary/solid-query'; 5 5 6 6 import { moderateGeneric } from '~/api/moderation/entities/generic'; 7 7 import { precacheFeed } from '~/api/queries-cache/feed-precache'; 8 - import { assertCanonicalResourceUri } 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/${assertCanonicalResourceUri(feed.uri).rkey}`; 29 + const href = `/${feed.creator.did}/feeds/${parseAtUri(feed.uri).rkey}`; 30 30 31 31 return ( 32 32 <a
+1 -1
src/components/embeds/image-grid-embed.tsx
··· 1 - import type { AppBskyEmbedImages } from '@atcute/bluesky'; 1 + import type { AppBskyEmbedImages } from '@atcute/client/lexicons'; 2 2 3 3 export interface ImageGridEmbedProps { 4 4 /** Expected to be static */
+1 -1
src/components/embeds/image-standalone-embed.tsx
··· 1 - import type { AppBskyEmbedImages } from '@atcute/bluesky'; 1 + import type { AppBskyEmbedImages } from '@atcute/client/lexicons'; 2 2 3 3 import { openModal } from '~/globals/modals'; 4 4
+1 -1
src/components/embeds/lib/image-utils.ts
··· 1 - import type { AppBskyEmbedImages } from '@atcute/bluesky'; 1 + import type { AppBskyEmbedImages } from '@atcute/client/lexicons'; 2 2 3 3 const clamp = (value: number, min: number, max: number): number => { 4 4 return Math.max(min, Math.min(max, value));
+1 -1
src/components/embeds/lib/snippet.tsx
··· 1 - import type { AppBskyEmbedExternal } from '@atcute/bluesky'; 1 + import type { AppBskyEmbedExternal } from '@atcute/client/lexicons'; 2 2 3 3 import { safeUrlParse } from '~/api/utils/strings'; 4 4
+1 -1
src/components/embeds/list-embed.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyGraphDefs } from '@atcute/bluesky'; 3 + import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 4 4 5 5 import { moderateGeneric } from '~/api/moderation/entities/generic'; 6 6
+1 -1
src/components/embeds/players/video-player.tsx
··· 3 3 import { nanoid } from 'nanoid/non-secure'; 4 4 import { createEffect, createSignal, onCleanup } from 'solid-js'; 5 5 6 - import type { AppBskyEmbedVideo } from '@atcute/bluesky'; 6 + import type { AppBskyEmbedVideo } from '@atcute/client/lexicons'; 7 7 8 8 import { globalEvents } from '~/globals/events'; 9 9
+4 -3
src/components/embeds/quote-blocked-embed.tsx
··· 1 - import type { AppBskyEmbedRecord } from '@atcute/bluesky'; 2 - import type { ParsedCanonicalResourceUri } from '@atcute/lexicons'; 1 + import type { AppBskyEmbedRecord } from '@atcute/client/lexicons'; 2 + 3 + import type { ParsedAtUri } from '~/api/types/at-uri'; 3 4 4 5 import BlockOutlinedIcon from '../icons-central/block-outline'; 5 6 6 7 export interface QuoteBlockedEmbedProps { 7 8 embed: AppBskyEmbedRecord.ViewBlocked; 8 - uri: ParsedCanonicalResourceUri; 9 + uri: ParsedAtUri; 9 10 } 10 11 11 12 const QuoteBlockedEmbed = ({ embed, uri }: QuoteBlockedEmbedProps) => {
+6 -5
src/components/embeds/quote-embed.tsx
··· 1 1 import { type JSX, createMemo } from 'solid-js'; 2 2 3 - import { AppBskyEmbedRecord, AppBskyFeedPost, unwrapMediaEmbed } from '@atcute/bluesky'; 3 + import type { AppBskyEmbedRecord, AppBskyFeedPost } from '@atcute/client/lexicons'; 4 4 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 { assertCanonicalResourceUri } from '~/api/types/at-uri'; 8 + import { parseAtUri } from '~/api/types/at-uri'; 9 + import { unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view'; 9 10 10 11 import { inject } from '~/lib/states/singleton'; 11 12 import ModerationService from '~/lib/states/singletons/moderation'; ··· 28 29 const QuoteEmbed = ({ quote, interactive, large }: QuoteEmbedProps) => { 29 30 const moderationOptions = inject(ModerationService); 30 31 31 - const record = quote.value as AppBskyFeedPost.Main; 32 + const record = quote.value as AppBskyFeedPost.Record; 32 33 const author = quote.author; 33 34 34 - const uri = assertCanonicalResourceUri(quote.uri); 35 + const uri = parseAtUri(quote.uri); 35 36 const href = `/${author.did}/${uri.rkey}`; 36 37 37 38 const text = record.text.trim(); 38 - const media = unwrapMediaEmbed(quote.embeds?.[0]); 39 + const media = unwrapMediaEmbedView(quote.embeds?.[0]); 39 40 40 41 const moderation = createMemo(() => moderateQuote(quote, moderationOptions())); 41 42
+1 -1
src/components/embeds/video-embed.tsx
··· 1 1 import { Show, Suspense, createSignal, lazy } from 'solid-js'; 2 2 3 - import { AppBskyEmbedDefs, AppBskyEmbedVideo } from '@atcute/bluesky'; 3 + import type { AppBskyEmbedDefs, AppBskyEmbedVideo } from '@atcute/client/lexicons'; 4 4 5 5 import { replaceVideoCdnUrl } from '~/lib/bsky/video'; 6 6
+3 -5
src/components/error-view.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 4 - import { ClientResponseError } from '@atcute/client'; 3 + import { XRPCError } from '@atcute/client'; 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'; 7 7 ··· 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 { assertCanonicalResourceUri } 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 = assertCanonicalResourceUri(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 = assertCanonicalResourceUri(feed.info.uri); 63 + const uri = parseAtUri(feed.info.uri); 64 64 href = `/${uri.repo}/lists/${uri.rkey}`; 65 65 break; 66 66 }
+7 -3
src/components/feeds/feed-info-prompt.tsx
··· 1 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 3 - import { assertCanonicalResourceUri } 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'; 13 + 14 + import HeartOutlinedIcon from '../icons-central/heart-outline'; 11 15 12 16 export interface FeedInfoPromptProps { 13 17 /** Expected to be static */ ··· 20 24 const feed = props.feed; 21 25 22 26 const authorUrl = `/${feed.creator.did}`; 23 - const feedUrl = `${authorUrl}/feeds/${assertCanonicalResourceUri(feed.uri).rkey}`; 27 + const feedUrl = `${authorUrl}/feeds/${parseAtUri(feed.uri).rkey}`; 24 28 25 29 return ( 26 30 <Prompt.Container maxWidth="md">
+3 -3
src/components/feeds/feed-item.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 import { useQueryClient } from '@mary/solid-query'; 5 5 6 6 import { moderateGeneric } from '~/api/moderation/entities/generic'; 7 7 import { precacheFeed } from '~/api/queries-cache/feed-precache'; 8 - import { assertCanonicalResourceUri } 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/${assertCanonicalResourceUri(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
+3 -4
src/components/feeds/feed-overflow-menu.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 5 - import { assertCanonicalResourceUri } 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 { repo, rkey } = assertCanonicalResourceUri(feed.uri); 87 - const uri = `https://bsky.app/profile/${repo}/feed/${rkey}`; 86 + const uri = `https://bsky.app/profile/${feed.creator.did}/feed/${parseAtUri(feed.uri).rkey}`; 88 87 89 88 close(); 90 89 window.open(uri, '_blank');
+3 -3
src/components/lists/lib/utils.ts
··· 1 - import type { AppBskyGraphDefs } from '@atcute/bluesky'; 1 + import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 2 2 3 - import { assertCanonicalResourceUri } 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 } = assertCanonicalResourceUri(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/lists/list-item.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyGraphDefs } from '@atcute/bluesky'; 3 + import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 4 4 import { useQueryClient } from '@mary/solid-query'; 5 5 6 6 import { moderateGeneric } from '~/api/moderation/entities/generic';
+2 -2
src/components/main/sign-in-dialog.tsx
··· 1 1 import { Match, Switch, createSignal, onMount } from 'solid-js'; 2 2 3 - import type { Did } from '@atcute/lexicons'; 3 + import type { At } from '@atcute/client/lexicons'; 4 4 import { 5 5 type AuthorizationServerMetadata, 6 6 type IdentityMetadata, ··· 27 27 } 28 28 29 29 export interface SignInDialogProps { 30 - relogin?: { did: Did; handle?: string }; 30 + relogin?: { did: At.DID; handle?: string }; 31 31 } 32 32 33 33 const SignInDialog = (props: SignInDialogProps) => {
+31 -35
src/components/moderation/block-account-prompt.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 4 - import { type Did } from '@atcute/lexicons'; 3 + import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 5 4 import { QueryClient, createMutation } from '@mary/solid-query'; 6 5 7 - import { type ProfileShadowView, updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow'; 6 + import { updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow'; 8 7 import { createListMetaQuery } from '~/api/queries/list'; 9 - import { assertCanonicalResourceUri } from '~/api/types/at-uri'; 8 + import { parseAtUri } from '~/api/types/at-uri'; 10 9 import { getCurrentDate } from '~/api/utils/misc'; 11 10 import { createRecord, deleteRecord } from '~/api/utils/records'; 12 11 ··· 23 22 import * as Prompt from '../prompt'; 24 23 25 24 export interface BlockAccountPrompt { 25 + /** Expected to be static */ 26 26 profile: AppBskyActorDefs.ProfileViewDetailed; 27 27 } 28 28 29 29 const BlockAccountPrompt = (props: BlockAccountPrompt) => { 30 - const profile = () => props.profile; 31 - const shadow = useProfileShadow(profile); 30 + const profile = props.profile; 31 + const shadow = useProfileShadow(props.profile); 32 32 33 33 return ( 34 34 <Switch> 35 - <Match when={profile().viewer?.blockingByList}> 36 - <BlockedByList profile={profile()} shadow={shadow()} /> 35 + <Match when={/* @once */ profile.viewer?.blockingByList}> 36 + <BlockedByList {...props} /> 37 37 </Match> 38 38 39 39 <Match when={shadow().blockUri}> 40 - <UnblockPrompt profile={profile()} shadow={shadow()} /> 40 + <UnblockPrompt {...props} /> 41 41 </Match> 42 42 43 43 <Match when> 44 - <BlockPrompt profile={profile()} shadow={shadow()} /> 44 + <BlockPrompt {...props} /> 45 45 </Match> 46 46 </Switch> 47 47 ); ··· 49 49 50 50 export default BlockAccountPrompt; 51 51 52 - interface BlockAccountPromptInnerProps extends BlockAccountPrompt { 53 - shadow: ProfileShadowView; 54 - } 55 - 56 - const BlockPrompt = (props: BlockAccountPromptInnerProps) => { 52 + const BlockPrompt = ({ profile }: BlockAccountPrompt) => { 57 53 const { close } = useModalContext(); 58 54 59 55 const { currentAccount } = useSession(); 60 - const { client } = useAgent(); 56 + const { rpc } = useAgent(); 61 57 62 58 const mutation = createMutation((queryClient) => ({ 63 59 async mutationFn() { 64 - return await createRecord(client, { 60 + return await createRecord(rpc, { 65 61 repo: currentAccount!.did, 66 62 collection: 'app.bsky.graph.block', 67 63 record: { 68 64 $type: 'app.bsky.graph.block', 69 65 createdAt: getCurrentDate(), 70 - subject: props.profile.did, 66 + subject: profile.did, 71 67 }, 72 68 }); 73 69 }, 74 70 onSuccess(ret) { 75 71 close(); 76 - updateProfileShadow(queryClient, props.profile.did, { blockUri: ret.uri }); 72 + updateProfileShadow(queryClient, profile.did, { blockUri: ret.uri }); 77 73 78 74 setTimeout(() => { 79 - resetThreadQueries(queryClient, props.profile.did); 75 + resetThreadQueries(queryClient, profile.did); 80 76 }, 1_500); 81 77 }, 82 78 onError() { ··· 86 82 87 83 return ( 88 84 <Prompt.Container maxWidth="md" disabled={mutation.isPending}> 89 - <Prompt.Title>{/* @once */ `Block @${props.profile.handle.toLowerCase()}?`}</Prompt.Title> 85 + <Prompt.Title>{/* @once */ `Block @${profile.handle.toLowerCase()}?`}</Prompt.Title> 90 86 91 87 <Prompt.Description>Here's what happens if you do:</Prompt.Description> 92 88 ··· 126 122 ); 127 123 }; 128 124 129 - const UnblockPrompt = (props: BlockAccountPromptInnerProps) => { 125 + const UnblockPrompt = ({ profile }: BlockAccountPrompt) => { 130 126 const { close } = useModalContext(); 131 127 132 - const { client } = useAgent(); 128 + const { rpc } = useAgent(); 129 + const { repo, rkey } = parseAtUri(profile.viewer!.blocking!); 133 130 134 131 const mutation = createMutation((queryClient) => ({ 135 132 async mutationFn() { 136 - const uri = assertCanonicalResourceUri(props.shadow.blockUri!); 137 - 138 - return await deleteRecord(client, { 139 - repo: uri.repo, 133 + return await deleteRecord(rpc, { 134 + repo: repo as At.DID, 140 135 collection: 'app.bsky.graph.block', 141 - rkey: uri.rkey, 136 + rkey: rkey, 142 137 }); 143 138 }, 144 139 onSuccess() { 145 140 close(); 146 - updateProfileShadow(queryClient, props.profile.did, { blockUri: undefined }); 141 + updateProfileShadow(queryClient, profile.did, { blockUri: undefined }); 147 142 148 143 setTimeout(() => { 149 - resetThreadQueries(queryClient, props.profile.did); 144 + resetThreadQueries(queryClient, profile.did); 150 145 }, 1_500); 151 146 }, 152 147 onError() { ··· 156 151 157 152 return ( 158 153 <Prompt.Container maxWidth="md" disabled={mutation.isPending}> 159 - <Prompt.Title>{/* @once */ `Unblock @${props.profile.handle.toLowerCase()}?`}</Prompt.Title> 154 + <Prompt.Title>{/* @once */ `Unblock @${profile.handle.toLowerCase()}?`}</Prompt.Title> 160 155 161 156 <Prompt.Description>Here's what happens if you do:</Prompt.Description> 162 157 ··· 196 191 ); 197 192 }; 198 193 199 - const BlockedByList = (props: BlockAccountPromptInnerProps) => { 194 + const BlockedByList = ({ profile }: BlockAccountPrompt) => { 200 195 const { close } = useModalContext(); 201 196 202 - const query = createListMetaQuery(() => props.profile.viewer!.blockingByList!.uri); 197 + const listBasic = profile.viewer!.blockingByList!; 198 + const query = createListMetaQuery(() => listBasic.uri); 203 199 204 200 return ( 205 201 <Prompt.Container> 206 - <Prompt.Title>{/* @once */ `Can't unblock @${props.profile.handle.toLowerCase()}`}</Prompt.Title> 202 + <Prompt.Title>{/* @once */ `Can't unblock @${profile.handle.toLowerCase()}`}</Prompt.Title> 207 203 <Prompt.Description> 208 204 You've currently opted to block all accounts that are in this moderation list: 209 205 </Prompt.Description> ··· 229 225 ); 230 226 }; 231 227 232 - const resetThreadQueries = (queryClient: QueryClient, did: Did) => { 228 + const resetThreadQueries = (queryClient: QueryClient, did: At.DID) => { 233 229 const substring = `at://${did}/`; 234 230 235 231 queryClient.resetQueries({
+1 -1
src/components/moderation/labels-on-me.tsx
··· 1 1 import { Show } from 'solid-js'; 2 2 3 - import type { ComAtprotoLabelDefs } from '@atcute/atproto'; 3 + import type { ComAtprotoLabelDefs } from '@atcute/client/lexicons'; 4 4 5 5 import { useSession } from '~/lib/states/session'; 6 6
+13 -20
src/components/moderation/mute-account-prompt.tsx
··· 1 1 import { Match, Switch, onMount } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 4 - import { ok } from '@atcute/client'; 3 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 5 4 import { createMutation } from '@mary/solid-query'; 6 5 7 6 import { updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow'; ··· 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();
+13 -15
src/components/notifications/notification-item.tsx
··· 1 1 import { type Component, type ComponentProps, type JSX, createMemo } from 'solid-js'; 2 2 3 - import { 4 - type AppBskyEmbedImages, 5 - type AppBskyFeedDefs, 6 - type AppBskyFeedPost, 7 - type AppBskyNotificationListNotifications, 8 - type MediaEmbed, 9 - unwrapMediaEmbed, 10 - } from '@atcute/bluesky'; 3 + import type { 4 + AppBskyEmbedImages, 5 + AppBskyFeedDefs, 6 + AppBskyFeedPost, 7 + AppBskyNotificationListNotifications, 8 + } from '@atcute/client/lexicons'; 11 9 import { useQueryClient } from '@mary/solid-query'; 12 10 13 11 import { getModerationUI } from '~/api/moderation'; ··· 21 19 NotificationSlice, 22 20 RepostNotificationSlice, 23 21 } from '~/api/queries/notification-feed'; 24 - import { assertCanonicalResourceUri } from '~/api/types/at-uri'; 22 + import { parseAtUri } from '~/api/types/at-uri'; 23 + import { type MediaEmbedView, unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view'; 25 24 26 25 import { history } from '~/globals/navigation'; 27 26 ··· 96 95 } 97 96 } else { 98 97 const post = item.view; 99 - const { repo, rkey } = assertCanonicalResourceUri(post.uri); 100 - 101 - href = `/${repo}/${rkey}`; 98 + const uri = parseAtUri(post.uri); 99 + href = `/${uri.repo}/${uri.rkey}`; 102 100 } 103 101 104 102 if (isElementAltClicked(ev)) { ··· 236 234 237 235 if (type === 'like' || type === 'repost') { 238 236 const post = data.view; 239 - const record = post.record as AppBskyFeedPost.Main; 237 + const record = post.record as AppBskyFeedPost.Record; 240 238 241 - const media = unwrapMediaEmbed(post.embed); 239 + const media = unwrapMediaEmbedView(post.embed); 242 240 const gif = maybeUnwrapGifEmbed(media); 243 241 244 242 return ( ··· 302 300 ); 303 301 }; 304 302 305 - const maybeUnwrapGifEmbed = (embed: MediaEmbed | undefined): BlueskyGifSnippet | undefined => { 303 + const maybeUnwrapGifEmbed = (embed: MediaEmbedView | undefined): BlueskyGifSnippet | undefined => { 306 304 if (embed?.$type === 'app.bsky.embed.external#view') { 307 305 const snippet = detectSnippet(embed.external); 308 306 if (snippet.type !== SnippetType.BLUESKY_GIF) {
+10 -11
src/components/profiles/edit-profile-dialog.tsx
··· 1 1 import { Show, createMemo, createSignal } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 4 - import { ClientResponseError } from '@atcute/client'; 5 - import type { Blob as AtpBlob } from '@atcute/lexicons'; 3 + import { XRPCError } from '@atcute/client'; 4 + import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 6 5 import { createMutation } from '@mary/solid-query'; 7 6 8 7 import { uploadBlob } from '~/api/queries/blob'; ··· 35 34 const EditProfileDialog = ({ profile }: EditProfileDialogProps) => { 36 35 const { close } = useModalContext(); 37 36 38 - const { client } = useAgent(); 37 + const { rpc } = useAgent(); 39 38 const { currentAccount } = useSession(); 40 39 41 40 const snapshot = { ··· 75 74 const $avatar = avatar(); 76 75 const $banner = banner(); 77 76 78 - let avatarPromise: Promise<AtpBlob<any>> | undefined; 79 - let bannerPromise: Promise<AtpBlob<any>> | undefined; 77 + let avatarPromise: Promise<At.Blob<any>> | undefined; 78 + let bannerPromise: Promise<At.Blob<any>> | undefined; 80 79 81 80 if ($avatar instanceof Blob) { 82 - avatarPromise = compressProfileImage($avatar, 1000, 1000).then((res) => uploadBlob(client, res.blob)); 81 + avatarPromise = compressProfileImage($avatar, 1000, 1000).then((res) => uploadBlob(rpc, res.blob)); 83 82 } 84 83 if ($banner instanceof Blob) { 85 - bannerPromise = compressProfileImage($banner, 3000, 1000).then((res) => uploadBlob(client, res.blob)); 84 + bannerPromise = compressProfileImage($banner, 3000, 1000).then((res) => uploadBlob(rpc, res.blob)); 86 85 } 87 86 88 87 let retriesRemaining = 3; 89 88 while (true) { 90 - const existing = await getRecord(client, { 89 + const existing = await getRecord(rpc, { 91 90 repo, 92 91 collection: 'app.bsky.actor.profile', 93 92 rkey: 'self', ··· 115 114 } 116 115 117 116 try { 118 - await putRecord(client, { 117 + await putRecord(rpc, { 119 118 repo, 120 119 collection: 'app.bsky.actor.profile', 121 120 rkey: 'self', ··· 123 122 swapRecord: existing?.cid ?? null, 124 123 }); 125 124 } catch (err) { 126 - if (err instanceof ClientResponseError && err.error === 'InvalidSwapError') { 125 + if (err instanceof XRPCError && err.kind === 'InvalidSwapError') { 127 126 if (retriesRemaining--) { 128 127 continue; 129 128 }
+1 -1
src/components/profiles/handle-overflow-menu.tsx
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 1 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 2 2 3 3 import { useModalContext } from '~/globals/modals'; 4 4
+1 -1
src/components/profiles/profile-follow-button.tsx
··· 1 1 import { type JSX, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 3 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 4 5 5 import { useProfileShadow } from '~/api/cache/profile-shadow'; 6 6 import { createProfileFollowMutation } from '~/api/mutations/profile';
+1 -1
src/components/profiles/profile-item-pressable.tsx
··· 1 1 import { type JSX, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 3 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 4 5 5 import { moderateProfile } from '~/api/moderation/entities/profile'; 6 6
+1 -1
src/components/profiles/profile-item.tsx
··· 1 1 import { type JSX, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 3 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 4 import { useQueryClient } from '@mary/solid-query'; 5 5 6 6 import { moderateProfile } from '~/api/moderation/entities/profile';
+1 -1
src/components/profiles/profile-overflow-menu.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 3 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 4 5 5 import { useProfileShadow } from '~/api/cache/profile-shadow'; 6 6
+4 -4
src/components/profiles/profile-view-header.tsx
··· 1 1 import { type Component, type ComponentProps, type JSX, Match, Show, Switch, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 3 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 4 4 5 5 import { useProfileShadow } from '~/api/cache/profile-shadow'; 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 { assertCanonicalResourceUri } 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 { repo, rkey } = assertCanonicalResourceUri(list().uri); 263 - return `/${repo}/lists/${rkey}`; 262 + const uri = parseAtUri(list().uri); 263 + return `/${uri.repo}/lists/${uri.rkey}`; 264 264 }; 265 265 266 266 return (
+6 -1
src/components/prompt.tsx
··· 74 74 } 75 75 76 76 const PromptTitle = (props: PromptTitleProps) => { 77 - return <h1 class="mb-1 break-words text-lg font-bold">{props.children}</h1>; 77 + const isDesktop = useMediaQuery('(width >= 688px) and (height >= 500px)'); 78 + return ( 79 + <h1 class={`mb-1 break-words font-bold` + (!isDesktop() ? ` text-base` : ` text-xl`)}> 80 + {props.children} 81 + </h1> 82 + ); 78 83 }; 79 84 80 85 export { PromptTitle as Title };
+4 -6
src/components/rich-text.tsx
··· 1 1 import type { JSX } from 'solid-js'; 2 2 3 - import type { BlueMojiRichtextFacet } from '@atcute/bluemoji'; 4 - import type { AppBskyRichtextFacet } from '@atcute/bluesky'; 5 3 import { segmentize } from '@atcute/bluesky-richtext-segmenter'; 4 + import type { AppBskyRichtextFacet } from '@atcute/client/lexicons'; 6 5 7 6 import { isLinkValid } from '~/api/utils/strings'; 8 7 ··· 65 64 66 65 break; 67 66 } else if (type === 'blue.moji.richtext.facet') { 68 - const feat = feature as BlueMojiRichtextFacet.Main; 69 - const formats = feat.formats; 67 + const formats = feature.formats; 70 68 if (formats.$type !== 'blue.moji.richtext.facet#formats_v0' || !formats.png_128) { 71 69 continue; 72 70 } 73 71 74 72 node = ( 75 73 <img 76 - src={/* @once */ getCdnUrl(feat.did, formats.png_128)} 77 - title={/* @once */ feat.name} 74 + src={/* @once */ getCdnUrl(feature.did, formats.png_128)} 75 + title={/* @once */ feature.name} 78 76 class={`mx-px inline-block align-top text-[0]` + (!large ? ` h-5 w-5` : ` h-6 w-6`)} 79 77 /> 80 78 );
+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();
+7 -7
src/components/threads/highlighted-post.tsx
··· 1 1 import { Show, createMemo } from 'solid-js'; 2 2 3 - import { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons'; 4 4 5 5 import { usePostShadow } from '~/api/cache/post-shadow'; 6 6 import { getModerationUI } from '~/api/moderation'; 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 { assertCanonicalResourceUri } 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'; ··· 58 58 const moderationOptions = inject(ModerationService); 59 59 60 60 const author = () => post().author; 61 - const record = () => post().record as AppBskyFeedPost.Main; 61 + const record = () => post().record as AppBskyFeedPost.Record; 62 62 const embed = () => post().embed; 63 63 64 64 const shadow = usePostShadow(post); 65 65 66 - const { rkey } = assertCanonicalResourceUri(post().uri); 66 + const uri = parseAtUri(post().uri); 67 67 const authorDid = author().did; 68 68 69 69 const isOurPost = currentAccount && authorDid === currentAccount.did; 70 70 71 71 const authorHref = `/${authorDid}`; 72 - const href = `/${authorDid}/${rkey}`; 72 + const href = `/${authorDid}/${uri.rkey}`; 73 73 74 74 const moderation = createMemo(() => moderatePost(post(), moderationOptions())); 75 75 const ui = createMemo(() => getModerationUI(moderation(), ContextContentView)); ··· 151 151 } 152 152 153 153 if (props.translate) { 154 - return <PostTranslation text={(post().record as AppBskyFeedPost.Main).text} />; 154 + return <PostTranslation text={(post().record as AppBskyFeedPost.Record).text} />; 155 155 } 156 156 157 157 if (needTranslation(post(), currentAccount.preferences.translation)) { ··· 274 274 return false; 275 275 } 276 276 277 - const record = post.record as AppBskyFeedPost.Main; 277 + const record = post.record as AppBskyFeedPost.Record; 278 278 const langs = record.langs; 279 279 280 280 if (!langs || langs.length < 1 || !record.text) {
+2 -2
src/components/threads/overflow-thread-item.tsx
··· 1 1 import type { OverflowAncestorItem, OverflowDescendantItem } from '~/api/models/post-thread'; 2 - import { assertCanonicalResourceUri } 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 = assertCanonicalResourceUri(props.item.uri); 23 + const uri = parseAtUri(props.item.uri); 24 24 return `/${uri.repo}/${uri.rkey}`; 25 25 })()} 26 26 class={
+6 -4
src/components/threads/post-thread-item.tsx
··· 1 1 import { type JSX, Show, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedPost } from '@atcute/bluesky'; 3 + import type { AppBskyFeedPost } from '@atcute/client/lexicons'; 4 4 import { useQueryClient } from '@mary/solid-query'; 5 5 6 6 import { usePostShadow } from '~/api/cache/post-shadow'; ··· 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 { assertCanonicalResourceUri } from '~/api/types/at-uri'; 12 + import { parseAtUri } from '~/api/types/at-uri'; 13 13 14 14 import { history } from '~/globals/navigation'; 15 15 ··· 49 49 const post = () => item().post; 50 50 51 51 const author = () => post().author; 52 - const record = post().record as AppBskyFeedPost.Main; 52 + const record = post().record as AppBskyFeedPost.Record; 53 53 const embed = post().embed; 54 54 55 55 const shadow = usePostShadow(post); 56 56 57 + const uri = parseAtUri(post().uri); 57 58 const authorHref = `/${author().did}`; 58 - const href = `/${author().did}/${assertCanonicalResourceUri(post().uri).rkey}`; 59 + const href = `/${author().did}/${uri.rkey}`; 59 60 60 61 const isOurPost = currentAccount && currentAccount.did === author().did; 61 62 ··· 112 113 <div class="min-w-0 grow py-3"> 113 114 <PostMeta 114 115 post={/* @once */ post()} 116 + context={(item() as PostDescendantItem).context} 115 117 href={href} 116 118 authorHref={authorHref} 117 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 { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 2 - import { ClientResponseError, ok } from '@atcute/client'; 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 { assertCanonicalResourceUri } 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 { rkey } = assertCanonicalResourceUri(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: 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: 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.Main, 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: rkey, 74 - }, 75 - }), 76 - ); 77 - 78 - updatePostShadow(queryClient, post.uri, { deleted: true }); 79 - onPostDelete?.(); 80 39 }; 81 40 82 41 return (
+6 -6
src/components/timeline/pin-post-prompt.tsx
··· 1 1 import { Match, Show, Switch, batch } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 4 - import { ClientResponseError } from '@atcute/client'; 3 + import { XRPCError } from '@atcute/client'; 4 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 5 5 import { createMutation } from '@mary/solid-query'; 6 6 7 7 import { updatePostShadow, usePostShadow } from '~/api/cache/post-shadow'; ··· 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 }
+1 -1
src/components/timeline/post-actions.tsx
··· 1 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 3 3 import { type PostShadowView } from '~/api/cache/post-shadow'; 4 4 import { createPostLikeMutation, createPostRepostMutation } from '~/api/mutations/post';
+6 -8
src/components/timeline/post-feed-item.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedPost } from '@atcute/bluesky'; 4 - import { type Did } from '@atcute/lexicons'; 3 + import type { AppBskyFeedPost, At } from '@atcute/client/lexicons'; 5 4 import { useQueryClient } from '@mary/solid-query'; 6 5 7 6 import { usePostShadow } from '~/api/cache/post-shadow'; ··· 10 9 import { ContextContentList } from '~/api/moderation/constants'; 11 10 import { moderatePost } from '~/api/moderation/entities/post'; 12 11 import { precacheProfile } from '~/api/queries-cache/profile-precache'; 13 - import { assertCanonicalResourceUri } from '~/api/types/at-uri'; 12 + import { parseAtUri } from '~/api/types/at-uri'; 14 13 15 14 import { history } from '~/globals/navigation'; 16 15 ··· 37 36 /** Expected to be static */ 38 37 item: UiTimelineItem; 39 38 highlighted?: boolean; 40 - timelineDid?: Did; 39 + timelineDid?: At.DID; 41 40 } 42 41 43 42 const PostFeedItem = ({ item, highlighted, timelineDid }: PostFeedItemProps) => { ··· 51 50 const author = post.author; 52 51 const authorDid = author.did; 53 52 54 - const record = post.record as AppBskyFeedPost.Main; 53 + const record = post.record as AppBskyFeedPost.Record; 55 54 const embed = post.embed; 56 55 57 56 const shadow = usePostShadow(post); 58 57 59 - const { rkey } = assertCanonicalResourceUri(post.uri); 60 - 58 + const uri = parseAtUri(post.uri); 61 59 const authorHref = `/${authorDid}`; 62 - const href = `/${authorDid}/${rkey}`; 60 + const href = `/${authorDid}/${uri.rkey}`; 63 61 64 62 const isOurPost = currentAccount && authorDid === currentAccount.did; 65 63
+24 -4
src/components/timeline/post-meta.tsx
··· 1 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 2 2 import { useQueryClient } from '@mary/solid-query'; 3 3 4 4 import { precacheProfile } from '~/api/queries-cache/profile-precache'; 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;
+1 -1
src/components/timeline/post-overflow-menu.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 import { useQueryClient } from '@mary/solid-query'; 5 5 6 6 import { usePostShadow } from '~/api/cache/post-shadow';
+4 -5
src/components/timeline/post-reply-context.tsx
··· 1 - import type { AppBskyFeedPost } from '@atcute/bluesky'; 1 + import type { AppBskyFeedPost } from '@atcute/client/lexicons'; 2 2 3 3 import type { UiTimelineItem } from '~/api/models/timeline'; 4 4 import { createProfileQuery } from '~/api/queries/profile'; 5 - import { assertCanonicalResourceUri } 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 ··· 41 41 ); 42 42 } 43 43 44 - const raw = (post.record as AppBskyFeedPost.Main).reply?.parent; 44 + const raw = (post.record as AppBskyFeedPost.Record).reply?.parent; 45 45 if (raw) { 46 - const { repo: did } = assertCanonicalResourceUri(raw.uri); 47 - 46 + const did = parseAtUri(raw.uri).repo; 48 47 if (did === currentAccount?.did) { 49 48 return <div class="mb-0.5 flex text-de text-contrast-muted">Replying to you</div>; 50 49 }
+4 -4
src/components/timeline/post-share-menu.tsx
··· 1 - import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons'; 2 2 3 - import { assertCanonicalResourceUri } 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 } = assertCanonicalResourceUri(post.uri); 24 + const { rkey } = parseAtUri(post.uri); 25 25 26 26 return ( 27 27 <Menu.Container anchor={props.anchor} placement="bottom-end"> ··· 38 38 icon={ClipboardOutlinedIcon} 39 39 label="Copy post text" 40 40 onClick={() => { 41 - const record = post.record as AppBskyFeedPost.Main; 41 + const record = post.record as AppBskyFeedPost.Record; 42 42 const serialized = serializeRichText(record.text, record.facets); 43 43 44 44 navigator.clipboard.writeText(serialized).then(close);
+24 -37
src/components/timeline/revise-post-prompt.tsx
··· 1 - import { 2 - type AppBskyFeedDefs, 3 - type AppBskyFeedPost, 4 - type AppBskyFeedThreadgate, 5 - type RawMediaEmbed, 6 - type RawRecordEmbed, 7 - unwrapRawEmbed, 8 - } from '@atcute/bluesky'; 1 + import type { AppBskyFeedDefs, AppBskyFeedPost, AppBskyFeedThreadgate } from '@atcute/client/lexicons'; 9 2 10 - import { assertCanonicalResourceUri } from '~/api/types/at-uri'; 3 + import { parseAtUri } from '~/api/types/at-uri'; 4 + import { type MediaEmbed, type RecordEmbed, unwrapEmbed } from '~/api/utils/bluesky/embed'; 11 5 import { serializeRichText } from '~/api/utils/richtext-stringify'; 12 6 13 7 import { openModal, useModalContext } from '~/globals/modals'; ··· 21 15 import { 22 16 type ComposerState, 23 17 type PostEmbed, 24 - type PostImage, 25 18 type PostLinkEmbed, 26 19 type PostMediaEmbed, 27 20 type PostRecordEmbed, ··· 39 32 const { close } = useModalContext(); 40 33 41 34 (async () => { 42 - const record = post.record as AppBskyFeedPost.Main; 43 - const threadgate = post.threadgate?.record as AppBskyFeedThreadgate.Main | undefined; 35 + const record = post.record as AppBskyFeedPost.Record; 36 + const threadgate = post.threadgate?.record as AppBskyFeedThreadgate.Record | undefined; 44 37 const embeddingDisabled = post.viewer?.embeddingDisabled; 45 38 46 - const embeds = unwrapRawEmbed(record.embed); 39 + const embeds = unwrapEmbed(record.embed); 47 40 const draftEmbeds: PostEmbed = { 48 41 link: embeds.media ? toLinkEmbed(post, embeds.media) : undefined, 49 42 media: embeds.media ? toMediaEmbed(post, embeds.media) : undefined, ··· 83 76 84 77 export default RevisePostPrompt; 85 78 86 - const toMediaEmbed = (post: AppBskyFeedDefs.PostView, embed: RawMediaEmbed): PostMediaEmbed | undefined => { 79 + const toMediaEmbed = (post: AppBskyFeedDefs.PostView, embed: MediaEmbed): PostMediaEmbed | undefined => { 87 80 const authorDid = post.author.did; 88 81 89 82 switch (embed.$type) { 90 83 case 'app.bsky.embed.images': { 91 84 return { 92 85 type: 'image', 93 - images: embed.images.map((item): PostImage => { 94 - assert('$type' in item.image); 95 - 96 - return { 97 - source: { 98 - type: 'remote', 99 - blob: item.image, 100 - aspectRatio: item.aspectRatio, 101 - }, 102 - alt: item.alt, 103 - }; 104 - }), 86 + images: embed.images.map((item) => ({ 87 + source: { 88 + type: 'remote', 89 + blob: item.image, 90 + aspectRatio: item.aspectRatio, 91 + }, 92 + alt: item.alt, 93 + })), 105 94 labels: post.labels?.filter((label) => label.src === authorDid).map((label) => label.val) ?? [], 106 95 }; 107 96 } 108 97 case 'app.bsky.embed.video': { 109 - assert('$type' in embed.video); 110 - 111 98 return { 112 99 type: 'video', 113 100 source: { ··· 122 109 } 123 110 }; 124 111 125 - const toLinkEmbed = (post: AppBskyFeedDefs.PostView, embed: RawMediaEmbed): PostLinkEmbed | undefined => { 112 + const toLinkEmbed = (post: AppBskyFeedDefs.PostView, embed: MediaEmbed): PostLinkEmbed | undefined => { 126 113 const authorDid = post.author.did; 127 114 128 115 switch (embed.$type) { ··· 142 129 } 143 130 }; 144 131 145 - const toRecordEmbed = (embed: RawRecordEmbed): PostRecordEmbed | undefined => { 132 + const toRecordEmbed = (embed: RecordEmbed): PostRecordEmbed | undefined => { 146 133 const ref = embed.record; 147 134 148 - const refUri = ref.uri; 149 - const uri = assertCanonicalResourceUri(refUri); 135 + const uri = ref.uri; 136 + const { collection } = parseAtUri(uri); 150 137 151 - switch (uri.collection) { 138 + switch (collection) { 152 139 case 'app.bsky.feed.post': { 153 - return { type: 'quote', uri: refUri, origin: false }; 140 + return { type: 'quote', uri, origin: false }; 154 141 } 155 142 case 'app.bsky.graph.list': { 156 - return { type: 'list', uri: refUri }; 143 + return { type: 'list', uri }; 157 144 } 158 145 case 'app.bsky.feed.generator': { 159 - return { type: 'feed', uri: refUri }; 146 + return { type: 'feed', uri }; 160 147 } 161 148 } 162 149 163 - assert(false, `unknown "${uri.collection}" record type`); 150 + assert(false, `unknown "${collection}" record type`); 164 151 };
+2 -2
src/components/timeline/timeline-list.tsx
··· 1 - import type { Did } from '@atcute/lexicons'; 1 + import type { At } from '@atcute/client/lexicons'; 2 2 3 3 import { type TimelineParams, useTimelineQuery } from '~/api/queries/timeline'; 4 4 ··· 9 9 10 10 export interface TimelineListProps { 11 11 params: TimelineParams; 12 - timelineDid?: Did; 12 + timelineDid?: At.DID; 13 13 } 14 14 15 15 const TimelineList = (props: TimelineListProps) => {
+1 -1
src/lib/aglais-bookmarks/db.ts
··· 1 1 import type { DBSchema } from 'idb'; 2 2 3 - import type { AppBskyFeedDefs } from '@atcute/bluesky'; 3 + import type { AppBskyFeedDefs } from '@atcute/client/lexicons'; 4 4 5 5 export interface BookmarkDBSchema extends DBSchema { 6 6 tags: {
+2 -2
src/lib/aglais-bookmarks/search.ts
··· 1 - import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 2 1 import type { Token } from '@atcute/bluesky-search-parser'; 2 + import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons'; 3 3 import { mapDefined } from '@mary/array-fns'; 4 4 5 5 import { DID_RE, HANDLE_RE } from '~/api/types/identity'; ··· 84 84 }); 85 85 86 86 const re = new RegExp('\\b' + values.join('|') + '\\b', 'i'); 87 - predicates.push((post) => re.test((post.record as AppBskyFeedPost.Main).text)); 87 + predicates.push((post) => re.test((post.record as AppBskyFeedPost.Record).text)); 88 88 } 89 89 90 90 return (post: AppBskyFeedDefs.PostView) => predicates.every((fn) => fn(post));
+3 -23
src/lib/atproto/labeler.ts
··· 1 1 import { type FetchHandler, type FetchHandlerObject, buildFetchHandler } from '@atcute/client'; 2 - import type { Did } from '@atcute/lexicons'; 2 + import type { At } from '@atcute/client/lexicons'; 3 + import { mergeHeaders } from '@atcute/client/utils/http'; 3 4 4 5 export interface Labeler { 5 - did: Did; 6 + did: At.DID; 6 7 redact: boolean; 7 8 } 8 9 ··· 23 24 }); 24 25 }; 25 26 }; 26 - 27 - const mergeHeaders = ( 28 - init: HeadersInit | undefined, 29 - defaults: Record<string, string | null>, 30 - ): HeadersInit | undefined => { 31 - let headers: Headers | undefined; 32 - 33 - for (const name in defaults) { 34 - const value = defaults[name]; 35 - 36 - if (value !== null) { 37 - headers ??= new Headers(init); 38 - 39 - if (!headers.has(name)) { 40 - headers.set(name, value); 41 - } 42 - } 43 - } 44 - 45 - return headers ?? init; 46 - };
+1 -1
src/lib/bsky/image.ts
··· 1 - import type { AppBskyEmbedDefs } from '@atcute/bluesky'; 1 + import type { AppBskyEmbedDefs } from '@atcute/client/lexicons'; 2 2 import { remove as removeExif } from '@mary/exif-rm'; 3 3 4 4 const MAX_SIZE = 1_000_000; // 1 MB
+3 -6
src/lib/preferences/account.ts
··· 1 - import type { AppBskyFeedDefs, AppBskyGraphDefs } from '@atcute/bluesky'; 2 - import type { Did, ResourceUri } from '@atcute/lexicons'; 1 + import type { AppBskyFeedDefs, AppBskyGraphDefs, At } from '@atcute/client/lexicons'; 3 2 4 3 import type { ModerationLabeler, ModerationPreferences } from '~/api/moderation'; 5 4 ··· 29 28 30 29 export interface ModerationLabelerPreferences { 31 30 updated: number; 32 - definitions: Record<Did, ModerationLabeler>; 31 + definitions: Record<At.DID, ModerationLabeler>; 33 32 } 34 33 35 34 export type SavedFeed = SavedGeneratorFeed | SavedListFeed | SavedSearchFeed; ··· 54 53 } 55 54 56 55 export interface PersistedThreadgate { 57 - allow?: Array< 58 - { type: 'following' } | { type: 'follower' } | { type: 'mention' } | { type: 'list'; uri: ResourceUri } 59 - >; 56 + allow?: Array<{ type: 'following' } | { type: 'mention' } | { type: 'list'; uri: At.Uri }>; 60 57 } 61 58 62 59 export interface PersistedPostgate {
+3 -4
src/lib/preferences/sessions.ts
··· 1 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 2 - import type { Did } from '@atcute/lexicons'; 1 + import type { AppBskyActorDefs, At } from '@atcute/client/lexicons'; 3 2 4 3 export interface SessionPreferenceSchema { 5 4 $version: 1; 6 - active: Did | undefined; 5 + active: At.DID | undefined; 7 6 accounts: AccountData[]; 8 7 } 9 8 10 9 export interface AccountData { 11 10 /** Account DID */ 12 - readonly did: Did; 11 + readonly did: At.DID; 13 12 profile: AppBskyActorDefs.ProfileViewDetailed; 14 13 }
+3 -7
src/lib/preferences/snippets/composer.ts
··· 1 - import type { AppBskyFeedPostgate, AppBskyFeedThreadgate } from '@atcute/bluesky'; 1 + import type { AppBskyFeedPostgate, AppBskyFeedThreadgate } from '@atcute/client/lexicons'; 2 2 3 3 import type { PersistedPostgate, PersistedThreadgate } from '../account'; 4 4 5 - export type ThreadgateState = Pick<AppBskyFeedThreadgate.Main, 'allow' | 'hiddenReplies'>; 6 - export type PostgateState = Pick<AppBskyFeedPostgate.Main, 'detachedEmbeddingUris' | 'embeddingRules'>; 5 + export type ThreadgateState = Pick<AppBskyFeedThreadgate.Record, 'allow' | 'hiddenReplies'>; 6 + export type PostgateState = Pick<AppBskyFeedPostgate.Record, 'detachedEmbeddingUris' | 'embeddingRules'>; 7 7 8 8 export const toPersistedThreadgate = (gate: ThreadgateState): PersistedThreadgate => { 9 9 return { ··· 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':
+6 -6
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'; 4 - import type { Did } from '@atcute/lexicons'; 3 + import { XRPC, simpleFetchHandler } from '@atcute/client'; 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'; 7 7 ··· 14 14 import { useSession } from './session'; 15 15 16 16 export interface AgentContext { 17 - did: 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 });
+17 -17
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'; 14 - import type { Did, GenericUri } from '@atcute/lexicons'; 13 + import { type FetchHandler, type FetchHandlerObject, XRPC, XRPCError } from '@atcute/client'; 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'; 17 17 ··· 27 27 import { assert } from '../utils/invariant'; 28 28 29 29 export interface CurrentAccountState { 30 - readonly did: 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: Did): Promise<void>; 44 - removeAccount(did: 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: 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 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: 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: 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: 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 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 { Did } from '@atcute/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<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 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<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 + }
+6 -2
src/main.tsx
··· 2 2 import { type JSX, createSignal, onMount } from 'solid-js'; 3 3 import { render } from 'solid-js/web'; 4 4 5 - import type { Did } from '@atcute/lexicons'; 5 + import type { At } from '@atcute/client/lexicons'; 6 6 import { configureOAuth } from '@atcute/oauth-browser-client'; 7 7 8 8 import * as navigation from '~/globals/navigation'; ··· 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: 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/shell.tsx
··· 8 8 lazy, 9 9 } from 'solid-js'; 10 10 11 - import type { AppBskyNotificationGetUnreadCount } from '@atcute/bluesky'; 11 + import type { AppBskyNotificationGetUnreadCount } from '@atcute/client/lexicons'; 12 12 import type { DefinedCreateQueryResult } from '@mary/solid-query'; 13 13 14 14 import { createNotificationCountQuery } from '~/api/queries/notification-count'; ··· 99 99 unread, 100 100 }: { 101 101 route: Accessor<MatchedRouteState>; 102 - unread: DefinedCreateQueryResult<AppBskyNotificationGetUnreadCount.$output>; 102 + unread: DefinedCreateQueryResult<AppBskyNotificationGetUnreadCount.Output>; 103 103 }) => { 104 104 const active = () => route().def.meta?.name; 105 105
+3 -4
src/views/bluemoji-emotes.tsx
··· 1 1 import { type JSX, createEffect, createSignal } from 'solid-js'; 2 2 3 - import type { Blob as AtpBlob } from '@atcute/lexicons'; 4 3 import { remove as removeExif } from '@mary/exif-rm'; 5 4 import { createInfiniteQuery } from '@mary/solid-query'; 6 5 ··· 46 45 openModal(() => <AddEmotePrompt blob={blob} onAdd={() => {}} />); 47 46 }; 48 47 49 - const { client } = useAgent(); 48 + const { rpc } = useAgent(); 50 49 const { currentAccount } = useSession(); 51 50 52 51 const query = createInfiniteQuery(() => ({ 53 52 queryKey: ['bluemoji', 'emotes'], 54 53 async queryFn(ctx) { 55 - return listRecords(client, { 54 + return listRecords(rpc, { 56 55 repo: currentAccount!.did, 57 56 collection: 'blue.moji.collection.item', 58 57 limit: 100, ··· 114 113 return ( 115 114 <div class="flex items-center gap-4 px-4 py-4"> 116 115 <img 117 - src={/* @once */ getCdnUrl(currentAccount!.did, (blob! as AtpBlob).ref.$link)} 116 + src={/* @once */ getCdnUrl(currentAccount!.did, blob!.ref.$link)} 118 117 class="h-8 w-8 object-cover" 119 118 /> 120 119
+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 { Did, RecordKey } from '@atcute/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: Did; 17 - rkey: 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 { Did, RecordKey } from '@atcute/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: Did; 16 - rkey: 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 { Did, RecordKey } from '@atcute/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: Did; 17 - rkey: 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);
+11 -15
src/views/post-thread.tsx
··· 1 1 import { For, Match, Switch, createEffect, createMemo, createSignal } from 'solid-js'; 2 2 3 - import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 4 - import { ClientResponseError } from '@atcute/client'; 5 - import type { $type, ActorIdentifier, Did, RecordKey } from '@atcute/lexicons'; 3 + import { XRPCError } from '@atcute/client'; 4 + import type { AppBskyFeedDefs, AppBskyFeedPost, At, Brand } from '@atcute/client/lexicons'; 6 5 import { useQueryClient } from '@mary/solid-query'; 7 6 8 7 import { ··· 39 38 import VirtualItem from '~/components/virtual-item'; 40 39 41 40 const PostThreadPage = () => { 42 - const { didOrHandle, rkey } = useParams<{ 43 - didOrHandle: ActorIdentifier; 44 - rkey: RecordKey; 45 - }>(); 41 + const { didOrHandle, rkey } = useParams(); 46 42 47 43 const queryClient = useQueryClient(); 48 44 ··· 54 50 if (data && data.$type === 'app.bsky.feed.defs#threadViewPost') { 55 51 const post = data.post; 56 52 const author = post.author; 57 - const record = post.record as AppBskyFeedPost.Main; 53 + const record = post.record as AppBskyFeedPost.Record; 58 54 59 55 const authorTitle = `@${truncateMiddle(author.handle, 29).toLowerCase()}`; 60 56 const postContent = record.text?.trim(); ··· 79 75 80 76 <Switch> 81 77 <Match when={query.error} keyed> 82 - {(err) => { 83 - if (err instanceof ClientResponseError) { 84 - if (err.error === 'NotFound') { 78 + {(error) => { 79 + if (error instanceof XRPCError) { 80 + if (error.kind === 'NotFound') { 85 81 return ( 86 82 <div class="px-4 py-3"> 87 83 <div class="rounded-md border border-outline p-3"> ··· 92 88 } 93 89 } 94 90 95 - return <ErrorView error={err} onRetry={() => query.refetch()} />; 91 + return <ErrorView error={error} onRetry={() => query.refetch()} />; 96 92 }} 97 93 </Match> 98 94 ··· 106 102 const data = accessor(); 107 103 const type = data.$type; 108 104 109 - let did: Did | undefined; 105 + let did: At.DID | undefined; 110 106 111 107 if (type === 'app.bsky.feed.defs#threadViewPost') { 112 108 did = data.post.author.did; ··· 221 217 export default PostThreadPage; 222 218 223 219 const ThreadView = (props: { 224 - data: $type.enforce<AppBskyFeedDefs.ThreadViewPost>; 220 + data: Brand.Union<AppBskyFeedDefs.ThreadViewPost>; 225 221 isPlaceholderData: boolean; 226 222 onReplyPublish?: () => void; 227 223 onMainPostDelete?: () => void; ··· 261 257 } 262 258 } 263 259 264 - return (post.record as AppBskyFeedPost.Main).reply !== undefined; 260 + return (post.record as AppBskyFeedPost.Record).reply !== undefined; 265 261 }; 266 262 267 263 return (
+1 -6
src/views/profile-curation-list.tsx
··· 1 1 import { Match, Switch } from 'solid-js'; 2 2 3 - import type { Did, RecordKey } from '@atcute/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: Did; 18 - rkey: 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 { ActorIdentifier, RecordKey } from '@atcute/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: ActorIdentifier; 29 - rkey: RecordKey; 30 - }>(); 26 + const { didOrHandle, rkey } = useParams(); 31 27 32 28 const queryClient = useQueryClient(); 33 29
+1 -3
src/views/profile-feeds.tsx
··· 1 - import type { Did } from '@atcute/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<{ did: Did }>(); 12 + const { did } = useParams(); 15 13 16 14 const feeds = createProfileFeedsQuery(() => did); 17 15 const profile = createProfileQuery(() => did);
+1 -3
src/views/profile-followers.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { Did } from '@atcute/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<{ did: Did }>(); 14 + const { did } = useParams(); 17 15 18 16 const followers = createProfileFollowersQuery(() => did); 19 17 const subject = createMemo(() => followers.data?.pages[0].subject);
+1 -3
src/views/profile-following.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { Did } from '@atcute/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<{ did: Did }>(); 14 + const { did } = useParams(); 17 15 18 16 const following = createProfileFollowingQuery(() => did); 19 17 const subject = createMemo(() => following.data?.pages[0].subject);
+1 -3
src/views/profile-known-followers.tsx
··· 1 1 import { createMemo } from 'solid-js'; 2 2 3 - import type { Did } from '@atcute/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<{ did: Did }>(); 14 + const { did } = useParams(); 17 15 18 16 const followers = createProfileKnownFollowersQuery(() => did); 19 17 const subject = createMemo(() => followers.data?.pages[0].subject);
+6 -6
src/views/profile-labels.tsx
··· 1 1 import { Match, Show, Switch, createMemo } from 'solid-js'; 2 2 3 - import type { Did } from '@atcute/lexicons'; 3 + import type { At } from '@atcute/client/lexicons'; 4 4 import { mapDefined } from '@mary/array-fns'; 5 5 6 6 import { ··· 46 46 import LabelerOverflowMenu from '~/components/settings/moderation/labeling/labeler-overflow-menu'; 47 47 48 48 const ProfileLabelsPage = () => { 49 - const { did } = useParams<{ did: Did }>(); 49 + const { did } = useParams(); 50 50 const { currentAccount } = useSession(); 51 51 52 - const query = createLabelerMetaQuery(() => 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]; 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] = { 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]; 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 { ActorIdentifier, RecordKey } from '@atcute/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: ActorIdentifier; 21 - rkey: RecordKey; 22 - }>(); 18 + const { didOrHandle, rkey } = useParams(); 23 19 24 20 const queryClient = useQueryClient(); 25 21
+1 -3
src/views/profile-lists.tsx
··· 1 - import type { Did } from '@atcute/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<{ did: Did }>(); 11 + const { did } = useParams(); 14 12 15 13 const lists = createProfileListsQuery(() => did); 16 14 const profile = createProfileQuery(() => did);
+3 -7
src/views/profile-moderation-list.tsx
··· 1 1 import { Match, Show, Switch, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyGraphDefs } from '@atcute/bluesky'; 4 - import type { Did, RecordKey, ResourceUri } from '@atcute/lexicons'; 3 + import type { AppBskyGraphDefs } from '@atcute/client/lexicons'; 5 4 import { useQueryClient } from '@mary/solid-query'; 6 5 7 6 import { ContextContentMedia } from '~/api/moderation/constants'; ··· 30 29 import VirtualItem from '~/components/virtual-item'; 31 30 32 31 const ProfileModerationListPage = () => { 33 - const { did, rkey } = useParams<{ 34 - did: Did; 35 - rkey: RecordKey; 36 - }>(); 32 + const { did, rkey } = useParams(); 37 33 38 34 const uri = makeAtUri(did, 'app.bsky.graph.list', rkey); 39 35 const query = createListMetaQuery(() => uri); ··· 164 160 ); 165 161 }; 166 162 167 - const MembersList = ({ uri }: { uri: ResourceUri }) => { 163 + const MembersList = ({ uri }: { uri: string }) => { 168 164 const members = createListMembersQuery(() => uri); 169 165 170 166 return (
+1 -5
src/views/profile-search.tsx
··· 1 1 import { createSignal } from 'solid-js'; 2 2 3 - import type { ActorIdentifier } from '@atcute/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: ActorIdentifier; 21 - }>(); 17 + const { didOrHandle } = useParams(); 22 18 23 19 const [query, setQuery] = createSignal(''); 24 20 const profile = createProfileQuery(() => didOrHandle);
+9 -12
src/views/profile.tsx
··· 1 1 import { Match, Show, Switch, createMemo } from 'solid-js'; 2 2 3 - import type { AppBskyActorDefs } from '@atcute/bluesky'; 4 - import { ClientResponseError } from '@atcute/client'; 5 - import type { ActorIdentifier } from '@atcute/lexicons'; 3 + import { XRPCError } from '@atcute/client'; 4 + import type { AppBskyActorDefs } from '@atcute/client/lexicons'; 6 5 import { useQueryClient } from '@mary/solid-query'; 7 6 8 7 import { useProfileShadow } from '~/api/cache/profile-shadow'; ··· 32 31 import VirtualItem from '~/components/virtual-item'; 33 32 34 33 const ProfilePage = () => { 35 - const { didOrHandle } = useParams<{ 36 - didOrHandle: ActorIdentifier; 37 - }>(); 34 + const { didOrHandle } = useParams(); 38 35 39 36 const queryClient = useQueryClient(); 40 37 const profile = createProfileQuery(() => didOrHandle); ··· 118 115 <Match when={profile.error} keyed> 119 116 {(err) => { 120 117 if ( 121 - err instanceof ClientResponseError && 122 - (err.error === 'InvalidRequest' || 123 - err.error === 'AccountTakedown' || 124 - err.error === 'AccountDeactivated') 118 + err instanceof XRPCError && 119 + (err.kind === 'InvalidRequest' || 120 + err.kind === 'AccountTakedown' || 121 + err.kind === 'AccountDeactivated') 125 122 ) { 126 123 const text = 127 - err.error === 'AccountTakedown' 124 + err.kind === 'AccountTakedown' 128 125 ? `This account is taken down` 129 - : err.error === 'AccountDeactivated' 126 + : err.kind === 'AccountDeactivated' 130 127 ? `This account has deactivated` 131 128 : `This account doesn't exist`; 132 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 { 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 [session, server] = await Promise.all([ 18 - ok(client.get('com.atproto.server.getSession')), 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: session.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 }));
+7 -11
src/views/settings-app-passwords.tsx
··· 1 1 import { For, Match, Show, Switch } from 'solid-js'; 2 2 3 - import type { ComAtprotoServerListAppPasswords } from '@atcute/atproto'; 4 - import { ok } from '@atcute/client'; 3 + import type { ComAtprotoServerListAppPasswords } from '@atcute/client/lexicons'; 5 4 import { createMutation, createQuery } from '@mary/solid-query'; 6 5 7 6 import { openModal } from '~/globals/modals'; ··· 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'] });
+1 -8
tsconfig.json
··· 2 2 "compilerOptions": { 3 3 "target": "ESNext", 4 4 "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 - "types": [ 6 - "dom-close-watcher", 7 - "dom-webcodecs", 8 - "@atcute/atproto", 9 - "@atcute/bluemoji", 10 - "@atcute/bluesky", 11 - "@kelinci/basa-lexicons", 12 - ], 5 + "types": ["dom-close-watcher", "dom-webcodecs"], 13 6 "skipLibCheck": true, 14 7 15 8 "module": "ESNext",