social bookmarking for atproto

Compare changes

Choose any two refs to compare.

+1
.idea/clippr.iml
··· 10 10 <excludeFolder url="file://$MODULE_DIR$/backend/build" /> 11 11 <excludeFolder url="file://$MODULE_DIR$/.idea/dataSources" /> 12 12 <excludeFolder url="file://$MODULE_DIR$/lexicons/dist" /> 13 + <excludeFolder url="file://$MODULE_DIR$/backend/logs" /> 13 14 </content> 14 15 <orderEntry type="inheritedJdk" /> 15 16 <orderEntry type="sourceFolder" forTests="false" />
+2
.idea/dictionaries/project.xml
··· 1 1 <component name="ProjectDictionaryState"> 2 2 <dictionary name="project"> 3 3 <words> 4 + <w>affero</w> 4 5 <w>agpl</w> 5 6 <w>appview</w> 6 7 <w>atcute</w> 7 8 <w>atproto</w> 9 + <w>bluesky</w> 8 10 <w>bsky</w> 9 11 <w>clippr</w> 10 12 <w>clipprjs</w>
+27
.idea/jsonSchemas.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="JsonSchemaMappingsProjectConfiguration"> 4 + <state> 5 + <map> 6 + <entry key="Lexicon Schema"> 7 + <value> 8 + <SchemaInfo> 9 + <option name="generatedName" value="New Schema" /> 10 + <option name="name" value="Lexicon Schema" /> 11 + <option name="relativePathToSchema" value="https://cdn.justdavi.dev/lexiconschema.json" /> 12 + <option name="patterns"> 13 + <list> 14 + <Item> 15 + <option name="directory" value="true" /> 16 + <option name="path" value="lexdocs" /> 17 + <option name="mappingKind" value="Directory" /> 18 + </Item> 19 + </list> 20 + </option> 21 + </SchemaInfo> 22 + </value> 23 + </entry> 24 + </map> 25 + </state> 26 + </component> 27 + </project>
+3
.tangled/workflows/build_frontend.yaml
··· 16 16 NODE_ENV: "development" 17 17 CI: true 18 18 19 + - name: "Run linter" 20 + command: "pnpm run --dir ./frontend/ lint" 21 + 19 22 - name: "Build frontend" 20 23 command: "pnpm run --dir ./frontend/ build" 21 24
+3 -3
backend/README.md
··· 24 24 ## current status 25 25 26 26 right now we're not running on bun because there are 27 - [some issues with partysocket](https://github.com/oven-sh/bun/issues/18807), which haven't 28 - been fixed yet and which the jetstream library we use depends on for the moment. once it has been fixed, we do plan 29 - to use bun over node in the future. 27 + [some issues with partysocket](https://github.com/oven-sh/bun/issues/18807), which haven't been 28 + fixed yet and which the jetstream library we use depends on for the moment. once it has been fixed, 29 + we do plan to use bun over node in the future. 30 30 31 31 ### checklist before it's usable 32 32
+17 -17
backend/package.json
··· 18 18 "node": ">=22.16.0" 19 19 }, 20 20 "dependencies": { 21 - "@atcute/atproto": "^3.1.0", 21 + "@atcute/atproto": "^3.1.1", 22 22 "@atcute/client": "^4.0.3", 23 23 "@atcute/identity": "^1.0.3", 24 24 "@atcute/identity-resolver": "^1.1.3", 25 25 "@atcute/lexicon-doc": "^1.0.3", 26 26 "@atcute/lexicons": "^1.1.0", 27 - "@clipprjs/lexicons": "^0.1.4", 27 + "@clipprjs/lexicons": "^1.0.2", 28 28 "@eslint/eslintrc": "^3.3.1", 29 - "@hono/node-server": "^1.15.0", 30 - "@libsql/client": "^0.15.9", 31 - "@scalar/hono-api-reference": "^0.9.9", 32 - "@scalar/openapi-to-markdown": "^0.2.19", 33 - "@skyware/jetstream": "^0.2.4", 34 - "drizzle-orm": "^0.44.2", 35 - "hono": "^4.8.4", 29 + "@hono/node-server": "^1.17.1", 30 + "@libsql/client": "^0.15.10", 31 + "@scalar/hono-api-reference": "^0.9.12", 32 + "@scalar/openapi-to-markdown": "^0.2.23", 33 + "@skyware/jetstream": "^0.2.5", 34 + "drizzle-orm": "^0.44.3", 35 + "hono": "^4.8.5", 36 36 "toml": "^3.0.0", 37 37 "winston": "^3.17.0", 38 38 "xxhash-wasm": "^1.1.0" 39 39 }, 40 40 "devDependencies": { 41 41 "@atcute/lex-cli": "^2.1.1", 42 - "@eslint/js": "^9.30.1", 43 - "@types/node": "^24.0.12", 44 - "@typescript-eslint/eslint-plugin": "^8.36.0", 45 - "@typescript-eslint/parser": "^8.36.0", 42 + "@eslint/js": "^9.31.0", 43 + "@types/node": "^24.1.0", 44 + "@typescript-eslint/eslint-plugin": "^8.38.0", 45 + "@typescript-eslint/parser": "^8.38.0", 46 46 "drizzle-kit": "^0.31.4", 47 - "eslint": "^9.30.1", 48 - "eslint-config-prettier": "^10.1.5", 47 + "eslint": "^9.31.0", 48 + "eslint-config-prettier": "^10.1.8", 49 49 "eslint-plugin-drizzle": "^0.2.3", 50 50 "eslint-plugin-import": "^2.32.0", 51 - "eslint-plugin-prettier": "^5.5.1", 51 + "eslint-plugin-prettier": "^5.5.3", 52 52 "globals": "^16.3.0", 53 53 "jiti": "^2.4.2", 54 54 "prettier": "^3.6.2", 55 55 "tsx": "^4.20.3", 56 56 "typescript": "^5.8.3", 57 - "typescript-eslint": "^8.36.0" 57 + "typescript-eslint": "^8.38.0" 58 58 } 59 59 }
+496 -502
backend/pnpm-lock.yaml
··· 9 9 .: 10 10 dependencies: 11 11 '@atcute/atproto': 12 - specifier: ^3.1.0 13 - version: 3.1.0 12 + specifier: ^3.1.1 13 + version: 3.1.1 14 14 '@atcute/client': 15 15 specifier: ^4.0.3 16 16 version: 4.0.3 ··· 27 27 specifier: ^1.1.0 28 28 version: 1.1.0 29 29 '@clipprjs/lexicons': 30 - specifier: ^0.1.4 31 - version: 0.1.4 30 + specifier: ^1.0.2 31 + version: 1.0.2 32 32 '@eslint/eslintrc': 33 33 specifier: ^3.3.1 34 34 version: 3.3.1 35 35 '@hono/node-server': 36 - specifier: ^1.15.0 37 - version: 1.15.0(hono@4.8.4) 36 + specifier: ^1.17.1 37 + version: 1.17.1(hono@4.8.5) 38 38 '@libsql/client': 39 - specifier: ^0.15.9 40 - version: 0.15.9 39 + specifier: ^0.15.10 40 + version: 0.15.10 41 41 '@scalar/hono-api-reference': 42 - specifier: ^0.9.9 43 - version: 0.9.9(hono@4.8.4) 42 + specifier: ^0.9.12 43 + version: 0.9.12(hono@4.8.5) 44 44 '@scalar/openapi-to-markdown': 45 - specifier: ^0.2.19 46 - version: 0.2.19(typescript@5.8.3) 45 + specifier: ^0.2.23 46 + version: 0.2.23(typescript@5.8.3) 47 47 '@skyware/jetstream': 48 - specifier: ^0.2.4 49 - version: 0.2.4 48 + specifier: ^0.2.5 49 + version: 0.2.5 50 50 drizzle-orm: 51 - specifier: ^0.44.2 52 - version: 0.44.2(@libsql/client@0.15.9)(bun-types@1.2.17) 51 + specifier: ^0.44.3 52 + version: 0.44.3(@libsql/client@0.15.10)(bun-types@1.2.17) 53 53 hono: 54 - specifier: ^4.8.4 55 - version: 4.8.4 54 + specifier: ^4.8.5 55 + version: 4.8.5 56 56 toml: 57 57 specifier: ^3.0.0 58 58 version: 3.0.0 ··· 67 67 specifier: ^2.1.1 68 68 version: 2.1.1 69 69 '@eslint/js': 70 - specifier: ^9.30.1 71 - version: 9.30.1 70 + specifier: ^9.31.0 71 + version: 9.31.0 72 72 '@types/node': 73 - specifier: ^24.0.12 74 - version: 24.0.12 73 + specifier: ^24.1.0 74 + version: 24.1.0 75 75 '@typescript-eslint/eslint-plugin': 76 - specifier: ^8.36.0 77 - version: 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 76 + specifier: ^8.38.0 77 + version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 78 78 '@typescript-eslint/parser': 79 - specifier: ^8.36.0 80 - version: 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 79 + specifier: ^8.38.0 80 + version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 81 81 drizzle-kit: 82 82 specifier: ^0.31.4 83 83 version: 0.31.4 84 84 eslint: 85 - specifier: ^9.30.1 86 - version: 9.30.1(jiti@2.4.2) 85 + specifier: ^9.31.0 86 + version: 9.31.0(jiti@2.4.2) 87 87 eslint-config-prettier: 88 - specifier: ^10.1.5 89 - version: 10.1.5(eslint@9.30.1(jiti@2.4.2)) 88 + specifier: ^10.1.8 89 + version: 10.1.8(eslint@9.31.0(jiti@2.4.2)) 90 90 eslint-plugin-drizzle: 91 91 specifier: ^0.2.3 92 - version: 0.2.3(eslint@9.30.1(jiti@2.4.2)) 92 + version: 0.2.3(eslint@9.31.0(jiti@2.4.2)) 93 93 eslint-plugin-import: 94 94 specifier: ^2.32.0 95 - version: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)) 95 + version: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) 96 96 eslint-plugin-prettier: 97 - specifier: ^5.5.1 98 - version: 5.5.1(eslint-config-prettier@10.1.5(eslint@9.30.1(jiti@2.4.2)))(eslint@9.30.1(jiti@2.4.2))(prettier@3.6.2) 97 + specifier: ^5.5.3 98 + version: 5.5.3(eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)))(eslint@9.31.0(jiti@2.4.2))(prettier@3.6.2) 99 99 globals: 100 100 specifier: ^16.3.0 101 101 version: 16.3.0 ··· 112 112 specifier: ^5.8.3 113 113 version: 5.8.3 114 114 typescript-eslint: 115 - specifier: ^8.36.0 116 - version: 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 115 + specifier: ^8.38.0 116 + version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 117 117 118 118 packages: 119 119 120 - '@atcute/atproto@3.1.0': 121 - resolution: {integrity: sha512-aJbDsY7FcIh8APWKAimBtshPwqoRE056tc0UV6vw4TW4e3nYaHedoJmKhlh/k8KQWxyw64MQThNGMaC89HNoTg==} 120 + '@atcute/atproto@3.1.1': 121 + resolution: {integrity: sha512-D+RLTIPF0xLu7BPZY8KSewAPemJFh+3n3zeQ3ROsLxbTtCHbrTDMAmAFexaVRAPGcPYrwXaBUlv7yZjScJolMg==} 122 122 123 - '@atcute/bluesky@3.1.4': 124 - resolution: {integrity: sha512-iSdZGk/UktgKpT/lI0/YxRjM3E5dkd6/vIa2mgH82lgRjI0jH5LJAfLXPyr2mPeZ/qku1gf2/KrkqJ9dfiNxVw==} 123 + '@atcute/bluesky@3.1.5': 124 + resolution: {integrity: sha512-OJO1HOqRZmpSQ2W2QSbgGIk301JUX7rmLV8LYqQGxsbpNJOLNJ8//vcD4Ag4WsxTRm+Z+vEUZ4qWXnNsZlgXXg==} 125 125 126 126 '@atcute/client@4.0.3': 127 127 resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==} ··· 160 160 engines: {node: '>=6.0.0'} 161 161 hasBin: true 162 162 163 - '@babel/types@7.28.0': 164 - resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} 163 + '@babel/types@7.28.1': 164 + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} 165 165 engines: {node: '>=6.9.0'} 166 166 167 167 '@badrap/valita@0.4.5': 168 168 resolution: {integrity: sha512-4QwGbuhh/JesHRQj79mO/l37PvJj4l/tlAu7+S1n4h47qwaNpZ0WDvIwUGLYUsdi9uQ5UPpiG9wb1Wm3XUFBUQ==} 169 169 engines: {node: '>= 18'} 170 170 171 - '@clipprjs/lexicons@0.1.4': 172 - resolution: {integrity: sha512-p3m4eatuWMYtxB7qR5MxfyPEWv5+DVAavH4H0ZtrGI1Z0OmYs2rSPjb9tesCl3ym+/vEnzEeI2zcWSu2Akd2+Q==} 171 + '@clipprjs/lexicons@1.0.2': 172 + resolution: {integrity: sha512-AIof/RWAtwq/8ygMSNS5KzElbPdXWD9WEX4uGCgAb0RQ/FJUe41X7gIpL0MYOrVtLmOwH+A5rHxq8o3Tn3b8Sg==} 173 173 174 174 '@colors/colors@1.6.0': 175 175 resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} ··· 189 189 resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} 190 190 deprecated: 'Merged into tsx: https://tsx.is' 191 191 192 - '@esbuild/aix-ppc64@0.25.6': 193 - resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} 192 + '@esbuild/aix-ppc64@0.25.8': 193 + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} 194 194 engines: {node: '>=18'} 195 195 cpu: [ppc64] 196 196 os: [aix] ··· 201 201 cpu: [arm64] 202 202 os: [android] 203 203 204 - '@esbuild/android-arm64@0.25.6': 205 - resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} 204 + '@esbuild/android-arm64@0.25.8': 205 + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} 206 206 engines: {node: '>=18'} 207 207 cpu: [arm64] 208 208 os: [android] ··· 213 213 cpu: [arm] 214 214 os: [android] 215 215 216 - '@esbuild/android-arm@0.25.6': 217 - resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} 216 + '@esbuild/android-arm@0.25.8': 217 + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} 218 218 engines: {node: '>=18'} 219 219 cpu: [arm] 220 220 os: [android] ··· 225 225 cpu: [x64] 226 226 os: [android] 227 227 228 - '@esbuild/android-x64@0.25.6': 229 - resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} 228 + '@esbuild/android-x64@0.25.8': 229 + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} 230 230 engines: {node: '>=18'} 231 231 cpu: [x64] 232 232 os: [android] ··· 237 237 cpu: [arm64] 238 238 os: [darwin] 239 239 240 - '@esbuild/darwin-arm64@0.25.6': 241 - resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} 240 + '@esbuild/darwin-arm64@0.25.8': 241 + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} 242 242 engines: {node: '>=18'} 243 243 cpu: [arm64] 244 244 os: [darwin] ··· 249 249 cpu: [x64] 250 250 os: [darwin] 251 251 252 - '@esbuild/darwin-x64@0.25.6': 253 - resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} 252 + '@esbuild/darwin-x64@0.25.8': 253 + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} 254 254 engines: {node: '>=18'} 255 255 cpu: [x64] 256 256 os: [darwin] ··· 261 261 cpu: [arm64] 262 262 os: [freebsd] 263 263 264 - '@esbuild/freebsd-arm64@0.25.6': 265 - resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} 264 + '@esbuild/freebsd-arm64@0.25.8': 265 + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} 266 266 engines: {node: '>=18'} 267 267 cpu: [arm64] 268 268 os: [freebsd] ··· 273 273 cpu: [x64] 274 274 os: [freebsd] 275 275 276 - '@esbuild/freebsd-x64@0.25.6': 277 - resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} 276 + '@esbuild/freebsd-x64@0.25.8': 277 + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} 278 278 engines: {node: '>=18'} 279 279 cpu: [x64] 280 280 os: [freebsd] ··· 285 285 cpu: [arm64] 286 286 os: [linux] 287 287 288 - '@esbuild/linux-arm64@0.25.6': 289 - resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} 288 + '@esbuild/linux-arm64@0.25.8': 289 + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} 290 290 engines: {node: '>=18'} 291 291 cpu: [arm64] 292 292 os: [linux] ··· 297 297 cpu: [arm] 298 298 os: [linux] 299 299 300 - '@esbuild/linux-arm@0.25.6': 301 - resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} 300 + '@esbuild/linux-arm@0.25.8': 301 + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} 302 302 engines: {node: '>=18'} 303 303 cpu: [arm] 304 304 os: [linux] ··· 309 309 cpu: [ia32] 310 310 os: [linux] 311 311 312 - '@esbuild/linux-ia32@0.25.6': 313 - resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} 312 + '@esbuild/linux-ia32@0.25.8': 313 + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} 314 314 engines: {node: '>=18'} 315 315 cpu: [ia32] 316 316 os: [linux] ··· 321 321 cpu: [loong64] 322 322 os: [linux] 323 323 324 - '@esbuild/linux-loong64@0.25.6': 325 - resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} 324 + '@esbuild/linux-loong64@0.25.8': 325 + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} 326 326 engines: {node: '>=18'} 327 327 cpu: [loong64] 328 328 os: [linux] ··· 333 333 cpu: [mips64el] 334 334 os: [linux] 335 335 336 - '@esbuild/linux-mips64el@0.25.6': 337 - resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} 336 + '@esbuild/linux-mips64el@0.25.8': 337 + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} 338 338 engines: {node: '>=18'} 339 339 cpu: [mips64el] 340 340 os: [linux] ··· 345 345 cpu: [ppc64] 346 346 os: [linux] 347 347 348 - '@esbuild/linux-ppc64@0.25.6': 349 - resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} 348 + '@esbuild/linux-ppc64@0.25.8': 349 + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} 350 350 engines: {node: '>=18'} 351 351 cpu: [ppc64] 352 352 os: [linux] ··· 357 357 cpu: [riscv64] 358 358 os: [linux] 359 359 360 - '@esbuild/linux-riscv64@0.25.6': 361 - resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} 360 + '@esbuild/linux-riscv64@0.25.8': 361 + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} 362 362 engines: {node: '>=18'} 363 363 cpu: [riscv64] 364 364 os: [linux] ··· 369 369 cpu: [s390x] 370 370 os: [linux] 371 371 372 - '@esbuild/linux-s390x@0.25.6': 373 - resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} 372 + '@esbuild/linux-s390x@0.25.8': 373 + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} 374 374 engines: {node: '>=18'} 375 375 cpu: [s390x] 376 376 os: [linux] ··· 381 381 cpu: [x64] 382 382 os: [linux] 383 383 384 - '@esbuild/linux-x64@0.25.6': 385 - resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} 384 + '@esbuild/linux-x64@0.25.8': 385 + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} 386 386 engines: {node: '>=18'} 387 387 cpu: [x64] 388 388 os: [linux] 389 389 390 - '@esbuild/netbsd-arm64@0.25.6': 391 - resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} 390 + '@esbuild/netbsd-arm64@0.25.8': 391 + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} 392 392 engines: {node: '>=18'} 393 393 cpu: [arm64] 394 394 os: [netbsd] ··· 399 399 cpu: [x64] 400 400 os: [netbsd] 401 401 402 - '@esbuild/netbsd-x64@0.25.6': 403 - resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} 402 + '@esbuild/netbsd-x64@0.25.8': 403 + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} 404 404 engines: {node: '>=18'} 405 405 cpu: [x64] 406 406 os: [netbsd] 407 407 408 - '@esbuild/openbsd-arm64@0.25.6': 409 - resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} 408 + '@esbuild/openbsd-arm64@0.25.8': 409 + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} 410 410 engines: {node: '>=18'} 411 411 cpu: [arm64] 412 412 os: [openbsd] ··· 417 417 cpu: [x64] 418 418 os: [openbsd] 419 419 420 - '@esbuild/openbsd-x64@0.25.6': 421 - resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} 420 + '@esbuild/openbsd-x64@0.25.8': 421 + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} 422 422 engines: {node: '>=18'} 423 423 cpu: [x64] 424 424 os: [openbsd] 425 425 426 - '@esbuild/openharmony-arm64@0.25.6': 427 - resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} 426 + '@esbuild/openharmony-arm64@0.25.8': 427 + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} 428 428 engines: {node: '>=18'} 429 429 cpu: [arm64] 430 430 os: [openharmony] ··· 435 435 cpu: [x64] 436 436 os: [sunos] 437 437 438 - '@esbuild/sunos-x64@0.25.6': 439 - resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} 438 + '@esbuild/sunos-x64@0.25.8': 439 + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} 440 440 engines: {node: '>=18'} 441 441 cpu: [x64] 442 442 os: [sunos] ··· 447 447 cpu: [arm64] 448 448 os: [win32] 449 449 450 - '@esbuild/win32-arm64@0.25.6': 451 - resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} 450 + '@esbuild/win32-arm64@0.25.8': 451 + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} 452 452 engines: {node: '>=18'} 453 453 cpu: [arm64] 454 454 os: [win32] ··· 459 459 cpu: [ia32] 460 460 os: [win32] 461 461 462 - '@esbuild/win32-ia32@0.25.6': 463 - resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} 462 + '@esbuild/win32-ia32@0.25.8': 463 + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} 464 464 engines: {node: '>=18'} 465 465 cpu: [ia32] 466 466 os: [win32] ··· 471 471 cpu: [x64] 472 472 os: [win32] 473 473 474 - '@esbuild/win32-x64@0.25.6': 475 - resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} 474 + '@esbuild/win32-x64@0.25.8': 475 + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} 476 476 engines: {node: '>=18'} 477 477 cpu: [x64] 478 478 os: [win32] ··· 493 493 494 494 '@eslint/config-helpers@0.3.0': 495 495 resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} 496 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 497 - 498 - '@eslint/core@0.14.0': 499 - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} 500 496 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 501 497 502 498 '@eslint/core@0.15.1': ··· 507 503 resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 508 504 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 509 505 510 - '@eslint/js@9.30.1': 511 - resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} 506 + '@eslint/js@9.31.0': 507 + resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} 512 508 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 513 509 514 510 '@eslint/object-schema@2.1.6': 515 511 resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 516 512 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 517 513 518 - '@eslint/plugin-kit@0.3.3': 519 - resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} 514 + '@eslint/plugin-kit@0.3.4': 515 + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} 520 516 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 521 517 522 518 '@externdefs/collider@0.3.0': ··· 542 538 peerDependencies: 543 539 vue: ^3.2.0 544 540 545 - '@hono/node-server@1.15.0': 546 - resolution: {integrity: sha512-MjmK4l5N4dQpZ9OSWN0tCj7ejuc7WvuWMzSKtc89bnknJykAeHxzRigXBTYZk85H6Awrii6RM59iUiUluApu2A==} 541 + '@hono/node-server@1.17.1': 542 + resolution: {integrity: sha512-SY79W/C+2b1MyAzmIcV32Q47vO1b5XwLRwj8S9N6Jr5n1QCkIfAIH6umOSgqWZ4/v67hg6qq8Ha5vZonVidGsg==} 547 543 engines: {node: '>=18.14.1'} 548 544 peerDependencies: 549 545 hono: ^4 ··· 575 571 '@hyperjump/json-pointer@1.1.1': 576 572 resolution: {integrity: sha512-M0T3s7TC2JepoWPMZQn1W6eYhFh06OXwpMqL+8c5wMVpvnCKNsPgpu9u7WyCI03xVQti8JAeAy4RzUa6SYlJLA==} 577 573 578 - '@hyperjump/json-schema@1.16.1': 579 - resolution: {integrity: sha512-GCGQCOJMwAUTcCn7eDFOx5G6uOPFLG2O3tv+vMrHJUHwqeFo4GVO03BcsmX/Xy7dfTP4VgucXyoNjrtyoqb5wA==} 574 + '@hyperjump/json-schema@1.16.2': 575 + resolution: {integrity: sha512-MJNvaEFc79+h5rvBPgAJK4OHEUr0RqsKcLC5rc3V9FEsJyQAjnP910deRFoZCE068kX/NrAPPhunMgUMwonPtg==} 580 576 peerDependencies: 581 577 '@hyperjump/browser': ^1.1.0 582 578 ··· 589 585 '@internationalized/date@3.8.2': 590 586 resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==} 591 587 592 - '@internationalized/number@3.6.3': 593 - resolution: {integrity: sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==} 588 + '@internationalized/number@3.6.4': 589 + resolution: {integrity: sha512-P+/h+RDaiX8EGt3shB9AYM1+QgkvHmJ5rKi4/59k4sg9g58k9rqsRW0WxRO7jCoHyvVbFRRFKmVTdFYdehrxHg==} 594 590 595 591 '@jridgewell/gen-mapping@0.3.12': 596 592 resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} ··· 608 604 '@jridgewell/trace-mapping@0.3.29': 609 605 resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} 610 606 611 - '@libsql/client@0.15.9': 612 - resolution: {integrity: sha512-VT3do0a0vwYVaNcp/y05ikkKS3OrFR5UeEf5SUuYZVgKVl1Nc1k9ajoYSsOid8AD/vlhLDB5yFQaV4HmT/OB9w==} 607 + '@libsql/client@0.15.10': 608 + resolution: {integrity: sha512-J9cJQwrgH92JlPBYjUGxPIH5G9z3j/V/aPnQvcmmCgjatdVb/f7bzK3yNq15Phc+gVuKMwox3toXL+58qUMylg==} 613 609 614 - '@libsql/core@0.15.9': 615 - resolution: {integrity: sha512-4OVdeAmuaCUq5hYT8NNn0nxlO9AcA/eTjXfUZ+QK8MT3Dz7Z76m73x7KxjU6I64WyXX98dauVH2b9XM+d84npw==} 610 + '@libsql/core@0.15.10': 611 + resolution: {integrity: sha512-fAMD+GnGQNdZ9zxeNC8AiExpKnou/97GJWkiDDZbTRHj3c9dvF1y4jsRQ0WE72m/CqTdbMGyU98yL0SJ9hQVeg==} 616 612 617 - '@libsql/darwin-arm64@0.5.13': 618 - resolution: {integrity: sha512-ASz/EAMLDLx3oq9PVvZ4zBXXHbz2TxtxUwX2xpTRFR4V4uSHAN07+jpLu3aK5HUBLuv58z7+GjaL5w/cyjR28Q==} 613 + '@libsql/darwin-arm64@0.5.16': 614 + resolution: {integrity: sha512-Q1fXH2YVTU/Iym8kN79Z2bQiNtkIV1QiDikgRD79a2eLO/v9ZghZqama65U6lDP6zZXXGtxhb6sfisnP9HQrug==} 619 615 cpu: [arm64] 620 616 os: [darwin] 621 617 622 - '@libsql/darwin-x64@0.5.13': 623 - resolution: {integrity: sha512-kzglniv1difkq8opusSXM7u9H0WoEPeKxw0ixIfcGfvlCVMJ+t9UNtXmyNHW68ljdllje6a4C6c94iPmIYafYA==} 618 + '@libsql/darwin-x64@0.5.16': 619 + resolution: {integrity: sha512-EiowJzSxnO2misBttp6R6Hz16UbttdDyRMqnZauSd41X4kRxuLtxvSLCpWRXmZ/3WKcXQ9G5H5X40ZPW1itOTg==} 624 620 cpu: [x64] 625 621 os: [darwin] 626 622 ··· 634 630 '@libsql/isomorphic-ws@0.1.5': 635 631 resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} 636 632 637 - '@libsql/linux-arm-gnueabihf@0.5.13': 638 - resolution: {integrity: sha512-UEW+VZN2r0mFkfztKOS7cqfS8IemuekbjUXbXCwULHtusww2QNCXvM5KU9eJCNE419SZCb0qaEWYytcfka8qeA==} 633 + '@libsql/linux-arm-gnueabihf@0.5.16': 634 + resolution: {integrity: sha512-Gsumbh97GajJ5D8aAy5D5zJLZxr/HMmMYoaj53+QHmerEJkfTNpxFOalKwVg6bL07DmNfiiuGaku82SJyDGHCQ==} 639 635 cpu: [arm] 640 636 os: [linux] 641 637 642 - '@libsql/linux-arm-musleabihf@0.5.13': 643 - resolution: {integrity: sha512-NMDgLqryYBv4Sr3WoO/m++XDjR5KLlw9r/JK4Ym6A1XBv2bxQQNhH0Lxx3bjLW8qqhBD4+0xfms4d2cOlexPyA==} 638 + '@libsql/linux-arm-musleabihf@0.5.16': 639 + resolution: {integrity: sha512-bs+xWR2CJX4J3iQ3J82emWyN8/Hw+4DpD/MdLW07D0NPPG9Byp2KkeqSKW0o0kDHNePjNEz1G2OAfD0dxsC/OA==} 644 640 cpu: [arm] 645 641 os: [linux] 646 642 647 - '@libsql/linux-arm64-gnu@0.5.13': 648 - resolution: {integrity: sha512-/wCxVdrwl1ee6D6LEjwl+w4SxuLm5UL9Kb1LD5n0bBGs0q+49ChdPPh7tp175iRgkcrTgl23emymvt1yj3KxVQ==} 643 + '@libsql/linux-arm64-gnu@0.5.16': 644 + resolution: {integrity: sha512-oqmweYSg5buJhFyDIweW5MfAEg6HYMLSU/fbOZiXT/LIcHxVJ44JlNA53ffWmYSwYx/nZwTiN00m7dIwPWV2zA==} 649 645 cpu: [arm64] 650 646 os: [linux] 651 647 652 - '@libsql/linux-arm64-musl@0.5.13': 653 - resolution: {integrity: sha512-xnVAbZIanUgX57XqeI5sNaDnVilp0Di5syCLSEo+bRyBobe/1IAeehNZpyVbCy91U2N6rH1C/mZU7jicVI9x+A==} 648 + '@libsql/linux-arm64-musl@0.5.16': 649 + resolution: {integrity: sha512-BRNcyGdZnOPbJfE/HgAVQprikF03JeK3ERmcP4EqRy7AYJ66SuRGFJdW9DSN93O5XSOWkS+upQt+PNFW3OLCew==} 654 650 cpu: [arm64] 655 651 os: [linux] 656 652 657 - '@libsql/linux-x64-gnu@0.5.13': 658 - resolution: {integrity: sha512-/mfMRxcQAI9f8t7tU3QZyh25lXgXKzgin9B9TOSnchD73PWtsVhlyfA6qOCfjQl5kr4sHscdXD5Yb3KIoUgrpQ==} 653 + '@libsql/linux-x64-gnu@0.5.16': 654 + resolution: {integrity: sha512-NyKxuHvb38rmSfexYbPy7SYV4HqY18L06LYbvU3ZqFfTV7CIGdzuxPOKv05GxHvak46VG+3CjRfq9Q/VIZolwA==} 659 655 cpu: [x64] 660 656 os: [linux] 661 657 662 - '@libsql/linux-x64-musl@0.5.13': 663 - resolution: {integrity: sha512-rdefPTpQCVwUjIQYbDLMv3qpd5MdrT0IeD0UZPGqhT9AWU8nJSQoj2lfyIDAWEz7PPOVCY4jHuEn7FS2sw9kRA==} 658 + '@libsql/linux-x64-musl@0.5.16': 659 + resolution: {integrity: sha512-xi0nObdngfYuOnji/y7wQmF6y7JMYmonE/HF0snzAAgZflTFdW6ZBn7N4oRz/aGb9+fMfz8sT3wnEe+CuO05qg==} 664 660 cpu: [x64] 665 661 os: [linux] 666 662 667 - '@libsql/win32-x64-msvc@0.5.13': 668 - resolution: {integrity: sha512-aNcmDrD1Ws+dNZIv9ECbxBQumqB9MlSVEykwfXJpqv/593nABb8Ttg5nAGUPtnADyaGDTrGvPPP81d/KsKho4Q==} 663 + '@libsql/win32-x64-msvc@0.5.16': 664 + resolution: {integrity: sha512-db37ASxpc7aIC7oBuefBGiAJyLVJdvrQy07X2jEU3AtekxpwYCHbJO3Pd3P71hNitFSbaFfpZHHf0GZenzF4JQ==} 669 665 cpu: [x64] 670 666 os: [win32] 671 667 ··· 687 683 '@phosphor-icons/core@2.1.1': 688 684 resolution: {integrity: sha512-v4ARvrip4qBCImOE5rmPUylOEK4iiED9ZyKjcvzuezqMaiRASCHKcRIuvvxL/twvLpkfnEODCOJp5dM4eZilxQ==} 689 685 690 - '@pkgr/core@0.2.7': 691 - resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==} 686 + '@pkgr/core@0.2.9': 687 + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} 692 688 engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 693 689 694 690 '@rtsao/scc@1.1.0': 695 691 resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 696 692 697 - '@scalar/code-highlight@0.1.5': 698 - resolution: {integrity: sha512-gFTorMvDq91IKf0cV17+UvgGsBichGURsS3qBEo72ihc4yUX207/AT2Obm6kT+ckkIYvXydD6MPapk9rEnCPuA==} 693 + '@scalar/code-highlight@0.1.8': 694 + resolution: {integrity: sha512-SH7gqBVGotf9Hw2srAKd/s854Wjf5lpR4FgAf/l3AlCYC5QXJ4hbj+fk1/3tvzeRFm+wvS6/ah4FuiIzvDPOug==} 699 695 engines: {node: '>=20'} 700 696 701 - '@scalar/components@0.14.16': 702 - resolution: {integrity: sha512-JcF8r93isL+rdTpCccPM8BEdIO17ERTkjNBVviqGHmQ57jXX8c2v1/1HtOz9qez5fE8uEEUJ3KJXUgskeLdWmQ==} 697 + '@scalar/components@0.14.20': 698 + resolution: {integrity: sha512-wGHsxz3R6l+u7KASwvm4Y9d7byD2HjfWBbCVXAb+qQIDemaMDBNARjRCbXLpRB9UvYLxtgP/8fzdW+R0LEf4/A==} 703 699 engines: {node: '>=20'} 704 700 705 - '@scalar/core@0.3.7': 706 - resolution: {integrity: sha512-Qeq+DfOWxjVHFff9qx0w9gVK6FmgqJtpN3je5C3elKVXNPC/7rxG4BfAuced+SdnogaVzpb9rvvHPblMgsKrwQ==} 701 + '@scalar/core@0.3.10': 702 + resolution: {integrity: sha512-WKLaZk5zj65CbS0Ox0BMZ1GX9gFrVdwgV/cdRjT2Av8H5CizOSirXk4PwdsU8V8Q4gAltVy9cnt6yKc2ZnRY+w==} 707 703 engines: {node: '>=20'} 708 704 709 705 '@scalar/helpers@0.0.6': 710 706 resolution: {integrity: sha512-VrkpJmEq3zLu0lYFVRplNLA54rZ9rBkiahEI8laVpLnzGl1QilIn2EhxBT9lK7/2jbPprCbTfgnZZv+zHgGYTw==} 711 707 engines: {node: '>=20'} 712 708 713 - '@scalar/hono-api-reference@0.9.9': 714 - resolution: {integrity: sha512-8oJ1xaYVHT3/7Go5FtcZqqsm4NkJL0Jxf3ZipXjoJcvhyiBXyQdXGNnKJVXSci2BhQMqMav6pXzkje8gq74ZAg==} 709 + '@scalar/hono-api-reference@0.9.12': 710 + resolution: {integrity: sha512-ygbQsh+5QaRyAx851utApy12FW+wSRLuOBTpL2U5RVzDjvN6vMBZs119mqH1BmY6ltVn8k7DvS2Ooyx0ttah/A==} 715 711 engines: {node: '>=20'} 716 712 peerDependencies: 717 713 hono: ^4.0.0 ··· 724 720 resolution: {integrity: sha512-4u2gtyhA119T+HdQ4dVKYzQOCOos5Iaj08C1H2Hi6WW64sTNJaZuh9hpVtY94e0I9feRiCyNEtWvmbOjOAxbTw==} 725 721 engines: {node: '>=20'} 726 722 727 - '@scalar/oas-utils@0.4.11': 728 - resolution: {integrity: sha512-ptekTIpxCczQxP3iXtSpDWEf0nV0nsYJh/b0/wD3krfw6hUAGVqctRTnOuZBQmiVfVeP47NsVavdpG1fiWuZ5Q==} 723 + '@scalar/oas-utils@0.4.15': 724 + resolution: {integrity: sha512-C2kGex6fwHxmBQhyiAmuVJHlIOP/rYoojuROfWvUQSrfLELkIjE5ZTyh4fj9PhwhGbS9iWWVaaOytjeT+8n8AQ==} 729 725 engines: {node: '>=20'} 730 726 731 727 '@scalar/object-utils@1.2.2': 732 728 resolution: {integrity: sha512-dnH/JeXLudjBfEISpYvnMrH3bLjpc06vWVx7UQmtNNWIIonJ+bDMg1ATnYon7q6m+V8aJZ9/To8SwYsunYRL9g==} 733 729 engines: {node: '>=20'} 734 730 735 - '@scalar/openapi-parser@0.18.1': 736 - resolution: {integrity: sha512-xlJRmizgAlYp+pUMVmohL1aNwEpPcwJ/FpsWZsDtIW9esddHJ3Zt5dAG1TDO/jsyDsMJg2Lz28IhNObOzIQpzg==} 731 + '@scalar/openapi-parser@0.18.2': 732 + resolution: {integrity: sha512-Mb0rRgnn8QgrwcsOcZY3g4uDr49cSuYcmh87oT7gDuV9IPFg5Wc71fjXNx0HdTRy5k21ugS/lDSl8sL+YBudOw==} 737 733 engines: {node: '>=20'} 738 734 739 - '@scalar/openapi-to-markdown@0.2.19': 740 - resolution: {integrity: sha512-o/dbYLmggUllLgVXdAMVJT4Bdxy/MPC2UFlzeJ4hoxBSgvTO1CWr6v61HIBrDn0eqId7PF1V9p+EV1RNtgz/jA==} 735 + '@scalar/openapi-to-markdown@0.2.23': 736 + resolution: {integrity: sha512-j47K57Q0pDT3C1kAHmewV4kIBInQTjlvG+y4W5QgJkE64mzb8n5aZuMqzSCpyEItX4BsMEasIPMDWBCIhiicpw==} 741 737 engines: {node: '>=20'} 742 738 743 - '@scalar/openapi-types@0.3.5': 744 - resolution: {integrity: sha512-/iTUSJMMHVMIFJngeIjTVtU5lwIMNyEIm25e0XtDV0veW6zmIhLsaH2/nwpIgR1iXVyd/uWMyMrtQW329s3c4w==} 739 + '@scalar/openapi-types@0.3.6': 740 + resolution: {integrity: sha512-hkLIgDIQxSgZNYCqNkty2p/V8hjeMf711uT8IKIjNw8oaT/cjT1HC/3V0FVhJ6x2eaufir+WXt5Zqv/iVk5pyQ==} 745 741 engines: {node: '>=20'} 746 742 747 - '@scalar/snippetz@0.4.0': 748 - resolution: {integrity: sha512-smfJ0UiXsHmPOk6k+oAdShAIwZ7LTgK23l/ecTUQVYg0ub4yIadWFqo3cqjpZJ1zF88LLIfiHcthe2iQ1LHzXw==} 743 + '@scalar/snippetz@0.4.3': 744 + resolution: {integrity: sha512-OcYI4uvz/SbIkGupa3SNS403+lCsp4RoPJRTP1Rd59lRX9Kyc8xXo8ZuJis06GYtlBP5rqshI+jFCIP/Ap+dFw==} 749 745 engines: {node: '>=20'} 750 746 751 - '@scalar/themes@0.13.8': 752 - resolution: {integrity: sha512-qWAOFpLYEVVkQnHFb5js6njFLHwwXVVRC06edthBTtUvaL8HOQexg6bXp2uksCFStm1bb1VYy9UOp8EqEnfN5Q==} 747 + '@scalar/themes@0.13.11': 748 + resolution: {integrity: sha512-9rdNfVDbDFUr6Pi9IHt6OKs7Ui6TtrH7tR+ymga+I+jw8Xsnm4dbD1G2TFk1wUaYLVYdiqyQcj+JT15OJEGlkw==} 753 749 engines: {node: '>=20'} 754 750 755 - '@scalar/types@0.2.7': 756 - resolution: {integrity: sha512-C4sbkqzCeQWYWaOUIQPdVm6g3FhUkcqpVorArApv7WfCEgVn1KLOOYELFMWwCHim2GnrZblVVUPubf0UXjUcLA==} 751 + '@scalar/types@0.2.10': 752 + resolution: {integrity: sha512-ZlOzYoYzzGRnMr6RufAnjksv94MyL4s4HElg9mdo9gQXPch24lNiE0pE0k6vxdB+ncgbGWZ1T6qCC/lJXMLL1Q==} 757 753 engines: {node: '>=20'} 758 754 759 755 '@scalar/use-hooks@0.2.4': ··· 764 760 resolution: {integrity: sha512-u+o77cdTNZ5ePqHPu8ZcFw1BLlISv+cthN0bR1zJHXmqBjvanFTy2kL+Gmv3eW9HxZiHdqycKVETlYd0mWiqJQ==} 765 761 engines: {node: '>=20'} 766 762 767 - '@scalar/workspace-store@0.8.0': 768 - resolution: {integrity: sha512-HFtXNCU/qfY08cXhdd5UhnGbrWS6w6w9RAnNql4O3J0P/MiotMIZiUreCfGbiCVOXCj59ClzeOJIhA8R59Z2OA==} 763 + '@scalar/workspace-store@0.10.2': 764 + resolution: {integrity: sha512-p4aDfAsZIFBBQPk2CcD96PMc2HFLOtGi2XMRNp86cqpQMncIIAqDTYCydzcsYvMPysmckIAAyuztdKDOPnry7g==} 769 765 engines: {node: '>=18'} 770 766 771 767 '@sinclair/typebox@0.34.37': 772 768 resolution: {integrity: sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==} 773 769 774 - '@skyware/jetstream@0.2.4': 775 - resolution: {integrity: sha512-QA94YMamBnULAHhDLX3DdvDaEkGEIzEmMmN2NPr+J2xKQ/D9NczOe50kBaGmOST4E19w8CR12/y6ykWNOMlE+Q==} 770 + '@skyware/jetstream@0.2.5': 771 + resolution: {integrity: sha512-fM/zs03DLwqRyzZZJFWN20e76KrdqIp97Tlm8Cek+vxn96+tu5d/fx79V6H85L0QN6HvGiX2l9A8hWFqHvYlOA==} 776 772 777 773 '@swc/helpers@0.5.17': 778 774 resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} ··· 809 805 '@types/ms@2.1.0': 810 806 resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} 811 807 812 - '@types/node@22.16.2': 813 - resolution: {integrity: sha512-Cdqa/eJTvt4fC4wmq1Mcc0CPUjp/Qy2FGqLza3z3pKymsI969TcZ54diNJv8UYUgeWxyb8FSbCkhdR6WqmUFhA==} 808 + '@types/node@22.16.5': 809 + resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} 814 810 815 - '@types/node@24.0.12': 816 - resolution: {integrity: sha512-LtOrbvDf5ndC9Xi+4QZjVL0woFymF/xSTKZKPgrrl7H7XoeDvnD+E2IclKVDyaK9UM756W/3BXqSU+JEHopA9g==} 811 + '@types/node@24.1.0': 812 + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} 817 813 818 814 '@types/triple-beam@1.3.5': 819 815 resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} ··· 827 823 '@types/ws@8.18.1': 828 824 resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} 829 825 830 - '@typescript-eslint/eslint-plugin@8.36.0': 831 - resolution: {integrity: sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==} 826 + '@typescript-eslint/eslint-plugin@8.38.0': 827 + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} 832 828 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 833 829 peerDependencies: 834 - '@typescript-eslint/parser': ^8.36.0 830 + '@typescript-eslint/parser': ^8.38.0 835 831 eslint: ^8.57.0 || ^9.0.0 836 832 typescript: '>=4.8.4 <5.9.0' 837 833 838 - '@typescript-eslint/parser@8.36.0': 839 - resolution: {integrity: sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==} 834 + '@typescript-eslint/parser@8.38.0': 835 + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} 840 836 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 841 837 peerDependencies: 842 838 eslint: ^8.57.0 || ^9.0.0 843 839 typescript: '>=4.8.4 <5.9.0' 844 840 845 - '@typescript-eslint/project-service@8.36.0': 846 - resolution: {integrity: sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==} 841 + '@typescript-eslint/project-service@8.38.0': 842 + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} 847 843 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 848 844 peerDependencies: 849 845 typescript: '>=4.8.4 <5.9.0' 850 846 851 - '@typescript-eslint/scope-manager@8.36.0': 852 - resolution: {integrity: sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==} 847 + '@typescript-eslint/scope-manager@8.38.0': 848 + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} 853 849 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 854 850 855 - '@typescript-eslint/tsconfig-utils@8.36.0': 856 - resolution: {integrity: sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==} 851 + '@typescript-eslint/tsconfig-utils@8.38.0': 852 + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} 857 853 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 858 854 peerDependencies: 859 855 typescript: '>=4.8.4 <5.9.0' 860 856 861 - '@typescript-eslint/type-utils@8.36.0': 862 - resolution: {integrity: sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==} 857 + '@typescript-eslint/type-utils@8.38.0': 858 + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} 863 859 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 864 860 peerDependencies: 865 861 eslint: ^8.57.0 || ^9.0.0 866 862 typescript: '>=4.8.4 <5.9.0' 867 863 868 - '@typescript-eslint/types@8.36.0': 869 - resolution: {integrity: sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==} 864 + '@typescript-eslint/types@8.38.0': 865 + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} 870 866 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 871 867 872 - '@typescript-eslint/typescript-estree@8.36.0': 873 - resolution: {integrity: sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==} 868 + '@typescript-eslint/typescript-estree@8.38.0': 869 + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} 874 870 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 875 871 peerDependencies: 876 872 typescript: '>=4.8.4 <5.9.0' 877 873 878 - '@typescript-eslint/utils@8.36.0': 879 - resolution: {integrity: sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==} 874 + '@typescript-eslint/utils@8.38.0': 875 + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} 880 876 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 881 877 peerDependencies: 882 878 eslint: ^8.57.0 || ^9.0.0 883 879 typescript: '>=4.8.4 <5.9.0' 884 880 885 - '@typescript-eslint/visitor-keys@8.36.0': 886 - resolution: {integrity: sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==} 881 + '@typescript-eslint/visitor-keys@8.38.0': 882 + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} 887 883 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 888 884 889 885 '@ungap/structured-clone@1.3.0': 890 886 resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 891 887 892 - '@vue/compiler-core@3.5.17': 893 - resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==} 888 + '@vue/compiler-core@3.5.18': 889 + resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} 894 890 895 - '@vue/compiler-dom@3.5.17': 896 - resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==} 891 + '@vue/compiler-dom@3.5.18': 892 + resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} 897 893 898 - '@vue/compiler-sfc@3.5.17': 899 - resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==} 894 + '@vue/compiler-sfc@3.5.18': 895 + resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} 900 896 901 - '@vue/compiler-ssr@3.5.17': 902 - resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==} 897 + '@vue/compiler-ssr@3.5.18': 898 + resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} 903 899 904 - '@vue/reactivity@3.5.17': 905 - resolution: {integrity: sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==} 900 + '@vue/reactivity@3.5.18': 901 + resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} 906 902 907 - '@vue/runtime-core@3.5.17': 908 - resolution: {integrity: sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==} 903 + '@vue/runtime-core@3.5.18': 904 + resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} 909 905 910 - '@vue/runtime-dom@3.5.17': 911 - resolution: {integrity: sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==} 906 + '@vue/runtime-dom@3.5.18': 907 + resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} 912 908 913 - '@vue/server-renderer@3.5.17': 914 - resolution: {integrity: sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==} 909 + '@vue/server-renderer@3.5.18': 910 + resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} 915 911 peerDependencies: 916 - vue: 3.5.17 912 + vue: 3.5.18 917 913 918 - '@vue/shared@3.5.17': 919 - resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} 914 + '@vue/shared@3.5.18': 915 + resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} 920 916 921 917 '@vueuse/core@10.11.1': 922 918 resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} ··· 1206 1202 resolution: {integrity: sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA==} 1207 1203 hasBin: true 1208 1204 1209 - drizzle-orm@0.44.2: 1210 - resolution: {integrity: sha512-zGAqBzWWkVSFjZpwPOrmCrgO++1kZ5H/rZ4qTGeGOe18iXGVJWf3WPfHOVwFIbmi8kHjfJstC6rJomzGx8g/dQ==} 1205 + drizzle-orm@0.44.3: 1206 + resolution: {integrity: sha512-8nIiYQxOpgUicEL04YFojJmvC4DNO4KoyXsEIqN44+g6gNBr6hmVpWk3uyAt4CaTiRGDwoU+alfqNNeonLAFOQ==} 1211 1207 peerDependencies: 1212 1208 '@aws-sdk/client-rds-data': '>=3' 1213 1209 '@cloudflare/workers-types': '>=4' ··· 1351 1347 engines: {node: '>=12'} 1352 1348 hasBin: true 1353 1349 1354 - esbuild@0.25.6: 1355 - resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} 1350 + esbuild@0.25.8: 1351 + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} 1356 1352 engines: {node: '>=18'} 1357 1353 hasBin: true 1358 1354 ··· 1364 1360 resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 1365 1361 engines: {node: '>=12'} 1366 1362 1367 - eslint-config-prettier@10.1.5: 1368 - resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} 1363 + eslint-config-prettier@10.1.8: 1364 + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} 1369 1365 hasBin: true 1370 1366 peerDependencies: 1371 1367 eslint: '>=7.0.0' ··· 1409 1405 '@typescript-eslint/parser': 1410 1406 optional: true 1411 1407 1412 - eslint-plugin-prettier@5.5.1: 1413 - resolution: {integrity: sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==} 1408 + eslint-plugin-prettier@5.5.3: 1409 + resolution: {integrity: sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==} 1414 1410 engines: {node: ^14.18.0 || >=16.0.0} 1415 1411 peerDependencies: 1416 1412 '@types/eslint': '>=8.0.0' ··· 1435 1431 resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 1436 1432 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1437 1433 1438 - eslint@9.30.1: 1439 - resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} 1434 + eslint@9.31.0: 1435 + resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} 1440 1436 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1441 1437 hasBin: true 1442 1438 peerDependencies: ··· 1691 1687 highlightjs-vue@1.0.0: 1692 1688 resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} 1693 1689 1694 - hono@4.8.4: 1695 - resolution: {integrity: sha512-KOIBp1+iUs0HrKztM4EHiB2UtzZDTBihDtOF5K6+WaJjCPeaW4Q92R8j63jOhvJI5+tZSMuKD9REVEXXY9illg==} 1690 + hono@4.8.5: 1691 + resolution: {integrity: sha512-Up2cQbtNz1s111qpnnECdTGqSIUIhZJMLikdKkshebQSEBcoUKq6XJayLGqSZWidiH0zfHRCJqFu062Mz5UuRA==} 1696 1692 engines: {node: '>=16.9.0'} 1697 1693 1698 1694 html-minifier-terser@7.2.0: ··· 1913 1909 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1914 1910 engines: {node: '>= 0.8.0'} 1915 1911 1916 - libsql@0.5.13: 1917 - resolution: {integrity: sha512-5Bwoa/CqzgkTwySgqHA5TsaUDRrdLIbdM4egdPcaAnqO3aC+qAgS6BwdzuZwARA5digXwiskogZ8H7Yy4XfdOg==} 1912 + libsql@0.5.16: 1913 + resolution: {integrity: sha512-2vZW0MJFDisPQClROZfz956eiqgNZ53eLiALimI0IWBsnPbDLoNDRuqpacd8gu6KCcJHkvKsiEvRa22L0OqNjw==} 1918 1914 cpu: [x64, arm64, wasm32, arm] 1919 1915 os: [darwin, linux, win32] 1920 1916 ··· 2447 2443 resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2448 2444 engines: {node: '>= 0.4'} 2449 2445 2450 - synckit@0.11.8: 2451 - resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} 2446 + synckit@0.11.11: 2447 + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} 2452 2448 engines: {node: ^14.18.0 || >=16.0.0} 2453 2449 2454 2450 tailwind-merge@2.6.0: ··· 2530 2526 resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 2531 2527 engines: {node: '>= 0.4'} 2532 2528 2533 - typescript-eslint@8.36.0: 2534 - resolution: {integrity: sha512-fTCqxthY+h9QbEgSIBfL9iV6CvKDFuoxg6bHPNpJ9HIUzS+jy2lCEyCmGyZRWEBSaykqcDPf1SJ+BfCI8DRopA==} 2529 + typescript-eslint@8.38.0: 2530 + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} 2535 2531 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2536 2532 peerDependencies: 2537 2533 eslint: ^8.57.0 || ^9.0.0 ··· 2606 2602 vue-sonner@1.3.2: 2607 2603 resolution: {integrity: sha512-UbZ48E9VIya3ToiRHAZUbodKute/z/M1iT8/3fU8zEbwBRE11AKuHikssv18LMk2gTTr6eMQT4qf6JoLHWuj/A==} 2608 2604 2609 - vue@3.5.17: 2610 - resolution: {integrity: sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==} 2605 + vue@3.5.18: 2606 + resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} 2611 2607 peerDependencies: 2612 2608 typescript: '*' 2613 2609 peerDependenciesMeta: ··· 2686 2682 2687 2683 snapshots: 2688 2684 2689 - '@atcute/atproto@3.1.0': 2685 + '@atcute/atproto@3.1.1': 2690 2686 dependencies: 2691 2687 '@atcute/lexicons': 1.1.0 2692 2688 2693 - '@atcute/bluesky@3.1.4': 2689 + '@atcute/bluesky@3.1.5': 2694 2690 dependencies: 2695 - '@atcute/atproto': 3.1.0 2691 + '@atcute/atproto': 3.1.1 2696 2692 '@atcute/lexicons': 1.1.0 2697 2693 2698 2694 '@atcute/client@4.0.3': ··· 2738 2734 2739 2735 '@babel/parser@7.28.0': 2740 2736 dependencies: 2741 - '@babel/types': 7.28.0 2737 + '@babel/types': 7.28.1 2742 2738 2743 - '@babel/types@7.28.0': 2739 + '@babel/types@7.28.1': 2744 2740 dependencies: 2745 2741 '@babel/helper-string-parser': 7.27.1 2746 2742 '@babel/helper-validator-identifier': 7.27.1 2747 2743 2748 2744 '@badrap/valita@0.4.5': {} 2749 2745 2750 - '@clipprjs/lexicons@0.1.4': 2746 + '@clipprjs/lexicons@1.0.2': 2751 2747 dependencies: 2752 - '@atcute/atproto': 3.1.0 2748 + '@atcute/atproto': 3.1.1 2753 2749 '@atcute/lexicons': 1.1.0 2754 2750 2755 2751 '@colors/colors@1.6.0': {} ··· 2772 2768 '@esbuild-kit/core-utils': 3.3.2 2773 2769 get-tsconfig: 4.10.1 2774 2770 2775 - '@esbuild/aix-ppc64@0.25.6': 2771 + '@esbuild/aix-ppc64@0.25.8': 2776 2772 optional: true 2777 2773 2778 2774 '@esbuild/android-arm64@0.18.20': 2779 2775 optional: true 2780 2776 2781 - '@esbuild/android-arm64@0.25.6': 2777 + '@esbuild/android-arm64@0.25.8': 2782 2778 optional: true 2783 2779 2784 2780 '@esbuild/android-arm@0.18.20': 2785 2781 optional: true 2786 2782 2787 - '@esbuild/android-arm@0.25.6': 2783 + '@esbuild/android-arm@0.25.8': 2788 2784 optional: true 2789 2785 2790 2786 '@esbuild/android-x64@0.18.20': 2791 2787 optional: true 2792 2788 2793 - '@esbuild/android-x64@0.25.6': 2789 + '@esbuild/android-x64@0.25.8': 2794 2790 optional: true 2795 2791 2796 2792 '@esbuild/darwin-arm64@0.18.20': 2797 2793 optional: true 2798 2794 2799 - '@esbuild/darwin-arm64@0.25.6': 2795 + '@esbuild/darwin-arm64@0.25.8': 2800 2796 optional: true 2801 2797 2802 2798 '@esbuild/darwin-x64@0.18.20': 2803 2799 optional: true 2804 2800 2805 - '@esbuild/darwin-x64@0.25.6': 2801 + '@esbuild/darwin-x64@0.25.8': 2806 2802 optional: true 2807 2803 2808 2804 '@esbuild/freebsd-arm64@0.18.20': 2809 2805 optional: true 2810 2806 2811 - '@esbuild/freebsd-arm64@0.25.6': 2807 + '@esbuild/freebsd-arm64@0.25.8': 2812 2808 optional: true 2813 2809 2814 2810 '@esbuild/freebsd-x64@0.18.20': 2815 2811 optional: true 2816 2812 2817 - '@esbuild/freebsd-x64@0.25.6': 2813 + '@esbuild/freebsd-x64@0.25.8': 2818 2814 optional: true 2819 2815 2820 2816 '@esbuild/linux-arm64@0.18.20': 2821 2817 optional: true 2822 2818 2823 - '@esbuild/linux-arm64@0.25.6': 2819 + '@esbuild/linux-arm64@0.25.8': 2824 2820 optional: true 2825 2821 2826 2822 '@esbuild/linux-arm@0.18.20': 2827 2823 optional: true 2828 2824 2829 - '@esbuild/linux-arm@0.25.6': 2825 + '@esbuild/linux-arm@0.25.8': 2830 2826 optional: true 2831 2827 2832 2828 '@esbuild/linux-ia32@0.18.20': 2833 2829 optional: true 2834 2830 2835 - '@esbuild/linux-ia32@0.25.6': 2831 + '@esbuild/linux-ia32@0.25.8': 2836 2832 optional: true 2837 2833 2838 2834 '@esbuild/linux-loong64@0.18.20': 2839 2835 optional: true 2840 2836 2841 - '@esbuild/linux-loong64@0.25.6': 2837 + '@esbuild/linux-loong64@0.25.8': 2842 2838 optional: true 2843 2839 2844 2840 '@esbuild/linux-mips64el@0.18.20': 2845 2841 optional: true 2846 2842 2847 - '@esbuild/linux-mips64el@0.25.6': 2843 + '@esbuild/linux-mips64el@0.25.8': 2848 2844 optional: true 2849 2845 2850 2846 '@esbuild/linux-ppc64@0.18.20': 2851 2847 optional: true 2852 2848 2853 - '@esbuild/linux-ppc64@0.25.6': 2849 + '@esbuild/linux-ppc64@0.25.8': 2854 2850 optional: true 2855 2851 2856 2852 '@esbuild/linux-riscv64@0.18.20': 2857 2853 optional: true 2858 2854 2859 - '@esbuild/linux-riscv64@0.25.6': 2855 + '@esbuild/linux-riscv64@0.25.8': 2860 2856 optional: true 2861 2857 2862 2858 '@esbuild/linux-s390x@0.18.20': 2863 2859 optional: true 2864 2860 2865 - '@esbuild/linux-s390x@0.25.6': 2861 + '@esbuild/linux-s390x@0.25.8': 2866 2862 optional: true 2867 2863 2868 2864 '@esbuild/linux-x64@0.18.20': 2869 2865 optional: true 2870 2866 2871 - '@esbuild/linux-x64@0.25.6': 2867 + '@esbuild/linux-x64@0.25.8': 2872 2868 optional: true 2873 2869 2874 - '@esbuild/netbsd-arm64@0.25.6': 2870 + '@esbuild/netbsd-arm64@0.25.8': 2875 2871 optional: true 2876 2872 2877 2873 '@esbuild/netbsd-x64@0.18.20': 2878 2874 optional: true 2879 2875 2880 - '@esbuild/netbsd-x64@0.25.6': 2876 + '@esbuild/netbsd-x64@0.25.8': 2881 2877 optional: true 2882 2878 2883 - '@esbuild/openbsd-arm64@0.25.6': 2879 + '@esbuild/openbsd-arm64@0.25.8': 2884 2880 optional: true 2885 2881 2886 2882 '@esbuild/openbsd-x64@0.18.20': 2887 2883 optional: true 2888 2884 2889 - '@esbuild/openbsd-x64@0.25.6': 2885 + '@esbuild/openbsd-x64@0.25.8': 2890 2886 optional: true 2891 2887 2892 - '@esbuild/openharmony-arm64@0.25.6': 2888 + '@esbuild/openharmony-arm64@0.25.8': 2893 2889 optional: true 2894 2890 2895 2891 '@esbuild/sunos-x64@0.18.20': 2896 2892 optional: true 2897 2893 2898 - '@esbuild/sunos-x64@0.25.6': 2894 + '@esbuild/sunos-x64@0.25.8': 2899 2895 optional: true 2900 2896 2901 2897 '@esbuild/win32-arm64@0.18.20': 2902 2898 optional: true 2903 2899 2904 - '@esbuild/win32-arm64@0.25.6': 2900 + '@esbuild/win32-arm64@0.25.8': 2905 2901 optional: true 2906 2902 2907 2903 '@esbuild/win32-ia32@0.18.20': 2908 2904 optional: true 2909 2905 2910 - '@esbuild/win32-ia32@0.25.6': 2906 + '@esbuild/win32-ia32@0.25.8': 2911 2907 optional: true 2912 2908 2913 2909 '@esbuild/win32-x64@0.18.20': 2914 2910 optional: true 2915 2911 2916 - '@esbuild/win32-x64@0.25.6': 2912 + '@esbuild/win32-x64@0.25.8': 2917 2913 optional: true 2918 2914 2919 - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))': 2915 + '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': 2920 2916 dependencies: 2921 - eslint: 9.30.1(jiti@2.4.2) 2917 + eslint: 9.31.0(jiti@2.4.2) 2922 2918 eslint-visitor-keys: 3.4.3 2923 2919 2924 2920 '@eslint-community/regexpp@4.12.1': {} ··· 2933 2929 2934 2930 '@eslint/config-helpers@0.3.0': {} 2935 2931 2936 - '@eslint/core@0.14.0': 2937 - dependencies: 2938 - '@types/json-schema': 7.0.15 2939 - 2940 2932 '@eslint/core@0.15.1': 2941 2933 dependencies: 2942 2934 '@types/json-schema': 7.0.15 ··· 2955 2947 transitivePeerDependencies: 2956 2948 - supports-color 2957 2949 2958 - '@eslint/js@9.30.1': {} 2950 + '@eslint/js@9.31.0': {} 2959 2951 2960 2952 '@eslint/object-schema@2.1.6': {} 2961 2953 2962 - '@eslint/plugin-kit@0.3.3': 2954 + '@eslint/plugin-kit@0.3.4': 2963 2955 dependencies: 2964 2956 '@eslint/core': 0.15.1 2965 2957 levn: 0.4.1 ··· 2979 2971 2980 2972 '@floating-ui/utils@0.2.10': {} 2981 2973 2982 - '@floating-ui/vue@1.1.7(vue@3.5.17(typescript@5.8.3))': 2974 + '@floating-ui/vue@1.1.7(vue@3.5.18(typescript@5.8.3))': 2983 2975 dependencies: 2984 2976 '@floating-ui/dom': 1.7.2 2985 2977 '@floating-ui/utils': 0.2.10 2986 - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) 2978 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.8.3)) 2987 2979 transitivePeerDependencies: 2988 2980 - '@vue/composition-api' 2989 2981 - vue 2990 2982 2991 - '@headlessui/vue@1.7.23(vue@3.5.17(typescript@5.8.3))': 2983 + '@headlessui/vue@1.7.23(vue@3.5.18(typescript@5.8.3))': 2992 2984 dependencies: 2993 - '@tanstack/vue-virtual': 3.13.12(vue@3.5.17(typescript@5.8.3)) 2994 - vue: 3.5.17(typescript@5.8.3) 2985 + '@tanstack/vue-virtual': 3.13.12(vue@3.5.18(typescript@5.8.3)) 2986 + vue: 3.5.18(typescript@5.8.3) 2995 2987 2996 - '@hono/node-server@1.15.0(hono@4.8.4)': 2988 + '@hono/node-server@1.17.1(hono@4.8.5)': 2997 2989 dependencies: 2998 - hono: 4.8.4 2990 + hono: 4.8.5 2999 2991 3000 2992 '@humanfs/core@0.19.1': {} 3001 2993 ··· 3019 3011 3020 3012 '@hyperjump/json-pointer@1.1.1': {} 3021 3013 3022 - '@hyperjump/json-schema@1.16.1(@hyperjump/browser@1.3.1)': 3014 + '@hyperjump/json-schema@1.16.2(@hyperjump/browser@1.3.1)': 3023 3015 dependencies: 3024 3016 '@hyperjump/browser': 1.3.1 3025 3017 '@hyperjump/json-pointer': 1.1.1 ··· 3038 3030 dependencies: 3039 3031 '@swc/helpers': 0.5.17 3040 3032 3041 - '@internationalized/number@3.6.3': 3033 + '@internationalized/number@3.6.4': 3042 3034 dependencies: 3043 3035 '@swc/helpers': 0.5.17 3044 3036 ··· 3061 3053 '@jridgewell/resolve-uri': 3.1.2 3062 3054 '@jridgewell/sourcemap-codec': 1.5.4 3063 3055 3064 - '@libsql/client@0.15.9': 3056 + '@libsql/client@0.15.10': 3065 3057 dependencies: 3066 - '@libsql/core': 0.15.9 3058 + '@libsql/core': 0.15.10 3067 3059 '@libsql/hrana-client': 0.7.0 3068 3060 js-base64: 3.7.7 3069 - libsql: 0.5.13 3061 + libsql: 0.5.16 3070 3062 promise-limit: 2.7.0 3071 3063 transitivePeerDependencies: 3072 3064 - bufferutil 3073 3065 - utf-8-validate 3074 3066 3075 - '@libsql/core@0.15.9': 3067 + '@libsql/core@0.15.10': 3076 3068 dependencies: 3077 3069 js-base64: 3.7.7 3078 3070 3079 - '@libsql/darwin-arm64@0.5.13': 3071 + '@libsql/darwin-arm64@0.5.16': 3080 3072 optional: true 3081 3073 3082 - '@libsql/darwin-x64@0.5.13': 3074 + '@libsql/darwin-x64@0.5.16': 3083 3075 optional: true 3084 3076 3085 3077 '@libsql/hrana-client@0.7.0': ··· 3102 3094 - bufferutil 3103 3095 - utf-8-validate 3104 3096 3105 - '@libsql/linux-arm-gnueabihf@0.5.13': 3097 + '@libsql/linux-arm-gnueabihf@0.5.16': 3106 3098 optional: true 3107 3099 3108 - '@libsql/linux-arm-musleabihf@0.5.13': 3100 + '@libsql/linux-arm-musleabihf@0.5.16': 3109 3101 optional: true 3110 3102 3111 - '@libsql/linux-arm64-gnu@0.5.13': 3103 + '@libsql/linux-arm64-gnu@0.5.16': 3112 3104 optional: true 3113 3105 3114 - '@libsql/linux-arm64-musl@0.5.13': 3106 + '@libsql/linux-arm64-musl@0.5.16': 3115 3107 optional: true 3116 3108 3117 - '@libsql/linux-x64-gnu@0.5.13': 3109 + '@libsql/linux-x64-gnu@0.5.16': 3118 3110 optional: true 3119 3111 3120 - '@libsql/linux-x64-musl@0.5.13': 3112 + '@libsql/linux-x64-musl@0.5.16': 3121 3113 optional: true 3122 3114 3123 - '@libsql/win32-x64-msvc@0.5.13': 3115 + '@libsql/win32-x64-msvc@0.5.16': 3124 3116 optional: true 3125 3117 3126 3118 '@neon-rs/load@0.0.4': {} ··· 3139 3131 3140 3132 '@phosphor-icons/core@2.1.1': {} 3141 3133 3142 - '@pkgr/core@0.2.7': {} 3134 + '@pkgr/core@0.2.9': {} 3143 3135 3144 3136 '@rtsao/scc@1.1.0': {} 3145 3137 3146 - '@scalar/code-highlight@0.1.5': 3138 + '@scalar/code-highlight@0.1.8': 3147 3139 dependencies: 3148 3140 hast-util-to-text: 4.0.2 3149 3141 highlight.js: 11.11.1 ··· 3165 3157 transitivePeerDependencies: 3166 3158 - supports-color 3167 3159 3168 - '@scalar/components@0.14.16(typescript@5.8.3)': 3160 + '@scalar/components@0.14.20(typescript@5.8.3)': 3169 3161 dependencies: 3170 3162 '@floating-ui/utils': 0.2.10 3171 - '@floating-ui/vue': 1.1.7(vue@3.5.17(typescript@5.8.3)) 3172 - '@headlessui/vue': 1.7.23(vue@3.5.17(typescript@5.8.3)) 3173 - '@scalar/code-highlight': 0.1.5 3163 + '@floating-ui/vue': 1.1.7(vue@3.5.18(typescript@5.8.3)) 3164 + '@headlessui/vue': 1.7.23(vue@3.5.18(typescript@5.8.3)) 3165 + '@scalar/code-highlight': 0.1.8 3174 3166 '@scalar/icons': 0.4.6(typescript@5.8.3) 3175 - '@scalar/oas-utils': 0.4.11(typescript@5.8.3) 3176 - '@scalar/themes': 0.13.8 3167 + '@scalar/oas-utils': 0.4.15(typescript@5.8.3) 3168 + '@scalar/themes': 0.13.11 3177 3169 '@scalar/use-hooks': 0.2.4(typescript@5.8.3) 3178 3170 '@scalar/use-toasts': 0.8.0(typescript@5.8.3) 3179 - '@vueuse/core': 10.11.1(vue@3.5.17(typescript@5.8.3)) 3171 + '@vueuse/core': 10.11.1(vue@3.5.18(typescript@5.8.3)) 3180 3172 cva: 1.0.0-beta.2(typescript@5.8.3) 3181 3173 nanoid: 5.1.5 3182 3174 pretty-bytes: 6.1.1 3183 - radix-vue: 1.9.17(vue@3.5.17(typescript@5.8.3)) 3184 - vue: 3.5.17(typescript@5.8.3) 3175 + radix-vue: 1.9.17(vue@3.5.18(typescript@5.8.3)) 3176 + vue: 3.5.18(typescript@5.8.3) 3185 3177 transitivePeerDependencies: 3186 3178 - '@vue/composition-api' 3187 3179 - supports-color 3188 3180 - typescript 3189 3181 3190 - '@scalar/core@0.3.7': 3182 + '@scalar/core@0.3.10': 3191 3183 dependencies: 3192 - '@scalar/types': 0.2.7 3184 + '@scalar/types': 0.2.10 3193 3185 3194 3186 '@scalar/helpers@0.0.6': {} 3195 3187 3196 - '@scalar/hono-api-reference@0.9.9(hono@4.8.4)': 3188 + '@scalar/hono-api-reference@0.9.12(hono@4.8.5)': 3197 3189 dependencies: 3198 - '@scalar/core': 0.3.7 3199 - hono: 4.8.4 3190 + '@scalar/core': 0.3.10 3191 + hono: 4.8.5 3200 3192 3201 3193 '@scalar/icons@0.4.6(typescript@5.8.3)': 3202 3194 dependencies: 3203 3195 '@phosphor-icons/core': 2.1.1 3204 - '@types/node': 22.16.2 3196 + '@types/node': 22.16.5 3205 3197 chalk: 5.4.1 3206 - vue: 3.5.17(typescript@5.8.3) 3198 + vue: 3.5.18(typescript@5.8.3) 3207 3199 transitivePeerDependencies: 3208 3200 - typescript 3209 3201 3210 3202 '@scalar/json-diff@0.0.4': {} 3211 3203 3212 - '@scalar/oas-utils@0.4.11(typescript@5.8.3)': 3204 + '@scalar/oas-utils@0.4.15(typescript@5.8.3)': 3213 3205 dependencies: 3214 3206 '@hyperjump/browser': 1.3.1 3215 - '@hyperjump/json-schema': 1.16.1(@hyperjump/browser@1.3.1) 3207 + '@hyperjump/json-schema': 1.16.2(@hyperjump/browser@1.3.1) 3216 3208 '@scalar/helpers': 0.0.6 3217 3209 '@scalar/object-utils': 1.2.2 3218 - '@scalar/openapi-types': 0.3.5 3219 - '@scalar/themes': 0.13.8 3220 - '@scalar/types': 0.2.7 3221 - '@scalar/workspace-store': 0.8.0(typescript@5.8.3) 3210 + '@scalar/openapi-types': 0.3.6 3211 + '@scalar/themes': 0.13.11 3212 + '@scalar/types': 0.2.10 3213 + '@scalar/workspace-store': 0.10.2(typescript@5.8.3) 3222 3214 '@types/har-format': 1.2.16 3223 3215 flatted: 3.3.3 3224 3216 microdiff: 1.5.0 ··· 3237 3229 ts-deepmerge: 7.0.3 3238 3230 type-fest: 4.41.0 3239 3231 3240 - '@scalar/openapi-parser@0.18.1': 3232 + '@scalar/openapi-parser@0.18.2': 3241 3233 dependencies: 3242 3234 ajv: 8.17.1 3243 3235 ajv-draft-04: 1.0.0(ajv@8.17.1) ··· 3246 3238 leven: 4.0.0 3247 3239 yaml: 2.8.0 3248 3240 3249 - '@scalar/openapi-to-markdown@0.2.19(typescript@5.8.3)': 3241 + '@scalar/openapi-to-markdown@0.2.23(typescript@5.8.3)': 3250 3242 dependencies: 3251 - '@scalar/components': 0.14.16(typescript@5.8.3) 3252 - '@scalar/oas-utils': 0.4.11(typescript@5.8.3) 3253 - '@scalar/openapi-parser': 0.18.1 3254 - '@scalar/openapi-types': 0.3.5 3255 - '@scalar/snippetz': 0.4.0 3256 - '@scalar/types': 0.2.7 3243 + '@scalar/components': 0.14.20(typescript@5.8.3) 3244 + '@scalar/oas-utils': 0.4.15(typescript@5.8.3) 3245 + '@scalar/openapi-parser': 0.18.2 3246 + '@scalar/openapi-types': 0.3.6 3247 + '@scalar/snippetz': 0.4.3 3248 + '@scalar/types': 0.2.10 3257 3249 html-minifier-terser: 7.2.0 3258 3250 object-to-xml: 2.0.0 3259 3251 rehype-parse: 9.0.1 ··· 3263 3255 remark-gfm: 4.0.1 3264 3256 remark-stringify: 11.0.0 3265 3257 unified: 11.0.5 3266 - vue: 3.5.17(typescript@5.8.3) 3258 + vue: 3.5.18(typescript@5.8.3) 3267 3259 transitivePeerDependencies: 3268 3260 - '@vue/composition-api' 3269 3261 - supports-color 3270 3262 - typescript 3271 3263 3272 - '@scalar/openapi-types@0.3.5': 3264 + '@scalar/openapi-types@0.3.6': 3273 3265 dependencies: 3274 3266 zod: 3.24.1 3275 3267 3276 - '@scalar/snippetz@0.4.0': 3268 + '@scalar/snippetz@0.4.3': 3277 3269 dependencies: 3278 - '@scalar/types': 0.2.7 3270 + '@scalar/types': 0.2.10 3279 3271 stringify-object: 5.0.0 3280 3272 3281 - '@scalar/themes@0.13.8': 3273 + '@scalar/themes@0.13.11': 3282 3274 dependencies: 3283 - '@scalar/types': 0.2.7 3275 + '@scalar/types': 0.2.10 3284 3276 nanoid: 5.1.5 3285 3277 3286 - '@scalar/types@0.2.7': 3278 + '@scalar/types@0.2.10': 3287 3279 dependencies: 3288 - '@scalar/openapi-types': 0.3.5 3280 + '@scalar/openapi-types': 0.3.6 3289 3281 nanoid: 5.1.5 3290 3282 zod: 3.24.1 3291 3283 3292 3284 '@scalar/use-hooks@0.2.4(typescript@5.8.3)': 3293 3285 dependencies: 3294 3286 '@scalar/use-toasts': 0.8.0(typescript@5.8.3) 3295 - '@vueuse/core': 10.11.1(vue@3.5.17(typescript@5.8.3)) 3287 + '@vueuse/core': 10.11.1(vue@3.5.18(typescript@5.8.3)) 3296 3288 cva: 1.0.0-beta.2(typescript@5.8.3) 3297 3289 tailwind-merge: 2.6.0 3298 - vue: 3.5.17(typescript@5.8.3) 3290 + vue: 3.5.18(typescript@5.8.3) 3299 3291 zod: 3.24.1 3300 3292 transitivePeerDependencies: 3301 3293 - '@vue/composition-api' ··· 3304 3296 '@scalar/use-toasts@0.8.0(typescript@5.8.3)': 3305 3297 dependencies: 3306 3298 nanoid: 5.1.5 3307 - vue: 3.5.17(typescript@5.8.3) 3299 + vue: 3.5.18(typescript@5.8.3) 3308 3300 vue-sonner: 1.3.2 3309 3301 transitivePeerDependencies: 3310 3302 - typescript 3311 3303 3312 - '@scalar/workspace-store@0.8.0(typescript@5.8.3)': 3304 + '@scalar/workspace-store@0.10.2(typescript@5.8.3)': 3313 3305 dependencies: 3314 - '@scalar/code-highlight': 0.1.5 3306 + '@scalar/code-highlight': 0.1.8 3315 3307 '@scalar/helpers': 0.0.6 3316 3308 '@scalar/json-diff': 0.0.4 3317 - '@scalar/openapi-parser': 0.18.1 3318 - '@scalar/openapi-types': 0.3.5 3319 - '@scalar/types': 0.2.7 3309 + '@scalar/openapi-parser': 0.18.2 3310 + '@scalar/openapi-types': 0.3.6 3311 + '@scalar/types': 0.2.10 3320 3312 '@sinclair/typebox': 0.34.37 3321 3313 github-slugger: 2.0.0 3322 - vue: 3.5.17(typescript@5.8.3) 3314 + vue: 3.5.18(typescript@5.8.3) 3323 3315 yaml: 2.8.0 3324 3316 transitivePeerDependencies: 3325 3317 - supports-color ··· 3327 3319 3328 3320 '@sinclair/typebox@0.34.37': {} 3329 3321 3330 - '@skyware/jetstream@0.2.4': 3322 + '@skyware/jetstream@0.2.5': 3331 3323 dependencies: 3332 - '@atcute/atproto': 3.1.0 3333 - '@atcute/bluesky': 3.1.4 3324 + '@atcute/atproto': 3.1.1 3325 + '@atcute/bluesky': 3.1.5 3334 3326 '@atcute/lexicons': 1.1.0 3335 3327 partysocket: 1.1.4 3336 3328 tiny-emitter: 2.1.0 ··· 3341 3333 3342 3334 '@tanstack/virtual-core@3.13.12': {} 3343 3335 3344 - '@tanstack/vue-virtual@3.13.12(vue@3.5.17(typescript@5.8.3))': 3336 + '@tanstack/vue-virtual@3.13.12(vue@3.5.18(typescript@5.8.3))': 3345 3337 dependencies: 3346 3338 '@tanstack/virtual-core': 3.13.12 3347 - vue: 3.5.17(typescript@5.8.3) 3339 + vue: 3.5.18(typescript@5.8.3) 3348 3340 3349 3341 '@types/debug@4.1.12': 3350 3342 dependencies: ··· 3368 3360 3369 3361 '@types/ms@2.1.0': {} 3370 3362 3371 - '@types/node@22.16.2': 3363 + '@types/node@22.16.5': 3372 3364 dependencies: 3373 3365 undici-types: 6.21.0 3374 3366 3375 - '@types/node@24.0.12': 3367 + '@types/node@24.1.0': 3376 3368 dependencies: 3377 3369 undici-types: 7.8.0 3378 3370 ··· 3384 3376 3385 3377 '@types/ws@8.18.1': 3386 3378 dependencies: 3387 - '@types/node': 24.0.12 3379 + '@types/node': 24.1.0 3388 3380 3389 - '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': 3381 + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': 3390 3382 dependencies: 3391 3383 '@eslint-community/regexpp': 4.12.1 3392 - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 3393 - '@typescript-eslint/scope-manager': 8.36.0 3394 - '@typescript-eslint/type-utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 3395 - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 3396 - '@typescript-eslint/visitor-keys': 8.36.0 3397 - eslint: 9.30.1(jiti@2.4.2) 3384 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 3385 + '@typescript-eslint/scope-manager': 8.38.0 3386 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 3387 + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 3388 + '@typescript-eslint/visitor-keys': 8.38.0 3389 + eslint: 9.31.0(jiti@2.4.2) 3398 3390 graphemer: 1.4.0 3399 3391 ignore: 7.0.5 3400 3392 natural-compare: 1.4.0 ··· 3403 3395 transitivePeerDependencies: 3404 3396 - supports-color 3405 3397 3406 - '@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': 3398 + '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': 3407 3399 dependencies: 3408 - '@typescript-eslint/scope-manager': 8.36.0 3409 - '@typescript-eslint/types': 8.36.0 3410 - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) 3411 - '@typescript-eslint/visitor-keys': 8.36.0 3400 + '@typescript-eslint/scope-manager': 8.38.0 3401 + '@typescript-eslint/types': 8.38.0 3402 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 3403 + '@typescript-eslint/visitor-keys': 8.38.0 3412 3404 debug: 4.4.1 3413 - eslint: 9.30.1(jiti@2.4.2) 3405 + eslint: 9.31.0(jiti@2.4.2) 3414 3406 typescript: 5.8.3 3415 3407 transitivePeerDependencies: 3416 3408 - supports-color 3417 3409 3418 - '@typescript-eslint/project-service@8.36.0(typescript@5.8.3)': 3410 + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': 3419 3411 dependencies: 3420 - '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3) 3421 - '@typescript-eslint/types': 8.36.0 3412 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) 3413 + '@typescript-eslint/types': 8.38.0 3422 3414 debug: 4.4.1 3423 3415 typescript: 5.8.3 3424 3416 transitivePeerDependencies: 3425 3417 - supports-color 3426 3418 3427 - '@typescript-eslint/scope-manager@8.36.0': 3419 + '@typescript-eslint/scope-manager@8.38.0': 3428 3420 dependencies: 3429 - '@typescript-eslint/types': 8.36.0 3430 - '@typescript-eslint/visitor-keys': 8.36.0 3421 + '@typescript-eslint/types': 8.38.0 3422 + '@typescript-eslint/visitor-keys': 8.38.0 3431 3423 3432 - '@typescript-eslint/tsconfig-utils@8.36.0(typescript@5.8.3)': 3424 + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': 3433 3425 dependencies: 3434 3426 typescript: 5.8.3 3435 3427 3436 - '@typescript-eslint/type-utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': 3428 + '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': 3437 3429 dependencies: 3438 - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) 3439 - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 3430 + '@typescript-eslint/types': 8.38.0 3431 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 3432 + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 3440 3433 debug: 4.4.1 3441 - eslint: 9.30.1(jiti@2.4.2) 3434 + eslint: 9.31.0(jiti@2.4.2) 3442 3435 ts-api-utils: 2.1.0(typescript@5.8.3) 3443 3436 typescript: 5.8.3 3444 3437 transitivePeerDependencies: 3445 3438 - supports-color 3446 3439 3447 - '@typescript-eslint/types@8.36.0': {} 3440 + '@typescript-eslint/types@8.38.0': {} 3448 3441 3449 - '@typescript-eslint/typescript-estree@8.36.0(typescript@5.8.3)': 3442 + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': 3450 3443 dependencies: 3451 - '@typescript-eslint/project-service': 8.36.0(typescript@5.8.3) 3452 - '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3) 3453 - '@typescript-eslint/types': 8.36.0 3454 - '@typescript-eslint/visitor-keys': 8.36.0 3444 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) 3445 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) 3446 + '@typescript-eslint/types': 8.38.0 3447 + '@typescript-eslint/visitor-keys': 8.38.0 3455 3448 debug: 4.4.1 3456 3449 fast-glob: 3.3.3 3457 3450 is-glob: 4.0.3 ··· 3462 3455 transitivePeerDependencies: 3463 3456 - supports-color 3464 3457 3465 - '@typescript-eslint/utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': 3458 + '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': 3466 3459 dependencies: 3467 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) 3468 - '@typescript-eslint/scope-manager': 8.36.0 3469 - '@typescript-eslint/types': 8.36.0 3470 - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) 3471 - eslint: 9.30.1(jiti@2.4.2) 3460 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) 3461 + '@typescript-eslint/scope-manager': 8.38.0 3462 + '@typescript-eslint/types': 8.38.0 3463 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 3464 + eslint: 9.31.0(jiti@2.4.2) 3472 3465 typescript: 5.8.3 3473 3466 transitivePeerDependencies: 3474 3467 - supports-color 3475 3468 3476 - '@typescript-eslint/visitor-keys@8.36.0': 3469 + '@typescript-eslint/visitor-keys@8.38.0': 3477 3470 dependencies: 3478 - '@typescript-eslint/types': 8.36.0 3471 + '@typescript-eslint/types': 8.38.0 3479 3472 eslint-visitor-keys: 4.2.1 3480 3473 3481 3474 '@ungap/structured-clone@1.3.0': {} 3482 3475 3483 - '@vue/compiler-core@3.5.17': 3476 + '@vue/compiler-core@3.5.18': 3484 3477 dependencies: 3485 3478 '@babel/parser': 7.28.0 3486 - '@vue/shared': 3.5.17 3479 + '@vue/shared': 3.5.18 3487 3480 entities: 4.5.0 3488 3481 estree-walker: 2.0.2 3489 3482 source-map-js: 1.2.1 3490 3483 3491 - '@vue/compiler-dom@3.5.17': 3484 + '@vue/compiler-dom@3.5.18': 3492 3485 dependencies: 3493 - '@vue/compiler-core': 3.5.17 3494 - '@vue/shared': 3.5.17 3486 + '@vue/compiler-core': 3.5.18 3487 + '@vue/shared': 3.5.18 3495 3488 3496 - '@vue/compiler-sfc@3.5.17': 3489 + '@vue/compiler-sfc@3.5.18': 3497 3490 dependencies: 3498 3491 '@babel/parser': 7.28.0 3499 - '@vue/compiler-core': 3.5.17 3500 - '@vue/compiler-dom': 3.5.17 3501 - '@vue/compiler-ssr': 3.5.17 3502 - '@vue/shared': 3.5.17 3492 + '@vue/compiler-core': 3.5.18 3493 + '@vue/compiler-dom': 3.5.18 3494 + '@vue/compiler-ssr': 3.5.18 3495 + '@vue/shared': 3.5.18 3503 3496 estree-walker: 2.0.2 3504 3497 magic-string: 0.30.17 3505 3498 postcss: 8.5.6 3506 3499 source-map-js: 1.2.1 3507 3500 3508 - '@vue/compiler-ssr@3.5.17': 3501 + '@vue/compiler-ssr@3.5.18': 3509 3502 dependencies: 3510 - '@vue/compiler-dom': 3.5.17 3511 - '@vue/shared': 3.5.17 3503 + '@vue/compiler-dom': 3.5.18 3504 + '@vue/shared': 3.5.18 3512 3505 3513 - '@vue/reactivity@3.5.17': 3506 + '@vue/reactivity@3.5.18': 3514 3507 dependencies: 3515 - '@vue/shared': 3.5.17 3508 + '@vue/shared': 3.5.18 3516 3509 3517 - '@vue/runtime-core@3.5.17': 3510 + '@vue/runtime-core@3.5.18': 3518 3511 dependencies: 3519 - '@vue/reactivity': 3.5.17 3520 - '@vue/shared': 3.5.17 3512 + '@vue/reactivity': 3.5.18 3513 + '@vue/shared': 3.5.18 3521 3514 3522 - '@vue/runtime-dom@3.5.17': 3515 + '@vue/runtime-dom@3.5.18': 3523 3516 dependencies: 3524 - '@vue/reactivity': 3.5.17 3525 - '@vue/runtime-core': 3.5.17 3526 - '@vue/shared': 3.5.17 3517 + '@vue/reactivity': 3.5.18 3518 + '@vue/runtime-core': 3.5.18 3519 + '@vue/shared': 3.5.18 3527 3520 csstype: 3.1.3 3528 3521 3529 - '@vue/server-renderer@3.5.17(vue@3.5.17(typescript@5.8.3))': 3522 + '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.8.3))': 3530 3523 dependencies: 3531 - '@vue/compiler-ssr': 3.5.17 3532 - '@vue/shared': 3.5.17 3533 - vue: 3.5.17(typescript@5.8.3) 3524 + '@vue/compiler-ssr': 3.5.18 3525 + '@vue/shared': 3.5.18 3526 + vue: 3.5.18(typescript@5.8.3) 3534 3527 3535 - '@vue/shared@3.5.17': {} 3528 + '@vue/shared@3.5.18': {} 3536 3529 3537 - '@vueuse/core@10.11.1(vue@3.5.17(typescript@5.8.3))': 3530 + '@vueuse/core@10.11.1(vue@3.5.18(typescript@5.8.3))': 3538 3531 dependencies: 3539 3532 '@types/web-bluetooth': 0.0.20 3540 3533 '@vueuse/metadata': 10.11.1 3541 - '@vueuse/shared': 10.11.1(vue@3.5.17(typescript@5.8.3)) 3542 - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) 3534 + '@vueuse/shared': 10.11.1(vue@3.5.18(typescript@5.8.3)) 3535 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.8.3)) 3543 3536 transitivePeerDependencies: 3544 3537 - '@vue/composition-api' 3545 3538 - vue 3546 3539 3547 3540 '@vueuse/metadata@10.11.1': {} 3548 3541 3549 - '@vueuse/shared@10.11.1(vue@3.5.17(typescript@5.8.3))': 3542 + '@vueuse/shared@10.11.1(vue@3.5.18(typescript@5.8.3))': 3550 3543 dependencies: 3551 - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) 3544 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.8.3)) 3552 3545 transitivePeerDependencies: 3553 3546 - '@vue/composition-api' 3554 3547 - vue ··· 3670 3663 3671 3664 bun-types@1.2.17: 3672 3665 dependencies: 3673 - '@types/node': 24.0.12 3666 + '@types/node': 24.1.0 3674 3667 optional: true 3675 3668 3676 3669 call-bind-apply-helpers@1.0.2: ··· 3842 3835 dependencies: 3843 3836 '@drizzle-team/brocli': 0.10.2 3844 3837 '@esbuild-kit/esm-loader': 2.6.5 3845 - esbuild: 0.25.6 3846 - esbuild-register: 3.6.0(esbuild@0.25.6) 3838 + esbuild: 0.25.8 3839 + esbuild-register: 3.6.0(esbuild@0.25.8) 3847 3840 transitivePeerDependencies: 3848 3841 - supports-color 3849 3842 3850 - drizzle-orm@0.44.2(@libsql/client@0.15.9)(bun-types@1.2.17): 3843 + drizzle-orm@0.44.3(@libsql/client@0.15.10)(bun-types@1.2.17): 3851 3844 optionalDependencies: 3852 - '@libsql/client': 0.15.9 3845 + '@libsql/client': 0.15.10 3853 3846 bun-types: 1.2.17 3854 3847 3855 3848 dunder-proto@1.0.1: ··· 3946 3939 is-date-object: 1.1.0 3947 3940 is-symbol: 1.1.1 3948 3941 3949 - esbuild-register@3.6.0(esbuild@0.25.6): 3942 + esbuild-register@3.6.0(esbuild@0.25.8): 3950 3943 dependencies: 3951 3944 debug: 4.4.1 3952 - esbuild: 0.25.6 3945 + esbuild: 0.25.8 3953 3946 transitivePeerDependencies: 3954 3947 - supports-color 3955 3948 ··· 3978 3971 '@esbuild/win32-ia32': 0.18.20 3979 3972 '@esbuild/win32-x64': 0.18.20 3980 3973 3981 - esbuild@0.25.6: 3974 + esbuild@0.25.8: 3982 3975 optionalDependencies: 3983 - '@esbuild/aix-ppc64': 0.25.6 3984 - '@esbuild/android-arm': 0.25.6 3985 - '@esbuild/android-arm64': 0.25.6 3986 - '@esbuild/android-x64': 0.25.6 3987 - '@esbuild/darwin-arm64': 0.25.6 3988 - '@esbuild/darwin-x64': 0.25.6 3989 - '@esbuild/freebsd-arm64': 0.25.6 3990 - '@esbuild/freebsd-x64': 0.25.6 3991 - '@esbuild/linux-arm': 0.25.6 3992 - '@esbuild/linux-arm64': 0.25.6 3993 - '@esbuild/linux-ia32': 0.25.6 3994 - '@esbuild/linux-loong64': 0.25.6 3995 - '@esbuild/linux-mips64el': 0.25.6 3996 - '@esbuild/linux-ppc64': 0.25.6 3997 - '@esbuild/linux-riscv64': 0.25.6 3998 - '@esbuild/linux-s390x': 0.25.6 3999 - '@esbuild/linux-x64': 0.25.6 4000 - '@esbuild/netbsd-arm64': 0.25.6 4001 - '@esbuild/netbsd-x64': 0.25.6 4002 - '@esbuild/openbsd-arm64': 0.25.6 4003 - '@esbuild/openbsd-x64': 0.25.6 4004 - '@esbuild/openharmony-arm64': 0.25.6 4005 - '@esbuild/sunos-x64': 0.25.6 4006 - '@esbuild/win32-arm64': 0.25.6 4007 - '@esbuild/win32-ia32': 0.25.6 4008 - '@esbuild/win32-x64': 0.25.6 3976 + '@esbuild/aix-ppc64': 0.25.8 3977 + '@esbuild/android-arm': 0.25.8 3978 + '@esbuild/android-arm64': 0.25.8 3979 + '@esbuild/android-x64': 0.25.8 3980 + '@esbuild/darwin-arm64': 0.25.8 3981 + '@esbuild/darwin-x64': 0.25.8 3982 + '@esbuild/freebsd-arm64': 0.25.8 3983 + '@esbuild/freebsd-x64': 0.25.8 3984 + '@esbuild/linux-arm': 0.25.8 3985 + '@esbuild/linux-arm64': 0.25.8 3986 + '@esbuild/linux-ia32': 0.25.8 3987 + '@esbuild/linux-loong64': 0.25.8 3988 + '@esbuild/linux-mips64el': 0.25.8 3989 + '@esbuild/linux-ppc64': 0.25.8 3990 + '@esbuild/linux-riscv64': 0.25.8 3991 + '@esbuild/linux-s390x': 0.25.8 3992 + '@esbuild/linux-x64': 0.25.8 3993 + '@esbuild/netbsd-arm64': 0.25.8 3994 + '@esbuild/netbsd-x64': 0.25.8 3995 + '@esbuild/openbsd-arm64': 0.25.8 3996 + '@esbuild/openbsd-x64': 0.25.8 3997 + '@esbuild/openharmony-arm64': 0.25.8 3998 + '@esbuild/sunos-x64': 0.25.8 3999 + '@esbuild/win32-arm64': 0.25.8 4000 + '@esbuild/win32-ia32': 0.25.8 4001 + '@esbuild/win32-x64': 0.25.8 4009 4002 4010 4003 escape-string-regexp@4.0.0: {} 4011 4004 4012 4005 escape-string-regexp@5.0.0: {} 4013 4006 4014 - eslint-config-prettier@10.1.5(eslint@9.30.1(jiti@2.4.2)): 4007 + eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)): 4015 4008 dependencies: 4016 - eslint: 9.30.1(jiti@2.4.2) 4009 + eslint: 9.31.0(jiti@2.4.2) 4017 4010 4018 4011 eslint-import-resolver-node@0.3.9: 4019 4012 dependencies: ··· 4023 4016 transitivePeerDependencies: 4024 4017 - supports-color 4025 4018 4026 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@2.4.2)): 4019 + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.31.0(jiti@2.4.2)): 4027 4020 dependencies: 4028 4021 debug: 3.2.7 4029 4022 optionalDependencies: 4030 - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 4031 - eslint: 9.30.1(jiti@2.4.2) 4023 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 4024 + eslint: 9.31.0(jiti@2.4.2) 4032 4025 eslint-import-resolver-node: 0.3.9 4033 4026 transitivePeerDependencies: 4034 4027 - supports-color 4035 4028 4036 - eslint-plugin-drizzle@0.2.3(eslint@9.30.1(jiti@2.4.2)): 4029 + eslint-plugin-drizzle@0.2.3(eslint@9.31.0(jiti@2.4.2)): 4037 4030 dependencies: 4038 - eslint: 9.30.1(jiti@2.4.2) 4031 + eslint: 9.31.0(jiti@2.4.2) 4039 4032 4040 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)): 4033 + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): 4041 4034 dependencies: 4042 4035 '@rtsao/scc': 1.1.0 4043 4036 array-includes: 3.1.9 ··· 4046 4039 array.prototype.flatmap: 1.3.3 4047 4040 debug: 3.2.7 4048 4041 doctrine: 2.1.0 4049 - eslint: 9.30.1(jiti@2.4.2) 4042 + eslint: 9.31.0(jiti@2.4.2) 4050 4043 eslint-import-resolver-node: 0.3.9 4051 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@2.4.2)) 4044 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.31.0(jiti@2.4.2)) 4052 4045 hasown: 2.0.2 4053 4046 is-core-module: 2.16.1 4054 4047 is-glob: 4.0.3 ··· 4060 4053 string.prototype.trimend: 1.0.9 4061 4054 tsconfig-paths: 3.15.0 4062 4055 optionalDependencies: 4063 - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 4056 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 4064 4057 transitivePeerDependencies: 4065 4058 - eslint-import-resolver-typescript 4066 4059 - eslint-import-resolver-webpack 4067 4060 - supports-color 4068 4061 4069 - eslint-plugin-prettier@5.5.1(eslint-config-prettier@10.1.5(eslint@9.30.1(jiti@2.4.2)))(eslint@9.30.1(jiti@2.4.2))(prettier@3.6.2): 4062 + eslint-plugin-prettier@5.5.3(eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)))(eslint@9.31.0(jiti@2.4.2))(prettier@3.6.2): 4070 4063 dependencies: 4071 - eslint: 9.30.1(jiti@2.4.2) 4064 + eslint: 9.31.0(jiti@2.4.2) 4072 4065 prettier: 3.6.2 4073 4066 prettier-linter-helpers: 1.0.0 4074 - synckit: 0.11.8 4067 + synckit: 0.11.11 4075 4068 optionalDependencies: 4076 - eslint-config-prettier: 10.1.5(eslint@9.30.1(jiti@2.4.2)) 4069 + eslint-config-prettier: 10.1.8(eslint@9.31.0(jiti@2.4.2)) 4077 4070 4078 4071 eslint-scope@8.4.0: 4079 4072 dependencies: ··· 4084 4077 4085 4078 eslint-visitor-keys@4.2.1: {} 4086 4079 4087 - eslint@9.30.1(jiti@2.4.2): 4080 + eslint@9.31.0(jiti@2.4.2): 4088 4081 dependencies: 4089 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) 4082 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) 4090 4083 '@eslint-community/regexpp': 4.12.1 4091 4084 '@eslint/config-array': 0.21.0 4092 4085 '@eslint/config-helpers': 0.3.0 4093 - '@eslint/core': 0.14.0 4086 + '@eslint/core': 0.15.1 4094 4087 '@eslint/eslintrc': 3.3.1 4095 - '@eslint/js': 9.30.1 4096 - '@eslint/plugin-kit': 0.3.3 4088 + '@eslint/js': 9.31.0 4089 + '@eslint/plugin-kit': 0.3.4 4097 4090 '@humanfs/node': 0.16.6 4098 4091 '@humanwhocodes/module-importer': 1.0.1 4099 4092 '@humanwhocodes/retry': 0.4.3 ··· 4457 4450 4458 4451 highlightjs-vue@1.0.0: {} 4459 4452 4460 - hono@4.8.4: {} 4453 + hono@4.8.5: {} 4461 4454 4462 4455 html-minifier-terser@7.2.0: 4463 4456 dependencies: ··· 4656 4649 prelude-ls: 1.2.1 4657 4650 type-check: 0.4.0 4658 4651 4659 - libsql@0.5.13: 4652 + libsql@0.5.16: 4660 4653 dependencies: 4661 4654 '@neon-rs/load': 0.0.4 4662 4655 detect-libc: 2.0.2 4663 4656 optionalDependencies: 4664 - '@libsql/darwin-arm64': 0.5.13 4665 - '@libsql/darwin-x64': 0.5.13 4666 - '@libsql/linux-arm-gnueabihf': 0.5.13 4667 - '@libsql/linux-arm-musleabihf': 0.5.13 4668 - '@libsql/linux-arm64-gnu': 0.5.13 4669 - '@libsql/linux-arm64-musl': 0.5.13 4670 - '@libsql/linux-x64-gnu': 0.5.13 4671 - '@libsql/linux-x64-musl': 0.5.13 4672 - '@libsql/win32-x64-msvc': 0.5.13 4657 + '@libsql/darwin-arm64': 0.5.16 4658 + '@libsql/darwin-x64': 0.5.16 4659 + '@libsql/linux-arm-gnueabihf': 0.5.16 4660 + '@libsql/linux-arm-musleabihf': 0.5.16 4661 + '@libsql/linux-arm64-gnu': 0.5.16 4662 + '@libsql/linux-arm64-musl': 0.5.16 4663 + '@libsql/linux-x64-gnu': 0.5.16 4664 + '@libsql/linux-x64-musl': 0.5.16 4665 + '@libsql/win32-x64-msvc': 0.5.16 4673 4666 4674 4667 locate-path@6.0.0: 4675 4668 dependencies: ··· 5177 5170 5178 5171 queue-microtask@1.2.3: {} 5179 5172 5180 - radix-vue@1.9.17(vue@3.5.17(typescript@5.8.3)): 5173 + radix-vue@1.9.17(vue@3.5.18(typescript@5.8.3)): 5181 5174 dependencies: 5182 5175 '@floating-ui/dom': 1.7.2 5183 - '@floating-ui/vue': 1.1.7(vue@3.5.17(typescript@5.8.3)) 5176 + '@floating-ui/vue': 1.1.7(vue@3.5.18(typescript@5.8.3)) 5184 5177 '@internationalized/date': 3.8.2 5185 - '@internationalized/number': 3.6.3 5186 - '@tanstack/vue-virtual': 3.13.12(vue@3.5.17(typescript@5.8.3)) 5187 - '@vueuse/core': 10.11.1(vue@3.5.17(typescript@5.8.3)) 5188 - '@vueuse/shared': 10.11.1(vue@3.5.17(typescript@5.8.3)) 5178 + '@internationalized/number': 3.6.4 5179 + '@tanstack/vue-virtual': 3.13.12(vue@3.5.18(typescript@5.8.3)) 5180 + '@vueuse/core': 10.11.1(vue@3.5.18(typescript@5.8.3)) 5181 + '@vueuse/shared': 10.11.1(vue@3.5.18(typescript@5.8.3)) 5189 5182 aria-hidden: 1.2.6 5190 5183 defu: 6.1.4 5191 5184 fast-deep-equal: 3.1.3 5192 5185 nanoid: 5.1.5 5193 - vue: 3.5.17(typescript@5.8.3) 5186 + vue: 3.5.18(typescript@5.8.3) 5194 5187 transitivePeerDependencies: 5195 5188 - '@vue/composition-api' 5196 5189 ··· 5479 5472 5480 5473 supports-preserve-symlinks-flag@1.0.0: {} 5481 5474 5482 - synckit@0.11.8: 5475 + synckit@0.11.11: 5483 5476 dependencies: 5484 - '@pkgr/core': 0.2.7 5477 + '@pkgr/core': 0.2.9 5485 5478 5486 5479 tailwind-merge@2.6.0: {} 5487 5480 ··· 5527 5520 5528 5521 tsx@4.20.3: 5529 5522 dependencies: 5530 - esbuild: 0.25.6 5523 + esbuild: 0.25.8 5531 5524 get-tsconfig: 4.10.1 5532 5525 optionalDependencies: 5533 5526 fsevents: 2.3.3 ··· 5571 5564 possible-typed-array-names: 1.1.0 5572 5565 reflect.getprototypeof: 1.0.10 5573 5566 5574 - typescript-eslint@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): 5567 + typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): 5575 5568 dependencies: 5576 - '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 5577 - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 5578 - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) 5579 - eslint: 9.30.1(jiti@2.4.2) 5569 + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 5570 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 5571 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 5572 + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 5573 + eslint: 9.31.0(jiti@2.4.2) 5580 5574 typescript: 5.8.3 5581 5575 transitivePeerDependencies: 5582 5576 - supports-color ··· 5655 5649 '@types/unist': 3.0.3 5656 5650 vfile-message: 4.0.2 5657 5651 5658 - vue-demi@0.14.10(vue@3.5.17(typescript@5.8.3)): 5652 + vue-demi@0.14.10(vue@3.5.18(typescript@5.8.3)): 5659 5653 dependencies: 5660 - vue: 3.5.17(typescript@5.8.3) 5654 + vue: 3.5.18(typescript@5.8.3) 5661 5655 5662 5656 vue-sonner@1.3.2: {} 5663 5657 5664 - vue@3.5.17(typescript@5.8.3): 5658 + vue@3.5.18(typescript@5.8.3): 5665 5659 dependencies: 5666 - '@vue/compiler-dom': 3.5.17 5667 - '@vue/compiler-sfc': 3.5.17 5668 - '@vue/runtime-dom': 3.5.17 5669 - '@vue/server-renderer': 3.5.17(vue@3.5.17(typescript@5.8.3)) 5670 - '@vue/shared': 3.5.17 5660 + '@vue/compiler-dom': 3.5.18 5661 + '@vue/compiler-sfc': 3.5.18 5662 + '@vue/runtime-dom': 3.5.18 5663 + '@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.8.3)) 5664 + '@vue/shared': 3.5.18 5671 5665 optionalDependencies: 5672 5666 typescript: 5.8.3 5673 5667
+123
backend/src/api/feed.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import { 8 + SocialClipprActorDefs, 9 + SocialClipprFeedClip, 10 + SocialClipprFeedDefs, 11 + } from "@clipprjs/lexicons"; 12 + import type { ClipViewQuery, ErrorResponse, TagRef } from "./types.js"; 13 + import { getHandleFromDid } from "../network/converters.js"; 14 + import { Database } from "../db/database.js"; 15 + import { clipsTable } from "../db/schema.js"; 16 + import { and, eq } from "drizzle-orm"; 17 + import { createProfileView } from "./profile.js"; 18 + import { is } from "@atcute/lexicons"; 19 + import { validateHash } from "../hasher.js"; 20 + 21 + const db = Database.getInstance().getDb(); 22 + 23 + export async function createClipView( 24 + query: ClipViewQuery, 25 + ): Promise<SocialClipprFeedDefs.ClipView | ErrorResponse> { 26 + if (!query.did.startsWith("did:")) { 27 + let did; 28 + try { 29 + did = await getHandleFromDid(query.did); 30 + } catch (e: unknown) { 31 + if (e instanceof Error) { 32 + return { 33 + error: "InvalidRequest", 34 + message: `Error: A queried URI does not have a valid DID or handle: ${e.message}`, 35 + }; 36 + } else { 37 + return { 38 + error: "InvalidRequest", 39 + message: 40 + "Error: A queried URI does not have a valid DID or handle: unknown error", 41 + }; 42 + } 43 + } 44 + query.did = did; 45 + } 46 + 47 + if (query.collection !== "social.clippr.feed.clip") { 48 + return { 49 + error: "InvalidRequest", 50 + message: "Error: A queried URI is not a proper clip", 51 + }; 52 + } 53 + 54 + const dbQuery = await db 55 + .selectDistinct() 56 + .from(clipsTable) 57 + .where( 58 + and( 59 + eq(clipsTable.did, query.did), 60 + eq(clipsTable.recordKey, query.recordKey), 61 + ), 62 + ); 63 + 64 + if (dbQuery.length === 0) { 65 + return { 66 + error: "InvalidRequest", 67 + message: "Could not find a given URI", 68 + }; 69 + } 70 + 71 + // Yes, the array thing is not ideal. 72 + if (!dbQuery[0]?.cid) { 73 + return { 74 + error: "InvalidRequest", 75 + message: "Could not find a given URI", 76 + }; 77 + } 78 + 79 + if (!(await validateHash(dbQuery[0]?.url, query.recordKey))) { 80 + return { 81 + error: "InvalidRequest", 82 + message: "Could not find a given URI", 83 + }; 84 + } 85 + 86 + const authorView: ErrorResponse | SocialClipprActorDefs.ProfileView = 87 + await createProfileView(query.did); 88 + 89 + if (!is(SocialClipprActorDefs.profileViewSchema, authorView)) { 90 + console.log(authorView); 91 + return { 92 + error: "InvalidRequest", 93 + message: "Could not validate profile view", // I can't get the error message, it seems to always assume the type is the ProfileView 94 + } as ErrorResponse; 95 + } 96 + 97 + let clipTags: TagRef[] | undefined; 98 + 99 + if (dbQuery[0]?.tags === null) { 100 + clipTags = undefined; 101 + } 102 + 103 + const clipRecord: SocialClipprFeedClip.Main = { 104 + $type: "social.clippr.feed.clip", 105 + url: dbQuery[0]?.url as `${string}:${string}`, 106 + title: dbQuery[0]?.title, 107 + description: dbQuery[0]?.description, 108 + tags: clipTags || undefined, 109 + unlisted: dbQuery[0]?.unlisted, 110 + unread: dbQuery[0]?.unread || undefined, 111 + notes: dbQuery[0]?.notes || undefined, 112 + languages: dbQuery[0]?.languages || undefined, 113 + createdAt: dbQuery[0]?.createdAt.toISOString(), 114 + }; 115 + 116 + return { 117 + cid: dbQuery[0]?.cid, 118 + uri: `at://${query.did}/${query.collection}/${query.recordKey}`, 119 + author: authorView, 120 + record: clipRecord, 121 + indexedAt: dbQuery[0]?.indexedAt.toISOString(), 122 + }; 123 + }
+101
backend/src/api/profile.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import { SocialClipprActorDefs } from "@clipprjs/lexicons"; 8 + import type { ErrorResponse } from "./types.js"; 9 + import { getDidFromHandle, getHandleFromDid } from "../network/converters.js"; 10 + import { Database } from "../db/database.js"; 11 + import { usersTable } from "../db/schema.js"; 12 + import { eq } from "drizzle-orm"; 13 + 14 + const db = Database.getInstance().getDb(); 15 + 16 + // TODO: Stop leeching off the Bluesky CDN and get the blob directly from the user's PDS 17 + // 18 + // Get a CDN URI from a blob's CID 19 + export async function createAvatarLink( 20 + did: string, 21 + cid: string, 22 + ): Promise<string> { 23 + return `https://cdn.bsky.app/img/avatar/plain/${did}/${cid}`; 24 + } 25 + 26 + export async function createProfileView( 27 + actor: string, 28 + ): Promise<SocialClipprActorDefs.ProfileView | ErrorResponse> { 29 + let viewHandle; 30 + let viewDid; 31 + 32 + if (actor.startsWith("did:")) { 33 + viewDid = actor; 34 + try { 35 + viewHandle = await getHandleFromDid(viewDid); 36 + viewHandle = viewHandle.replace("at://", ""); 37 + } catch (e: unknown) { 38 + if (e instanceof Error) { 39 + return { 40 + error: "InvalidRequest", 41 + message: `Error: A queried URI does not have a valid DID or handle: ${e.message}`, 42 + }; 43 + } else { 44 + return { 45 + error: "InvalidRequest", 46 + message: 47 + "Error: A queried URI does not have a valid DID or handle: unknown error", 48 + }; 49 + } 50 + } 51 + } else { 52 + viewHandle = actor; 53 + viewHandle = viewHandle.replace("at://", ""); 54 + try { 55 + viewDid = await getDidFromHandle(viewHandle); 56 + } catch (e: unknown) { 57 + if (e instanceof Error) { 58 + return { 59 + error: "InvalidRequest", 60 + message: `Error: A queried URI does not have a valid DID or handle: ${e.message}`, 61 + }; 62 + } else { 63 + return { 64 + error: "InvalidRequest", 65 + message: 66 + "Error: A queried URI does not have a valid DID or handle: unknown error", 67 + }; 68 + } 69 + } 70 + } 71 + 72 + const dbQuery = await db 73 + .selectDistinct() 74 + .from(usersTable) 75 + .where(eq(usersTable.did, viewDid)); 76 + 77 + if (dbQuery.length === 0) { 78 + return { 79 + error: "InvalidRequest", 80 + message: "Could not find a queried URI's profile", 81 + } as ErrorResponse; 82 + } 83 + 84 + const avatarCid = dbQuery[0]?.avatar; 85 + 86 + let viewAvatar; 87 + 88 + if (avatarCid === undefined || avatarCid === null) { 89 + viewAvatar = "https://missing.avatar"; 90 + } else viewAvatar = await createAvatarLink(viewDid, avatarCid); 91 + 92 + return { 93 + $type: "social.clippr.actor.defs#profileView", 94 + did: viewDid as `did:${string}:${string}`, 95 + handle: viewHandle as `${string}.${string}`, 96 + avatar: (viewAvatar as `${string}:${string}`) || undefined, 97 + createdAt: dbQuery[0]?.createdAt.toISOString(), 98 + description: dbQuery[0]?.description || undefined, 99 + displayName: dbQuery[0]?.displayName || viewHandle, 100 + }; 101 + }
+38
backend/src/api/types.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type { ResourceUri } from "@atcute/lexicons"; 8 + 9 + export interface ErrorResponse { 10 + error: string; 11 + message: string; 12 + } 13 + 14 + export interface ProfileViewQuery { 15 + actor: string; 16 + } 17 + 18 + export interface ClipViewQuery { 19 + did: string; 20 + collection: string; 21 + recordKey: string; 22 + } 23 + 24 + export const isClipViewQuery = (query: unknown): query is ClipViewQuery => { 25 + return typeof query === "object" && query !== null && "did" in query; 26 + }; 27 + 28 + export interface TagRef { 29 + $type: "com.atproto.repo.strongRef"; 30 + cid: string; 31 + uri: ResourceUri; 32 + } 33 + 34 + export interface TagViewQuery { 35 + did: string; 36 + collection: string; 37 + recordKey: string; 38 + }
+26 -5
backend/src/db/schema.ts
··· 4 4 * SPDX-License-Identifier: AGPL-3.0-only 5 5 */ 6 6 7 - // noinspection Annotator 8 - 9 7 import { int, sqliteTable, text } from "drizzle-orm/sqlite-core"; 10 8 import { sql } from "drizzle-orm"; 9 + import type { TagRef } from "../api/types.js"; 11 10 12 11 // WebStorm keeps throwing errors with the default statements as it wants 13 12 // an actual SQLite query, despite being valid. Sucks. ··· 18 17 .default(sql`(unixepoch() * 1000)`), 19 18 did: text("did").notNull(), 20 19 recordKey: text("rkey").notNull(), 20 + cid: text("cid").notNull(), 21 21 url: text("url").notNull(), 22 22 title: text("title").notNull(), 23 23 description: text("description").notNull(), 24 24 unlisted: int("unlisted", { mode: "boolean" }).notNull(), 25 25 notes: text("notes"), 26 26 tags: text("tags", { mode: "json" }) 27 - .$type<string[]>() 27 + .$type<TagRef[]>() 28 28 .default(sql`'[]'`), 29 29 unread: int("unread", { mode: "boolean" }), 30 30 languages: text("languages", { mode: "json" }) ··· 33 33 createdAt: int("createdAt", { mode: "timestamp_ms" }) 34 34 .notNull() 35 35 .default(sql`(unixepoch() * 1000)`), 36 + indexedAt: int("indexedAt", { mode: "timestamp_ms" }) 37 + .notNull() 38 + .default(sql`(unixepoch() * 1000)`), 36 39 }); 37 40 38 41 export const tagsTable = sqliteTable("tags", { ··· 42 45 .default(sql`(unixepoch() * 1000)`), 43 46 did: text("did").notNull(), 44 47 recordKey: text("rkey").notNull(), 48 + cid: text("cid").notNull(), 45 49 name: text("name").notNull(), 50 + description: text("description"), 46 51 color: text("color"), 47 52 createdAt: int("createdAt", { mode: "timestamp_ms" }) 48 53 .notNull() 49 54 .default(sql`(unixepoch() * 1000)`), 55 + indexedAt: int("indexedAt", { mode: "timestamp_ms" }) 56 + .notNull() 57 + .default(sql`(unixepoch() * 1000)`), 50 58 }); 51 59 52 60 export const usersTable = sqliteTable("profiles", { ··· 54 62 timestamp: int("time_us", { mode: "timestamp_ms" }) 55 63 .notNull() 56 64 .default(sql`(unixepoch() * 1000)`), 57 - did: text("did").notNull(), 58 - displayName: text("displayName"), 65 + did: text("did").notNull().unique(), 66 + cid: text("cid").notNull(), 67 + displayName: text("displayName").notNull(), 59 68 description: text("description"), 60 69 avatar: text("avatar"), 61 70 createdAt: int("createdAt", { mode: "timestamp_ms" }) 62 71 .notNull() 63 72 .default(sql`(unixepoch() * 1000)`), 64 73 }); 74 + 75 + export const preferencesTable = sqliteTable("preferences", { 76 + id: int("id").primaryKey({ autoIncrement: true }), 77 + did: text("did").notNull().unique(), 78 + handle: text("handle").notNull(), 79 + publishingScopesPref: text("publishingScopesPref", { mode: "json" }) 80 + .$type<string[]>() 81 + .default(sql`'[]'`), 82 + lastModified: int("lastModified", { mode: "timestamp_ms" }) 83 + .notNull() 84 + .default(sql`(unixepoch() * 1000)`), 85 + });
+21
backend/src/hasher.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import xxhash from "xxhash-wasm"; 8 + 9 + /// Hash a given string into a hexadecimal xxh64 string. 10 + export async function hashString(data: string): Promise<string> { 11 + const { h64 } = await xxhash(); 12 + return h64(data).toString(16); 13 + } 14 + 15 + /// Check if a string is equivalent to a given hash. 16 + export async function validateHash( 17 + data: string, 18 + hash: string, 19 + ): Promise<boolean> { 20 + return hash === (await hashString(data)); 21 + }
+39 -21
backend/src/network/commit.ts
··· 16 16 import Logger from "../logger.js"; 17 17 import { isBlob } from "@atcute/lexicons/interfaces"; 18 18 import { validateClip, validateProfile, validateTag } from "./validator.js"; 19 - import xxhash from "xxhash-wasm"; 20 19 import { convertDidToString } from "./converters.js"; 20 + import { hashString } from "../hasher.js"; 21 21 22 22 const db = Database.getInstance().getDb(); 23 23 ··· 38 38 39 39 if (event.commit.record.$type !== "social.clippr.feed.clip") { 40 40 Logger.verbose( 41 - "Invalid type for incoming clip record", 41 + `Mismatched type for incoming clip record (${event.did}/${event.commit.rkey})`, 42 42 event.commit.record, 43 43 ); 44 44 } 45 45 46 46 if (!is(SocialClipprFeedClip.mainSchema, event.commit.record)) { 47 47 Logger.verbose( 48 - "Invalid schema for incoming clip record", 48 + `Invalid schema for incoming clip record (${event.did}/${event.commit.rkey})`, 49 49 event.commit.record, 50 50 ); 51 51 return; ··· 65 65 }; 66 66 67 67 // xxh64, NOT xxh3 learned that the hard way 68 - const { h64 } = await xxhash(); 69 - const urlHash = h64(record.url).toString(16); 68 + const urlHash: string = await hashString(record.url); 70 69 71 70 if (urlHash !== event.commit.rkey) { 72 71 Logger.verbose( 73 - `Record key hash (${event.commit.rkey}) does not match hash of URL (${urlHash}) in incoming clip record`, 72 + `Record key hash (${event.commit.rkey}) does not match hash of URL (${urlHash}) in incoming clip record (${event.did})`, 74 73 event.commit.record, 75 74 ); 76 75 return; ··· 83 82 await db.insert(clipsTable).values({ 84 83 // @ts-expect-error Weird type error despite being a normal string. 85 84 did: convertDidToString(event.did), 85 + cid: event.commit.cid, 86 86 timestamp: convertMicroToDate(event.time_us), 87 87 recordKey: event.commit.rkey, 88 88 createdAt: new Date(record.createdAt), 89 + indexedAt: new Date(), 89 90 url: record.url, 90 91 title: record.title, 91 92 description: record.description, ··· 96 97 languages: record.languages, 97 98 }); 98 99 99 - Logger.verbose("Indexed new clip:", event.did, event.commit.rkey); 100 + Logger.verbose(`Indexed new clip: ${event.did}/${event.commit.rkey}`, event); 100 101 } 101 102 102 103 export async function handleTag( ··· 110 111 } // We currently do not handle these. 111 112 112 113 if (event.commit.record.$type !== "social.clippr.feed.tag") { 113 - Logger.verbose("Invalid type for incoming tag record", event.commit.record); 114 + Logger.verbose( 115 + `Mismatched type for incoming tag record (${event.did}/${event.commit.rkey})`, 116 + event.commit.record, 117 + ); 114 118 return; 115 119 } 116 120 117 121 if (!is(SocialClipprFeedTag.mainSchema, event.commit.record)) { 118 122 Logger.verbose( 119 - "Invalid schema for incoming tag record", 123 + `Invalid schema for incoming tag record (${event.did}/${event.commit.rkey})`, 120 124 event.commit.record, 121 125 ); 122 126 return; ··· 127 131 createdAt: event.commit.record.createdAt, 128 132 name: event.commit.record.name, 129 133 color: event.commit.record.color, 134 + description: event.commit.record.description, 130 135 }; 131 136 132 137 if (record.name !== event.commit.rkey) { 133 138 Logger.verbose( 134 - "Record key does not match name of incoming tag record", 139 + `Record key does not match name of incoming tag record (${event.did}/${event.commit.rkey})`, 135 140 event.commit.record, 136 141 ); 137 142 return; ··· 143 148 } 144 149 145 150 await db.insert(tagsTable).values({ 151 + timestamp: convertMicroToDate(event.time_us), 146 152 did: convertDidToString(event.did), 147 - timestamp: convertMicroToDate(event.time_us), 153 + cid: event.commit.cid, 148 154 recordKey: event.commit.rkey, 149 - createdAt: new Date(record.createdAt), 150 155 name: record.name, 156 + description: record.description, 151 157 color: record.color, 158 + createdAt: new Date(record.createdAt), 159 + indexedAt: new Date(), 152 160 }); 153 161 154 - Logger.verbose("Indexed new tag:", event.did, event.commit.rkey); 162 + Logger.verbose(`Indexed new tag: ${event.did}/${event.commit.rkey}`, event); 155 163 } 156 164 157 165 export async function handleProfile( ··· 166 174 167 175 if (event.commit.record.$type !== "social.clippr.actor.profile") { 168 176 Logger.verbose( 169 - "Invalid type for incoming profile record", 177 + `Mismatched type for incoming profile record (${event.did})`, 170 178 event.commit.record, 171 179 ); 172 180 return; ··· 174 182 175 183 if (!is(SocialClipprActorProfile.mainSchema, event.commit.record)) { 176 184 Logger.verbose( 177 - "Invalid schema for incoming profile record", 185 + `Invalid schema for incoming profile record (${event.did})`, 178 186 event.commit.record, 179 187 ); 180 188 return; ··· 190 198 191 199 if (event.commit.rkey !== "self") { 192 200 Logger.verbose( 193 - "Record key of incoming profile record does not match 'self'", 201 + `Record key of incoming profile record does not match 'self' (${event.did})`, 194 202 event.commit.record, 195 203 ); 196 204 return; ··· 199 207 // This needs to be here so the avatar can be recognized as a proper blob. 200 208 if (record.avatar) { 201 209 if (!isBlob(record.avatar)) { 202 - Logger.verbose("Avatar in incoming profile record is not a blob", record); 210 + Logger.verbose( 211 + `Avatar in incoming profile record is not a blob (${event.did})`, 212 + record, 213 + ); 203 214 return; 204 215 } 205 216 206 217 if (record.avatar.mimeType.match(/^image\/(png|jpeg)$/i) === null) { 207 218 Logger.verbose( 208 - "Avatar in incoming profile record is not a PNG or JPEG", 219 + `Avatar in incoming profile record is not a PNG or JPEG (${event.did})`, 209 220 record, 210 221 ); 211 222 return; ··· 213 224 214 225 if (record.avatar.ref?.$link === undefined) { 215 226 Logger.verbose( 216 - "Avatar in incoming profile record has no link to blob", 227 + `Avatar in incoming profile record has no link to blob (${event.did})`, 217 228 record, 218 229 ); 219 230 return; 220 231 } 221 232 222 233 if (record.avatar.size > 1000000) { 223 - Logger.verbose("Avatar in incoming profile record is too large", record); 234 + Logger.verbose( 235 + `Avatar in incoming profile record is too large (${event.did})`, 236 + record, 237 + ); 224 238 return; 225 239 } 226 240 } ··· 232 246 233 247 await db.insert(usersTable).values({ 234 248 did: convertDidToString(event.did), 249 + cid: event.commit.cid, 235 250 timestamp: convertMicroToDate(event.time_us), 236 251 createdAt: new Date(record.createdAt), 237 252 displayName: record.displayName, ··· 239 254 description: record.description, 240 255 }); 241 256 242 - Logger.verbose("Indexed new profile for:", convertDidToString(event.did)); 257 + Logger.verbose( 258 + `Indexed new profile: ${convertDidToString(event.did)}`, 259 + event, 260 + ); 243 261 }
+45 -8
backend/src/network/converters.ts
··· 14 14 UnsupportedDidMethodError, 15 15 WebDidDocumentResolver, 16 16 } from "@atcute/identity-resolver"; 17 + import { Client, simpleFetchHandler } from "@atcute/client"; 17 18 18 19 /// Converts an ``At.DID`` type to a proper string, for type reasons. 19 20 export function convertDidToString(did: `did:${string}`): string { ··· 30 31 } 31 32 } 32 33 33 - // TODO: Stop leeching off Bluesky's CDN and get the blob directly from the user's PDS 34 - export async function getUriFromBlobCid( 35 - did: string, 36 - cid: string, 37 - ): Promise<string> { 38 - return `https://cdn.bsky.app/img/avatar/plain/${did}/${cid}`; 39 - } 40 - 34 + // Get a user's handle from their DID. DID method agnostic. 41 35 export async function getHandleFromDid(did: string): Promise<string> { 42 36 const docResolver = new CompositeDidDocumentResolver({ 43 37 methods: { ··· 79 73 doc?.alsoKnownAs[0].lastIndexOf("/" + 1), 80 74 ); 81 75 } 76 + 77 + // Get a user's DID from their handle. 78 + export async function getDidFromHandle(handle: string): Promise<string> { 79 + const handler = simpleFetchHandler({ 80 + service: "https://public.api.bsky.app", 81 + }); 82 + const rpc = new Client({ handler }); 83 + 84 + const { ok, data } = await rpc.get("com.atproto.identity.resolveHandle", { 85 + params: { 86 + handle: handle as `${string}.${string}`, 87 + }, 88 + }); 89 + 90 + if (!ok) { 91 + switch (data.error) { 92 + case "InvalidRequest": { 93 + throw new Error("InvalidRequest", { cause: data.message }); 94 + } 95 + case "AccountTakedown": { 96 + throw new Error("AccountTakedown", { cause: data.message }); 97 + } 98 + case "AccountDeactivated": { 99 + throw new Error("AccountDeactivated", { cause: data.message }); 100 + } 101 + default: { 102 + throw new Error(data.error, { cause: data.message }); 103 + } 104 + } 105 + } 106 + 107 + let actorDid; 108 + 109 + if (ok) { 110 + actorDid = data.did as string; 111 + } 112 + 113 + if (actorDid === undefined) { 114 + throw new Error("InvalidRequest"); 115 + } 116 + 117 + return actorDid; 118 + }
+9 -28
backend/src/network/validator.ts
··· 87 87 return false; 88 88 } 89 89 90 - if (record.name.length < 1) { 91 - Logger.verbose("Name from incoming tag record is too short", record); 92 - } 93 - 94 90 if (record.color) { 95 91 if (record.color.length > 7) { 96 92 Logger.verbose("Color from incoming tag record is too long", record); 97 93 return false; 98 94 } 99 95 100 - if (record.color.length < 4) { 101 - Logger.verbose("Color from incoming tag record is too short", record); 96 + if (!record.color.match("^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$")) { 97 + Logger.verbose( 98 + "Invalid hexadecimal color for incoming tag record", 99 + record, 100 + ); 102 101 return false; 103 102 } 103 + } 104 104 105 - if (!record.color.match("^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$")) { 105 + if (record.description) { 106 + if (record.description.length > 500) { 106 107 Logger.verbose( 107 - "Invalid hexadecimal color for incoming tag record", 108 + "Description from incoming tag record is too long", 108 109 record, 109 110 ); 110 111 return false; ··· 127 128 return false; 128 129 } 129 130 130 - if (record.url.length < 3) { 131 - Logger.verbose("Too short url from incoming clip record", record); 132 - return false; 133 - } 134 - 135 131 if (record.title.length > 2048) { 136 132 Logger.verbose("Too long title from incoming clip record", record); 137 133 return false; 138 134 } 139 135 140 - if (record.title.length < 1) { 141 - Logger.verbose("Too short title from incoming clip record", record); 142 - return false; 143 - } 144 - 145 136 if (record.description.length > 4096) { 146 137 Logger.verbose("Too long description from incoming clip record", record); 147 138 return false; 148 139 } 149 140 150 - if (record.description.length < 1) { 151 - Logger.verbose("Too short description from incoming clip record", record); 152 - return false; 153 - } 154 - 155 141 if (record.notes) { 156 142 if (record.notes.length > 10000) { 157 143 Logger.verbose("Too long notes from incoming clip record", record); 158 - return false; 159 - } 160 - 161 - if (record.notes.length < 1) { 162 - Logger.verbose("Too short notes from incoming clip record", record); 163 144 return false; 164 145 } 165 146 }
+181 -11
backend/src/routes/xrpc.ts
··· 8 8 import { Database } from "../db/database.js"; 9 9 import { usersTable } from "../db/schema.js"; 10 10 import { eq } from "drizzle-orm"; 11 - import { getHandleFromDid, getUriFromBlobCid } from "../network/converters.js"; 11 + import { getDidFromHandle, getHandleFromDid } from "../network/converters.js"; 12 + import { createClipView } from "../api/feed.js"; 13 + import { type ClipViewQuery, type ErrorResponse } from "../api/types.js"; 14 + import { createAvatarLink } from "../api/profile.js"; 15 + import { SocialClipprFeedDefs } from "@clipprjs/lexicons"; 16 + import { is } from "@atcute/lexicons"; 12 17 13 18 const app = new Hono(); 14 19 const db = Database.getInstance().getDb(); 15 20 16 21 app.get("/social.clippr.actor.getProfile", async (c) => { 17 - const did = c.req.query("did"); 18 - if (did === undefined || did.length === 0) { 22 + const actor = c.req.query("actor"); 23 + if (actor === undefined || actor.trim().length === 0) { 19 24 return c.json( 20 25 { 21 26 error: "InvalidRequest", 22 - message: "Error: Params must have the did property included", 27 + message: "Error: Parameters must have the actor property included", 23 28 }, 24 29 400, 25 30 ); 26 31 } 27 32 33 + let actorDid = actor; 34 + 35 + if (!actor.startsWith("did:")) { 36 + try { 37 + actorDid = await getDidFromHandle(actor); 38 + } catch (e: unknown) { 39 + if (e instanceof Error) { 40 + return c.json( 41 + { 42 + error: e.message, 43 + message: e.cause, 44 + }, 45 + 400, 46 + ); 47 + } else { 48 + return c.json( 49 + { 50 + error: "InvalidRequest" as string, 51 + message: "Unknown error while resolving DID from handle" as string, 52 + }, 53 + 400, 54 + ); 55 + } 56 + } 57 + } 58 + 28 59 const profileSearch = await db 29 60 .selectDistinct() 30 61 .from(usersTable) 31 - .where(eq(usersTable.did, did)); 62 + .where(eq(usersTable.did, actorDid)); 32 63 33 64 if (profileSearch.length === 0) { 34 65 return c.json( ··· 40 71 ); 41 72 } 42 73 43 - const handle = await getHandleFromDid(did); 74 + let actorHandle; 75 + 76 + if (actor.startsWith("did:")) { 77 + try { 78 + actorHandle = await getHandleFromDid(actor); 79 + } catch (e: unknown) { 80 + if (e instanceof Error) { 81 + return c.json( 82 + { 83 + error: "InvalidRequest", 84 + message: `${e.message}`, 85 + }, 86 + 400, 87 + ); 88 + } else { 89 + return c.json( 90 + { 91 + error: "InvalidRequest" as string, 92 + message: "Unknown error while resolving handle from DID" as string, 93 + }, 94 + 400, 95 + ); 96 + } 97 + } 98 + 99 + if (actorHandle === undefined) { 100 + actorHandle = "invalid.handle"; 101 + } 102 + } else actorHandle = actor; 103 + 44 104 // TODO: Add placeholder avatar 105 + // This is a mess and should be replaced with a real solution! 45 106 const avatarCid: string = 46 107 profileSearch[0]?.avatar || "https://missing.avatar"; 47 - const avatar = await getUriFromBlobCid(did, avatarCid); 108 + let actorAvatar; 109 + if (avatarCid !== "https://missing.avatar") { 110 + actorAvatar = await createAvatarLink(actorDid, avatarCid); 111 + } else actorAvatar = avatarCid; 48 112 49 113 // Right now we don't do de-duplication in the database, so we just take the 50 114 // first result and use that for our return call. 51 115 return c.json({ 52 - did: did, 53 - handle: handle, 54 - displayName: profileSearch[0]?.displayName || null, 55 - avatar: avatar, 116 + did: actorDid, 117 + handle: actorHandle, 118 + displayName: profileSearch[0]?.displayName, 119 + avatar: actorAvatar, 56 120 description: profileSearch[0]?.description || null, 57 121 createdAt: profileSearch[0]?.createdAt, 58 122 }); 123 + }); 124 + 125 + app.get("/social.clippr.feed.getClips", async (c) => { 126 + const uris = c.req.query("uris"); 127 + if (uris === undefined || uris.trim().length === 0) { 128 + return c.json( 129 + { 130 + error: "InvalidRequest", 131 + message: "Error: Parameters must have the uris property included", 132 + }, 133 + 400, 134 + ); 135 + } 136 + 137 + const rawUriArray: string[] = uris.split(","); 138 + 139 + if (rawUriArray.length > 25) { 140 + return c.json( 141 + { 142 + error: "InvalidRequest", 143 + message: "Error: More than 25 URIs have been provided", 144 + }, 145 + 400, 146 + ); 147 + } 148 + 149 + if ( 150 + rawUriArray.some((value) => { 151 + return !value.startsWith("at://"); 152 + }) 153 + ) { 154 + return c.json( 155 + { 156 + error: "InvalidRequest", 157 + message: "Error: A queried URI is missing the at:// identifier", 158 + }, 159 + 400, 160 + ); 161 + } 162 + 163 + const parsedUriArray: object[] = []; 164 + 165 + for (let value of rawUriArray) { 166 + value = value.replace("at://", ""); 167 + const splitUri: string[] = value.split("/"); 168 + 169 + if (splitUri.length !== 3) { 170 + c.json( 171 + { 172 + error: "InvalidRequest", 173 + message: "Error: A queried URI is not a proper clip", 174 + }, 175 + 400, 176 + ); 177 + } 178 + 179 + let splitUriObject: ClipViewQuery = { 180 + did: "", 181 + collection: "", 182 + recordKey: "", 183 + }; 184 + 185 + // validate type 186 + if ( 187 + !splitUri[0] || 188 + !splitUri[1] || 189 + !splitUri[2] || 190 + typeof splitUri[0] !== "string" || 191 + typeof splitUri[1] !== "string" || 192 + typeof splitUri[2] !== "string" 193 + ) { 194 + c.json( 195 + { 196 + error: "InvalidRequest", 197 + message: "Error: A queried URI is not a proper clip", 198 + }, 199 + 400, 200 + ); 201 + } else { 202 + splitUriObject = { 203 + did: splitUri[0], 204 + collection: splitUri[1], 205 + recordKey: splitUri[2], 206 + }; 207 + } 208 + 209 + const clipView = await createClipView(splitUriObject); 210 + 211 + if (!is(SocialClipprFeedDefs.clipViewSchema, value)) { 212 + c.json(clipView, 400); 213 + } 214 + 215 + parsedUriArray.push(clipView); 216 + } 217 + 218 + if (parsedUriArray.length === 0) { 219 + return c.json( 220 + { 221 + error: "InvalidRequest", 222 + message: "No queried URIs exist", 223 + } as ErrorResponse, 224 + 400, 225 + ); 226 + } 227 + 228 + return c.json(parsedUriArray, 200); 59 229 }); 60 230 61 231 app.get("/_health", async (c) => {
+1120 -37
backend/static/api.json
··· 1 1 { 2 2 "openapi": "3.1.1", 3 + "info": { 4 + "title": "Clippr AppView API", 5 + "version": "1.0.1", 6 + "description": "API reference documentation for Clippr's backend.", 7 + "license": { 8 + "name": "GNU Affero General Public License v3.0 only", 9 + "identifier": "AGPL-3.0-only" 10 + } 11 + }, 3 12 "servers": [ 4 13 { 5 14 "url": "http://localhost:9090", 6 15 "description": "Development server" 7 16 }, 8 17 { 9 - "url": "https://clippr.social", 18 + "url": "https://api.clippr.social", 10 19 "description": "Production server" 11 20 } 12 21 ], 13 - "info": { 14 - "title": "Clippr AppView API", 15 - "version": "0.1.0", 16 - "description": "Official API reference documentation for Clippr's backend." 17 - }, 18 22 "tags": [ 19 23 { 24 + "name": "Clips", 25 + "description": "API paths that relate to user bookmarks, or 'clips'." 26 + }, 27 + { 28 + "name": "Tags", 29 + "description": "API paths that relate to user tags." 30 + }, 31 + { 20 32 "name": "Profile", 21 33 "description": "API paths that relate to user profiles." 22 34 }, ··· 26 38 } 27 39 ], 28 40 "paths": { 41 + "/xrpc/social.clippr.actor.getPreferences": { 42 + "get": { 43 + "tags": ["Profile"], 44 + "summary": "Get a user's preferences", 45 + "operationId": "social.clippr.actor.getPreferences", 46 + "description": "Get a user's private preferences. Requires authentication.", 47 + "security": [ 48 + { 49 + "Bearer": [] 50 + } 51 + ], 52 + "responses": { 53 + "200": { 54 + "description": "OK", 55 + "content": { 56 + "application/json": { 57 + "schema": { 58 + "$ref": "#/components/schemas/social.clippr.actor.defs.preferences" 59 + } 60 + } 61 + } 62 + }, 63 + "400": { 64 + "description": "Bad Request", 65 + "content": { 66 + "application/json": { 67 + "schema": { 68 + "type": "object", 69 + "properties": { 70 + "error": { 71 + "type": "string", 72 + "description": "A general error code", 73 + "oneOf": [ 74 + { 75 + "const": "InvalidRequest" 76 + }, 77 + { 78 + "const": "ExpiredToken" 79 + }, 80 + { 81 + "const": "InvalidToken" 82 + } 83 + ] 84 + }, 85 + "message": { 86 + "type": "string", 87 + "description": "A detailed description of the error" 88 + } 89 + } 90 + } 91 + } 92 + } 93 + }, 94 + "401": { 95 + "description": "Unauthorized", 96 + "content": { 97 + "application/json": { 98 + "schema": { 99 + "type": "object", 100 + "properties": { 101 + "error": { 102 + "type": "string", 103 + "description": "A general error code", 104 + "oneOf": [ 105 + { 106 + "const": "AuthMissing" 107 + } 108 + ] 109 + }, 110 + "message": { 111 + "type": "string", 112 + "description": "A detailed description of the error" 113 + } 114 + } 115 + } 116 + } 117 + } 118 + } 119 + } 120 + } 121 + }, 29 122 "/xrpc/social.clippr.actor.getProfile": { 30 123 "get": { 124 + "tags": ["Profile"], 31 125 "summary": "Get a profile", 32 - "description": "Get an user's profile based on their DID.", 126 + "operationId": "social.clippr.actor.getProfile", 127 + "description": "Get a user's profile based on a given DID or handle.", 33 128 "parameters": [ 34 129 { 35 - "name": "did", 130 + "name": "actor", 36 131 "in": "query", 37 - "description": "The DID of the account to get the profile record of.", 132 + "description": "Handle or DID of account to fetch profile of", 38 133 "required": true, 39 134 "content": { 40 135 "schema": { 41 - "type": "string" 136 + "type": "string", 137 + "description": "Handle or DID of account to fetch profile of", 138 + "format": "at-identifier" 42 139 } 43 140 }, 44 141 "deprecated": false, ··· 52 149 "application/json": { 53 150 "schema": { 54 151 "type": "object", 152 + "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 153 + } 154 + } 155 + } 156 + }, 157 + "400": { 158 + "description": "Bad Request", 159 + "content": { 160 + "application/json": { 161 + "schema": { 162 + "type": "object", 55 163 "properties": { 56 - "did": { 164 + "error": { 165 + "type": "string", 166 + "description": "A general error code", 167 + "oneOf": [ 168 + { 169 + "const": "InvalidRequest" 170 + } 171 + ] 172 + }, 173 + "message": { 174 + "type": "string", 175 + "description": "A detailed description of the error" 176 + } 177 + } 178 + } 179 + } 180 + } 181 + } 182 + } 183 + } 184 + }, 185 + "/xrpc/social.clippr.actor.putPreferences": { 186 + "post": { 187 + "tags": ["Profile"], 188 + "summary": "Set a user's preferences", 189 + "operationId": "social.clippr.actor.putPreferences", 190 + "description": "Sets the private preferences attached to the account. Requires authentication.", 191 + "security": [ 192 + { 193 + "Bearer": [] 194 + } 195 + ], 196 + "requestBody": { 197 + "required": true, 198 + "content": { 199 + "application/json": { 200 + "schema": { 201 + "type": "object", 202 + "properties": { 203 + "preferences": { 204 + "$ref": "#/components/schemas/social.clippr.actor.defs.preferences" 205 + } 206 + } 207 + } 208 + } 209 + } 210 + }, 211 + "responses": { 212 + "200": { 213 + "description": "OK" 214 + }, 215 + "400": { 216 + "description": "Bad Request", 217 + "content": { 218 + "application/json": { 219 + "schema": { 220 + "type": "object", 221 + "properties": { 222 + "error": { 223 + "type": "string", 224 + "oneOf": [ 225 + { 226 + "const": "InvalidRequest" 227 + }, 228 + { 229 + "const": "ExpiredToken" 230 + }, 231 + { 232 + "const": "InvalidToken" 233 + } 234 + ], 235 + "description": "A general error code" 236 + }, 237 + "message": { 238 + "type": "string", 239 + "description": "A detailed description of the error" 240 + } 241 + } 242 + } 243 + } 244 + } 245 + }, 246 + "401": { 247 + "description": "Unauthorized", 248 + "content": { 249 + "application/json": { 250 + "schema": { 251 + "type": "object", 252 + "properties": { 253 + "error": { 254 + "type": "string", 255 + "description": "A general error code", 256 + "oneOf": [ 257 + { 258 + "const": "AuthMissing" 259 + } 260 + ] 261 + }, 262 + "message": { 263 + "type": "string", 264 + "description": "A detailed description of the error" 265 + } 266 + } 267 + } 268 + } 269 + } 270 + } 271 + } 272 + } 273 + }, 274 + "/xrpc/social.clippr.actor.searchClips": { 275 + "get": { 276 + "tags": ["Clips"], 277 + "summary": "Search clips", 278 + "operationId": "social.clippr.actor.searchClips", 279 + "description": "Find clips matching search criteria.", 280 + "parameters": [ 281 + { 282 + "name": "q", 283 + "in": "query", 284 + "description": "Search query string", 285 + "required": true, 286 + "schema": { 287 + "type": "string", 288 + "description": "Search query string" 289 + } 290 + }, 291 + { 292 + "name": "limit", 293 + "in": "query", 294 + "description": "How many clips to return in the query output", 295 + "required": false, 296 + "schema": { 297 + "type": "integer", 298 + "minimum": 1, 299 + "maximum": 100, 300 + "default": 25 301 + } 302 + }, 303 + { 304 + "name": "actor", 305 + "in": "query", 306 + "description": "An actor to filter results to", 307 + "required": false, 308 + "schema": { 309 + "type": "string", 310 + "description": "An actor to filter results to", 311 + "format": "at-identifier" 312 + } 313 + }, 314 + { 315 + "name": "cursor", 316 + "in": "query", 317 + "description": "A parameter to paginate results", 318 + "required": false, 319 + "schema": { 320 + "type": "string", 321 + "description": "A parameter to paginate results" 322 + } 323 + } 324 + ], 325 + "responses": { 326 + "200": { 327 + "description": "OK", 328 + "content": { 329 + "application/json": { 330 + "schema": { 331 + "type": "object", 332 + "properties": { 333 + "cursor": { 334 + "type": "string", 335 + "description": "A parameter to paginate results" 336 + }, 337 + "clips": { 338 + "type": "array", 339 + "items": { 340 + "$ref": "#/components/schemas/social.clippr.feed.defs.clipView" 341 + } 342 + } 343 + } 344 + } 345 + } 346 + } 347 + }, 348 + "400": { 349 + "description": "Bad Request", 350 + "content": { 351 + "application/json": { 352 + "schema": { 353 + "type": "object", 354 + "properties": { 355 + "error": { 356 + "type": "string", 357 + "description": "A general error code", 358 + "oneOf": [ 359 + { 360 + "const": "InvalidRequest" 361 + } 362 + ] 363 + }, 364 + "message": { 365 + "type": "string", 366 + "description": "A detailed description of the error" 367 + } 368 + } 369 + } 370 + } 371 + } 372 + } 373 + } 374 + } 375 + }, 376 + "/xrpc/social.clippr.actor.searchProfiles": { 377 + "get": { 378 + "tags": ["Profile"], 379 + "summary": "Search profiles", 380 + "operationId": "social.clippr.actor.searchProfiles", 381 + "description": "Find profiles matching search criteria.", 382 + "parameters": [ 383 + { 384 + "name": "q", 385 + "in": "query", 386 + "description": "Search query string", 387 + "required": false, 388 + "schema": { 389 + "type": "string", 390 + "description": "Search query string" 391 + } 392 + }, 393 + { 394 + "name": "limit", 395 + "in": "query", 396 + "description": "The number of profiles to be returned in the query", 397 + "required": false, 398 + "schema": { 399 + "type": "integer", 400 + "minimum": 1, 401 + "maximum": 100, 402 + "default": 25 403 + } 404 + }, 405 + { 406 + "name": "cursor", 407 + "in": "query", 408 + "description": "A parameter used for pagination", 409 + "required": false, 410 + "schema": { 411 + "type": "string", 412 + "description": "A parameter used for pagination" 413 + } 414 + } 415 + ], 416 + "responses": { 417 + "200": { 418 + "description": "OK", 419 + "content": { 420 + "application/json": { 421 + "schema": { 422 + "type": "object", 423 + "properties": { 424 + "cursor": { 425 + "type": "string", 426 + "description": "A parameter used for pagination" 427 + }, 428 + "actors": { 429 + "type": "array", 430 + "items": { 431 + "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 432 + } 433 + } 434 + } 435 + } 436 + } 437 + } 438 + }, 439 + "400": { 440 + "description": "Bad Request", 441 + "content": { 442 + "application/json": { 443 + "schema": { 444 + "type": "object", 445 + "properties": { 446 + "error": { 447 + "type": "string", 448 + "description": "A general error code", 449 + "oneOf": [ 450 + { 451 + "const": "InvalidRequest" 452 + } 453 + ] 454 + }, 455 + "message": { 456 + "type": "string", 457 + "description": "A detailed description of the error" 458 + } 459 + } 460 + } 461 + } 462 + } 463 + } 464 + } 465 + } 466 + }, 467 + "/xrpc/social.clippr.actor.searchTags": { 468 + "get": { 469 + "tags": ["Tags"], 470 + "summary": "Search tags", 471 + "operationId": "social.clippr.actor.searchTags", 472 + "description": "Find tags matching search criteria.", 473 + "parameters": [ 474 + { 475 + "name": "q", 476 + "in": "query", 477 + "description": "Search query string", 478 + "required": true, 479 + "schema": { 480 + "type": "string", 481 + "description": "Search query string" 482 + } 483 + }, 484 + { 485 + "name": "limit", 486 + "in": "query", 487 + "description": "How many tags to return in the query output", 488 + "required": false, 489 + "schema": { 490 + "type": "integer", 491 + "minimum": 1, 492 + "maximum": 100, 493 + "default": 25 494 + } 495 + }, 496 + { 497 + "name": "actor", 498 + "in": "query", 499 + "description": "An actor to filter results to", 500 + "required": false, 501 + "schema": { 502 + "type": "string", 503 + "description": "An actor to filter results to", 504 + "format": "at-identifier" 505 + } 506 + }, 507 + { 508 + "name": "cursor", 509 + "in": "query", 510 + "description": "A parameter to paginate results", 511 + "required": false, 512 + "schema": { 513 + "type": "string", 514 + "description": "A parameter to paginate results" 515 + } 516 + } 517 + ], 518 + "responses": { 519 + "200": { 520 + "description": "OK", 521 + "content": { 522 + "application/json": { 523 + "schema": { 524 + "type": "object", 525 + "properties": { 526 + "cursor": { 527 + "type": "string", 528 + "description": "A parameter to paginate results" 529 + }, 530 + "tags": { 531 + "type": "array", 532 + "items": { 533 + "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 534 + } 535 + } 536 + } 537 + } 538 + } 539 + } 540 + }, 541 + "400": { 542 + "description": "Bad Request", 543 + "content": { 544 + "application/json": { 545 + "schema": { 546 + "type": "object", 547 + "properties": { 548 + "error": { 549 + "type": "string", 550 + "description": "A general error code", 551 + "oneOf": [ 552 + { 553 + "const": "InvalidRequest" 554 + } 555 + ] 556 + }, 557 + "message": { 558 + "type": "string", 559 + "description": "A detailed description of the error" 560 + } 561 + } 562 + } 563 + } 564 + } 565 + } 566 + } 567 + } 568 + }, 569 + "/xrpc/social.clippr.feed.getClips": { 570 + "get": { 571 + "tags": ["Clips"], 572 + "summary": "Get clips", 573 + "operationId": "social.clippr.feed.getClips", 574 + "description": "Get the hydrated views of a list of clips from their AT URIs.", 575 + "parameters": [ 576 + { 577 + "name": "uris", 578 + "in": "query", 579 + "description": "List of tag AT-URIs to return hydrated views for", 580 + "required": true, 581 + "schema": { 582 + "type": "array", 583 + "items": { 584 + "type": "string", 585 + "format": "at-uri" 586 + }, 587 + "maxItems": 25 588 + } 589 + } 590 + ], 591 + "responses": { 592 + "200": { 593 + "description": "OK", 594 + "content": { 595 + "application/json": { 596 + "schema": { 597 + "type": "array", 598 + "items": { 599 + "$ref": "#/components/schemas/social.clippr.feed.defs.clipView" 600 + } 601 + } 602 + } 603 + } 604 + }, 605 + "400": { 606 + "description": "Bad Request", 607 + "content": { 608 + "application/json": { 609 + "schema": { 610 + "type": "object", 611 + "properties": { 612 + "error": { 613 + "type": "string", 614 + "description": "A general error code", 615 + "oneOf": [ 616 + { 617 + "const": "InvalidRequest" 618 + } 619 + ] 620 + }, 621 + "message": { 622 + "type": "string", 623 + "description": "A detailed description of the error" 624 + } 625 + } 626 + } 627 + } 628 + } 629 + } 630 + } 631 + } 632 + }, 633 + "/xrpc/social.clippr.feed.getTags": { 634 + "get": { 635 + "tags": ["Tags"], 636 + "summary": "Get tags", 637 + "operationId": "social.clippr.feed.getTags", 638 + "description": "Get a the hydrated views of a list of tags from their AT URIs.", 639 + "parameters": [ 640 + { 641 + "name": "uris", 642 + "in": "query", 643 + "description": "List of tag AT-URIs to return hydrated views for", 644 + "required": true, 645 + "schema": { 646 + "type": "array", 647 + "items": { 648 + "type": "string", 649 + "format": "at-uri" 650 + }, 651 + "maxItems": 25 652 + } 653 + } 654 + ], 655 + "responses": { 656 + "200": { 657 + "description": "OK", 658 + "content": { 659 + "application/json": { 660 + "schema": { 661 + "type": "array", 662 + "items": { 663 + "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 664 + } 665 + } 666 + } 667 + } 668 + }, 669 + "400": { 670 + "description": "Bad Request", 671 + "content": { 672 + "application/json": { 673 + "schema": { 674 + "type": "object", 675 + "properties": { 676 + "error": { 57 677 "type": "string", 58 - "description": "The decentralized identifier associated to the profile.", 59 - "example": "did:plc:z72i7hdynmk6r22z27h6tvur" 678 + "description": "A general error code", 679 + "oneOf": [ 680 + { 681 + "const": "InvalidRequest" 682 + } 683 + ] 60 684 }, 61 - "handle": { 685 + "message": { 62 686 "type": "string", 63 - "description": "The handle associated to the profile.", 64 - "example": "alice.bsky.social" 687 + "description": "A detailed description of the error" 688 + } 689 + } 690 + } 691 + } 692 + } 693 + } 694 + } 695 + } 696 + }, 697 + "/xrpc/social.clippr.feed.getProfileClips": { 698 + "get": { 699 + "tags": ["Clips"], 700 + "summary": "Get a profile's clip feed", 701 + "operationId": "social.clippr.feed.getProfileClips", 702 + "description": "Get a view of a profile's reverse-chronological clips feed.", 703 + "parameters": [ 704 + { 705 + "name": "actor", 706 + "in": "query", 707 + "description": "An actor to get feed data from", 708 + "required": true, 709 + "schema": { 710 + "type": "string", 711 + "description": "An actor to get feed data from", 712 + "format": "at-identifier" 713 + } 714 + }, 715 + { 716 + "name": "limit", 717 + "in": "query", 718 + "description": "How many results to return with the query", 719 + "required": false, 720 + "schema": { 721 + "type": "integer", 722 + "minimum": 1, 723 + "maximum": 100, 724 + "default": 50 725 + } 726 + }, 727 + { 728 + "name": "cursor", 729 + "in": "query", 730 + "description": "A parameter to paginate results", 731 + "required": false, 732 + "schema": { 733 + "type": "string", 734 + "description": "A parameter to paginate results" 735 + } 736 + }, 737 + { 738 + "name": "filter", 739 + "in": "query", 740 + "description": "What types to include in response", 741 + "required": false, 742 + "schema": { 743 + "type": "string", 744 + "description": "What types of clips to include in response", 745 + "default": "all_clips", 746 + "enum": ["all_clips", "tagged_clips", "untagged_clips"] 747 + } 748 + } 749 + ], 750 + "responses": { 751 + "200": { 752 + "description": "OK", 753 + "content": { 754 + "application/json": { 755 + "schema": { 756 + "type": "object", 757 + "properties": { 758 + "cursor": { 759 + "type": "string" 65 760 }, 66 - "displayName": { 761 + "feed": { 762 + "type": "array", 763 + "items": { 764 + "$ref": "#/components/schemas/social.clippr.feed.defs.clipView" 765 + } 766 + } 767 + } 768 + } 769 + } 770 + } 771 + }, 772 + "400": { 773 + "description": "Bad Request", 774 + "content": { 775 + "application/json": { 776 + "schema": { 777 + "type": "object", 778 + "properties": { 779 + "error": { 67 780 "type": "string", 68 - "description": "The display name associated to the profile.", 69 - "example": "Alice" 781 + "description": "A general error code", 782 + "oneOf": [ 783 + { 784 + "const": "InvalidRequest" 785 + } 786 + ] 70 787 }, 71 - "avatar": { 788 + "message": { 72 789 "type": "string", 73 - "format": "uri", 74 - "description": "A URI linking to an JPEG or PNG file.", 75 - "example": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:b6bhzquz665p6bgjuaqz6xjp/bafkreicoqygyiqhhmjod4hvezo3besjyza24neldcxkz55keos3dg5mmj4@jpeg" 790 + "description": "A detailed description of the error" 791 + } 792 + } 793 + } 794 + } 795 + } 796 + } 797 + } 798 + } 799 + }, 800 + "/xrpc/social.clippr.feed.getProfileTags": { 801 + "get": { 802 + "tags": ["Tags"], 803 + "summary": "Get a profile's tag feed", 804 + "operationId": "social.clippr.feed.getProfileTags", 805 + "description": "Get a view of a profile's reverse-chronological clips feed.", 806 + "parameters": [ 807 + { 808 + "name": "actor", 809 + "in": "query", 810 + "description": "An actor to get feed data from", 811 + "required": true, 812 + "schema": { 813 + "type": "string", 814 + "description": "An actor to get feed data from", 815 + "format": "at-identifier" 816 + } 817 + }, 818 + { 819 + "name": "limit", 820 + "in": "query", 821 + "description": "How many results to return with the query", 822 + "required": false, 823 + "schema": { 824 + "type": "integer", 825 + "minimum": 1, 826 + "maximum": 100, 827 + "default": 50 828 + } 829 + }, 830 + { 831 + "name": "cursor", 832 + "in": "query", 833 + "description": "A parameter to paginate results", 834 + "required": false, 835 + "schema": { 836 + "type": "string", 837 + "description": "A parameter to paginate results" 838 + } 839 + } 840 + ], 841 + "responses": { 842 + "200": { 843 + "description": "OK", 844 + "content": { 845 + "application/json": { 846 + "schema": { 847 + "type": "object", 848 + "properties": { 849 + "cursor": { 850 + "type": "string" 76 851 }, 77 - "description": { 852 + "feed": { 853 + "type": "array", 854 + "items": { 855 + "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 856 + } 857 + } 858 + } 859 + } 860 + } 861 + } 862 + }, 863 + "400": { 864 + "description": "Bad Request", 865 + "content": { 866 + "application/json": { 867 + "schema": { 868 + "type": "object", 869 + "properties": { 870 + "error": { 78 871 "type": "string", 79 - "description": "A biography associated to the profile.", 80 - "example": "This is an example bio." 872 + "description": "A general error code", 873 + "oneOf": [ 874 + { 875 + "const": "InvalidRequest" 876 + } 877 + ] 81 878 }, 82 - "createdAt": { 879 + "message": { 83 880 "type": "string", 84 - "format": "date-time", 85 - "description": "The date and time of the creation of the profile record." 881 + "description": "A detailed description of the error" 882 + } 883 + } 884 + } 885 + } 886 + } 887 + } 888 + } 889 + } 890 + }, 891 + "/xrpc/social.clippr.feed.getTagList": { 892 + "get": { 893 + "tags": ["Tags"], 894 + "summary": "Get a profile's tag list", 895 + "operationId": "social.clippr.feed.getProfileTags", 896 + "description": "Get a profile's complete list of tags.", 897 + "parameters": [ 898 + { 899 + "name": "actor", 900 + "in": "query", 901 + "description": "An actor to fetch the tag list from", 902 + "required": false, 903 + "schema": { 904 + "type": "string", 905 + "description": "An actor to fetch the tag list from", 906 + "format": "at-identifier" 907 + } 908 + } 909 + ], 910 + "responses": { 911 + "200": { 912 + "description": "OK", 913 + "content": { 914 + "application/json": { 915 + "schema": { 916 + "type": "object", 917 + "properties": { 918 + "tags": { 919 + "type": "array", 920 + "items": { 921 + "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 922 + } 86 923 } 87 924 } 88 925 } ··· 98 935 "properties": { 99 936 "error": { 100 937 "type": "string", 101 - "description": "A general error code.", 102 - "example": "InvalidRequest" 938 + "description": "A general error code", 939 + "oneOf": [ 940 + { 941 + "error": "InvalidRequest" 942 + } 943 + ] 103 944 }, 104 945 "message": { 105 946 "type": "string", 106 - "description": "A detailed description of the error.", 107 - "example": "Error: Params must have the did property included" 947 + "description": "A detailed description of the error" 108 948 } 109 949 } 110 950 } 111 951 } 112 952 } 113 953 } 114 - }, 115 - "tags": ["Profile"] 954 + } 116 955 } 117 956 }, 118 957 "/xrpc/_health": { ··· 129 968 "properties": { 130 969 "version": { 131 970 "type": "string", 132 - "description": "The version number of the AppView.", 133 - "example": "0.1.0" 971 + "description": "The version number of the AppView." 134 972 } 135 973 } 136 974 } ··· 139 977 } 140 978 }, 141 979 "tags": ["Misc"] 980 + } 981 + } 982 + }, 983 + "components": { 984 + "schemas": { 985 + "com.atproto.repo.strongRef": { 986 + "type": "object", 987 + "required": ["uri", "cid"], 988 + "properties": { 989 + "uri": { 990 + "type": "string", 991 + "format": "at-uri" 992 + }, 993 + "cid": { 994 + "type": "string", 995 + "format": "cid" 996 + } 997 + } 998 + }, 999 + "social.clippr.actor.defs.profileView": { 1000 + "type": "object", 1001 + "description": "A view of an actor's profile", 1002 + "required": ["did", "handle", "displayName"], 1003 + "properties": { 1004 + "did": { 1005 + "type": "string", 1006 + "description": "The DID of the profile", 1007 + "format": "did" 1008 + }, 1009 + "handle": { 1010 + "type": "string", 1011 + "description": "The handle of the profile", 1012 + "format": "handle" 1013 + }, 1014 + "displayName": { 1015 + "type": "string", 1016 + "description": "The display name associated to the profile", 1017 + "maxLength": 64 1018 + }, 1019 + "description": { 1020 + "type": "string", 1021 + "description": "The biography associated to the profile", 1022 + "maxLength": 500 1023 + }, 1024 + "avatar": { 1025 + "type": "string", 1026 + "description": "A link to the profile's avatar", 1027 + "format": "uri" 1028 + }, 1029 + "createdAt": { 1030 + "type": "string", 1031 + "description": "When the profile record was first created", 1032 + "format": "date-time" 1033 + } 1034 + } 1035 + }, 1036 + "social.clippr.actor.defs.preferences": { 1037 + "type": "array", 1038 + "items": { 1039 + "oneOf": [ 1040 + { 1041 + "$ref": "#/components/schemas/social.clippr.actor.defs.publishingScopesPref" 1042 + } 1043 + ] 1044 + } 1045 + }, 1046 + "social.clippr.actor.defs.publishingScopesPref": { 1047 + "type": "object", 1048 + "description": "Preferences for a user's publishing scopes", 1049 + "required": ["defaultScope"], 1050 + "properties": { 1051 + "defaultScope": { 1052 + "type": "string", 1053 + "description": "What publishing scope to mark a clip as by default", 1054 + "enum": ["public", "unlisted"] 1055 + } 1056 + } 1057 + }, 1058 + "social.clippr.feed.defs.clipView": { 1059 + "type": "object", 1060 + "description": "A view of a single bookmark (or 'clip')", 1061 + "required": ["uri", "cid", "author", "record", "indexedAt"], 1062 + "properties": { 1063 + "uri": { 1064 + "type": "string", 1065 + "description": "The AT-URI of the clip", 1066 + "format": "at-uri" 1067 + }, 1068 + "cid": { 1069 + "type": "string", 1070 + "description": "The CID of the clip", 1071 + "format": "cid" 1072 + }, 1073 + "author": { 1074 + "description": "A reference to the actor's profile", 1075 + "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 1076 + }, 1077 + "record": { 1078 + "type": "object", 1079 + "description": "The raw record of the clip" 1080 + }, 1081 + "indexedAt": { 1082 + "type": "string", 1083 + "description": "The time in which the clip's record was indexed by the AppView", 1084 + "format": "date-time" 1085 + } 1086 + } 1087 + }, 1088 + "social.clippr.feed.defs.tagView": { 1089 + "type": "object", 1090 + "description": "A view of a single tag", 1091 + "required": ["uri", "cid", "author", "record", "indexedAt"], 1092 + "properties": { 1093 + "uri": { 1094 + "type": "string", 1095 + "description": "The AT-URI to the tag", 1096 + "format": "at-uri" 1097 + }, 1098 + "cid": { 1099 + "type": "string", 1100 + "description": "The CID of the tag", 1101 + "format": "cid" 1102 + }, 1103 + "author": { 1104 + "description": "A reference to the actor's profile", 1105 + "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 1106 + }, 1107 + "record": { 1108 + "type": "object", 1109 + "description": "The raw record of the clip" 1110 + }, 1111 + "indexedAt": { 1112 + "type": "string", 1113 + "description": "The time in which the tag's record was indexed by the AppView", 1114 + "format": "date-time" 1115 + } 1116 + } 1117 + }, 1118 + "social.clippr.actor.profile": { 1119 + "type": "object", 1120 + "required": ["createdAt", "displayName"], 1121 + "properties": { 1122 + "displayName": { 1123 + "type": "string", 1124 + "description": "A display name to be shown on a profile", 1125 + "maxLength": 64 1126 + }, 1127 + "description": { 1128 + "type": "string", 1129 + "description": "Text for user to describe themselves", 1130 + "maxLength": 500 1131 + }, 1132 + "avatar": { 1133 + "type": "blob", 1134 + "maxSize": 1000000, 1135 + "description": "Image to show on user's profiles" 1136 + }, 1137 + "createdAt": { 1138 + "type": "string", 1139 + "description": "The creation date of the profile", 1140 + "format": "date-time" 1141 + } 1142 + } 1143 + }, 1144 + "social.clippr.feed.clip": { 1145 + "type": "object", 1146 + "required": ["url", "title", "description", "unlisted", "createdAt"], 1147 + "properties": { 1148 + "url": { 1149 + "type": "string", 1150 + "description": "The URL of the bookmark. Cannot be left empty or be modified after creation.", 1151 + "format": "uri", 1152 + "maxLength": 2000 1153 + }, 1154 + "title": { 1155 + "type": "string", 1156 + "description": "The title of the bookmark. If left empty, reuse the URL.", 1157 + "maxLength": 2048 1158 + }, 1159 + "description": { 1160 + "type": "string", 1161 + "description": "A description of the bookmark's content. This should be ripped from the URL metadata and be static for all records using the URL.", 1162 + "maxLength": 4096 1163 + }, 1164 + "notes": { 1165 + "type": "string", 1166 + "description": "User-written notes for the bookmark. Public and personal.", 1167 + "maxLength": 10000 1168 + }, 1169 + "tags": { 1170 + "type": "array", 1171 + "description": "An array of tags. A format of solely alphanumeric characters and dashes should be used.", 1172 + "items": { 1173 + "$ref": "#/components/schemas/com.atproto.repo.strongRef" 1174 + } 1175 + }, 1176 + "unlisted": { 1177 + "type": "boolean", 1178 + "description": "Whether the bookmark can be used for feed indexing and aggregation" 1179 + }, 1180 + "unread": { 1181 + "type": "boolean", 1182 + "description": "Whether the bookmark has been read by the user", 1183 + "default": true 1184 + }, 1185 + "languages": { 1186 + "type": "array", 1187 + "items": { 1188 + "type": "string", 1189 + "format": "language" 1190 + }, 1191 + "maxItems": 5 1192 + }, 1193 + "createdAt": { 1194 + "type": "string", 1195 + "description": "Client-declared timestamp when the bookmark is created", 1196 + "format": "date-time" 1197 + } 1198 + } 1199 + }, 1200 + "social.clippr.feed.tag": { 1201 + "type": "object", 1202 + "required": ["name", "createdAt"], 1203 + "properties": { 1204 + "name": { 1205 + "type": "string", 1206 + "description": "A de-duplicated string containing the name of the tag", 1207 + "maxLength": 64 1208 + }, 1209 + "color": { 1210 + "type": "string", 1211 + "description": "A hexadecimal color code", 1212 + "maxLength": 7 1213 + }, 1214 + "description": { 1215 + "type": "string", 1216 + "description": "A description of the tag for additional context", 1217 + "maxLength": 5000 1218 + }, 1219 + "createdAt": { 1220 + "type": "string", 1221 + "description": "A client-defined timestamp for the creation of the tag", 1222 + "format": "date-time" 1223 + } 1224 + } 142 1225 } 143 1226 } 144 1227 }
+2
frontend/.prettierignore
··· 1 + pnpm-lock.yaml 2 + dist/*
+31
frontend/.prettierrc
··· 1 + { 2 + "trailingComma": "all", 3 + "useTabs": true, 4 + "tabWidth": 2, 5 + "printWidth": 80, 6 + "semi": true, 7 + "singleQuote": false, 8 + "bracketSpacing": true, 9 + "plugins": ["prettier-plugin-astro"], 10 + "overrides": [ 11 + { 12 + "files": ["tsconfig.json", "jsconfig.json"], 13 + "options": { 14 + "parser": "jsonc" 15 + } 16 + }, 17 + { 18 + "files": ["*.md"], 19 + "options": { 20 + "printWidth": 100, 21 + "proseWrap": "always" 22 + } 23 + }, 24 + { 25 + "files": "*.astro", 26 + "options": { 27 + "parser": "astro" 28 + } 29 + } 30 + ] 31 + }
+2 -2
frontend/.vscode/extensions.json
··· 1 1 { 2 - "recommendations": ["astro-build.astro-vscode"], 3 - "unwantedRecommendations": [] 2 + "recommendations": ["astro-build.astro-vscode"], 3 + "unwantedRecommendations": [] 4 4 }
+9 -9
frontend/.vscode/launch.json
··· 1 1 { 2 - "version": "0.2.0", 3 - "configurations": [ 4 - { 5 - "command": "./node_modules/.bin/astro dev", 6 - "name": "Development server", 7 - "request": "launch", 8 - "type": "node-terminal" 9 - } 10 - ] 2 + "version": "0.2.0", 3 + "configurations": [ 4 + { 5 + "command": "./node_modules/.bin/astro dev", 6 + "name": "Development server", 7 + "request": "launch", 8 + "type": "node-terminal" 9 + } 10 + ] 11 11 }
+3 -1
frontend/README.md
··· 1 1 # @clipprjs/client 2 + 2 3 astro-based reference frontend for clippr, meant to use as little javascript as possible 3 4 4 5 ## run 6 + 5 7 ```bash 6 8 pnpm install 7 9 pnpm run dev 8 10 # pnpm run build 9 - ``` 11 + ```
-11
frontend/astro.config.mts
··· 1 - /* 2 - * clippr: a social bookmarking service for the AT Protocol 3 - * Copyright (c) 2025 clippr contributors. 4 - * SPDX-License-Identifier: AGPL-3.0-only 5 - */ 6 - 7 - // @ts-check 8 - import { defineConfig } from 'astro/config'; 9 - 10 - // https://astro.build/config 11 - export default defineConfig({});
+11
frontend/astro.config.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + // @ts-check 8 + import { defineConfig } from "astro/config"; 9 + 10 + // https://astro.build/config 11 + export default defineConfig({});
+20
frontend/eslint.config.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + // @ts-check 8 + 9 + import eslint from "@eslint/js"; 10 + import tseslint from "typescript-eslint"; 11 + import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; 12 + import eslintPluginAstro from "eslint-plugin-astro"; 13 + 14 + export default tseslint.config( 15 + eslintPluginPrettierRecommended, 16 + tseslint.configs.recommended, 17 + tseslint.configs.stylistic, 18 + eslint.configs.recommended, 19 + eslintPluginAstro.configs.recommended, 20 + );
+33 -13
frontend/package.json
··· 1 1 { 2 - "name": "@clipprjs/client", 3 - "type": "module", 4 - "version": "0.1.0", 5 - "scripts": { 6 - "dev": "astro dev", 7 - "build": "astro build", 8 - "preview": "astro preview", 9 - "astro": "astro" 10 - }, 11 - "dependencies": { 12 - "astro": "^5.9.1" 13 - } 14 - } 2 + "name": "@clipprjs/client", 3 + "type": "module", 4 + "version": "0.1.0", 5 + "scripts": { 6 + "dev": "astro dev", 7 + "build": "astro build", 8 + "preview": "astro preview", 9 + "astro": "astro", 10 + "lint": "pnpm exec eslint .", 11 + "lint-write": "pnpm exec eslint . --fix", 12 + "fmt": "pnpm exec prettier --write ." 13 + }, 14 + "dependencies": { 15 + "@atcute/oauth-browser-client": "^1.0.26", 16 + "astro": "^5.12.3" 17 + }, 18 + "devDependencies": { 19 + "@eslint/eslintrc": "^3.3.1", 20 + "@eslint/js": "^9.32.0", 21 + "@typescript-eslint/eslint-plugin": "^8.38.0", 22 + "@typescript-eslint/parser": "^8.38.0", 23 + "eslint": "^9.32.0", 24 + "eslint-config-prettier": "^10.1.8", 25 + "eslint-plugin-astro": "^1.3.1", 26 + "eslint-plugin-prettier": "^5.5.3", 27 + "globals": "^16.3.0", 28 + "jiti": "^2.5.1", 29 + "prettier": "^3.6.2", 30 + "prettier-plugin-astro": "0.14.1", 31 + "typescript": "^5.8.3", 32 + "typescript-eslint": "^8.38.0" 33 + } 34 + }
+1575 -347
frontend/pnpm-lock.yaml
··· 8 8 9 9 .: 10 10 dependencies: 11 + '@atcute/oauth-browser-client': 12 + specifier: ^1.0.26 13 + version: 1.0.26 11 14 astro: 12 - specifier: ^5.9.1 13 - version: 5.9.1(@types/node@22.15.30)(rollup@4.42.0)(typescript@5.8.3) 15 + specifier: ^5.12.3 16 + version: 5.12.3(@types/node@24.1.0)(jiti@2.5.1)(rollup@4.45.3)(typescript@5.8.3) 17 + devDependencies: 18 + '@eslint/eslintrc': 19 + specifier: ^3.3.1 20 + version: 3.3.1 21 + '@eslint/js': 22 + specifier: ^9.32.0 23 + version: 9.32.0 24 + '@typescript-eslint/eslint-plugin': 25 + specifier: ^8.38.0 26 + version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 27 + '@typescript-eslint/parser': 28 + specifier: ^8.38.0 29 + version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 30 + eslint: 31 + specifier: ^9.32.0 32 + version: 9.32.0(jiti@2.5.1) 33 + eslint-config-prettier: 34 + specifier: ^10.1.8 35 + version: 10.1.8(eslint@9.32.0(jiti@2.5.1)) 36 + eslint-plugin-astro: 37 + specifier: ^1.3.1 38 + version: 1.3.1(eslint@9.32.0(jiti@2.5.1)) 39 + eslint-plugin-prettier: 40 + specifier: ^5.5.3 41 + version: 5.5.3(eslint-config-prettier@10.1.8(eslint@9.32.0(jiti@2.5.1)))(eslint@9.32.0(jiti@2.5.1))(prettier@3.6.2) 42 + globals: 43 + specifier: ^16.3.0 44 + version: 16.3.0 45 + jiti: 46 + specifier: ^2.5.1 47 + version: 2.5.1 48 + prettier: 49 + specifier: ^3.6.2 50 + version: 3.6.2 51 + prettier-plugin-astro: 52 + specifier: 0.14.1 53 + version: 0.14.1 54 + typescript: 55 + specifier: ^5.8.3 56 + version: 5.8.3 57 + typescript-eslint: 58 + specifier: ^8.38.0 59 + version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 14 60 15 61 packages: 16 62 17 - '@astrojs/compiler@2.12.1': 18 - resolution: {integrity: sha512-WDSyVIiz7sNcJcCJxJFITu6XjfGhJ50Z0auyaWsrM+xb07IlhBLFtQuDkNy0caVHWNcKTM2LISAaHhgkRqGAVg==} 63 + '@astrojs/compiler@2.12.2': 64 + resolution: {integrity: sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==} 19 65 20 66 '@astrojs/internal-helpers@0.6.1': 21 67 resolution: {integrity: sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==} 22 68 23 - '@astrojs/markdown-remark@6.3.2': 24 - resolution: {integrity: sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==} 69 + '@astrojs/markdown-remark@6.3.3': 70 + resolution: {integrity: sha512-DDRtD1sPvAuA7ms2btc9A7/7DApKqgLMNrE6kh5tmkfy8utD0Z738gqd3p5aViYYdUtHIyEJ1X4mCMxfCfu15w==} 25 71 26 72 '@astrojs/prism@3.3.0': 27 73 resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} ··· 31 77 resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} 32 78 engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} 33 79 80 + '@atcute/client@4.0.3': 81 + resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==} 82 + 83 + '@atcute/identity@1.0.3': 84 + resolution: {integrity: sha512-mNMxbKHFGys03A8JXKk0KfMBzdd0vrYMzZZWjpw1nYTs0+ea6bo5S1hwqVUZxHdo1gFHSe/t63jxQIF4yL9aKw==} 85 + 86 + '@atcute/lexicons@1.1.0': 87 + resolution: {integrity: sha512-LFqwnria78xLYb62Ri/+WwQpUTgZp2DuyolNGIIOV1dpiKhFFFh//nscHMA6IExFLQRqWDs3tTjy7zv0h3sf1Q==} 88 + 89 + '@atcute/multibase@1.1.4': 90 + resolution: {integrity: sha512-NUf5AeeSOmuZHGU+4GAaMtISJoG+ZHtW/vUVA4lK/YDt/7LODAW0Fd0NNIIUPVUoW0xJS6zSEIWvwLLuxmEHhA==} 91 + 92 + '@atcute/oauth-browser-client@1.0.26': 93 + resolution: {integrity: sha512-z8VUmwRO1sFu5Dq1qYQOQLenkTSNaOyzlUZhVwFR41ru+AP84MS5UHHW/NsdC1xJAq1v6mlLySJ+pjxdDW8IYA==} 94 + 95 + '@atcute/uint8array@1.0.3': 96 + resolution: {integrity: sha512-M/K+ihiVW8Pl2PFLzaC4E3l4JaZ1IH05Q0AbPWUC4cVHnd/gZ/1kAF5ngdtGvJeDMirHZ2VAy7OmAsPwR/2nlA==} 97 + 34 98 '@babel/helper-string-parser@7.27.1': 35 99 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 36 100 engines: {node: '>=6.9.0'} ··· 39 103 resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 40 104 engines: {node: '>=6.9.0'} 41 105 42 - '@babel/parser@7.27.5': 43 - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} 106 + '@babel/parser@7.28.0': 107 + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} 44 108 engines: {node: '>=6.0.0'} 45 109 hasBin: true 46 110 47 - '@babel/types@7.27.6': 48 - resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} 111 + '@babel/types@7.28.2': 112 + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 49 113 engines: {node: '>=6.9.0'} 50 114 115 + '@badrap/valita@0.4.5': 116 + resolution: {integrity: sha512-4QwGbuhh/JesHRQj79mO/l37PvJj4l/tlAu7+S1n4h47qwaNpZ0WDvIwUGLYUsdi9uQ5UPpiG9wb1Wm3XUFBUQ==} 117 + engines: {node: '>= 18'} 118 + 51 119 '@capsizecss/unpack@2.4.0': 52 120 resolution: {integrity: sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==} 53 121 54 - '@emnapi/runtime@1.4.3': 55 - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} 122 + '@emnapi/runtime@1.4.5': 123 + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} 56 124 57 - '@esbuild/aix-ppc64@0.25.5': 58 - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} 125 + '@esbuild/aix-ppc64@0.25.8': 126 + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} 59 127 engines: {node: '>=18'} 60 128 cpu: [ppc64] 61 129 os: [aix] 62 130 63 - '@esbuild/android-arm64@0.25.5': 64 - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} 131 + '@esbuild/android-arm64@0.25.8': 132 + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} 65 133 engines: {node: '>=18'} 66 134 cpu: [arm64] 67 135 os: [android] 68 136 69 - '@esbuild/android-arm@0.25.5': 70 - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} 137 + '@esbuild/android-arm@0.25.8': 138 + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} 71 139 engines: {node: '>=18'} 72 140 cpu: [arm] 73 141 os: [android] 74 142 75 - '@esbuild/android-x64@0.25.5': 76 - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} 143 + '@esbuild/android-x64@0.25.8': 144 + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} 77 145 engines: {node: '>=18'} 78 146 cpu: [x64] 79 147 os: [android] 80 148 81 - '@esbuild/darwin-arm64@0.25.5': 82 - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} 149 + '@esbuild/darwin-arm64@0.25.8': 150 + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} 83 151 engines: {node: '>=18'} 84 152 cpu: [arm64] 85 153 os: [darwin] 86 154 87 - '@esbuild/darwin-x64@0.25.5': 88 - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} 155 + '@esbuild/darwin-x64@0.25.8': 156 + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} 89 157 engines: {node: '>=18'} 90 158 cpu: [x64] 91 159 os: [darwin] 92 160 93 - '@esbuild/freebsd-arm64@0.25.5': 94 - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} 161 + '@esbuild/freebsd-arm64@0.25.8': 162 + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} 95 163 engines: {node: '>=18'} 96 164 cpu: [arm64] 97 165 os: [freebsd] 98 166 99 - '@esbuild/freebsd-x64@0.25.5': 100 - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} 167 + '@esbuild/freebsd-x64@0.25.8': 168 + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} 101 169 engines: {node: '>=18'} 102 170 cpu: [x64] 103 171 os: [freebsd] 104 172 105 - '@esbuild/linux-arm64@0.25.5': 106 - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} 173 + '@esbuild/linux-arm64@0.25.8': 174 + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} 107 175 engines: {node: '>=18'} 108 176 cpu: [arm64] 109 177 os: [linux] 110 178 111 - '@esbuild/linux-arm@0.25.5': 112 - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} 179 + '@esbuild/linux-arm@0.25.8': 180 + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} 113 181 engines: {node: '>=18'} 114 182 cpu: [arm] 115 183 os: [linux] 116 184 117 - '@esbuild/linux-ia32@0.25.5': 118 - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} 185 + '@esbuild/linux-ia32@0.25.8': 186 + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} 119 187 engines: {node: '>=18'} 120 188 cpu: [ia32] 121 189 os: [linux] 122 190 123 - '@esbuild/linux-loong64@0.25.5': 124 - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} 191 + '@esbuild/linux-loong64@0.25.8': 192 + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} 125 193 engines: {node: '>=18'} 126 194 cpu: [loong64] 127 195 os: [linux] 128 196 129 - '@esbuild/linux-mips64el@0.25.5': 130 - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} 197 + '@esbuild/linux-mips64el@0.25.8': 198 + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} 131 199 engines: {node: '>=18'} 132 200 cpu: [mips64el] 133 201 os: [linux] 134 202 135 - '@esbuild/linux-ppc64@0.25.5': 136 - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} 203 + '@esbuild/linux-ppc64@0.25.8': 204 + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} 137 205 engines: {node: '>=18'} 138 206 cpu: [ppc64] 139 207 os: [linux] 140 208 141 - '@esbuild/linux-riscv64@0.25.5': 142 - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} 209 + '@esbuild/linux-riscv64@0.25.8': 210 + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} 143 211 engines: {node: '>=18'} 144 212 cpu: [riscv64] 145 213 os: [linux] 146 214 147 - '@esbuild/linux-s390x@0.25.5': 148 - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} 215 + '@esbuild/linux-s390x@0.25.8': 216 + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} 149 217 engines: {node: '>=18'} 150 218 cpu: [s390x] 151 219 os: [linux] 152 220 153 - '@esbuild/linux-x64@0.25.5': 154 - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} 221 + '@esbuild/linux-x64@0.25.8': 222 + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} 155 223 engines: {node: '>=18'} 156 224 cpu: [x64] 157 225 os: [linux] 158 226 159 - '@esbuild/netbsd-arm64@0.25.5': 160 - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} 227 + '@esbuild/netbsd-arm64@0.25.8': 228 + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} 161 229 engines: {node: '>=18'} 162 230 cpu: [arm64] 163 231 os: [netbsd] 164 232 165 - '@esbuild/netbsd-x64@0.25.5': 166 - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} 233 + '@esbuild/netbsd-x64@0.25.8': 234 + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} 167 235 engines: {node: '>=18'} 168 236 cpu: [x64] 169 237 os: [netbsd] 170 238 171 - '@esbuild/openbsd-arm64@0.25.5': 172 - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} 239 + '@esbuild/openbsd-arm64@0.25.8': 240 + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} 173 241 engines: {node: '>=18'} 174 242 cpu: [arm64] 175 243 os: [openbsd] 176 244 177 - '@esbuild/openbsd-x64@0.25.5': 178 - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} 245 + '@esbuild/openbsd-x64@0.25.8': 246 + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} 179 247 engines: {node: '>=18'} 180 248 cpu: [x64] 181 249 os: [openbsd] 182 250 183 - '@esbuild/sunos-x64@0.25.5': 184 - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} 251 + '@esbuild/openharmony-arm64@0.25.8': 252 + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} 253 + engines: {node: '>=18'} 254 + cpu: [arm64] 255 + os: [openharmony] 256 + 257 + '@esbuild/sunos-x64@0.25.8': 258 + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} 185 259 engines: {node: '>=18'} 186 260 cpu: [x64] 187 261 os: [sunos] 188 262 189 - '@esbuild/win32-arm64@0.25.5': 190 - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} 263 + '@esbuild/win32-arm64@0.25.8': 264 + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} 191 265 engines: {node: '>=18'} 192 266 cpu: [arm64] 193 267 os: [win32] 194 268 195 - '@esbuild/win32-ia32@0.25.5': 196 - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} 269 + '@esbuild/win32-ia32@0.25.8': 270 + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} 197 271 engines: {node: '>=18'} 198 272 cpu: [ia32] 199 273 os: [win32] 200 274 201 - '@esbuild/win32-x64@0.25.5': 202 - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} 275 + '@esbuild/win32-x64@0.25.8': 276 + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} 203 277 engines: {node: '>=18'} 204 278 cpu: [x64] 205 279 os: [win32] 206 280 281 + '@eslint-community/eslint-utils@4.7.0': 282 + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 283 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 284 + peerDependencies: 285 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 286 + 287 + '@eslint-community/regexpp@4.12.1': 288 + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 289 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 290 + 291 + '@eslint/config-array@0.21.0': 292 + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} 293 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 294 + 295 + '@eslint/config-helpers@0.3.0': 296 + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} 297 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 298 + 299 + '@eslint/core@0.15.1': 300 + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} 301 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 302 + 303 + '@eslint/eslintrc@3.3.1': 304 + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 305 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 306 + 307 + '@eslint/js@9.32.0': 308 + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} 309 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 310 + 311 + '@eslint/object-schema@2.1.6': 312 + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 313 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 314 + 315 + '@eslint/plugin-kit@0.3.4': 316 + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} 317 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 318 + 319 + '@humanfs/core@0.19.1': 320 + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 321 + engines: {node: '>=18.18.0'} 322 + 323 + '@humanfs/node@0.16.6': 324 + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 325 + engines: {node: '>=18.18.0'} 326 + 327 + '@humanwhocodes/module-importer@1.0.1': 328 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 329 + engines: {node: '>=12.22'} 330 + 331 + '@humanwhocodes/retry@0.3.1': 332 + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 333 + engines: {node: '>=18.18'} 334 + 335 + '@humanwhocodes/retry@0.4.3': 336 + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 337 + engines: {node: '>=18.18'} 338 + 207 339 '@img/sharp-darwin-arm64@0.33.5': 208 340 resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 209 341 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} ··· 309 441 cpu: [x64] 310 442 os: [win32] 311 443 312 - '@jridgewell/sourcemap-codec@1.5.0': 313 - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 444 + '@jridgewell/sourcemap-codec@1.5.4': 445 + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} 446 + 447 + '@nodelib/fs.scandir@2.1.5': 448 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 449 + engines: {node: '>= 8'} 450 + 451 + '@nodelib/fs.stat@2.0.5': 452 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 453 + engines: {node: '>= 8'} 454 + 455 + '@nodelib/fs.walk@1.2.8': 456 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 457 + engines: {node: '>= 8'} 314 458 315 459 '@oslojs/encoding@1.1.0': 316 460 resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} 317 461 318 - '@rollup/pluginutils@5.1.4': 319 - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} 462 + '@pkgr/core@0.2.9': 463 + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} 464 + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 465 + 466 + '@rollup/pluginutils@5.2.0': 467 + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} 320 468 engines: {node: '>=14.0.0'} 321 469 peerDependencies: 322 470 rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 ··· 324 472 rollup: 325 473 optional: true 326 474 327 - '@rollup/rollup-android-arm-eabi@4.42.0': 328 - resolution: {integrity: sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==} 475 + '@rollup/rollup-android-arm-eabi@4.45.3': 476 + resolution: {integrity: sha512-8oQkCTve4H4B4JpmD2FV7fV2ZPTxJHN//bRhCqPUU8v6c5APlxteAXyc7BFaEb4aGpUzrPLU4PoAcGhwmRzZTA==} 329 477 cpu: [arm] 330 478 os: [android] 331 479 332 - '@rollup/rollup-android-arm64@4.42.0': 333 - resolution: {integrity: sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==} 480 + '@rollup/rollup-android-arm64@4.45.3': 481 + resolution: {integrity: sha512-StOsmdXHU2hx3UFTTs6yYxCSwSIgLsfjUBICXyWj625M32OOjakXlaZuGKL+jA3Nvv35+hMxrm/64eCoT07SYQ==} 334 482 cpu: [arm64] 335 483 os: [android] 336 484 337 - '@rollup/rollup-darwin-arm64@4.42.0': 338 - resolution: {integrity: sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==} 485 + '@rollup/rollup-darwin-arm64@4.45.3': 486 + resolution: {integrity: sha512-6CfLF3eqKhCdhK0GUnR5ZS99OFz+dtOeB/uePznLKxjCsk5QjT/V0eSEBb4vj+o/ri3i35MseSEQHCLLAgClVw==} 339 487 cpu: [arm64] 340 488 os: [darwin] 341 489 342 - '@rollup/rollup-darwin-x64@4.42.0': 343 - resolution: {integrity: sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==} 490 + '@rollup/rollup-darwin-x64@4.45.3': 491 + resolution: {integrity: sha512-QLWyWmAJG9elNTNLdcSXUT/M+J7DhEmvs1XPHYcgYkse3UHf9iWTJ+yTPlKMIetiQnNi+cNp+gY4gvjDpREfKw==} 344 492 cpu: [x64] 345 493 os: [darwin] 346 494 347 - '@rollup/rollup-freebsd-arm64@4.42.0': 348 - resolution: {integrity: sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==} 495 + '@rollup/rollup-freebsd-arm64@4.45.3': 496 + resolution: {integrity: sha512-ZOvBq+5nL0yrZIEo1eq6r7MPvkJ8kC1XATS/yHvcq3WbDNKNKBQ1uIF4hicyzDMoJt72G+sn1nKsFXpifZyRDA==} 349 497 cpu: [arm64] 350 498 os: [freebsd] 351 499 352 - '@rollup/rollup-freebsd-x64@4.42.0': 353 - resolution: {integrity: sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==} 500 + '@rollup/rollup-freebsd-x64@4.45.3': 501 + resolution: {integrity: sha512-AYvGR07wecEnyYSovyJ71pTOulbNvsrpRpK6i/IM1b0UGX1vFx51afYuPYPxnvE9aCl5xPnhQicEvdIMxClRgQ==} 354 502 cpu: [x64] 355 503 os: [freebsd] 356 504 357 - '@rollup/rollup-linux-arm-gnueabihf@4.42.0': 358 - resolution: {integrity: sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==} 505 + '@rollup/rollup-linux-arm-gnueabihf@4.45.3': 506 + resolution: {integrity: sha512-Yx8Cp38tfRRToVLuIWzBHV25/QPzpUreOPIiUuNV7KahNPurYg2pYQ4l7aYnvpvklO1riX4643bXLvDsYSBIrA==} 359 507 cpu: [arm] 360 508 os: [linux] 361 509 362 - '@rollup/rollup-linux-arm-musleabihf@4.42.0': 363 - resolution: {integrity: sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==} 510 + '@rollup/rollup-linux-arm-musleabihf@4.45.3': 511 + resolution: {integrity: sha512-4dIYRNxlXGDKnO6qgcda6LxnObPO6r1OBU9HG8F9pAnHHLtfbiOqCzDvkeHknx+5mfFVH4tWOl+h+cHylwsPWA==} 364 512 cpu: [arm] 365 513 os: [linux] 366 514 367 - '@rollup/rollup-linux-arm64-gnu@4.42.0': 368 - resolution: {integrity: sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==} 515 + '@rollup/rollup-linux-arm64-gnu@4.45.3': 516 + resolution: {integrity: sha512-M6uVlWKmhLN7LguLDu6396K1W5IBlAaRonjlHQgc3s4dOGceu0FeBuvbXiUPYvup/6b5Ln7IEX7XNm68DN4vrg==} 369 517 cpu: [arm64] 370 518 os: [linux] 371 519 372 - '@rollup/rollup-linux-arm64-musl@4.42.0': 373 - resolution: {integrity: sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==} 520 + '@rollup/rollup-linux-arm64-musl@4.45.3': 521 + resolution: {integrity: sha512-emaYiOTQJUd6fC9a6jcw9zIWtzaUiuBC+vomggaM4In2iOra/lA6IMHlqZqQZr08NYXrOPMVigreLMeSAwv3Uw==} 374 522 cpu: [arm64] 375 523 os: [linux] 376 524 377 - '@rollup/rollup-linux-loongarch64-gnu@4.42.0': 378 - resolution: {integrity: sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==} 525 + '@rollup/rollup-linux-loongarch64-gnu@4.45.3': 526 + resolution: {integrity: sha512-3P77T5AQ4UfVRJSrTKLiUZDJ6XsxeP80027bp6mOFh8sevSD038mYuIYFiUtrSJxxgFb+NgRJFF9oIa0rlUsmg==} 379 527 cpu: [loong64] 380 528 os: [linux] 381 529 382 - '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': 383 - resolution: {integrity: sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==} 530 + '@rollup/rollup-linux-ppc64-gnu@4.45.3': 531 + resolution: {integrity: sha512-/VPH3ZVeSlmCBPhZdx/+4dMXDjaGMhDsWOBo9EwSkGbw2+OAqaslL53Ao2OqCxR0GgYjmmssJ+OoG+qYGE7IBg==} 384 532 cpu: [ppc64] 385 533 os: [linux] 386 534 387 - '@rollup/rollup-linux-riscv64-gnu@4.42.0': 388 - resolution: {integrity: sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==} 535 + '@rollup/rollup-linux-riscv64-gnu@4.45.3': 536 + resolution: {integrity: sha512-Hs5if0PjROl1MGMmZX3xMAIfqcGxQE2SJWUr/CpDQsOQn43Wq4IvXXxUMWtiY/BrzdqCCJlRgJ5DKxzS3qWkCw==} 389 537 cpu: [riscv64] 390 538 os: [linux] 391 539 392 - '@rollup/rollup-linux-riscv64-musl@4.42.0': 393 - resolution: {integrity: sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==} 540 + '@rollup/rollup-linux-riscv64-musl@4.45.3': 541 + resolution: {integrity: sha512-Qm0WOwh3Lk388+HJFl1ILGbd2iOoQf6yl4fdGqOjBzEA+5JYbLcwd+sGsZjs5pkt8Cr/1G42EiXmlRp9ZeTvFA==} 394 542 cpu: [riscv64] 395 543 os: [linux] 396 544 397 - '@rollup/rollup-linux-s390x-gnu@4.42.0': 398 - resolution: {integrity: sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==} 545 + '@rollup/rollup-linux-s390x-gnu@4.45.3': 546 + resolution: {integrity: sha512-VJdknTaYw+TqXzlh9c7vaVMh/fV2sU8Khfk4a9vAdYXJawpjf6z3U1k7vDWx2IQ9ZOPoOPxgVpDfYOYhxD7QUA==} 399 547 cpu: [s390x] 400 548 os: [linux] 401 549 402 - '@rollup/rollup-linux-x64-gnu@4.42.0': 403 - resolution: {integrity: sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==} 550 + '@rollup/rollup-linux-x64-gnu@4.45.3': 551 + resolution: {integrity: sha512-SUDXU5YabLAMl86FpupSQQEWzVG8X0HM+Q/famnJusbPiUgQnTGuSxtxg4UAYgv1ZmRV1nioYYXsgtSokU/7+Q==} 404 552 cpu: [x64] 405 553 os: [linux] 406 554 407 - '@rollup/rollup-linux-x64-musl@4.42.0': 408 - resolution: {integrity: sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==} 555 + '@rollup/rollup-linux-x64-musl@4.45.3': 556 + resolution: {integrity: sha512-ezmqknOUFgZMN6wW+Avlo4sXF3Frswd+ncrwMz4duyZ5Eqd+dAYgJ+A1MY+12LNZ7XDhCiijJceueYvtnzdviw==} 409 557 cpu: [x64] 410 558 os: [linux] 411 559 412 - '@rollup/rollup-win32-arm64-msvc@4.42.0': 413 - resolution: {integrity: sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==} 560 + '@rollup/rollup-win32-arm64-msvc@4.45.3': 561 + resolution: {integrity: sha512-1YfXoUEE++gIW66zNB9Twd0Ua5xCXpfYppFUxVT/Io5ZT3fO6Se+C/Jvmh3usaIHHyi53t3kpfjydO2GAy5eBA==} 414 562 cpu: [arm64] 415 563 os: [win32] 416 564 417 - '@rollup/rollup-win32-ia32-msvc@4.42.0': 418 - resolution: {integrity: sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==} 565 + '@rollup/rollup-win32-ia32-msvc@4.45.3': 566 + resolution: {integrity: sha512-Iok2YA3PvC163rVZf2Zy81A0g88IUcSPeU5pOilcbICXre2EP1mxn1Db/l09Z/SK1vdSLtpJXAnwGuMOyf5O9g==} 419 567 cpu: [ia32] 420 568 os: [win32] 421 569 422 - '@rollup/rollup-win32-x64-msvc@4.42.0': 423 - resolution: {integrity: sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==} 570 + '@rollup/rollup-win32-x64-msvc@4.45.3': 571 + resolution: {integrity: sha512-HwHCH5GQTOeGYP5wBEBXFVhfQecwRl24Rugoqhh8YwGarsU09bHhOKuqlyW4ZolZCan3eTUax7UJbGSmKSM51A==} 424 572 cpu: [x64] 425 573 os: [win32] 426 574 427 - '@shikijs/core@3.6.0': 428 - resolution: {integrity: sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==} 575 + '@shikijs/core@3.8.1': 576 + resolution: {integrity: sha512-uTSXzUBQ/IgFcUa6gmGShCHr4tMdR3pxUiiWKDm8pd42UKJdYhkAYsAmHX5mTwybQ5VyGDgTjW4qKSsRvGSang==} 429 577 430 - '@shikijs/engine-javascript@3.6.0': 431 - resolution: {integrity: sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==} 578 + '@shikijs/engine-javascript@3.8.1': 579 + resolution: {integrity: sha512-rZRp3BM1llrHkuBPAdYAzjlF7OqlM0rm/7EWASeCcY7cRYZIrOnGIHE9qsLz5TCjGefxBFnwgIECzBs2vmOyKA==} 432 580 433 - '@shikijs/engine-oniguruma@3.6.0': 434 - resolution: {integrity: sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==} 581 + '@shikijs/engine-oniguruma@3.8.1': 582 + resolution: {integrity: sha512-KGQJZHlNY7c656qPFEQpIoqOuC4LrxjyNndRdzk5WKB/Ie87+NJCF1xo9KkOUxwxylk7rT6nhlZyTGTC4fCe1g==} 435 583 436 - '@shikijs/langs@3.6.0': 437 - resolution: {integrity: sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==} 584 + '@shikijs/langs@3.8.1': 585 + resolution: {integrity: sha512-TjOFg2Wp1w07oKnXjs0AUMb4kJvujML+fJ1C5cmEj45lhjbUXtziT1x2bPQb9Db6kmPhkG5NI2tgYW1/DzhUuQ==} 438 586 439 - '@shikijs/themes@3.6.0': 440 - resolution: {integrity: sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==} 587 + '@shikijs/themes@3.8.1': 588 + resolution: {integrity: sha512-Vu3t3BBLifc0GB0UPg2Pox1naTemrrvyZv2lkiSw3QayVV60me1ujFQwPZGgUTmwXl1yhCPW8Lieesm0CYruLQ==} 441 589 442 - '@shikijs/types@3.6.0': 443 - resolution: {integrity: sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==} 590 + '@shikijs/types@3.8.1': 591 + resolution: {integrity: sha512-5C39Q8/8r1I26suLh+5TPk1DTrbY/kn3IdWA5HdizR0FhlhD05zx5nKCqhzSfDHH3p4S0ZefxWd77DLV+8FhGg==} 444 592 445 593 '@shikijs/vscode-textmate@10.0.2': 446 594 resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} ··· 451 599 '@types/debug@4.1.12': 452 600 resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} 453 601 454 - '@types/estree@1.0.7': 455 - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 456 - 457 602 '@types/estree@1.0.8': 458 603 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 459 604 ··· 463 608 '@types/hast@3.0.4': 464 609 resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 465 610 611 + '@types/json-schema@7.0.15': 612 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 613 + 466 614 '@types/mdast@4.0.4': 467 615 resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 468 616 ··· 472 620 '@types/nlcst@2.0.3': 473 621 resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} 474 622 475 - '@types/node@22.15.30': 476 - resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==} 623 + '@types/node@24.1.0': 624 + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} 477 625 478 626 '@types/unist@3.0.3': 479 627 resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 480 628 629 + '@typescript-eslint/eslint-plugin@8.38.0': 630 + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} 631 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 632 + peerDependencies: 633 + '@typescript-eslint/parser': ^8.38.0 634 + eslint: ^8.57.0 || ^9.0.0 635 + typescript: '>=4.8.4 <5.9.0' 636 + 637 + '@typescript-eslint/parser@8.38.0': 638 + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} 639 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 640 + peerDependencies: 641 + eslint: ^8.57.0 || ^9.0.0 642 + typescript: '>=4.8.4 <5.9.0' 643 + 644 + '@typescript-eslint/project-service@8.38.0': 645 + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} 646 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 647 + peerDependencies: 648 + typescript: '>=4.8.4 <5.9.0' 649 + 650 + '@typescript-eslint/scope-manager@8.38.0': 651 + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} 652 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 653 + 654 + '@typescript-eslint/tsconfig-utils@8.38.0': 655 + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} 656 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 657 + peerDependencies: 658 + typescript: '>=4.8.4 <5.9.0' 659 + 660 + '@typescript-eslint/type-utils@8.38.0': 661 + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} 662 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 663 + peerDependencies: 664 + eslint: ^8.57.0 || ^9.0.0 665 + typescript: '>=4.8.4 <5.9.0' 666 + 667 + '@typescript-eslint/types@8.38.0': 668 + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} 669 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 670 + 671 + '@typescript-eslint/typescript-estree@8.38.0': 672 + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} 673 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 674 + peerDependencies: 675 + typescript: '>=4.8.4 <5.9.0' 676 + 677 + '@typescript-eslint/utils@8.38.0': 678 + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} 679 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 680 + peerDependencies: 681 + eslint: ^8.57.0 || ^9.0.0 682 + typescript: '>=4.8.4 <5.9.0' 683 + 684 + '@typescript-eslint/visitor-keys@8.38.0': 685 + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} 686 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 687 + 481 688 '@ungap/structured-clone@1.3.0': 482 689 resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 483 690 691 + acorn-jsx@5.3.2: 692 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 693 + peerDependencies: 694 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 695 + 484 696 acorn@8.15.0: 485 697 resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 486 698 engines: {node: '>=0.4.0'} 487 699 hasBin: true 488 700 701 + ajv@6.12.6: 702 + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 703 + 489 704 ansi-align@3.0.1: 490 705 resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 491 706 ··· 496 711 ansi-regex@6.1.0: 497 712 resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 498 713 engines: {node: '>=12'} 714 + 715 + ansi-styles@4.3.0: 716 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 717 + engines: {node: '>=8'} 499 718 500 719 ansi-styles@6.2.1: 501 720 resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} ··· 515 734 array-iterate@2.0.1: 516 735 resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} 517 736 518 - astro@5.9.1: 519 - resolution: {integrity: sha512-wxoJcTbuDZNFSv6EaL0PAlrp0Wx6VnOAULCXvy0scsV70oWMeUkdxuBxfO54JxO5Qgyvwj9h99y6E0elqOpGtA==} 737 + astro-eslint-parser@1.2.2: 738 + resolution: {integrity: sha512-JepyLROIad6f44uyqMF6HKE2QbunNzp3mYKRcPoDGt0QkxXmH222FAFC64WTyQu2Kg8NNEXHTN/sWuUId9sSxw==} 739 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 740 + 741 + astro@5.12.3: 742 + resolution: {integrity: sha512-fU1hNPMkccm+FuonGsY5DFkC2QyuLCju++8L2ubzBtYBDBf6bmfgmVM7A2dK+Hl+ZJCUNgepsClhBpczj+2LRw==} 520 743 engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} 521 744 hasBin: true 522 745 746 + astrojs-compiler-sync@1.1.1: 747 + resolution: {integrity: sha512-0mKvB9sDQRIZPsEJadw6OaFbGJ92cJPPR++ICca9XEyiUAZqgVuk25jNmzHPT0KF80rI94trSZrUR5iHFXGGOQ==} 748 + engines: {node: ^18.18.0 || >=20.9.0} 749 + peerDependencies: 750 + '@astrojs/compiler': '>=0.27.0' 751 + 523 752 axobject-query@4.1.0: 524 753 resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 525 754 engines: {node: '>= 0.4'} ··· 527 756 bail@2.0.2: 528 757 resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} 529 758 759 + balanced-match@1.0.2: 760 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 761 + 530 762 base-64@1.0.0: 531 763 resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} 532 764 ··· 540 772 resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} 541 773 engines: {node: '>=18'} 542 774 775 + brace-expansion@1.1.12: 776 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 777 + 778 + brace-expansion@2.0.2: 779 + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 780 + 781 + braces@3.0.3: 782 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 783 + engines: {node: '>=8'} 784 + 543 785 brotli@1.3.3: 544 786 resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} 787 + 788 + callsites@3.1.0: 789 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 790 + engines: {node: '>=6'} 545 791 546 792 camelcase@8.0.0: 547 793 resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} ··· 550 796 ccount@2.0.1: 551 797 resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 552 798 799 + chalk@4.1.2: 800 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 801 + engines: {node: '>=10'} 802 + 553 803 chalk@5.4.1: 554 804 resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} 555 805 engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} ··· 567 817 resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 568 818 engines: {node: '>= 14.16.0'} 569 819 570 - ci-info@4.2.0: 571 - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} 820 + ci-info@4.3.0: 821 + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} 572 822 engines: {node: '>=8'} 573 823 574 824 cli-boxes@3.0.0: ··· 603 853 common-ancestor-path@1.0.1: 604 854 resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} 605 855 856 + concat-map@0.0.1: 857 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 858 + 606 859 cookie-es@1.2.2: 607 860 resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} 608 861 ··· 612 865 613 866 cross-fetch@3.2.0: 614 867 resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} 868 + 869 + cross-spawn@7.0.6: 870 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 871 + engines: {node: '>= 8'} 615 872 616 873 crossws@0.3.5: 617 874 resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} ··· 634 891 supports-color: 635 892 optional: true 636 893 637 - decode-named-character-reference@1.1.0: 638 - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} 894 + decode-named-character-reference@1.2.0: 895 + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} 896 + 897 + deep-is@0.1.4: 898 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 639 899 640 900 defu@6.1.4: 641 901 resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} ··· 688 948 es-module-lexer@1.7.0: 689 949 resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 690 950 691 - esbuild@0.25.5: 692 - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} 951 + esbuild@0.25.8: 952 + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} 693 953 engines: {node: '>=18'} 694 954 hasBin: true 695 955 956 + escape-string-regexp@4.0.0: 957 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 958 + engines: {node: '>=10'} 959 + 696 960 escape-string-regexp@5.0.0: 697 961 resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 698 962 engines: {node: '>=12'} 699 963 964 + eslint-compat-utils@0.6.5: 965 + resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==} 966 + engines: {node: '>=12'} 967 + peerDependencies: 968 + eslint: '>=6.0.0' 969 + 970 + eslint-config-prettier@10.1.8: 971 + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} 972 + hasBin: true 973 + peerDependencies: 974 + eslint: '>=7.0.0' 975 + 976 + eslint-plugin-astro@1.3.1: 977 + resolution: {integrity: sha512-2XaLCMQm8htW1UvJvy1Zcmg8l0ziskitiUfJTn/w1Mk7r4Mxj0fZeNpN6UTNrm64XBIXSa5h8UCGrg8mdu47+g==} 978 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 979 + peerDependencies: 980 + eslint: '>=8.57.0' 981 + 982 + eslint-plugin-prettier@5.5.3: 983 + resolution: {integrity: sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==} 984 + engines: {node: ^14.18.0 || >=16.0.0} 985 + peerDependencies: 986 + '@types/eslint': '>=8.0.0' 987 + eslint: '>=8.0.0' 988 + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' 989 + prettier: '>=3.0.0' 990 + peerDependenciesMeta: 991 + '@types/eslint': 992 + optional: true 993 + eslint-config-prettier: 994 + optional: true 995 + 996 + eslint-scope@8.4.0: 997 + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 998 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 999 + 1000 + eslint-visitor-keys@3.4.3: 1001 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1002 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1003 + 1004 + eslint-visitor-keys@4.2.1: 1005 + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 1006 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1007 + 1008 + eslint@9.32.0: 1009 + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} 1010 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1011 + hasBin: true 1012 + peerDependencies: 1013 + jiti: '*' 1014 + peerDependenciesMeta: 1015 + jiti: 1016 + optional: true 1017 + 1018 + esm-env@1.2.2: 1019 + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 1020 + 1021 + espree@10.4.0: 1022 + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 1023 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1024 + 1025 + esquery@1.6.0: 1026 + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1027 + engines: {node: '>=0.10'} 1028 + 1029 + esrecurse@4.3.0: 1030 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1031 + engines: {node: '>=4.0'} 1032 + 1033 + estraverse@5.3.0: 1034 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1035 + engines: {node: '>=4.0'} 1036 + 700 1037 estree-walker@2.0.2: 701 1038 resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 702 1039 703 1040 estree-walker@3.0.3: 704 1041 resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 705 1042 1043 + esutils@2.0.3: 1044 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1045 + engines: {node: '>=0.10.0'} 1046 + 706 1047 eventemitter3@5.0.1: 707 1048 resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 708 1049 ··· 712 1053 fast-deep-equal@3.1.3: 713 1054 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 714 1055 715 - fdir@6.4.5: 716 - resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} 1056 + fast-diff@1.3.0: 1057 + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1058 + 1059 + fast-glob@3.3.3: 1060 + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1061 + engines: {node: '>=8.6.0'} 1062 + 1063 + fast-json-stable-stringify@2.1.0: 1064 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1065 + 1066 + fast-levenshtein@2.0.6: 1067 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1068 + 1069 + fastq@1.19.1: 1070 + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1071 + 1072 + fdir@6.4.6: 1073 + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} 717 1074 peerDependencies: 718 1075 picomatch: ^3 || ^4 719 1076 peerDependenciesMeta: 720 1077 picomatch: 721 1078 optional: true 722 1079 1080 + file-entry-cache@8.0.0: 1081 + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1082 + engines: {node: '>=16.0.0'} 1083 + 1084 + fill-range@7.1.1: 1085 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1086 + engines: {node: '>=8'} 1087 + 1088 + find-up@5.0.0: 1089 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1090 + engines: {node: '>=10'} 1091 + 1092 + flat-cache@4.0.1: 1093 + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1094 + engines: {node: '>=16'} 1095 + 1096 + flatted@3.3.3: 1097 + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1098 + 723 1099 flattie@1.1.1: 724 1100 resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} 725 1101 engines: {node: '>=8'} ··· 742 1118 github-slugger@2.0.0: 743 1119 resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} 744 1120 1121 + glob-parent@5.1.2: 1122 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1123 + engines: {node: '>= 6'} 1124 + 1125 + glob-parent@6.0.2: 1126 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1127 + engines: {node: '>=10.13.0'} 1128 + 1129 + globals@14.0.0: 1130 + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1131 + engines: {node: '>=18'} 1132 + 1133 + globals@15.15.0: 1134 + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} 1135 + engines: {node: '>=18'} 1136 + 1137 + globals@16.3.0: 1138 + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} 1139 + engines: {node: '>=18'} 1140 + 1141 + graphemer@1.4.0: 1142 + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1143 + 745 1144 h3@1.15.3: 746 1145 resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} 1146 + 1147 + has-flag@4.0.0: 1148 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1149 + engines: {node: '>=8'} 747 1150 748 1151 hast-util-from-html@2.0.3: 749 1152 resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} ··· 784 1187 http-cache-semantics@4.2.0: 785 1188 resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} 786 1189 1190 + ignore@5.3.2: 1191 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1192 + engines: {node: '>= 4'} 1193 + 1194 + ignore@7.0.5: 1195 + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} 1196 + engines: {node: '>= 4'} 1197 + 1198 + import-fresh@3.3.1: 1199 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1200 + engines: {node: '>=6'} 1201 + 787 1202 import-meta-resolve@4.1.0: 788 1203 resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 789 1204 1205 + imurmurhash@0.1.4: 1206 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1207 + engines: {node: '>=0.8.19'} 1208 + 790 1209 iron-webcrypto@1.2.1: 791 1210 resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} 792 1211 ··· 798 1217 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 799 1218 hasBin: true 800 1219 1220 + is-extglob@2.1.1: 1221 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1222 + engines: {node: '>=0.10.0'} 1223 + 801 1224 is-fullwidth-code-point@3.0.0: 802 1225 resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 803 1226 engines: {node: '>=8'} 804 1227 1228 + is-glob@4.0.3: 1229 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1230 + engines: {node: '>=0.10.0'} 1231 + 805 1232 is-inside-container@1.0.0: 806 1233 resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 807 1234 engines: {node: '>=14.16'} 808 1235 hasBin: true 809 1236 1237 + is-number@7.0.0: 1238 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1239 + engines: {node: '>=0.12.0'} 1240 + 810 1241 is-plain-obj@4.1.0: 811 1242 resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 812 1243 engines: {node: '>=12'} ··· 815 1246 resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} 816 1247 engines: {node: '>=16'} 817 1248 1249 + isexe@2.0.0: 1250 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1251 + 1252 + jiti@2.5.1: 1253 + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} 1254 + hasBin: true 1255 + 818 1256 js-yaml@4.1.0: 819 1257 resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 820 1258 hasBin: true 821 1259 1260 + json-buffer@3.0.1: 1261 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1262 + 1263 + json-schema-traverse@0.4.1: 1264 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1265 + 1266 + json-stable-stringify-without-jsonify@1.0.1: 1267 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1268 + 1269 + keyv@4.5.4: 1270 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1271 + 822 1272 kleur@3.0.3: 823 1273 resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 824 1274 engines: {node: '>=6'} ··· 827 1277 resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 828 1278 engines: {node: '>=6'} 829 1279 1280 + levn@0.4.1: 1281 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1282 + engines: {node: '>= 0.8.0'} 1283 + 1284 + locate-path@6.0.0: 1285 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1286 + engines: {node: '>=10'} 1287 + 1288 + lodash.merge@4.6.2: 1289 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1290 + 830 1291 longest-streak@3.1.0: 831 1292 resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} 832 1293 ··· 883 1344 884 1345 mdn-data@2.12.2: 885 1346 resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} 1347 + 1348 + merge2@1.4.1: 1349 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1350 + engines: {node: '>= 8'} 886 1351 887 1352 micromark-core-commonmark@2.0.3: 888 1353 resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} ··· 968 1433 micromark@4.0.2: 969 1434 resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} 970 1435 1436 + micromatch@4.0.8: 1437 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1438 + engines: {node: '>=8.6'} 1439 + 1440 + minimatch@3.1.2: 1441 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1442 + 1443 + minimatch@9.0.5: 1444 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1445 + engines: {node: '>=16 || 14 >=14.17'} 1446 + 971 1447 mrmime@2.0.1: 972 1448 resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 973 1449 engines: {node: '>=10'} ··· 980 1456 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 981 1457 hasBin: true 982 1458 1459 + nanoid@5.1.5: 1460 + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} 1461 + engines: {node: ^18 || >=20} 1462 + hasBin: true 1463 + 1464 + natural-compare@1.4.0: 1465 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1466 + 983 1467 neotraverse@0.6.18: 984 1468 resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} 985 1469 engines: {node: '>= 10'} ··· 999 1483 encoding: 1000 1484 optional: true 1001 1485 1002 - node-mock-http@1.0.0: 1003 - resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} 1486 + node-mock-http@1.0.1: 1487 + resolution: {integrity: sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==} 1004 1488 1005 1489 normalize-path@3.0.0: 1006 1490 resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} ··· 1018 1502 oniguruma-to-es@4.3.3: 1019 1503 resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} 1020 1504 1505 + optionator@0.9.4: 1506 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1507 + engines: {node: '>= 0.8.0'} 1508 + 1509 + p-limit@3.1.0: 1510 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1511 + engines: {node: '>=10'} 1512 + 1021 1513 p-limit@6.2.0: 1022 1514 resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} 1023 1515 engines: {node: '>=18'} 1516 + 1517 + p-locate@5.0.0: 1518 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1519 + engines: {node: '>=10'} 1024 1520 1025 1521 p-queue@8.1.0: 1026 1522 resolution: {integrity: sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==} ··· 1036 1532 pako@0.2.9: 1037 1533 resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} 1038 1534 1535 + parent-module@1.0.1: 1536 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1537 + engines: {node: '>=6'} 1538 + 1039 1539 parse-latin@7.0.0: 1040 1540 resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} 1041 1541 1042 1542 parse5@7.3.0: 1043 1543 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 1044 1544 1545 + path-exists@4.0.0: 1546 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1547 + engines: {node: '>=8'} 1548 + 1549 + path-key@3.1.1: 1550 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1551 + engines: {node: '>=8'} 1552 + 1045 1553 picocolors@1.1.1: 1046 1554 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1047 1555 ··· 1049 1557 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1050 1558 engines: {node: '>=8.6'} 1051 1559 1052 - picomatch@4.0.2: 1053 - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1560 + picomatch@4.0.3: 1561 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1054 1562 engines: {node: '>=12'} 1055 1563 1056 - postcss@8.5.4: 1057 - resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} 1564 + postcss-selector-parser@7.1.0: 1565 + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} 1566 + engines: {node: '>=4'} 1567 + 1568 + postcss@8.5.6: 1569 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1058 1570 engines: {node: ^10 || ^12 || >=14} 1059 1571 1572 + prelude-ls@1.2.1: 1573 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1574 + engines: {node: '>= 0.8.0'} 1575 + 1576 + prettier-linter-helpers@1.0.0: 1577 + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1578 + engines: {node: '>=6.0.0'} 1579 + 1580 + prettier-plugin-astro@0.14.1: 1581 + resolution: {integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==} 1582 + engines: {node: ^14.15.0 || >=16.0.0} 1583 + 1584 + prettier@3.6.2: 1585 + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} 1586 + engines: {node: '>=14'} 1587 + hasBin: true 1588 + 1060 1589 prismjs@1.30.0: 1061 1590 resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} 1062 1591 engines: {node: '>=6'} ··· 1071 1600 property-information@7.1.0: 1072 1601 resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 1073 1602 1603 + punycode@2.3.1: 1604 + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1605 + engines: {node: '>=6'} 1606 + 1607 + queue-microtask@1.2.3: 1608 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1609 + 1074 1610 radix3@1.1.2: 1075 1611 resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} 1076 1612 ··· 1115 1651 remark-stringify@11.0.0: 1116 1652 resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} 1117 1653 1654 + resolve-from@4.0.0: 1655 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1656 + engines: {node: '>=4'} 1657 + 1118 1658 restructure@3.0.2: 1119 1659 resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} 1120 1660 ··· 1130 1670 retext@9.0.0: 1131 1671 resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} 1132 1672 1133 - rollup@4.42.0: 1134 - resolution: {integrity: sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==} 1673 + reusify@1.1.0: 1674 + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1675 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1676 + 1677 + rollup@4.45.3: 1678 + resolution: {integrity: sha512-STwyHZF3G+CrmZhB+qDiROq9s8B5PrOCYN6dtmOvwz585XBnyeHk1GTEhHJtUVb355/9uZhOazyVclTt5uahzA==} 1135 1679 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1136 1680 hasBin: true 1137 1681 1682 + run-parallel@1.2.0: 1683 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1684 + 1685 + s.color@0.0.15: 1686 + resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} 1687 + 1688 + sass-formatter@0.7.9: 1689 + resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} 1690 + 1138 1691 semver@7.7.2: 1139 1692 resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 1140 1693 engines: {node: '>=10'} ··· 1144 1697 resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 1145 1698 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1146 1699 1147 - shiki@3.6.0: 1148 - resolution: {integrity: sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==} 1700 + shebang-command@2.0.0: 1701 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1702 + engines: {node: '>=8'} 1703 + 1704 + shebang-regex@3.0.0: 1705 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1706 + engines: {node: '>=8'} 1707 + 1708 + shiki@3.8.1: 1709 + resolution: {integrity: sha512-+MYIyjwGPCaegbpBeFN9+oOifI8CKiKG3awI/6h3JeT85c//H2wDW/xCJEGuQ5jPqtbboKNqNy+JyX9PYpGwNg==} 1149 1710 1150 1711 simple-swizzle@0.2.2: 1151 1712 resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} ··· 1153 1714 sisteransi@1.0.5: 1154 1715 resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1155 1716 1156 - smol-toml@1.3.4: 1157 - resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==} 1717 + smol-toml@1.4.1: 1718 + resolution: {integrity: sha512-CxdwHXyYTONGHThDbq5XdwbFsuY4wlClRGejfE2NtwUtiHYsP1QtNsHb/hnj31jKYSchztJsaA8pSQoVzkfCFg==} 1158 1719 engines: {node: '>= 18'} 1159 1720 1160 1721 source-map-js@1.2.1: ··· 1183 1744 resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1184 1745 engines: {node: '>=12'} 1185 1746 1747 + strip-json-comments@3.1.1: 1748 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1749 + engines: {node: '>=8'} 1750 + 1751 + suf-log@2.5.3: 1752 + resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} 1753 + 1754 + supports-color@7.2.0: 1755 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1756 + engines: {node: '>=8'} 1757 + 1758 + synckit@0.11.11: 1759 + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} 1760 + engines: {node: ^14.18.0 || >=16.0.0} 1761 + 1186 1762 tiny-inflate@1.0.3: 1187 1763 resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} 1188 1764 ··· 1193 1769 resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} 1194 1770 engines: {node: '>=12.0.0'} 1195 1771 1772 + to-regex-range@5.0.1: 1773 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1774 + engines: {node: '>=8.0'} 1775 + 1196 1776 tr46@0.0.3: 1197 1777 resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1198 1778 ··· 1202 1782 trough@2.2.0: 1203 1783 resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} 1204 1784 1785 + ts-api-utils@2.1.0: 1786 + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1787 + engines: {node: '>=18.12'} 1788 + peerDependencies: 1789 + typescript: '>=4.8.4' 1790 + 1205 1791 tsconfck@3.1.6: 1206 1792 resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} 1207 1793 engines: {node: ^18 || >=20} ··· 1215 1801 tslib@2.8.1: 1216 1802 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1217 1803 1804 + type-check@0.4.0: 1805 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1806 + engines: {node: '>= 0.8.0'} 1807 + 1218 1808 type-fest@4.41.0: 1219 1809 resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} 1220 1810 engines: {node: '>=16'} 1221 1811 1812 + typescript-eslint@8.38.0: 1813 + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} 1814 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1815 + peerDependencies: 1816 + eslint: ^8.57.0 || ^9.0.0 1817 + typescript: '>=4.8.4 <5.9.0' 1818 + 1222 1819 typescript@5.8.3: 1223 1820 resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1224 1821 engines: {node: '>=14.17'} ··· 1233 1830 uncrypto@0.1.3: 1234 1831 resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} 1235 1832 1236 - undici-types@6.21.0: 1237 - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1833 + undici-types@7.8.0: 1834 + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} 1238 1835 1239 1836 unicode-properties@1.4.1: 1240 1837 resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} ··· 1245 1842 unified@11.0.5: 1246 1843 resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} 1247 1844 1248 - unifont@0.5.0: 1249 - resolution: {integrity: sha512-4DueXMP5Hy4n607sh+vJ+rajoLu778aU3GzqeTCqsD/EaUcvqZT9wPC8kgK6Vjh22ZskrxyRCR71FwNOaYn6jA==} 1845 + unifont@0.5.2: 1846 + resolution: {integrity: sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==} 1250 1847 1251 1848 unist-util-find-after@5.0.0: 1252 1849 resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} ··· 1275 1872 unist-util-visit@5.0.0: 1276 1873 resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 1277 1874 1278 - unstorage@1.16.0: 1279 - resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} 1875 + unstorage@1.16.1: 1876 + resolution: {integrity: sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==} 1280 1877 peerDependencies: 1281 1878 '@azure/app-configuration': ^1.8.0 1282 1879 '@azure/cosmos': ^4.2.0 ··· 1286 1883 '@azure/storage-blob': ^12.26.0 1287 1884 '@capacitor/preferences': ^6.0.3 || ^7.0.0 1288 1885 '@deno/kv': '>=0.9.0' 1289 - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 1886 + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 1290 1887 '@planetscale/database': ^1.19.0 1291 1888 '@upstash/redis': ^1.34.3 1292 1889 '@vercel/blob': '>=0.27.1' ··· 1334 1931 uploadthing: 1335 1932 optional: true 1336 1933 1934 + uri-js@4.4.1: 1935 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1936 + 1937 + util-deprecate@1.0.2: 1938 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1939 + 1337 1940 vfile-location@5.0.3: 1338 1941 resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} 1339 1942 1340 - vfile-message@4.0.2: 1341 - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 1943 + vfile-message@4.0.3: 1944 + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} 1342 1945 1343 1946 vfile@6.0.3: 1344 1947 resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} ··· 1383 1986 yaml: 1384 1987 optional: true 1385 1988 1386 - vitefu@1.0.6: 1387 - resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} 1989 + vitefu@1.1.1: 1990 + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} 1388 1991 peerDependencies: 1389 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 1992 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 1390 1993 peerDependenciesMeta: 1391 1994 vite: 1392 1995 optional: true ··· 1404 2007 resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} 1405 2008 engines: {node: '>=4'} 1406 2009 2010 + which@2.0.2: 2011 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2012 + engines: {node: '>= 8'} 2013 + hasBin: true 2014 + 1407 2015 widest-line@5.0.0: 1408 2016 resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} 1409 2017 engines: {node: '>=18'} 1410 2018 2019 + word-wrap@1.2.5: 2020 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2021 + engines: {node: '>=0.10.0'} 2022 + 1411 2023 wrap-ansi@9.0.0: 1412 2024 resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1413 2025 engines: {node: '>=18'} ··· 1419 2031 resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1420 2032 engines: {node: '>=12'} 1421 2033 2034 + yocto-queue@0.1.0: 2035 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2036 + engines: {node: '>=10'} 2037 + 1422 2038 yocto-queue@1.2.1: 1423 2039 resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} 1424 2040 engines: {node: '>=12.20'} ··· 1431 2047 resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} 1432 2048 engines: {node: '>=18'} 1433 2049 1434 - zod-to-json-schema@3.24.5: 1435 - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} 2050 + zod-to-json-schema@3.24.6: 2051 + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} 1436 2052 peerDependencies: 1437 2053 zod: ^3.24.1 1438 2054 ··· 1442 2058 typescript: ^4.9.4 || ^5.0.2 1443 2059 zod: ^3 1444 2060 1445 - zod@3.25.56: 1446 - resolution: {integrity: sha512-rd6eEF3BTNvQnR2e2wwolfTmUTnp70aUTqr0oaGbHifzC3BKJsoV+Gat8vxUMR1hwOKBs6El+qWehrHbCpW6SQ==} 2061 + zod@3.25.76: 2062 + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 1447 2063 1448 2064 zwitch@2.0.4: 1449 2065 resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 1450 2066 1451 2067 snapshots: 1452 2068 1453 - '@astrojs/compiler@2.12.1': {} 2069 + '@astrojs/compiler@2.12.2': {} 1454 2070 1455 2071 '@astrojs/internal-helpers@0.6.1': {} 1456 2072 1457 - '@astrojs/markdown-remark@6.3.2': 2073 + '@astrojs/markdown-remark@6.3.3': 1458 2074 dependencies: 1459 2075 '@astrojs/internal-helpers': 0.6.1 1460 2076 '@astrojs/prism': 3.3.0 ··· 1470 2086 remark-parse: 11.0.0 1471 2087 remark-rehype: 11.1.2 1472 2088 remark-smartypants: 3.0.2 1473 - shiki: 3.6.0 1474 - smol-toml: 1.3.4 2089 + shiki: 3.8.1 2090 + smol-toml: 1.4.1 1475 2091 unified: 11.0.5 1476 2092 unist-util-remove-position: 5.0.0 1477 2093 unist-util-visit: 5.0.0 ··· 1486 2102 1487 2103 '@astrojs/telemetry@3.3.0': 1488 2104 dependencies: 1489 - ci-info: 4.2.0 2105 + ci-info: 4.3.0 1490 2106 debug: 4.4.1 1491 2107 dlv: 1.1.3 1492 2108 dset: 3.1.4 ··· 1496 2112 transitivePeerDependencies: 1497 2113 - supports-color 1498 2114 2115 + '@atcute/client@4.0.3': 2116 + dependencies: 2117 + '@atcute/identity': 1.0.3 2118 + '@atcute/lexicons': 1.1.0 2119 + 2120 + '@atcute/identity@1.0.3': 2121 + dependencies: 2122 + '@atcute/lexicons': 1.1.0 2123 + '@badrap/valita': 0.4.5 2124 + 2125 + '@atcute/lexicons@1.1.0': 2126 + dependencies: 2127 + esm-env: 1.2.2 2128 + 2129 + '@atcute/multibase@1.1.4': 2130 + dependencies: 2131 + '@atcute/uint8array': 1.0.3 2132 + 2133 + '@atcute/oauth-browser-client@1.0.26': 2134 + dependencies: 2135 + '@atcute/client': 4.0.3 2136 + '@atcute/identity': 1.0.3 2137 + '@atcute/lexicons': 1.1.0 2138 + '@atcute/multibase': 1.1.4 2139 + '@atcute/uint8array': 1.0.3 2140 + nanoid: 5.1.5 2141 + 2142 + '@atcute/uint8array@1.0.3': {} 2143 + 1499 2144 '@babel/helper-string-parser@7.27.1': {} 1500 2145 1501 2146 '@babel/helper-validator-identifier@7.27.1': {} 1502 2147 1503 - '@babel/parser@7.27.5': 2148 + '@babel/parser@7.28.0': 1504 2149 dependencies: 1505 - '@babel/types': 7.27.6 2150 + '@babel/types': 7.28.2 1506 2151 1507 - '@babel/types@7.27.6': 2152 + '@babel/types@7.28.2': 1508 2153 dependencies: 1509 2154 '@babel/helper-string-parser': 7.27.1 1510 2155 '@babel/helper-validator-identifier': 7.27.1 2156 + 2157 + '@badrap/valita@0.4.5': {} 1511 2158 1512 2159 '@capsizecss/unpack@2.4.0': 1513 2160 dependencies: ··· 1517 2164 transitivePeerDependencies: 1518 2165 - encoding 1519 2166 1520 - '@emnapi/runtime@1.4.3': 2167 + '@emnapi/runtime@1.4.5': 1521 2168 dependencies: 1522 2169 tslib: 2.8.1 1523 2170 optional: true 1524 2171 1525 - '@esbuild/aix-ppc64@0.25.5': 2172 + '@esbuild/aix-ppc64@0.25.8': 2173 + optional: true 2174 + 2175 + '@esbuild/android-arm64@0.25.8': 1526 2176 optional: true 1527 2177 1528 - '@esbuild/android-arm64@0.25.5': 2178 + '@esbuild/android-arm@0.25.8': 1529 2179 optional: true 1530 2180 1531 - '@esbuild/android-arm@0.25.5': 2181 + '@esbuild/android-x64@0.25.8': 1532 2182 optional: true 1533 2183 1534 - '@esbuild/android-x64@0.25.5': 2184 + '@esbuild/darwin-arm64@0.25.8': 1535 2185 optional: true 1536 2186 1537 - '@esbuild/darwin-arm64@0.25.5': 2187 + '@esbuild/darwin-x64@0.25.8': 1538 2188 optional: true 1539 2189 1540 - '@esbuild/darwin-x64@0.25.5': 2190 + '@esbuild/freebsd-arm64@0.25.8': 1541 2191 optional: true 1542 2192 1543 - '@esbuild/freebsd-arm64@0.25.5': 2193 + '@esbuild/freebsd-x64@0.25.8': 1544 2194 optional: true 1545 2195 1546 - '@esbuild/freebsd-x64@0.25.5': 2196 + '@esbuild/linux-arm64@0.25.8': 1547 2197 optional: true 1548 2198 1549 - '@esbuild/linux-arm64@0.25.5': 2199 + '@esbuild/linux-arm@0.25.8': 1550 2200 optional: true 1551 2201 1552 - '@esbuild/linux-arm@0.25.5': 2202 + '@esbuild/linux-ia32@0.25.8': 1553 2203 optional: true 1554 2204 1555 - '@esbuild/linux-ia32@0.25.5': 2205 + '@esbuild/linux-loong64@0.25.8': 1556 2206 optional: true 1557 2207 1558 - '@esbuild/linux-loong64@0.25.5': 2208 + '@esbuild/linux-mips64el@0.25.8': 1559 2209 optional: true 1560 2210 1561 - '@esbuild/linux-mips64el@0.25.5': 2211 + '@esbuild/linux-ppc64@0.25.8': 1562 2212 optional: true 1563 2213 1564 - '@esbuild/linux-ppc64@0.25.5': 2214 + '@esbuild/linux-riscv64@0.25.8': 1565 2215 optional: true 1566 2216 1567 - '@esbuild/linux-riscv64@0.25.5': 2217 + '@esbuild/linux-s390x@0.25.8': 1568 2218 optional: true 1569 2219 1570 - '@esbuild/linux-s390x@0.25.5': 2220 + '@esbuild/linux-x64@0.25.8': 1571 2221 optional: true 1572 2222 1573 - '@esbuild/linux-x64@0.25.5': 2223 + '@esbuild/netbsd-arm64@0.25.8': 1574 2224 optional: true 1575 2225 1576 - '@esbuild/netbsd-arm64@0.25.5': 2226 + '@esbuild/netbsd-x64@0.25.8': 1577 2227 optional: true 1578 2228 1579 - '@esbuild/netbsd-x64@0.25.5': 2229 + '@esbuild/openbsd-arm64@0.25.8': 1580 2230 optional: true 1581 2231 1582 - '@esbuild/openbsd-arm64@0.25.5': 2232 + '@esbuild/openbsd-x64@0.25.8': 1583 2233 optional: true 1584 2234 1585 - '@esbuild/openbsd-x64@0.25.5': 2235 + '@esbuild/openharmony-arm64@0.25.8': 1586 2236 optional: true 1587 2237 1588 - '@esbuild/sunos-x64@0.25.5': 2238 + '@esbuild/sunos-x64@0.25.8': 1589 2239 optional: true 1590 2240 1591 - '@esbuild/win32-arm64@0.25.5': 2241 + '@esbuild/win32-arm64@0.25.8': 1592 2242 optional: true 1593 2243 1594 - '@esbuild/win32-ia32@0.25.5': 2244 + '@esbuild/win32-ia32@0.25.8': 1595 2245 optional: true 1596 2246 1597 - '@esbuild/win32-x64@0.25.5': 2247 + '@esbuild/win32-x64@0.25.8': 1598 2248 optional: true 1599 2249 2250 + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.5.1))': 2251 + dependencies: 2252 + eslint: 9.32.0(jiti@2.5.1) 2253 + eslint-visitor-keys: 3.4.3 2254 + 2255 + '@eslint-community/regexpp@4.12.1': {} 2256 + 2257 + '@eslint/config-array@0.21.0': 2258 + dependencies: 2259 + '@eslint/object-schema': 2.1.6 2260 + debug: 4.4.1 2261 + minimatch: 3.1.2 2262 + transitivePeerDependencies: 2263 + - supports-color 2264 + 2265 + '@eslint/config-helpers@0.3.0': {} 2266 + 2267 + '@eslint/core@0.15.1': 2268 + dependencies: 2269 + '@types/json-schema': 7.0.15 2270 + 2271 + '@eslint/eslintrc@3.3.1': 2272 + dependencies: 2273 + ajv: 6.12.6 2274 + debug: 4.4.1 2275 + espree: 10.4.0 2276 + globals: 14.0.0 2277 + ignore: 5.3.2 2278 + import-fresh: 3.3.1 2279 + js-yaml: 4.1.0 2280 + minimatch: 3.1.2 2281 + strip-json-comments: 3.1.1 2282 + transitivePeerDependencies: 2283 + - supports-color 2284 + 2285 + '@eslint/js@9.32.0': {} 2286 + 2287 + '@eslint/object-schema@2.1.6': {} 2288 + 2289 + '@eslint/plugin-kit@0.3.4': 2290 + dependencies: 2291 + '@eslint/core': 0.15.1 2292 + levn: 0.4.1 2293 + 2294 + '@humanfs/core@0.19.1': {} 2295 + 2296 + '@humanfs/node@0.16.6': 2297 + dependencies: 2298 + '@humanfs/core': 0.19.1 2299 + '@humanwhocodes/retry': 0.3.1 2300 + 2301 + '@humanwhocodes/module-importer@1.0.1': {} 2302 + 2303 + '@humanwhocodes/retry@0.3.1': {} 2304 + 2305 + '@humanwhocodes/retry@0.4.3': {} 2306 + 1600 2307 '@img/sharp-darwin-arm64@0.33.5': 1601 2308 optionalDependencies: 1602 2309 '@img/sharp-libvips-darwin-arm64': 1.0.4 ··· 1663 2370 1664 2371 '@img/sharp-wasm32@0.33.5': 1665 2372 dependencies: 1666 - '@emnapi/runtime': 1.4.3 2373 + '@emnapi/runtime': 1.4.5 1667 2374 optional: true 1668 2375 1669 2376 '@img/sharp-win32-ia32@0.33.5': ··· 1672 2379 '@img/sharp-win32-x64@0.33.5': 1673 2380 optional: true 1674 2381 1675 - '@jridgewell/sourcemap-codec@1.5.0': {} 2382 + '@jridgewell/sourcemap-codec@1.5.4': {} 2383 + 2384 + '@nodelib/fs.scandir@2.1.5': 2385 + dependencies: 2386 + '@nodelib/fs.stat': 2.0.5 2387 + run-parallel: 1.2.0 2388 + 2389 + '@nodelib/fs.stat@2.0.5': {} 2390 + 2391 + '@nodelib/fs.walk@1.2.8': 2392 + dependencies: 2393 + '@nodelib/fs.scandir': 2.1.5 2394 + fastq: 1.19.1 1676 2395 1677 2396 '@oslojs/encoding@1.1.0': {} 1678 2397 1679 - '@rollup/pluginutils@5.1.4(rollup@4.42.0)': 2398 + '@pkgr/core@0.2.9': {} 2399 + 2400 + '@rollup/pluginutils@5.2.0(rollup@4.45.3)': 1680 2401 dependencies: 1681 2402 '@types/estree': 1.0.8 1682 2403 estree-walker: 2.0.2 1683 - picomatch: 4.0.2 2404 + picomatch: 4.0.3 1684 2405 optionalDependencies: 1685 - rollup: 4.42.0 2406 + rollup: 4.45.3 1686 2407 1687 - '@rollup/rollup-android-arm-eabi@4.42.0': 2408 + '@rollup/rollup-android-arm-eabi@4.45.3': 1688 2409 optional: true 1689 2410 1690 - '@rollup/rollup-android-arm64@4.42.0': 2411 + '@rollup/rollup-android-arm64@4.45.3': 1691 2412 optional: true 1692 2413 1693 - '@rollup/rollup-darwin-arm64@4.42.0': 2414 + '@rollup/rollup-darwin-arm64@4.45.3': 1694 2415 optional: true 1695 2416 1696 - '@rollup/rollup-darwin-x64@4.42.0': 2417 + '@rollup/rollup-darwin-x64@4.45.3': 1697 2418 optional: true 1698 2419 1699 - '@rollup/rollup-freebsd-arm64@4.42.0': 2420 + '@rollup/rollup-freebsd-arm64@4.45.3': 1700 2421 optional: true 1701 2422 1702 - '@rollup/rollup-freebsd-x64@4.42.0': 2423 + '@rollup/rollup-freebsd-x64@4.45.3': 1703 2424 optional: true 1704 2425 1705 - '@rollup/rollup-linux-arm-gnueabihf@4.42.0': 2426 + '@rollup/rollup-linux-arm-gnueabihf@4.45.3': 1706 2427 optional: true 1707 2428 1708 - '@rollup/rollup-linux-arm-musleabihf@4.42.0': 2429 + '@rollup/rollup-linux-arm-musleabihf@4.45.3': 1709 2430 optional: true 1710 2431 1711 - '@rollup/rollup-linux-arm64-gnu@4.42.0': 2432 + '@rollup/rollup-linux-arm64-gnu@4.45.3': 1712 2433 optional: true 1713 2434 1714 - '@rollup/rollup-linux-arm64-musl@4.42.0': 2435 + '@rollup/rollup-linux-arm64-musl@4.45.3': 1715 2436 optional: true 1716 2437 1717 - '@rollup/rollup-linux-loongarch64-gnu@4.42.0': 2438 + '@rollup/rollup-linux-loongarch64-gnu@4.45.3': 1718 2439 optional: true 1719 2440 1720 - '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': 2441 + '@rollup/rollup-linux-ppc64-gnu@4.45.3': 1721 2442 optional: true 1722 2443 1723 - '@rollup/rollup-linux-riscv64-gnu@4.42.0': 2444 + '@rollup/rollup-linux-riscv64-gnu@4.45.3': 1724 2445 optional: true 1725 2446 1726 - '@rollup/rollup-linux-riscv64-musl@4.42.0': 2447 + '@rollup/rollup-linux-riscv64-musl@4.45.3': 1727 2448 optional: true 1728 2449 1729 - '@rollup/rollup-linux-s390x-gnu@4.42.0': 2450 + '@rollup/rollup-linux-s390x-gnu@4.45.3': 1730 2451 optional: true 1731 2452 1732 - '@rollup/rollup-linux-x64-gnu@4.42.0': 2453 + '@rollup/rollup-linux-x64-gnu@4.45.3': 1733 2454 optional: true 1734 2455 1735 - '@rollup/rollup-linux-x64-musl@4.42.0': 2456 + '@rollup/rollup-linux-x64-musl@4.45.3': 1736 2457 optional: true 1737 2458 1738 - '@rollup/rollup-win32-arm64-msvc@4.42.0': 2459 + '@rollup/rollup-win32-arm64-msvc@4.45.3': 1739 2460 optional: true 1740 2461 1741 - '@rollup/rollup-win32-ia32-msvc@4.42.0': 2462 + '@rollup/rollup-win32-ia32-msvc@4.45.3': 1742 2463 optional: true 1743 2464 1744 - '@rollup/rollup-win32-x64-msvc@4.42.0': 2465 + '@rollup/rollup-win32-x64-msvc@4.45.3': 1745 2466 optional: true 1746 2467 1747 - '@shikijs/core@3.6.0': 2468 + '@shikijs/core@3.8.1': 1748 2469 dependencies: 1749 - '@shikijs/types': 3.6.0 2470 + '@shikijs/types': 3.8.1 1750 2471 '@shikijs/vscode-textmate': 10.0.2 1751 2472 '@types/hast': 3.0.4 1752 2473 hast-util-to-html: 9.0.5 1753 2474 1754 - '@shikijs/engine-javascript@3.6.0': 2475 + '@shikijs/engine-javascript@3.8.1': 1755 2476 dependencies: 1756 - '@shikijs/types': 3.6.0 2477 + '@shikijs/types': 3.8.1 1757 2478 '@shikijs/vscode-textmate': 10.0.2 1758 2479 oniguruma-to-es: 4.3.3 1759 2480 1760 - '@shikijs/engine-oniguruma@3.6.0': 2481 + '@shikijs/engine-oniguruma@3.8.1': 1761 2482 dependencies: 1762 - '@shikijs/types': 3.6.0 2483 + '@shikijs/types': 3.8.1 1763 2484 '@shikijs/vscode-textmate': 10.0.2 1764 2485 1765 - '@shikijs/langs@3.6.0': 2486 + '@shikijs/langs@3.8.1': 1766 2487 dependencies: 1767 - '@shikijs/types': 3.6.0 2488 + '@shikijs/types': 3.8.1 1768 2489 1769 - '@shikijs/themes@3.6.0': 2490 + '@shikijs/themes@3.8.1': 1770 2491 dependencies: 1771 - '@shikijs/types': 3.6.0 2492 + '@shikijs/types': 3.8.1 1772 2493 1773 - '@shikijs/types@3.6.0': 2494 + '@shikijs/types@3.8.1': 1774 2495 dependencies: 1775 2496 '@shikijs/vscode-textmate': 10.0.2 1776 2497 '@types/hast': 3.0.4 ··· 1785 2506 dependencies: 1786 2507 '@types/ms': 2.1.0 1787 2508 1788 - '@types/estree@1.0.7': {} 1789 - 1790 2509 '@types/estree@1.0.8': {} 1791 2510 1792 2511 '@types/fontkit@2.0.8': 1793 2512 dependencies: 1794 - '@types/node': 22.15.30 2513 + '@types/node': 24.1.0 1795 2514 1796 2515 '@types/hast@3.0.4': 1797 2516 dependencies: 1798 2517 '@types/unist': 3.0.3 1799 2518 2519 + '@types/json-schema@7.0.15': {} 2520 + 1800 2521 '@types/mdast@4.0.4': 1801 2522 dependencies: 1802 2523 '@types/unist': 3.0.3 ··· 1807 2528 dependencies: 1808 2529 '@types/unist': 3.0.3 1809 2530 1810 - '@types/node@22.15.30': 2531 + '@types/node@24.1.0': 1811 2532 dependencies: 1812 - undici-types: 6.21.0 2533 + undici-types: 7.8.0 1813 2534 1814 2535 '@types/unist@3.0.3': {} 1815 2536 2537 + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': 2538 + dependencies: 2539 + '@eslint-community/regexpp': 4.12.1 2540 + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 2541 + '@typescript-eslint/scope-manager': 8.38.0 2542 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 2543 + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 2544 + '@typescript-eslint/visitor-keys': 8.38.0 2545 + eslint: 9.32.0(jiti@2.5.1) 2546 + graphemer: 1.4.0 2547 + ignore: 7.0.5 2548 + natural-compare: 1.4.0 2549 + ts-api-utils: 2.1.0(typescript@5.8.3) 2550 + typescript: 5.8.3 2551 + transitivePeerDependencies: 2552 + - supports-color 2553 + 2554 + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': 2555 + dependencies: 2556 + '@typescript-eslint/scope-manager': 8.38.0 2557 + '@typescript-eslint/types': 8.38.0 2558 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 2559 + '@typescript-eslint/visitor-keys': 8.38.0 2560 + debug: 4.4.1 2561 + eslint: 9.32.0(jiti@2.5.1) 2562 + typescript: 5.8.3 2563 + transitivePeerDependencies: 2564 + - supports-color 2565 + 2566 + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': 2567 + dependencies: 2568 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) 2569 + '@typescript-eslint/types': 8.38.0 2570 + debug: 4.4.1 2571 + typescript: 5.8.3 2572 + transitivePeerDependencies: 2573 + - supports-color 2574 + 2575 + '@typescript-eslint/scope-manager@8.38.0': 2576 + dependencies: 2577 + '@typescript-eslint/types': 8.38.0 2578 + '@typescript-eslint/visitor-keys': 8.38.0 2579 + 2580 + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': 2581 + dependencies: 2582 + typescript: 5.8.3 2583 + 2584 + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': 2585 + dependencies: 2586 + '@typescript-eslint/types': 8.38.0 2587 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 2588 + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 2589 + debug: 4.4.1 2590 + eslint: 9.32.0(jiti@2.5.1) 2591 + ts-api-utils: 2.1.0(typescript@5.8.3) 2592 + typescript: 5.8.3 2593 + transitivePeerDependencies: 2594 + - supports-color 2595 + 2596 + '@typescript-eslint/types@8.38.0': {} 2597 + 2598 + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': 2599 + dependencies: 2600 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) 2601 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) 2602 + '@typescript-eslint/types': 8.38.0 2603 + '@typescript-eslint/visitor-keys': 8.38.0 2604 + debug: 4.4.1 2605 + fast-glob: 3.3.3 2606 + is-glob: 4.0.3 2607 + minimatch: 9.0.5 2608 + semver: 7.7.2 2609 + ts-api-utils: 2.1.0(typescript@5.8.3) 2610 + typescript: 5.8.3 2611 + transitivePeerDependencies: 2612 + - supports-color 2613 + 2614 + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': 2615 + dependencies: 2616 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) 2617 + '@typescript-eslint/scope-manager': 8.38.0 2618 + '@typescript-eslint/types': 8.38.0 2619 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 2620 + eslint: 9.32.0(jiti@2.5.1) 2621 + typescript: 5.8.3 2622 + transitivePeerDependencies: 2623 + - supports-color 2624 + 2625 + '@typescript-eslint/visitor-keys@8.38.0': 2626 + dependencies: 2627 + '@typescript-eslint/types': 8.38.0 2628 + eslint-visitor-keys: 4.2.1 2629 + 1816 2630 '@ungap/structured-clone@1.3.0': {} 1817 2631 2632 + acorn-jsx@5.3.2(acorn@8.15.0): 2633 + dependencies: 2634 + acorn: 8.15.0 2635 + 1818 2636 acorn@8.15.0: {} 1819 2637 2638 + ajv@6.12.6: 2639 + dependencies: 2640 + fast-deep-equal: 3.1.3 2641 + fast-json-stable-stringify: 2.1.0 2642 + json-schema-traverse: 0.4.1 2643 + uri-js: 4.4.1 2644 + 1820 2645 ansi-align@3.0.1: 1821 2646 dependencies: 1822 2647 string-width: 4.2.3 ··· 1825 2650 1826 2651 ansi-regex@6.1.0: {} 1827 2652 2653 + ansi-styles@4.3.0: 2654 + dependencies: 2655 + color-convert: 2.0.1 2656 + 1828 2657 ansi-styles@6.2.1: {} 1829 2658 1830 2659 anymatch@3.1.3: ··· 1838 2667 1839 2668 array-iterate@2.0.1: {} 1840 2669 1841 - astro@5.9.1(@types/node@22.15.30)(rollup@4.42.0)(typescript@5.8.3): 2670 + astro-eslint-parser@1.2.2: 1842 2671 dependencies: 1843 - '@astrojs/compiler': 2.12.1 2672 + '@astrojs/compiler': 2.12.2 2673 + '@typescript-eslint/scope-manager': 8.38.0 2674 + '@typescript-eslint/types': 8.38.0 2675 + astrojs-compiler-sync: 1.1.1(@astrojs/compiler@2.12.2) 2676 + debug: 4.4.1 2677 + entities: 6.0.1 2678 + eslint-scope: 8.4.0 2679 + eslint-visitor-keys: 4.2.1 2680 + espree: 10.4.0 2681 + fast-glob: 3.3.3 2682 + is-glob: 4.0.3 2683 + semver: 7.7.2 2684 + transitivePeerDependencies: 2685 + - supports-color 2686 + 2687 + astro@5.12.3(@types/node@24.1.0)(jiti@2.5.1)(rollup@4.45.3)(typescript@5.8.3): 2688 + dependencies: 2689 + '@astrojs/compiler': 2.12.2 1844 2690 '@astrojs/internal-helpers': 0.6.1 1845 - '@astrojs/markdown-remark': 6.3.2 2691 + '@astrojs/markdown-remark': 6.3.3 1846 2692 '@astrojs/telemetry': 3.3.0 1847 2693 '@capsizecss/unpack': 2.4.0 1848 2694 '@oslojs/encoding': 1.1.0 1849 - '@rollup/pluginutils': 5.1.4(rollup@4.42.0) 2695 + '@rollup/pluginutils': 5.2.0(rollup@4.45.3) 1850 2696 acorn: 8.15.0 1851 2697 aria-query: 5.3.2 1852 2698 axobject-query: 4.1.0 1853 2699 boxen: 8.0.1 1854 - ci-info: 4.2.0 2700 + ci-info: 4.3.0 1855 2701 clsx: 2.1.1 1856 2702 common-ancestor-path: 1.0.1 1857 2703 cookie: 1.0.2 ··· 1863 2709 dlv: 1.1.3 1864 2710 dset: 3.1.4 1865 2711 es-module-lexer: 1.7.0 1866 - esbuild: 0.25.5 2712 + esbuild: 0.25.8 1867 2713 estree-walker: 3.0.3 1868 2714 flattie: 1.1.1 1869 2715 fontace: 0.3.0 ··· 1880 2726 p-limit: 6.2.0 1881 2727 p-queue: 8.1.0 1882 2728 package-manager-detector: 1.3.0 1883 - picomatch: 4.0.2 2729 + picomatch: 4.0.3 1884 2730 prompts: 2.4.2 1885 2731 rehype: 13.0.2 1886 2732 semver: 7.7.2 1887 - shiki: 3.6.0 2733 + shiki: 3.8.1 2734 + smol-toml: 1.4.1 1888 2735 tinyexec: 0.3.2 1889 2736 tinyglobby: 0.2.14 1890 2737 tsconfck: 3.1.6(typescript@5.8.3) 1891 2738 ultrahtml: 1.6.0 1892 - unifont: 0.5.0 2739 + unifont: 0.5.2 1893 2740 unist-util-visit: 5.0.0 1894 - unstorage: 1.16.0 2741 + unstorage: 1.16.1 1895 2742 vfile: 6.0.3 1896 - vite: 6.3.5(@types/node@22.15.30) 1897 - vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.30)) 2743 + vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1) 2744 + vitefu: 1.1.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)) 1898 2745 xxhash-wasm: 1.1.0 1899 2746 yargs-parser: 21.1.1 1900 2747 yocto-spinner: 0.2.3 1901 - zod: 3.25.56 1902 - zod-to-json-schema: 3.24.5(zod@3.25.56) 1903 - zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.56) 2748 + zod: 3.25.76 2749 + zod-to-json-schema: 3.24.6(zod@3.25.76) 2750 + zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.76) 1904 2751 optionalDependencies: 1905 2752 sharp: 0.33.5 1906 2753 transitivePeerDependencies: ··· 1938 2785 - uploadthing 1939 2786 - yaml 1940 2787 2788 + astrojs-compiler-sync@1.1.1(@astrojs/compiler@2.12.2): 2789 + dependencies: 2790 + '@astrojs/compiler': 2.12.2 2791 + synckit: 0.11.11 2792 + 1941 2793 axobject-query@4.1.0: {} 1942 2794 1943 2795 bail@2.0.2: {} 2796 + 2797 + balanced-match@1.0.2: {} 1944 2798 1945 2799 base-64@1.0.0: {} 1946 2800 ··· 1959 2813 widest-line: 5.0.0 1960 2814 wrap-ansi: 9.0.0 1961 2815 2816 + brace-expansion@1.1.12: 2817 + dependencies: 2818 + balanced-match: 1.0.2 2819 + concat-map: 0.0.1 2820 + 2821 + brace-expansion@2.0.2: 2822 + dependencies: 2823 + balanced-match: 1.0.2 2824 + 2825 + braces@3.0.3: 2826 + dependencies: 2827 + fill-range: 7.1.1 2828 + 1962 2829 brotli@1.3.3: 1963 2830 dependencies: 1964 2831 base64-js: 1.5.1 2832 + 2833 + callsites@3.1.0: {} 1965 2834 1966 2835 camelcase@8.0.0: {} 1967 2836 1968 2837 ccount@2.0.1: {} 1969 2838 2839 + chalk@4.1.2: 2840 + dependencies: 2841 + ansi-styles: 4.3.0 2842 + supports-color: 7.2.0 2843 + 1970 2844 chalk@5.4.1: {} 1971 2845 1972 2846 character-entities-html4@2.1.0: {} ··· 1979 2853 dependencies: 1980 2854 readdirp: 4.1.2 1981 2855 1982 - ci-info@4.2.0: {} 2856 + ci-info@4.3.0: {} 1983 2857 1984 2858 cli-boxes@3.0.0: {} 1985 2859 ··· 1990 2864 color-convert@2.0.1: 1991 2865 dependencies: 1992 2866 color-name: 1.1.4 1993 - optional: true 1994 2867 1995 - color-name@1.1.4: 1996 - optional: true 2868 + color-name@1.1.4: {} 1997 2869 1998 2870 color-string@1.9.1: 1999 2871 dependencies: ··· 2011 2883 2012 2884 common-ancestor-path@1.0.1: {} 2013 2885 2886 + concat-map@0.0.1: {} 2887 + 2014 2888 cookie-es@1.2.2: {} 2015 2889 2016 2890 cookie@1.0.2: {} ··· 2020 2894 node-fetch: 2.7.0 2021 2895 transitivePeerDependencies: 2022 2896 - encoding 2897 + 2898 + cross-spawn@7.0.6: 2899 + dependencies: 2900 + path-key: 3.1.1 2901 + shebang-command: 2.0.0 2902 + which: 2.0.2 2023 2903 2024 2904 crossws@0.3.5: 2025 2905 dependencies: ··· 2036 2916 dependencies: 2037 2917 ms: 2.1.3 2038 2918 2039 - decode-named-character-reference@1.1.0: 2919 + decode-named-character-reference@1.2.0: 2040 2920 dependencies: 2041 2921 character-entities: 2.0.2 2922 + 2923 + deep-is@0.1.4: {} 2042 2924 2043 2925 defu@6.1.4: {} 2044 2926 ··· 2075 2957 2076 2958 es-module-lexer@1.7.0: {} 2077 2959 2078 - esbuild@0.25.5: 2960 + esbuild@0.25.8: 2079 2961 optionalDependencies: 2080 - '@esbuild/aix-ppc64': 0.25.5 2081 - '@esbuild/android-arm': 0.25.5 2082 - '@esbuild/android-arm64': 0.25.5 2083 - '@esbuild/android-x64': 0.25.5 2084 - '@esbuild/darwin-arm64': 0.25.5 2085 - '@esbuild/darwin-x64': 0.25.5 2086 - '@esbuild/freebsd-arm64': 0.25.5 2087 - '@esbuild/freebsd-x64': 0.25.5 2088 - '@esbuild/linux-arm': 0.25.5 2089 - '@esbuild/linux-arm64': 0.25.5 2090 - '@esbuild/linux-ia32': 0.25.5 2091 - '@esbuild/linux-loong64': 0.25.5 2092 - '@esbuild/linux-mips64el': 0.25.5 2093 - '@esbuild/linux-ppc64': 0.25.5 2094 - '@esbuild/linux-riscv64': 0.25.5 2095 - '@esbuild/linux-s390x': 0.25.5 2096 - '@esbuild/linux-x64': 0.25.5 2097 - '@esbuild/netbsd-arm64': 0.25.5 2098 - '@esbuild/netbsd-x64': 0.25.5 2099 - '@esbuild/openbsd-arm64': 0.25.5 2100 - '@esbuild/openbsd-x64': 0.25.5 2101 - '@esbuild/sunos-x64': 0.25.5 2102 - '@esbuild/win32-arm64': 0.25.5 2103 - '@esbuild/win32-ia32': 0.25.5 2104 - '@esbuild/win32-x64': 0.25.5 2962 + '@esbuild/aix-ppc64': 0.25.8 2963 + '@esbuild/android-arm': 0.25.8 2964 + '@esbuild/android-arm64': 0.25.8 2965 + '@esbuild/android-x64': 0.25.8 2966 + '@esbuild/darwin-arm64': 0.25.8 2967 + '@esbuild/darwin-x64': 0.25.8 2968 + '@esbuild/freebsd-arm64': 0.25.8 2969 + '@esbuild/freebsd-x64': 0.25.8 2970 + '@esbuild/linux-arm': 0.25.8 2971 + '@esbuild/linux-arm64': 0.25.8 2972 + '@esbuild/linux-ia32': 0.25.8 2973 + '@esbuild/linux-loong64': 0.25.8 2974 + '@esbuild/linux-mips64el': 0.25.8 2975 + '@esbuild/linux-ppc64': 0.25.8 2976 + '@esbuild/linux-riscv64': 0.25.8 2977 + '@esbuild/linux-s390x': 0.25.8 2978 + '@esbuild/linux-x64': 0.25.8 2979 + '@esbuild/netbsd-arm64': 0.25.8 2980 + '@esbuild/netbsd-x64': 0.25.8 2981 + '@esbuild/openbsd-arm64': 0.25.8 2982 + '@esbuild/openbsd-x64': 0.25.8 2983 + '@esbuild/openharmony-arm64': 0.25.8 2984 + '@esbuild/sunos-x64': 0.25.8 2985 + '@esbuild/win32-arm64': 0.25.8 2986 + '@esbuild/win32-ia32': 0.25.8 2987 + '@esbuild/win32-x64': 0.25.8 2988 + 2989 + escape-string-regexp@4.0.0: {} 2105 2990 2106 2991 escape-string-regexp@5.0.0: {} 2107 2992 2993 + eslint-compat-utils@0.6.5(eslint@9.32.0(jiti@2.5.1)): 2994 + dependencies: 2995 + eslint: 9.32.0(jiti@2.5.1) 2996 + semver: 7.7.2 2997 + 2998 + eslint-config-prettier@10.1.8(eslint@9.32.0(jiti@2.5.1)): 2999 + dependencies: 3000 + eslint: 9.32.0(jiti@2.5.1) 3001 + 3002 + eslint-plugin-astro@1.3.1(eslint@9.32.0(jiti@2.5.1)): 3003 + dependencies: 3004 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) 3005 + '@jridgewell/sourcemap-codec': 1.5.4 3006 + '@typescript-eslint/types': 8.38.0 3007 + astro-eslint-parser: 1.2.2 3008 + eslint: 9.32.0(jiti@2.5.1) 3009 + eslint-compat-utils: 0.6.5(eslint@9.32.0(jiti@2.5.1)) 3010 + globals: 15.15.0 3011 + postcss: 8.5.6 3012 + postcss-selector-parser: 7.1.0 3013 + transitivePeerDependencies: 3014 + - supports-color 3015 + 3016 + eslint-plugin-prettier@5.5.3(eslint-config-prettier@10.1.8(eslint@9.32.0(jiti@2.5.1)))(eslint@9.32.0(jiti@2.5.1))(prettier@3.6.2): 3017 + dependencies: 3018 + eslint: 9.32.0(jiti@2.5.1) 3019 + prettier: 3.6.2 3020 + prettier-linter-helpers: 1.0.0 3021 + synckit: 0.11.11 3022 + optionalDependencies: 3023 + eslint-config-prettier: 10.1.8(eslint@9.32.0(jiti@2.5.1)) 3024 + 3025 + eslint-scope@8.4.0: 3026 + dependencies: 3027 + esrecurse: 4.3.0 3028 + estraverse: 5.3.0 3029 + 3030 + eslint-visitor-keys@3.4.3: {} 3031 + 3032 + eslint-visitor-keys@4.2.1: {} 3033 + 3034 + eslint@9.32.0(jiti@2.5.1): 3035 + dependencies: 3036 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) 3037 + '@eslint-community/regexpp': 4.12.1 3038 + '@eslint/config-array': 0.21.0 3039 + '@eslint/config-helpers': 0.3.0 3040 + '@eslint/core': 0.15.1 3041 + '@eslint/eslintrc': 3.3.1 3042 + '@eslint/js': 9.32.0 3043 + '@eslint/plugin-kit': 0.3.4 3044 + '@humanfs/node': 0.16.6 3045 + '@humanwhocodes/module-importer': 1.0.1 3046 + '@humanwhocodes/retry': 0.4.3 3047 + '@types/estree': 1.0.8 3048 + '@types/json-schema': 7.0.15 3049 + ajv: 6.12.6 3050 + chalk: 4.1.2 3051 + cross-spawn: 7.0.6 3052 + debug: 4.4.1 3053 + escape-string-regexp: 4.0.0 3054 + eslint-scope: 8.4.0 3055 + eslint-visitor-keys: 4.2.1 3056 + espree: 10.4.0 3057 + esquery: 1.6.0 3058 + esutils: 2.0.3 3059 + fast-deep-equal: 3.1.3 3060 + file-entry-cache: 8.0.0 3061 + find-up: 5.0.0 3062 + glob-parent: 6.0.2 3063 + ignore: 5.3.2 3064 + imurmurhash: 0.1.4 3065 + is-glob: 4.0.3 3066 + json-stable-stringify-without-jsonify: 1.0.1 3067 + lodash.merge: 4.6.2 3068 + minimatch: 3.1.2 3069 + natural-compare: 1.4.0 3070 + optionator: 0.9.4 3071 + optionalDependencies: 3072 + jiti: 2.5.1 3073 + transitivePeerDependencies: 3074 + - supports-color 3075 + 3076 + esm-env@1.2.2: {} 3077 + 3078 + espree@10.4.0: 3079 + dependencies: 3080 + acorn: 8.15.0 3081 + acorn-jsx: 5.3.2(acorn@8.15.0) 3082 + eslint-visitor-keys: 4.2.1 3083 + 3084 + esquery@1.6.0: 3085 + dependencies: 3086 + estraverse: 5.3.0 3087 + 3088 + esrecurse@4.3.0: 3089 + dependencies: 3090 + estraverse: 5.3.0 3091 + 3092 + estraverse@5.3.0: {} 3093 + 2108 3094 estree-walker@2.0.2: {} 2109 3095 2110 3096 estree-walker@3.0.3: 2111 3097 dependencies: 2112 3098 '@types/estree': 1.0.8 2113 3099 3100 + esutils@2.0.3: {} 3101 + 2114 3102 eventemitter3@5.0.1: {} 2115 3103 2116 3104 extend@3.0.2: {} 2117 3105 2118 3106 fast-deep-equal@3.1.3: {} 2119 3107 2120 - fdir@6.4.5(picomatch@4.0.2): 3108 + fast-diff@1.3.0: {} 3109 + 3110 + fast-glob@3.3.3: 3111 + dependencies: 3112 + '@nodelib/fs.stat': 2.0.5 3113 + '@nodelib/fs.walk': 1.2.8 3114 + glob-parent: 5.1.2 3115 + merge2: 1.4.1 3116 + micromatch: 4.0.8 3117 + 3118 + fast-json-stable-stringify@2.1.0: {} 3119 + 3120 + fast-levenshtein@2.0.6: {} 3121 + 3122 + fastq@1.19.1: 3123 + dependencies: 3124 + reusify: 1.1.0 3125 + 3126 + fdir@6.4.6(picomatch@4.0.3): 2121 3127 optionalDependencies: 2122 - picomatch: 4.0.2 3128 + picomatch: 4.0.3 3129 + 3130 + file-entry-cache@8.0.0: 3131 + dependencies: 3132 + flat-cache: 4.0.1 3133 + 3134 + fill-range@7.1.1: 3135 + dependencies: 3136 + to-regex-range: 5.0.1 3137 + 3138 + find-up@5.0.0: 3139 + dependencies: 3140 + locate-path: 6.0.0 3141 + path-exists: 4.0.0 3142 + 3143 + flat-cache@4.0.1: 3144 + dependencies: 3145 + flatted: 3.3.3 3146 + keyv: 4.5.4 3147 + 3148 + flatted@3.3.3: {} 2123 3149 2124 3150 flattie@1.1.1: {} 2125 3151 ··· 2147 3173 2148 3174 github-slugger@2.0.0: {} 2149 3175 3176 + glob-parent@5.1.2: 3177 + dependencies: 3178 + is-glob: 4.0.3 3179 + 3180 + glob-parent@6.0.2: 3181 + dependencies: 3182 + is-glob: 4.0.3 3183 + 3184 + globals@14.0.0: {} 3185 + 3186 + globals@15.15.0: {} 3187 + 3188 + globals@16.3.0: {} 3189 + 3190 + graphemer@1.4.0: {} 3191 + 2150 3192 h3@1.15.3: 2151 3193 dependencies: 2152 3194 cookie-es: 1.2.2 ··· 2154 3196 defu: 6.1.4 2155 3197 destr: 2.0.5 2156 3198 iron-webcrypto: 1.2.1 2157 - node-mock-http: 1.0.0 3199 + node-mock-http: 1.0.1 2158 3200 radix3: 1.1.2 2159 3201 ufo: 1.6.1 2160 3202 uncrypto: 0.1.3 3203 + 3204 + has-flag@4.0.0: {} 2161 3205 2162 3206 hast-util-from-html@2.0.3: 2163 3207 dependencies: ··· 2166 3210 hast-util-from-parse5: 8.0.3 2167 3211 parse5: 7.3.0 2168 3212 vfile: 6.0.3 2169 - vfile-message: 4.0.2 3213 + vfile-message: 4.0.3 2170 3214 2171 3215 hast-util-from-parse5@8.0.3: 2172 3216 dependencies: ··· 2252 3296 2253 3297 http-cache-semantics@4.2.0: {} 2254 3298 3299 + ignore@5.3.2: {} 3300 + 3301 + ignore@7.0.5: {} 3302 + 3303 + import-fresh@3.3.1: 3304 + dependencies: 3305 + parent-module: 1.0.1 3306 + resolve-from: 4.0.0 3307 + 2255 3308 import-meta-resolve@4.1.0: {} 2256 3309 3310 + imurmurhash@0.1.4: {} 3311 + 2257 3312 iron-webcrypto@1.2.1: {} 2258 3313 2259 3314 is-arrayish@0.3.2: ··· 2261 3316 2262 3317 is-docker@3.0.0: {} 2263 3318 3319 + is-extglob@2.1.1: {} 3320 + 2264 3321 is-fullwidth-code-point@3.0.0: {} 2265 3322 3323 + is-glob@4.0.3: 3324 + dependencies: 3325 + is-extglob: 2.1.1 3326 + 2266 3327 is-inside-container@1.0.0: 2267 3328 dependencies: 2268 3329 is-docker: 3.0.0 2269 3330 3331 + is-number@7.0.0: {} 3332 + 2270 3333 is-plain-obj@4.1.0: {} 2271 3334 2272 3335 is-wsl@3.1.0: 2273 3336 dependencies: 2274 3337 is-inside-container: 1.0.0 2275 3338 3339 + isexe@2.0.0: {} 3340 + 3341 + jiti@2.5.1: {} 3342 + 2276 3343 js-yaml@4.1.0: 2277 3344 dependencies: 2278 3345 argparse: 2.0.1 2279 3346 3347 + json-buffer@3.0.1: {} 3348 + 3349 + json-schema-traverse@0.4.1: {} 3350 + 3351 + json-stable-stringify-without-jsonify@1.0.1: {} 3352 + 3353 + keyv@4.5.4: 3354 + dependencies: 3355 + json-buffer: 3.0.1 3356 + 2280 3357 kleur@3.0.3: {} 2281 3358 2282 3359 kleur@4.1.5: {} 2283 3360 3361 + levn@0.4.1: 3362 + dependencies: 3363 + prelude-ls: 1.2.1 3364 + type-check: 0.4.0 3365 + 3366 + locate-path@6.0.0: 3367 + dependencies: 3368 + p-locate: 5.0.0 3369 + 3370 + lodash.merge@4.6.2: {} 3371 + 2284 3372 longest-streak@3.1.0: {} 2285 3373 2286 3374 lru-cache@10.4.3: {} 2287 3375 2288 3376 magic-string@0.30.17: 2289 3377 dependencies: 2290 - '@jridgewell/sourcemap-codec': 1.5.0 3378 + '@jridgewell/sourcemap-codec': 1.5.4 2291 3379 2292 3380 magicast@0.3.5: 2293 3381 dependencies: 2294 - '@babel/parser': 7.27.5 2295 - '@babel/types': 7.27.6 3382 + '@babel/parser': 7.28.0 3383 + '@babel/types': 7.28.2 2296 3384 source-map-js: 1.2.1 2297 3385 2298 3386 markdown-table@3.0.4: {} ··· 2314 3402 dependencies: 2315 3403 '@types/mdast': 4.0.4 2316 3404 '@types/unist': 3.0.3 2317 - decode-named-character-reference: 1.1.0 3405 + decode-named-character-reference: 1.2.0 2318 3406 devlop: 1.1.0 2319 3407 mdast-util-to-string: 4.0.0 2320 3408 micromark: 4.0.2 ··· 2419 3507 2420 3508 mdn-data@2.12.2: {} 2421 3509 3510 + merge2@1.4.1: {} 3511 + 2422 3512 micromark-core-commonmark@2.0.3: 2423 3513 dependencies: 2424 - decode-named-character-reference: 1.1.0 3514 + decode-named-character-reference: 1.2.0 2425 3515 devlop: 1.1.0 2426 3516 micromark-factory-destination: 2.0.1 2427 3517 micromark-factory-label: 2.0.1 ··· 2554 3644 2555 3645 micromark-util-decode-string@2.0.1: 2556 3646 dependencies: 2557 - decode-named-character-reference: 1.1.0 3647 + decode-named-character-reference: 1.2.0 2558 3648 micromark-util-character: 2.1.1 2559 3649 micromark-util-decode-numeric-character-reference: 2.0.2 2560 3650 micromark-util-symbol: 2.0.1 ··· 2592 3682 dependencies: 2593 3683 '@types/debug': 4.1.12 2594 3684 debug: 4.4.1 2595 - decode-named-character-reference: 1.1.0 3685 + decode-named-character-reference: 1.2.0 2596 3686 devlop: 1.1.0 2597 3687 micromark-core-commonmark: 2.0.3 2598 3688 micromark-factory-space: 2.0.1 ··· 2610 3700 transitivePeerDependencies: 2611 3701 - supports-color 2612 3702 3703 + micromatch@4.0.8: 3704 + dependencies: 3705 + braces: 3.0.3 3706 + picomatch: 2.3.1 3707 + 3708 + minimatch@3.1.2: 3709 + dependencies: 3710 + brace-expansion: 1.1.12 3711 + 3712 + minimatch@9.0.5: 3713 + dependencies: 3714 + brace-expansion: 2.0.2 3715 + 2613 3716 mrmime@2.0.1: {} 2614 3717 2615 3718 ms@2.1.3: {} 2616 3719 2617 3720 nanoid@3.3.11: {} 2618 3721 3722 + nanoid@5.1.5: {} 3723 + 3724 + natural-compare@1.4.0: {} 3725 + 2619 3726 neotraverse@0.6.18: {} 2620 3727 2621 3728 nlcst-to-string@4.0.0: ··· 2628 3735 dependencies: 2629 3736 whatwg-url: 5.0.0 2630 3737 2631 - node-mock-http@1.0.0: {} 3738 + node-mock-http@1.0.1: {} 2632 3739 2633 3740 normalize-path@3.0.0: {} 2634 3741 ··· 2648 3755 regex: 6.0.1 2649 3756 regex-recursion: 6.0.2 2650 3757 3758 + optionator@0.9.4: 3759 + dependencies: 3760 + deep-is: 0.1.4 3761 + fast-levenshtein: 2.0.6 3762 + levn: 0.4.1 3763 + prelude-ls: 1.2.1 3764 + type-check: 0.4.0 3765 + word-wrap: 1.2.5 3766 + 3767 + p-limit@3.1.0: 3768 + dependencies: 3769 + yocto-queue: 0.1.0 3770 + 2651 3771 p-limit@6.2.0: 2652 3772 dependencies: 2653 3773 yocto-queue: 1.2.1 3774 + 3775 + p-locate@5.0.0: 3776 + dependencies: 3777 + p-limit: 3.1.0 2654 3778 2655 3779 p-queue@8.1.0: 2656 3780 dependencies: ··· 2663 3787 2664 3788 pako@0.2.9: {} 2665 3789 3790 + parent-module@1.0.1: 3791 + dependencies: 3792 + callsites: 3.1.0 3793 + 2666 3794 parse-latin@7.0.0: 2667 3795 dependencies: 2668 3796 '@types/nlcst': 2.0.3 ··· 2675 3803 parse5@7.3.0: 2676 3804 dependencies: 2677 3805 entities: 6.0.1 3806 + 3807 + path-exists@4.0.0: {} 3808 + 3809 + path-key@3.1.1: {} 2678 3810 2679 3811 picocolors@1.1.1: {} 2680 3812 2681 3813 picomatch@2.3.1: {} 2682 3814 2683 - picomatch@4.0.2: {} 3815 + picomatch@4.0.3: {} 2684 3816 2685 - postcss@8.5.4: 3817 + postcss-selector-parser@7.1.0: 3818 + dependencies: 3819 + cssesc: 3.0.0 3820 + util-deprecate: 1.0.2 3821 + 3822 + postcss@8.5.6: 2686 3823 dependencies: 2687 3824 nanoid: 3.3.11 2688 3825 picocolors: 1.1.1 2689 3826 source-map-js: 1.2.1 2690 3827 3828 + prelude-ls@1.2.1: {} 3829 + 3830 + prettier-linter-helpers@1.0.0: 3831 + dependencies: 3832 + fast-diff: 1.3.0 3833 + 3834 + prettier-plugin-astro@0.14.1: 3835 + dependencies: 3836 + '@astrojs/compiler': 2.12.2 3837 + prettier: 3.6.2 3838 + sass-formatter: 0.7.9 3839 + 3840 + prettier@3.6.2: {} 3841 + 2691 3842 prismjs@1.30.0: {} 2692 3843 2693 3844 prompts@2.4.2: ··· 2698 3849 property-information@6.5.0: {} 2699 3850 2700 3851 property-information@7.1.0: {} 3852 + 3853 + punycode@2.3.1: {} 3854 + 3855 + queue-microtask@1.2.3: {} 2701 3856 2702 3857 radix3@1.1.2: {} 2703 3858 ··· 2779 3934 mdast-util-to-markdown: 2.1.2 2780 3935 unified: 11.0.5 2781 3936 3937 + resolve-from@4.0.0: {} 3938 + 2782 3939 restructure@3.0.2: {} 2783 3940 2784 3941 retext-latin@4.0.0: ··· 2806 3963 retext-stringify: 4.0.0 2807 3964 unified: 11.0.5 2808 3965 2809 - rollup@4.42.0: 3966 + reusify@1.1.0: {} 3967 + 3968 + rollup@4.45.3: 2810 3969 dependencies: 2811 - '@types/estree': 1.0.7 3970 + '@types/estree': 1.0.8 2812 3971 optionalDependencies: 2813 - '@rollup/rollup-android-arm-eabi': 4.42.0 2814 - '@rollup/rollup-android-arm64': 4.42.0 2815 - '@rollup/rollup-darwin-arm64': 4.42.0 2816 - '@rollup/rollup-darwin-x64': 4.42.0 2817 - '@rollup/rollup-freebsd-arm64': 4.42.0 2818 - '@rollup/rollup-freebsd-x64': 4.42.0 2819 - '@rollup/rollup-linux-arm-gnueabihf': 4.42.0 2820 - '@rollup/rollup-linux-arm-musleabihf': 4.42.0 2821 - '@rollup/rollup-linux-arm64-gnu': 4.42.0 2822 - '@rollup/rollup-linux-arm64-musl': 4.42.0 2823 - '@rollup/rollup-linux-loongarch64-gnu': 4.42.0 2824 - '@rollup/rollup-linux-powerpc64le-gnu': 4.42.0 2825 - '@rollup/rollup-linux-riscv64-gnu': 4.42.0 2826 - '@rollup/rollup-linux-riscv64-musl': 4.42.0 2827 - '@rollup/rollup-linux-s390x-gnu': 4.42.0 2828 - '@rollup/rollup-linux-x64-gnu': 4.42.0 2829 - '@rollup/rollup-linux-x64-musl': 4.42.0 2830 - '@rollup/rollup-win32-arm64-msvc': 4.42.0 2831 - '@rollup/rollup-win32-ia32-msvc': 4.42.0 2832 - '@rollup/rollup-win32-x64-msvc': 4.42.0 3972 + '@rollup/rollup-android-arm-eabi': 4.45.3 3973 + '@rollup/rollup-android-arm64': 4.45.3 3974 + '@rollup/rollup-darwin-arm64': 4.45.3 3975 + '@rollup/rollup-darwin-x64': 4.45.3 3976 + '@rollup/rollup-freebsd-arm64': 4.45.3 3977 + '@rollup/rollup-freebsd-x64': 4.45.3 3978 + '@rollup/rollup-linux-arm-gnueabihf': 4.45.3 3979 + '@rollup/rollup-linux-arm-musleabihf': 4.45.3 3980 + '@rollup/rollup-linux-arm64-gnu': 4.45.3 3981 + '@rollup/rollup-linux-arm64-musl': 4.45.3 3982 + '@rollup/rollup-linux-loongarch64-gnu': 4.45.3 3983 + '@rollup/rollup-linux-ppc64-gnu': 4.45.3 3984 + '@rollup/rollup-linux-riscv64-gnu': 4.45.3 3985 + '@rollup/rollup-linux-riscv64-musl': 4.45.3 3986 + '@rollup/rollup-linux-s390x-gnu': 4.45.3 3987 + '@rollup/rollup-linux-x64-gnu': 4.45.3 3988 + '@rollup/rollup-linux-x64-musl': 4.45.3 3989 + '@rollup/rollup-win32-arm64-msvc': 4.45.3 3990 + '@rollup/rollup-win32-ia32-msvc': 4.45.3 3991 + '@rollup/rollup-win32-x64-msvc': 4.45.3 2833 3992 fsevents: 2.3.3 2834 3993 3994 + run-parallel@1.2.0: 3995 + dependencies: 3996 + queue-microtask: 1.2.3 3997 + 3998 + s.color@0.0.15: {} 3999 + 4000 + sass-formatter@0.7.9: 4001 + dependencies: 4002 + suf-log: 2.5.3 4003 + 2835 4004 semver@7.7.2: {} 2836 4005 2837 4006 sharp@0.33.5: ··· 2861 4030 '@img/sharp-win32-x64': 0.33.5 2862 4031 optional: true 2863 4032 2864 - shiki@3.6.0: 4033 + shebang-command@2.0.0: 2865 4034 dependencies: 2866 - '@shikijs/core': 3.6.0 2867 - '@shikijs/engine-javascript': 3.6.0 2868 - '@shikijs/engine-oniguruma': 3.6.0 2869 - '@shikijs/langs': 3.6.0 2870 - '@shikijs/themes': 3.6.0 2871 - '@shikijs/types': 3.6.0 4035 + shebang-regex: 3.0.0 4036 + 4037 + shebang-regex@3.0.0: {} 4038 + 4039 + shiki@3.8.1: 4040 + dependencies: 4041 + '@shikijs/core': 3.8.1 4042 + '@shikijs/engine-javascript': 3.8.1 4043 + '@shikijs/engine-oniguruma': 3.8.1 4044 + '@shikijs/langs': 3.8.1 4045 + '@shikijs/themes': 3.8.1 4046 + '@shikijs/types': 3.8.1 2872 4047 '@shikijs/vscode-textmate': 10.0.2 2873 4048 '@types/hast': 3.0.4 2874 4049 ··· 2879 4054 2880 4055 sisteransi@1.0.5: {} 2881 4056 2882 - smol-toml@1.3.4: {} 4057 + smol-toml@1.4.1: {} 2883 4058 2884 4059 source-map-js@1.2.1: {} 2885 4060 ··· 2910 4085 dependencies: 2911 4086 ansi-regex: 6.1.0 2912 4087 4088 + strip-json-comments@3.1.1: {} 4089 + 4090 + suf-log@2.5.3: 4091 + dependencies: 4092 + s.color: 0.0.15 4093 + 4094 + supports-color@7.2.0: 4095 + dependencies: 4096 + has-flag: 4.0.0 4097 + 4098 + synckit@0.11.11: 4099 + dependencies: 4100 + '@pkgr/core': 0.2.9 4101 + 2913 4102 tiny-inflate@1.0.3: {} 2914 4103 2915 4104 tinyexec@0.3.2: {} 2916 4105 2917 4106 tinyglobby@0.2.14: 2918 4107 dependencies: 2919 - fdir: 6.4.5(picomatch@4.0.2) 2920 - picomatch: 4.0.2 4108 + fdir: 6.4.6(picomatch@4.0.3) 4109 + picomatch: 4.0.3 4110 + 4111 + to-regex-range@5.0.1: 4112 + dependencies: 4113 + is-number: 7.0.0 2921 4114 2922 4115 tr46@0.0.3: {} 2923 4116 ··· 2925 4118 2926 4119 trough@2.2.0: {} 2927 4120 4121 + ts-api-utils@2.1.0(typescript@5.8.3): 4122 + dependencies: 4123 + typescript: 5.8.3 4124 + 2928 4125 tsconfck@3.1.6(typescript@5.8.3): 2929 4126 optionalDependencies: 2930 4127 typescript: 5.8.3 2931 4128 2932 4129 tslib@2.8.1: {} 2933 4130 4131 + type-check@0.4.0: 4132 + dependencies: 4133 + prelude-ls: 1.2.1 4134 + 2934 4135 type-fest@4.41.0: {} 2935 4136 4137 + typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): 4138 + dependencies: 4139 + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 4140 + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 4141 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) 4142 + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) 4143 + eslint: 9.32.0(jiti@2.5.1) 4144 + typescript: 5.8.3 4145 + transitivePeerDependencies: 4146 + - supports-color 4147 + 2936 4148 typescript@5.8.3: {} 2937 4149 2938 4150 ufo@1.6.1: {} ··· 2941 4153 2942 4154 uncrypto@0.1.3: {} 2943 4155 2944 - undici-types@6.21.0: {} 4156 + undici-types@7.8.0: {} 2945 4157 2946 4158 unicode-properties@1.4.1: 2947 4159 dependencies: ··· 2963 4175 trough: 2.2.0 2964 4176 vfile: 6.0.3 2965 4177 2966 - unifont@0.5.0: 4178 + unifont@0.5.2: 2967 4179 dependencies: 2968 4180 css-tree: 3.1.0 4181 + ofetch: 1.4.1 2969 4182 ohash: 2.0.11 2970 4183 2971 4184 unist-util-find-after@5.0.0: ··· 3010 4223 unist-util-is: 6.0.0 3011 4224 unist-util-visit-parents: 6.0.1 3012 4225 3013 - unstorage@1.16.0: 4226 + unstorage@1.16.1: 3014 4227 dependencies: 3015 4228 anymatch: 3.1.3 3016 4229 chokidar: 4.0.3 ··· 3021 4234 ofetch: 1.4.1 3022 4235 ufo: 1.6.1 3023 4236 4237 + uri-js@4.4.1: 4238 + dependencies: 4239 + punycode: 2.3.1 4240 + 4241 + util-deprecate@1.0.2: {} 4242 + 3024 4243 vfile-location@5.0.3: 3025 4244 dependencies: 3026 4245 '@types/unist': 3.0.3 3027 4246 vfile: 6.0.3 3028 4247 3029 - vfile-message@4.0.2: 4248 + vfile-message@4.0.3: 3030 4249 dependencies: 3031 4250 '@types/unist': 3.0.3 3032 4251 unist-util-stringify-position: 4.0.0 ··· 3034 4253 vfile@6.0.3: 3035 4254 dependencies: 3036 4255 '@types/unist': 3.0.3 3037 - vfile-message: 4.0.2 4256 + vfile-message: 4.0.3 3038 4257 3039 - vite@6.3.5(@types/node@22.15.30): 4258 + vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1): 3040 4259 dependencies: 3041 - esbuild: 0.25.5 3042 - fdir: 6.4.5(picomatch@4.0.2) 3043 - picomatch: 4.0.2 3044 - postcss: 8.5.4 3045 - rollup: 4.42.0 4260 + esbuild: 0.25.8 4261 + fdir: 6.4.6(picomatch@4.0.3) 4262 + picomatch: 4.0.3 4263 + postcss: 8.5.6 4264 + rollup: 4.45.3 3046 4265 tinyglobby: 0.2.14 3047 4266 optionalDependencies: 3048 - '@types/node': 22.15.30 4267 + '@types/node': 24.1.0 3049 4268 fsevents: 2.3.3 4269 + jiti: 2.5.1 3050 4270 3051 - vitefu@1.0.6(vite@6.3.5(@types/node@22.15.30)): 4271 + vitefu@1.1.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)): 3052 4272 optionalDependencies: 3053 - vite: 6.3.5(@types/node@22.15.30) 4273 + vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1) 3054 4274 3055 4275 web-namespaces@2.0.1: {} 3056 4276 ··· 3063 4283 3064 4284 which-pm-runs@1.1.0: {} 3065 4285 4286 + which@2.0.2: 4287 + dependencies: 4288 + isexe: 2.0.0 4289 + 3066 4290 widest-line@5.0.0: 3067 4291 dependencies: 3068 4292 string-width: 7.2.0 4293 + 4294 + word-wrap@1.2.5: {} 3069 4295 3070 4296 wrap-ansi@9.0.0: 3071 4297 dependencies: ··· 3077 4303 3078 4304 yargs-parser@21.1.1: {} 3079 4305 4306 + yocto-queue@0.1.0: {} 4307 + 3080 4308 yocto-queue@1.2.1: {} 3081 4309 3082 4310 yocto-spinner@0.2.3: ··· 3085 4313 3086 4314 yoctocolors@2.1.1: {} 3087 4315 3088 - zod-to-json-schema@3.24.5(zod@3.25.56): 4316 + zod-to-json-schema@3.24.6(zod@3.25.76): 3089 4317 dependencies: 3090 - zod: 3.25.56 4318 + zod: 3.25.76 3091 4319 3092 - zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.56): 4320 + zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.76): 3093 4321 dependencies: 3094 4322 typescript: 5.8.3 3095 - zod: 3.25.56 4323 + zod: 3.25.76 3096 4324 3097 - zod@3.25.56: {} 4325 + zod@3.25.76: {} 3098 4326 3099 4327 zwitch@2.0.4: {}
+19 -14
frontend/src/components/Clip.astro
··· 1 1 --- 2 2 import TagList from "./TagList.astro"; 3 - const { title, tagList, link, description, originalClipper, firstClipDate } = Astro.props; 3 + const { title, tagList, link, description, originalClipper, firstClipDate } = 4 + Astro.props; 4 5 --- 6 + 5 7 <div class="clip"> 6 - <div class="clip-head"> 7 - <h2 class="clip-title"><a href={link}>{title}</a></h2> 8 - <TagList tags={tagList} /> 9 - </div> 10 - <small class="clip-link"><a href={link}>{link}</a></small> 11 - <p class="clip-description">{description}</p> 12 - <div class="clip-actions"> 13 - <a href="#">clip</a> 14 - <a href="#">respond</a> 15 - <a href="#">hide</a> 16 - <span class="original-clipper">[first clipped by <a href="#">@{originalClipper}</a> {firstClipDate} ago]</span> 17 - </div> 18 - </div> 8 + <div class="clip-head"> 9 + <h2 class="clip-title"><a href={link}>{title}</a></h2> 10 + <TagList tags={tagList} /> 11 + </div> 12 + <small class="clip-link"><a href={link}>{link}</a></small> 13 + <p class="clip-description">{description}</p> 14 + <div class="clip-actions"> 15 + <a href="#">clip</a> 16 + <a href="#">respond</a> 17 + <a href="#">hide</a> 18 + <span class="original-clipper" 19 + >[first clipped by <a href="#">@{originalClipper}</a> 20 + {firstClipDate} ago]</span 21 + > 22 + </div> 23 + </div>
+6 -5
frontend/src/components/SidebarItem.astro
··· 1 1 --- 2 - const {title} = Astro.props; 2 + const { title } = Astro.props; 3 3 --- 4 + 4 5 <div class="sidebar-item"> 5 - <h2>{title}</h2> 6 - <div class="sidebar-content"> 7 - <slot /> 8 - </div> 6 + <h2>{title}</h2> 7 + <div class="sidebar-content"> 8 + <slot /> 9 + </div> 9 10 </div>
+6 -7
frontend/src/components/TagList.astro
··· 1 1 --- 2 - const {tags} = Astro.props; 2 + const { tags } = Astro.props; 3 3 let tags_arr; 4 - if (typeof tags !== 'undefined') { 5 - tags_arr = tags.split(','); 4 + if (typeof tags !== "undefined") { 5 + tags_arr = tags.split(","); 6 6 } 7 7 --- 8 + 8 9 <div class="clip-tags"> 9 - { 10 - tags_arr?.map((element: string) => (<small>{element}</small>)) 11 - } 12 - </div> 10 + {tags_arr?.map((element: string) => <small>{element}</small>)} 11 + </div>
+10 -9
frontend/src/layouts/Base.astro
··· 1 1 --- 2 2 const { title } = Astro.props; 3 - import '../styles/main.css'; 3 + import "../styles/main.css"; 4 4 --- 5 + 5 6 <!doctype html> 6 7 <!-- 7 8 * clippr: a social bookmarking service for the AT Protocol ··· 9 10 * SPDX-License-Identifier: AGPL-3.0-only 10 11 --> 11 12 <html lang="en"> 12 - <head> 13 - <meta charset="UTF-8"/> 14 - <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 15 - <title>{title} | clippr</title> 16 - </head> 17 - <body> 18 - <slot /> 19 - </body> 13 + <head> 14 + <meta charset="UTF-8" /> 15 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 16 + <title>{title} | clippr</title> 17 + </head> 18 + <body> 19 + <slot /> 20 + </body> 20 21 </html>
+17 -13
frontend/src/layouts/Footer.astro
··· 1 1 --- 2 + 2 3 --- 4 + 3 5 <footer> 4 - <small> 5 - shoutout popbob! | ยฉ 2025 clippr contributors | <a href="https://tangled.sh/@noob.quest/clippr">source code</a> 6 - </small> 6 + <small> 7 + shoutout popbob! | ยฉ 2025 clippr contributors | <a 8 + href="https://tangled.sh/@noob.quest/clippr">source code</a 9 + > 10 + </small> 7 11 </footer> 8 12 9 13 <style> 10 - footer { 11 - background-color: #ddd; 12 - padding: 1em 0; 13 - color: black; 14 - text-align: center; 14 + footer { 15 + background-color: #ddd; 16 + padding: 1em 0; 17 + color: black; 18 + text-align: center; 15 19 16 - a { 17 - color: revert; 18 - } 19 - } 20 - </style> 20 + a { 21 + color: revert; 22 + } 23 + } 24 + </style>
+9 -7
frontend/src/layouts/Header.astro
··· 1 1 --- 2 + 2 3 --- 4 + 3 5 <header id="header-navbar"> 4 - <h1>clippr (beta!)</h1> 5 - <ul> 6 - <li><a href="/">home</a></li> 7 - <li><a href="/about">about</a></li> 8 - <li><a href="/login">login</a></li> 9 - </ul> 10 - </header> 6 + <h1>clippr (beta!)</h1> 7 + <ul> 8 + <li><a href="/">home</a></li> 9 + <li><a href="/about">about</a></li> 10 + <li><a href="/login">login</a></li> 11 + </ul> 12 + </header>
+23 -21
frontend/src/pages/404.astro
··· 3 3 import Header from "../layouts/Header.astro"; 4 4 import Footer from "../layouts/Footer.astro"; 5 5 --- 6 + 6 7 <Base title="404"> 7 - <Header/> 8 - <main class="404-page"> 9 - <h2>404 | page not found</h2> 10 - <p>the party seems to be over...</p> 11 - <a href="/">ยซ go home</a> 12 - </main> 13 - <Footer/> 8 + <Header /> 9 + <main class="404-page"> 10 + <h2>404 | page not found</h2> 11 + <p>the party seems to be over...</p> 12 + <a href="/">ยซ go home</a> 13 + </main> 14 + <Footer /> 14 15 </Base> 15 16 16 17 <style> 17 - main { 18 - display: flex !important; 19 - flex-direction: column !important; 20 - gap: 0.1rem; 21 - align-items: center; 22 - justify-content: center; 23 - } 18 + main { 19 + display: flex !important; 20 + flex-direction: column !important; 21 + gap: 0.1rem; 22 + align-items: center; 23 + justify-content: center; 24 + } 24 25 25 - h2, p { 26 - margin: 0.5rem 0; 27 - } 26 + h2, 27 + p { 28 + margin: 0.5rem 0; 29 + } 28 30 29 - a { 30 - color: revert; 31 - } 32 - </style> 31 + a { 32 + color: revert; 33 + } 34 + </style>
+7 -6
frontend/src/pages/about.astro
··· 3 3 import Header from "../layouts/Header.astro"; 4 4 import Footer from "../layouts/Footer.astro"; 5 5 --- 6 + 6 7 <Base title="about"> 7 - <Header/> 8 - <main> 9 - <p>Fill in later!</p> 10 - </main> 11 - <Footer/> 12 - </Base> 8 + <Header /> 9 + <main> 10 + <p>Fill in later!</p> 11 + </main> 12 + <Footer /> 13 + </Base>
+38 -29
frontend/src/pages/index.astro
··· 1 1 --- 2 - import Base from '../layouts/Base.astro'; 2 + import Base from "../layouts/Base.astro"; 3 3 import Header from "../layouts/Header.astro"; 4 4 import Footer from "../layouts/Footer.astro"; 5 5 import Clip from "../components/Clip.astro"; 6 6 import SidebarItem from "../components/SidebarItem.astro"; 7 7 --- 8 + 8 9 <Base title="home"> 9 - <Header/> 10 - <main> 11 - <div id="main-content"> 12 - <div id="clip-list"> 13 - <Clip title="google" link="https://google.com" tagList="technology,search,google" 14 - description="tests woah" 15 - originalClipper="popbob.com" firstClipDate="30m"/> 16 - </div> 17 - </div> 18 - <div id="sidebar"> 19 - <SidebarItem title="what is clippr?"> 20 - <p>clippr is a bookmarking site that doubles as a news aggregator.</p> 21 - <p>using your bookmarks (or "clips") and their associated tags, a constantly updated news feed is 22 - created based on what users are clipping to their collection.</p> 23 - <a href="/about">learn more ยป</a> 24 - </SidebarItem> 25 - <SidebarItem title="stats"> 26 - <h3>clips</h3> 27 - <p class="item-counter">0</p> 28 - <h3>sites</h3> 29 - <p class="item-counter">0</p> 30 - <h3>users</h3> 31 - <p class="item-counter">0</p> 32 - </SidebarItem> 33 - </div> 34 - </main> 35 - <Footer/> 36 - </Base> 10 + <Header /> 11 + <main> 12 + <div id="main-content"> 13 + <div id="clip-list"> 14 + <Clip 15 + title="google" 16 + link="https://google.com" 17 + tagList="technology,search,google" 18 + description="tests woah" 19 + originalClipper="popbob.com" 20 + firstClipDate="30m" 21 + /> 22 + </div> 23 + </div> 24 + <div id="sidebar"> 25 + <SidebarItem title="what is clippr?"> 26 + <p>clippr is a bookmarking site that doubles as a news aggregator.</p> 27 + <p> 28 + using your bookmarks (or "clips") and their associated tags, a 29 + constantly updated news feed is created based on what users are 30 + clipping to their collection. 31 + </p> 32 + <a href="/about">learn more ยป</a> 33 + </SidebarItem> 34 + <SidebarItem title="stats"> 35 + <h3>clips</h3> 36 + <p class="item-counter">0</p> 37 + <h3>sites</h3> 38 + <p class="item-counter">0</p> 39 + <h3>users</h3> 40 + <p class="item-counter">0</p> 41 + </SidebarItem> 42 + </div> 43 + </main> 44 + <Footer /> 45 + </Base>
+83 -77
frontend/src/pages/login.astro
··· 1 1 --- 2 - import Base from '../layouts/Base.astro'; 2 + import Base from "../layouts/Base.astro"; 3 3 import Header from "../layouts/Header.astro"; 4 4 import Footer from "../layouts/Footer.astro"; 5 5 --- 6 + 6 7 <Base title="login"> 7 - <Header/> 8 - <main> 9 - <div id="oauth-login"> 10 - <h2>log in</h2> 11 - <p>Enter your Bluesky handle.</p> 12 - <form> 13 - <label for="handle">handle</label> 14 - <input type="text" id="handle" name="handle" placeholder="handle"> 15 - <input type="submit" value="Authenticate"> 16 - </form> 17 - </div> 18 - <!--<p id="or">or...</p>--> 19 - <!--<div id="bluesky-login">--> 20 - <!-- <h2>use your bluesky account</h2>--> 21 - <!-- <button id="bluesky-login-button">login to bluesky</button>--> 22 - <!--</div>--> 23 - </main> 24 - <Footer/> 8 + <Header /> 9 + <main> 10 + <div id="oauth-login"> 11 + <h2>log in</h2> 12 + <p>Enter your Bluesky handle.</p> 13 + <form> 14 + <label for="handle">handle</label> 15 + <input 16 + type="text" 17 + id="handle" 18 + name="handle" 19 + placeholder="clippr.social" 20 + /> 21 + <input type="submit" value="Authenticate" /> 22 + </form> 23 + </div> 24 + <!--<p id="or">or...</p>--> 25 + <!--<div id="bluesky-login">--> 26 + <!-- <h2>use your bluesky account</h2>--> 27 + <!-- <button id="bluesky-login-button">login to bluesky</button>--> 28 + <!--</div>--> 29 + </main> 30 + <Footer /> 25 31 </Base> 26 32 27 33 <style> 28 - main { 29 - display: flex !important; 30 - flex-direction: column; 31 - align-items: center; 32 - justify-content: center; 33 - gap: 1rem; 34 - } 34 + main { 35 + display: flex !important; 36 + flex-direction: column; 37 + align-items: center; 38 + justify-content: center; 39 + gap: 1rem; 40 + } 35 41 36 - form { 37 - display: flex; 38 - flex-direction: column; 39 - justify-content: center; 42 + form { 43 + display: flex; 44 + flex-direction: column; 45 + justify-content: center; 40 46 41 - label { 42 - text-align: center; 43 - font-weight: bold; 44 - margin-bottom: 0.5rem; 45 - } 47 + label { 48 + text-align: center; 49 + font-weight: bold; 50 + margin-bottom: 0.5rem; 51 + } 46 52 47 - input[type="submit"] { 48 - margin: 1rem 0 0 0; 49 - padding: 0.5rem 0; 50 - width: 50%; 51 - align-self: center; 52 - } 53 - } 53 + input[type="submit"] { 54 + margin: 1rem 0 0 0; 55 + padding: 0.5rem 0; 56 + width: 50%; 57 + align-self: center; 58 + } 59 + } 54 60 55 - a { 56 - color: revert; 57 - } 61 + a { 62 + color: revert; 63 + } 58 64 59 - #or { 60 - border: 2px black solid; 61 - padding: 0.5rem 2rem; 62 - margin: 0; 63 - font-weight: bold; 64 - } 65 + #or { 66 + border: 2px black solid; 67 + padding: 0.5rem 2rem; 68 + margin: 0; 69 + font-weight: bold; 70 + } 65 71 66 - h2 { 67 - text-align: center; 68 - } 72 + h2 { 73 + text-align: center; 74 + margin-top: 0; 75 + } 69 76 70 - #bluesky-login { 71 - display: flex; 72 - flex-direction: column; 73 - justify-content: center; 74 - align-items: center; 77 + #bluesky-login { 78 + display: flex; 79 + flex-direction: column; 80 + justify-content: center; 81 + align-items: center; 75 82 76 - h2 { 77 - margin: 1rem 0; 78 - margin-top: 0; 79 - } 80 - } 83 + h2 { 84 + margin: 0 0 1rem; 85 + } 86 + } 81 87 82 - #bluesky-login-button { 83 - background: linear-gradient(deepskyblue, lightskyblue); 84 - border: none; 85 - border-radius: 10px; 86 - font-weight: bold; 87 - padding: 1rem 2rem; 88 - } 88 + #bluesky-login-button { 89 + background: linear-gradient(deepskyblue, lightskyblue); 90 + border: none; 91 + border-radius: 10px; 92 + font-weight: bold; 93 + padding: 1rem 2rem; 94 + } 89 95 90 - #bluesky-login-button:hover { 91 - cursor: pointer; 92 - filter: brightness(90%); 93 - transition: filter 0.3s ease-in-out; 94 - } 95 - </style> 96 + #bluesky-login-button:hover { 97 + cursor: pointer; 98 + filter: brightness(90%); 99 + transition: filter 0.3s ease-in-out; 100 + } 101 + </style>
+120 -120
frontend/src/styles/main.css
··· 5 5 */ 6 6 7 7 body { 8 - margin: 2rem auto; 9 - font-family: Arial, sans-serif; 10 - background-color: #bbb; 11 - width: 63%; 8 + margin: 2rem auto; 9 + font-family: Arial, sans-serif; 10 + background-color: #bbb; 11 + width: 63%; 12 12 } 13 13 14 14 @media (max-width: 768px) { 15 - body { 16 - margin: auto; 17 - width: 100%; 18 - } 15 + body { 16 + margin: auto; 17 + width: 100%; 18 + } 19 19 } 20 20 21 21 header { 22 - background-image: linear-gradient(#455372, #2b3854); 23 - color: white; 24 - display: flex; 25 - flex-direction: row; 26 - align-items: center; 27 - justify-content: space-between; 28 - padding: 0.5rem 1rem; 22 + background-image: linear-gradient(#455372, #2b3854); 23 + color: white; 24 + display: flex; 25 + flex-direction: row; 26 + align-items: center; 27 + justify-content: space-between; 28 + padding: 0.5rem 1rem; 29 29 30 - h1 { 31 - font-size: 1rem; 32 - } 30 + h1 { 31 + font-size: 1rem; 32 + } 33 33 34 - ul { 35 - list-style-type: none; 36 - margin: 0; 37 - display: flex; 38 - flex-direction: row; 39 - gap: 1.5rem; 40 - } 34 + ul { 35 + list-style-type: none; 36 + margin: 0; 37 + display: flex; 38 + flex-direction: row; 39 + gap: 1.5rem; 40 + } 41 41 } 42 42 43 43 a { 44 - text-decoration: none; 45 - color: white; 44 + text-decoration: none; 45 + color: white; 46 46 } 47 47 48 48 a:hover { 49 - font-style: italic; 49 + font-style: italic; 50 + font-weight: bold; 50 51 } 51 52 52 53 main { 53 - background-color: white; 54 - background-clip: border-box; 55 - padding: 1rem 0.5rem; 54 + background-color: white; 55 + background-clip: border-box; 56 + padding: 1rem 0.5rem; 56 57 57 - display: grid; 58 - grid-template-columns: 70% 30%; 58 + display: grid; 59 + grid-template-columns: 70% 30%; 59 60 } 60 61 61 62 #clip-list { 62 - margin: 0 0.5rem; 63 + margin: 0 0.5rem; 63 64 64 - .clip:first-of-type { 65 - margin: 0; 66 - } 65 + .clip:first-of-type { 66 + margin: 0; 67 + } 67 68 68 - .clip { 69 - margin: 1.5rem 0; 70 - } 69 + .clip { 70 + margin: 1.5rem 0; 71 + } 71 72 } 72 73 73 74 .clip { 74 - display: grid; 75 - grid-template-columns: auto; 76 - grid-template-rows: auto; 77 - grid-gap: 0.5rem; 75 + display: grid; 76 + grid-template-columns: auto; 77 + grid-template-rows: auto; 78 + grid-gap: 0.5rem; 78 79 79 - a { 80 - color: revert; 81 - } 80 + a { 81 + color: revert; 82 + } 82 83 83 - .clip-head { 84 - display: flex; 85 - flex-direction: row; 86 - align-items: center; 87 - gap: 1rem; 84 + .clip-head { 85 + display: flex; 86 + flex-direction: row; 87 + align-items: center; 88 + gap: 1rem; 88 89 89 - h2 { 90 - margin: 0; 91 - } 90 + h2 { 91 + margin: 0; 92 + } 92 93 93 - grid-column: 1; 94 - grid-row: 1; 95 - } 94 + grid-column: 1; 95 + grid-row: 1; 96 + } 96 97 97 - .clip-link { 98 - grid-column: 1; 99 - grid-row: 2; 100 - } 98 + .clip-link { 99 + grid-column: 1; 100 + grid-row: 2; 101 + } 101 102 102 - .clip-description { 103 - grid-column: 1; 104 - grid-row: 3; 103 + .clip-description { 104 + grid-column: 1; 105 + grid-row: 3; 105 106 106 - font-size: 0.8rem; 107 - margin: 0.25rem 0; 108 - } 107 + font-size: 0.8rem; 108 + margin: 0.25rem 0; 109 + } 109 110 110 - .clip-tags { 111 - margin: 0; 112 - } 111 + .clip-tags { 112 + margin: 0; 113 + } 113 114 114 - .clip-tags * { 115 - background: linear-gradient(#ffe076, #fff0cb) !important; 116 - padding: 0.25rem; 117 - margin: 0 0.25rem !important; 118 - border-radius: 0.34rem; 119 - border: 0.09rem solid black; 120 - } 115 + .clip-tags * { 116 + background: linear-gradient(#ffe076, #fff0cb) !important; 117 + padding: 0.25rem; 118 + margin: 0 0.25rem !important; 119 + border-radius: 0.34rem; 120 + border: 0.09rem solid black; 121 + } 121 122 122 - .clip-actions { 123 - display: flex; 124 - flex-direction: row; 125 - gap: 0.5rem; 126 - font-size: 0.8rem; 123 + .clip-actions { 124 + display: flex; 125 + flex-direction: row; 126 + gap: 0.5rem; 127 + font-size: 0.8rem; 127 128 128 - grid-column: 1; 129 - grid-row: 4; 130 - } 129 + grid-column: 1; 130 + grid-row: 4; 131 + } 131 132 132 - .original-clipper { 133 - color: #777 !important; 134 - } 133 + .original-clipper { 134 + color: #777 !important; 135 + } 135 136 } 136 137 137 138 #sidebar { 138 - margin: 0 1rem; 139 + margin: 0 1rem; 139 140 } 140 141 141 142 .sidebar-content { 142 - background-color: #bbbbbb; 143 - display: flex; 144 - flex-direction: column; 145 - align-items: center; 146 - justify-content: center; 143 + background-color: #bbbbbb; 144 + display: flex; 145 + flex-direction: column; 146 + align-items: center; 147 + justify-content: center; 147 148 148 - h3, p { 149 - margin: 0.5rem; 150 - } 149 + h3, 150 + p { 151 + margin: 0.5rem; 152 + } 151 153 152 - .item-counter { 153 - font-size: 2rem; 154 - } 154 + .item-counter { 155 + font-size: 2rem; 156 + } 155 157 } 156 158 157 159 .sidebar-item { 158 - padding: 0.5rem 0; 160 + padding: 0.5rem 0; 159 161 160 - h2 { 161 - margin: 0.5rem 0; 162 - } 162 + h2 { 163 + margin: 0.5rem 0; 164 + } 163 165 164 - a { 165 - align-self: start; 166 - color: revert; 167 - padding: 0.5rem 0.5rem; 168 - } 166 + a { 167 + align-self: start; 168 + color: revert; 169 + padding: 0.5rem 0.5rem; 170 + } 169 171 170 - a:hover { 171 - font-style: revert; 172 - text-decoration: underline; 173 - } 172 + a:hover { 173 + font-style: revert; 174 + text-decoration: underline; 175 + } 174 176 } 175 177 176 178 .sidebar-item:first-of-type { 177 - padding-top: 0; 179 + padding-top: 0; 178 180 179 - h2 { 180 - margin-top: 0; 181 - } 181 + h2 { 182 + margin-top: 0; 183 + } 182 184 } 183 - 184 -
+3 -3
frontend/tsconfig.json
··· 1 1 { 2 - "extends": "astro/tsconfigs/strictest", 3 - "include": [".astro/types.d.ts", "**/*"], 4 - "exclude": ["dist"] 2 + "extends": "astro/tsconfigs/strictest", 3 + "include": [".astro/types.d.ts", "**/*"], 4 + "exclude": ["dist"], 5 5 }
+42 -9
lexdocs/social/clippr/actor/defs.json
··· 4 4 "defs": { 5 5 "profileView": { 6 6 "type": "object", 7 + "description": "A view of an actor's profile.", 7 8 "required": [ 8 9 "did", 9 - "handle" 10 + "handle", 11 + "displayName" 10 12 ], 11 13 "properties": { 12 14 "did": { 13 15 "type": "string", 14 - "format": "did" 16 + "format": "did", 17 + "description": "The DID of the profile" 15 18 }, 16 19 "handle": { 17 20 "type": "string", 18 - "format": "handle" 21 + "format": "handle", 22 + "description": "The handle of the profile" 19 23 }, 20 24 "displayName": { 21 25 "type": "string", 22 - "minGraphemes": 1, 23 - "minLength": 10, 24 26 "maxGraphemes": 64, 25 - "maxLength": 640 27 + "maxLength": 640, 28 + "description": "The display name associated to the profile" 26 29 }, 27 30 "description": { 28 31 "type": "string", 29 32 "maxGraphemes": 500, 30 - "maxLength": 5000 33 + "maxLength": 5000, 34 + "description": "The biography associated to the profile" 31 35 }, 32 36 "avatar": { 33 37 "type": "string", 34 - "format": "uri" 38 + "format": "uri", 39 + "description": "A link to the profile's avatar" 35 40 }, 36 41 "createdAt": { 37 42 "type": "string", 38 - "format": "datetime" 43 + "format": "datetime", 44 + "description": "When the profile record was first created" 45 + } 46 + } 47 + }, 48 + "preferences": { 49 + "type": "array", 50 + "description": "An array of refs to various preferences.", 51 + "items": { 52 + "type": "union", 53 + "refs": [ 54 + "#publishingScopesPref" 55 + ] 56 + } 57 + }, 58 + "publishingScopesPref": { 59 + "type": "object", 60 + "description": "Preferences for an user's publishing scopes.", 61 + "required": [ 62 + "defaultScope" 63 + ], 64 + "properties": { 65 + "defaultScope": { 66 + "type": "string", 67 + "knownValues": [ 68 + "public", 69 + "unlisted" 70 + ], 71 + "description": "What publishing scope to mark a clip as by default" 39 72 } 40 73 } 41 74 }
+30
lexdocs/social/clippr/actor/getPreferences.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.actor.getPreferences", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the private user preferences associated to the account.", 8 + "parameters": { 9 + "type": "params", 10 + "properties": {} 11 + }, 12 + "output": { 13 + "encoding": "application/json", 14 + "schema": { 15 + "type": "object", 16 + "required": [ 17 + "preferences" 18 + ], 19 + "properties": { 20 + "preferences": { 21 + "type": "ref", 22 + "ref": "social.clippr.actor.defs#preferences", 23 + "description": "A ref to the user's preferences" 24 + } 25 + } 26 + } 27 + } 28 + } 29 + } 30 + }
+29 -28
lexdocs/social/clippr/actor/getProfile.json
··· 1 1 { 2 - "lexicon": 1, 3 - "id": "social.clippr.actor.getProfile", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Get profile view of an actor. Does not require auth.", 8 - "parameters": { 9 - "type": "params", 10 - "required": [ 11 - "actor" 12 - ], 13 - "properties": { 14 - "actor": { 15 - "type": "string", 16 - "format": "at-identifier", 17 - "description": "Handle or DID of account to fetch profile of." 18 - } 19 - } 20 - }, 21 - "output": { 22 - "encoding": "application/json", 23 - "schema": { 24 - "type": "ref", 25 - "ref": "social.clippr.actor.defs#profileView" 26 - } 27 - } 28 - } 29 - } 2 + "lexicon": 1, 3 + "id": "social.clippr.actor.getProfile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get profile view of an actor. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "actor" 12 + ], 13 + "properties": { 14 + "actor": { 15 + "type": "string", 16 + "format": "at-identifier", 17 + "description": "Handle or DID of account to fetch profile of" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "social.clippr.actor.defs#profileView", 26 + "description": "A reference to the profile view of the actor" 27 + } 28 + } 29 + } 30 + } 30 31 }
+44 -45
lexdocs/social/clippr/actor/profile.json
··· 1 1 { 2 - "lexicon": 1, 3 - "id": "social.clippr.actor.profile", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "A declaration of a Clippr account's profile.", 8 - "key": "literal:self", 9 - "record": { 10 - "type": "object", 11 - "required": [ 12 - "createdAt", 13 - "displayName" 14 - ], 15 - "properties": { 16 - "displayName": { 17 - "type": "string", 18 - "description": "A display name to be shown on a profile.", 19 - "minGraphemes": 1, 20 - "minLength": 10, 21 - "maxGraphemes": 64, 22 - "maxLength": 640 23 - }, 24 - "description": { 25 - "type": "string", 26 - "description": "Text for user to describe themselves", 27 - "maxGraphemes": 500, 28 - "maxLength": 5000 29 - }, 30 - "avatar": { 31 - "type": "blob", 32 - "description": "Image to show on user's profiles.", 33 - "accept": [ 34 - "image/png", 35 - "image/jpeg" 36 - ], 37 - "maxSize": 1000000 38 - }, 39 - "createdAt": { 40 - "type": "string", 41 - "format": "datetime" 42 - } 43 - } 44 - } 45 - } 46 - } 2 + "lexicon": 1, 3 + "id": "social.clippr.actor.profile", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a Clippr account's profile.", 8 + "key": "literal:self", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "createdAt", 13 + "displayName" 14 + ], 15 + "properties": { 16 + "displayName": { 17 + "type": "string", 18 + "description": "A display name to be shown on a profile", 19 + "maxGraphemes": 64, 20 + "maxLength": 640 21 + }, 22 + "description": { 23 + "type": "string", 24 + "description": "Text for user to describe themselves", 25 + "maxGraphemes": 500, 26 + "maxLength": 5000 27 + }, 28 + "avatar": { 29 + "type": "blob", 30 + "description": "Image to show on user's profiles", 31 + "accept": [ 32 + "image/png", 33 + "image/jpeg" 34 + ], 35 + "maxSize": 1000000 36 + }, 37 + "createdAt": { 38 + "type": "string", 39 + "format": "datetime", 40 + "description": "The creation date of the profile" 41 + } 42 + } 43 + } 44 + } 45 + } 47 46 }
+26
lexdocs/social/clippr/actor/putPreferences.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.actor.putPreferences", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Set the private preferences attached to the account.", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "preferences" 14 + ], 15 + "properties": { 16 + "preferences": { 17 + "type": "ref", 18 + "ref": "social.clippr.actor.defs#preferences", 19 + "description": "A ref to the user's preferences" 20 + } 21 + } 22 + } 23 + } 24 + } 25 + } 26 + }
+52
lexdocs/social/clippr/actor/searchProfiles.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.actor.searchProfiles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Find profiles matching search criteria. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "q": { 12 + "type": "string", 13 + "description": "Search query string" 14 + }, 15 + "limit": { 16 + "type": "integer", 17 + "minimum": 1, 18 + "maximum": 100, 19 + "default": 25, 20 + "description": "The number of profiles to be returned in the query" 21 + }, 22 + "cursor": { 23 + "type": "string", 24 + "description": "A parameter used for pagination" 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "object", 32 + "required": [ 33 + "actors" 34 + ], 35 + "properties": { 36 + "cursor": { 37 + "type": "string", 38 + "description": "A parameter used for pagination" 39 + }, 40 + "actors": { 41 + "type": "array", 42 + "items": { 43 + "type": "ref", 44 + "ref": "social.clippr.actor.defs#profileView" 45 + } 46 + } 47 + } 48 + } 49 + } 50 + } 51 + } 52 + }
+78 -86
lexdocs/social/clippr/feed/clip.json
··· 1 1 { 2 - "lexicon": 1, 3 - "id": "social.clippr.feed.clip", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "Record containing a bookmark item, or 'clip'.", 8 - "key": "any", 9 - "record": { 10 - "type": "object", 11 - "required": [ 12 - "url", 13 - "title", 14 - "description", 15 - "unlisted", 16 - "createdAt" 17 - ], 18 - "properties": { 19 - "url": { 20 - "type": "string", 21 - "format": "uri", 22 - "description": "The URL of the bookmark. Cannot be left empty or be modified after creation.", 23 - "minGraphemes": 3, 24 - "minLength": 30, 25 - "maxGraphemes": 2000, 26 - "maxLength": 20000 27 - }, 28 - "title": { 29 - "type": "string", 30 - "description": "The title of the bookmark. If left empty, reuse the URL.", 31 - "minGraphemes": 1, 32 - "minLength": 10, 33 - "maxGraphemes": 2048, 34 - "maxLength": 20480 35 - }, 36 - "description": { 37 - "type": "string", 38 - "description": "A description of the bookmark's content. This should be ripped from the URL metadata and be static for all records using the URL.", 39 - "minGraphemes": 1, 40 - "minLength": 10, 41 - "maxGraphemes": 4096, 42 - "maxLength": 40960 43 - }, 44 - "notes": { 45 - "type": "string", 46 - "description": "User-written notes for the bookmark. Public and personal.", 47 - "minGraphemes": 1, 48 - "minLength": 10, 49 - "maxGraphemes": 10000, 50 - "maxLength": 100000 51 - }, 52 - "tags": { 53 - "type": "array", 54 - "description": "An array of tags. A format of solely alphanumeric characters and dashes should be used.", 55 - "items": { 56 - "type": "ref", 57 - "ref": "com.atproto.repo.strongRef" 58 - } 59 - }, 60 - "unlisted": { 61 - "type": "boolean", 62 - "description": "Whether the bookmark can be used for feed indexing and aggregation.", 63 - "default": false 64 - }, 65 - "unread": { 66 - "type": "boolean", 67 - "description": "Whether the bookmark has been read by the user.", 68 - "default": true 69 - }, 70 - "languages": { 71 - "type": "array", 72 - "description": "Indicates human language of the given URL.", 73 - "maxLength": 5, 74 - "items": { 75 - "type": "string", 76 - "format": "language" 77 - } 78 - }, 79 - "createdAt": { 80 - "type": "string", 81 - "description": "Client-declared timestamp when the bookmark is created.", 82 - "format": "datetime" 83 - } 84 - } 85 - } 86 - } 87 - } 2 + "lexicon": 1, 3 + "id": "social.clippr.feed.clip", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "Record containing a bookmarked item, or 'clip'.", 8 + "key": "any", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "url", 13 + "title", 14 + "description", 15 + "unlisted", 16 + "createdAt" 17 + ], 18 + "properties": { 19 + "url": { 20 + "type": "string", 21 + "format": "uri", 22 + "description": "The URL of the bookmark. Cannot be left empty or be modified after creation.", 23 + "maxGraphemes": 2000, 24 + "maxLength": 20000 25 + }, 26 + "title": { 27 + "type": "string", 28 + "description": "The title of the bookmark. If left empty, reuse the URL.", 29 + "maxGraphemes": 2048, 30 + "maxLength": 20480 31 + }, 32 + "description": { 33 + "type": "string", 34 + "description": "A description of the bookmark's content. This should be ripped from the URL metadata and be static for all records using the URL.", 35 + "maxGraphemes": 4096, 36 + "maxLength": 40960 37 + }, 38 + "notes": { 39 + "type": "string", 40 + "description": "User-written notes for the bookmark. Public and personal.", 41 + "maxGraphemes": 10000, 42 + "maxLength": 100000 43 + }, 44 + "tags": { 45 + "type": "array", 46 + "description": "An array of tags. A format of solely alphanumeric characters and dashes should be used.", 47 + "items": { 48 + "type": "ref", 49 + "ref": "com.atproto.repo.strongRef" 50 + } 51 + }, 52 + "unlisted": { 53 + "type": "boolean", 54 + "description": "Whether the bookmark can be used for feed indexing and aggregation", 55 + "default": false 56 + }, 57 + "unread": { 58 + "type": "boolean", 59 + "description": "Whether the bookmark has been read by the user", 60 + "default": true 61 + }, 62 + "languages": { 63 + "type": "array", 64 + "description": "Indicates human language of the given URL", 65 + "maxLength": 5, 66 + "items": { 67 + "type": "string", 68 + "format": "language" 69 + } 70 + }, 71 + "createdAt": { 72 + "type": "string", 73 + "description": "Client-declared timestamp when the bookmark is created", 74 + "format": "datetime" 75 + } 76 + } 77 + } 78 + } 79 + } 88 80 }
+75 -2
lexdocs/social/clippr/feed/defs.json
··· 2 2 "lexicon": 1, 3 3 "id": "social.clippr.feed.defs", 4 4 "defs": { 5 - 5 + "clipView": { 6 + "type": "object", 7 + "description": "A view of a single bookmark (or 'clip').", 8 + "required": [ 9 + "uri", 10 + "cid", 11 + "author", 12 + "record", 13 + "indexedAt" 14 + ], 15 + "properties": { 16 + "uri": { 17 + "type": "string", 18 + "format": "at-uri", 19 + "description": "The AT-URI of the clip" 20 + }, 21 + "cid": { 22 + "type": "string", 23 + "format": "cid", 24 + "description": "The CID of the clip" 25 + }, 26 + "author": { 27 + "type": "ref", 28 + "ref": "social.clippr.actor.defs#profileView", 29 + "description": "A reference to the actor's profile" 30 + }, 31 + "record": { 32 + "type": "unknown", 33 + "description": "The raw record of the clip" 34 + }, 35 + "indexedAt": { 36 + "type": "string", 37 + "format": "datetime", 38 + "description": "When the tag was first indexed by the AppView" 39 + } 40 + } 41 + }, 42 + "tagView": { 43 + "type": "object", 44 + "description": "A view of a single tag.", 45 + "required": [ 46 + "uri", 47 + "cid", 48 + "author", 49 + "record", 50 + "indexedAt" 51 + ], 52 + "properties": { 53 + "uri": { 54 + "type": "string", 55 + "format": "at-uri", 56 + "description": "The AT-URI to the tag" 57 + }, 58 + "cid": { 59 + "type": "string", 60 + "format": "cid", 61 + "description": "The CID of the tag" 62 + }, 63 + "author": { 64 + "type": "ref", 65 + "ref": "social.clippr.actor.defs#profileView", 66 + "description": "A reference to the actor's profile" 67 + }, 68 + "record": { 69 + "type": "unknown", 70 + "description": "The raw record of the tag" 71 + }, 72 + "indexedAt": { 73 + "type": "string", 74 + "format": "datetime", 75 + "description": "When the tag was first indexed by the AppView" 76 + } 77 + } 78 + } 6 79 } 7 - } 80 + }
+46
lexdocs/social/clippr/feed/getClips.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.feed.getClips", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a list of clips. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uris" 12 + ], 13 + "properties": { 14 + "uris": { 15 + "type": "array", 16 + "description": "List of clip AT-URIs to return hydrated views for", 17 + "items": { 18 + "type": "string", 19 + "format": "at-uri" 20 + }, 21 + "maxLength": 25 22 + } 23 + } 24 + }, 25 + "output": { 26 + "encoding": "application/json", 27 + "schema": { 28 + "type": "object", 29 + "required": [ 30 + "clips" 31 + ], 32 + "properties": { 33 + "clips": { 34 + "type": "array", 35 + "items": { 36 + "type": "ref", 37 + "ref": "social.clippr.feed.defs#clipView" 38 + }, 39 + "description": "An array of hydrated clip views" 40 + } 41 + } 42 + } 43 + } 44 + } 45 + } 46 + }
+65
lexdocs/social/clippr/feed/getProfileClips.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.feed.getProfileClips", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a view of a profile's reverse-chronological clips feed. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "actor" 12 + ], 13 + "properties": { 14 + "actor": { 15 + "type": "string", 16 + "format": "at-identifier", 17 + "description": "An actor to get feed data from" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "minimum": 1, 22 + "maximum": 100, 23 + "default": 50, 24 + "description": "How many results to return with the query" 25 + }, 26 + "cursor": { 27 + "type": "string", 28 + "description": "A parameter to paginate results" 29 + }, 30 + "filter": { 31 + "type": "string", 32 + "knownValues": [ 33 + "all_clips", 34 + "tagged_clips", 35 + "untagged_clips" 36 + ], 37 + "default": "all_clips", 38 + "description": "What types to include in response" 39 + } 40 + } 41 + }, 42 + "output": { 43 + "encoding": "application/json", 44 + "schema": { 45 + "type": "object", 46 + "required": [ 47 + "feed" 48 + ], 49 + "properties": { 50 + "cursor": { 51 + "type": "string" 52 + }, 53 + "feed": { 54 + "type": "array", 55 + "items": { 56 + "type": "ref", 57 + "ref": "social.clippr.feed.defs#clipView" 58 + } 59 + } 60 + } 61 + } 62 + } 63 + } 64 + } 65 + }
lexdocs/social/clippr/feed/getProfileFeed.json

This is a binary file and will not be displayed.

+55
lexdocs/social/clippr/feed/getProfileTags.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.feed.getProfileTags", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a view of a profile's reverse-chronological clips feed. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "actor" 12 + ], 13 + "properties": { 14 + "actor": { 15 + "type": "string", 16 + "format": "at-identifier", 17 + "description": "An actor to get feed data from" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "minimum": 1, 22 + "maximum": 100, 23 + "default": 50, 24 + "description": "How many results to return with the query" 25 + }, 26 + "cursor": { 27 + "type": "string", 28 + "description": "A parameter to paginate results" 29 + } 30 + } 31 + }, 32 + "output": { 33 + "encoding": "application/json", 34 + "schema": { 35 + "type": "object", 36 + "required": [ 37 + "feed" 38 + ], 39 + "properties": { 40 + "cursor": { 41 + "type": "string" 42 + }, 43 + "feed": { 44 + "type": "array", 45 + "items": { 46 + "type": "ref", 47 + "ref": "social.clippr.feed.defs#tagView" 48 + } 49 + } 50 + } 51 + } 52 + } 53 + } 54 + } 55 + }
+39
lexdocs/social/clippr/feed/getTagList.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.feed.getTagList", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a user's list of tags. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "actor": { 12 + "type": "string", 13 + "format": "at-identifier", 14 + "description": "An actor to fetch the tag list from" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "object", 22 + "required": [ 23 + "tags" 24 + ], 25 + "properties": { 26 + "tags": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "social.clippr.feed.defs#tagView" 31 + }, 32 + "description": "A list of tags and their associated details" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + }
+46
lexdocs/social/clippr/feed/getTags.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.feed.getTags", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a list of tags. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uris" 12 + ], 13 + "properties": { 14 + "uris": { 15 + "type": "array", 16 + "description": "List of tag AT-URIs to return hydrated views for", 17 + "items": { 18 + "type": "string", 19 + "format": "at-uri" 20 + }, 21 + "maxLength": 25 22 + } 23 + } 24 + }, 25 + "output": { 26 + "encoding": "application/json", 27 + "schema": { 28 + "type": "object", 29 + "required": [ 30 + "tags" 31 + ], 32 + "properties": { 33 + "tags": { 34 + "type": "array", 35 + "items": { 36 + "type": "ref", 37 + "ref": "social.clippr.feed.defs#tagView" 38 + }, 39 + "description": "An array of hydrated tag views" 40 + } 41 + } 42 + } 43 + } 44 + } 45 + } 46 + }
+61
lexdocs/social/clippr/feed/searchClips.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.actor.searchClips", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Find clips matching search criteria. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "q" 12 + ], 13 + "properties": { 14 + "q": { 15 + "type": "string", 16 + "description": "Search query string" 17 + }, 18 + "limit": { 19 + "type": "integer", 20 + "minimum": 1, 21 + "maximum": 100, 22 + "default": 25, 23 + "description": "How many clips to return in the query output" 24 + }, 25 + "actor": { 26 + "type": "string", 27 + "format": "at-identifier", 28 + "description": "An actor to filter results to" 29 + }, 30 + "cursor": { 31 + "type": "string", 32 + "description": "A parameter to paginate results" 33 + } 34 + } 35 + }, 36 + "output": { 37 + "encoding": "application/json", 38 + "schema": { 39 + "type": "object", 40 + "required": [ 41 + "clips" 42 + ], 43 + "properties": { 44 + "cursor": { 45 + "type": "string", 46 + "description": "A parameter to paginate results" 47 + }, 48 + "clips": { 49 + "type": "array", 50 + "items": { 51 + "type": "ref", 52 + "ref": "social.clippr.feed.defs#clipView" 53 + }, 54 + "description": "A list of clips and their associated details" 55 + } 56 + } 57 + } 58 + } 59 + } 60 + } 61 + }
+61
lexdocs/social/clippr/feed/searchTags.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.clippr.actor.searchTags", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Find tags matching search criteria. Does not require auth.", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "q" 12 + ], 13 + "properties": { 14 + "q": { 15 + "type": "string", 16 + "description": "Search query string" 17 + }, 18 + "limit": { 19 + "type": "integer", 20 + "minimum": 1, 21 + "maximum": 100, 22 + "default": 25, 23 + "description": "How many tags to return in the query output" 24 + }, 25 + "actor": { 26 + "type": "string", 27 + "format": "at-identifier", 28 + "description": "An actor to filter results to" 29 + }, 30 + "cursor": { 31 + "type": "string", 32 + "description": "A parameter to paginate results" 33 + } 34 + } 35 + }, 36 + "output": { 37 + "encoding": "application/json", 38 + "schema": { 39 + "type": "object", 40 + "required": [ 41 + "tags" 42 + ], 43 + "properties": { 44 + "cursor": { 45 + "type": "string", 46 + "description": "A parameter to paginate results" 47 + }, 48 + "tags": { 49 + "type": "array", 50 + "items": { 51 + "type": "ref", 52 + "ref": "social.clippr.feed.defs#tagView" 53 + }, 54 + "description": "A list of tags and their associated details" 55 + } 56 + } 57 + } 58 + } 59 + } 60 + } 61 + }
+41 -39
lexdocs/social/clippr/feed/tag.json
··· 1 1 { 2 - "lexicon": 1, 3 - "id": "social.clippr.feed.tag", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "A record containing a bookmark tag for organization.", 8 - "key": "any", 9 - "record": { 10 - "type": "object", 11 - "required": [ 12 - "name", 13 - "createdAt" 14 - ], 15 - "properties": { 16 - "name": { 17 - "type": "string", 18 - "description": "A de-duplicated string containing the name of the tag.", 19 - "minGraphemes": 1, 20 - "minLength": 10, 21 - "maxGraphemes": 64, 22 - "maxLength": 640 23 - }, 24 - "color": { 25 - "type": "string", 26 - "description": "A hexadecimal color code.", 27 - "minGraphemes": 4, 28 - "minLength": 40, 29 - "maxGraphemes": 7, 30 - "maxLength": 70 31 - }, 32 - "createdAt": { 33 - "type": "string", 34 - "description": "A client-defined timestamp for the creation of the tag.", 35 - "format": "datetime" 36 - } 37 - } 38 - } 39 - } 40 - } 2 + "lexicon": 1, 3 + "id": "social.clippr.feed.tag", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A record containing a bookmark tag for organization.", 8 + "key": "any", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "name", 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "name": { 17 + "type": "string", 18 + "maxGraphemes": 64, 19 + "maxLength": 640, 20 + "description": "A de-duplicated string containing the name of the tag" 21 + }, 22 + "color": { 23 + "type": "string", 24 + "maxGraphemes": 7, 25 + "maxLength": 70, 26 + "description": "A hexadecimal color code" 27 + }, 28 + "description": { 29 + "type": "string", 30 + "maxGraphemes": 5000, 31 + "maxLength": 50000, 32 + "description": "A description of the tag for additional context" 33 + }, 34 + "createdAt": { 35 + "type": "string", 36 + "format": "datetime", 37 + "description": "A client-defined timestamp for the creation of the tag" 38 + } 39 + } 40 + } 41 + } 42 + } 41 43 }
+39
lexicons/CHANGELOG.md
··· 1 + # changelog for @clipprjs/lexicons 2 + 3 + ## v1.0.2 4 + * fix some description typos 5 + * fix `social.clippr.feed.getTags` not existing due to an ID collision 6 + 7 + ## v1.0.1 8 + 9 + * remove minimum character prompts due to schema validation errors that broke otherwise valid records 10 + 11 + ## v1.0.0 12 + 13 + > this version should be considered as the starting point for a usable Lexicon API. previous versions should be ignored. 14 + 15 + * added search queries for clips, tags and profiles 16 + * added `social.clippr.actor.defs#preferences` with an accompanying query and procedure lexicon 17 + * added more inline documentation to previously existing lexicons 18 + * added query lexicons for having a clip and tag feed on a profile 19 + * added general query lexicons for at:// URIs linking to clips and tags 20 + 21 + ## v0.1.4 22 + 23 + * added length constraints to more strings in record lexicons 24 + 25 + ## v0.1.3 26 + 27 + * made `displayName` required for profile records 28 + 29 + ## v0.1.2 30 + 31 + * added npm tags.. i guess 32 + 33 + ## v0.1.1 34 + 35 + * something(?) 36 + 37 + ## v0.1.0 38 + 39 + * initial record and `social.clippr.actor.getProfile` query lexicons
+2 -2
lexicons/README.md
··· 2 2 3 3 Lexicon package auto-generated with `@atcute/lex-cli` 4 4 5 - > This package is *very* unstable. Lexicon attributes can be modified at any moment. 5 + > This package is *somewhat* unstable. Lexicon attributes can be modified at any moment. 6 6 > Please do not use this package for anything until the [Clippr server](https://tangled.sh/@hexmani.ac/clippr) has been 7 - > deployed for either public or developer consumption. 7 + > deployed for either public or developer usage. 8 8 9 9 ## Usage 10 10
+16 -16
lexicons/lex.config.js
··· 8 8 import {defineLexiconConfig} from "@atcute/lex-cli"; 9 9 10 10 export default defineLexiconConfig({ 11 - files: ["../lexdocs/**/*.json"], 12 - outdir: "lib/lexicons", 13 - mappings: [ 14 - { 15 - nsid: ["com.atproto.*"], 16 - imports: (nsid) => { 17 - const specifier = nsid 18 - .slice("com.atproto.".length) 19 - .replaceAll(".", "/"); 20 - return { 21 - type: "namespace", 22 - from: `@atcute/atproto/types/${specifier}`, 23 - }; 24 - }, 25 - }, 26 - ], 11 + files: ["../lexdocs/**/*.json"], 12 + outdir: "lib/lexicons", 13 + mappings: [ 14 + { 15 + nsid: ["com.atproto.*"], 16 + imports: (nsid) => { 17 + const specifier = nsid 18 + .slice("com.atproto.".length) 19 + .replaceAll(".", "/"); 20 + return { 21 + type: "namespace", 22 + from: `@atcute/atproto/types/${specifier}`, 23 + }; 24 + }, 25 + }, 26 + ], 27 27 });
+11
lexicons/lib/lexicons/index.ts
··· 5 5 */ 6 6 7 7 export * as SocialClipprActorDefs from "./types/social/clippr/actor/defs.js"; 8 + export * as SocialClipprActorGetPreferences from "./types/social/clippr/actor/getPreferences.js"; 8 9 export * as SocialClipprActorGetProfile from "./types/social/clippr/actor/getProfile.js"; 9 10 export * as SocialClipprActorProfile from "./types/social/clippr/actor/profile.js"; 11 + export * as SocialClipprActorPutPreferences from "./types/social/clippr/actor/putPreferences.js"; 12 + export * as SocialClipprActorSearchClips from "./types/social/clippr/actor/searchClips.js"; 13 + export * as SocialClipprActorSearchProfiles from "./types/social/clippr/actor/searchProfiles.js"; 14 + export * as SocialClipprActorSearchTags from "./types/social/clippr/actor/searchTags.js"; 10 15 export * as SocialClipprFeedClip from "./types/social/clippr/feed/clip.js"; 16 + export * as SocialClipprFeedDefs from "./types/social/clippr/feed/defs.js"; 17 + export * as SocialClipprFeedGetClips from "./types/social/clippr/feed/getClips.js"; 18 + export * as SocialClipprFeedGetProfileClips from "./types/social/clippr/feed/getProfileClips.js"; 19 + export * as SocialClipprFeedGetProfileTags from "./types/social/clippr/feed/getProfileTags.js"; 20 + export * as SocialClipprFeedGetTagList from "./types/social/clippr/feed/getTagList.js"; 21 + export * as SocialClipprFeedGetTags from "./types/social/clippr/feed/getTags.js"; 11 22 export * as SocialClipprFeedTag from "./types/social/clippr/feed/tag.js";
+24 -6
lexicons/lib/lexicons/types/social/clippr/actor/defs.ts
··· 7 7 import type {} from "@atcute/lexicons"; 8 8 import * as v from "@atcute/lexicons/validations"; 9 9 10 + const _preferencesSchema = /*#__PURE__*/ v.array(() => { 11 + return /*#__PURE__*/ v.variant([publishingScopesPrefSchema]); 12 + }); 10 13 const _profileViewSchema = /*#__PURE__*/ v.object({ 11 14 $type: /*#__PURE__*/ v.optional( 12 15 /*#__PURE__*/ v.literal("social.clippr.actor.defs#profileView"), ··· 20 23 ]), 21 24 ), 22 25 did: /*#__PURE__*/ v.didString(), 23 - displayName: /*#__PURE__*/ v.optional( 24 - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 25 - /*#__PURE__*/ v.stringLength(10, 640), 26 - /*#__PURE__*/ v.stringGraphemes(1, 64), 27 - ]), 28 - ), 26 + displayName: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 27 + /*#__PURE__*/ v.stringLength(0, 640), 28 + /*#__PURE__*/ v.stringGraphemes(0, 64), 29 + ]), 29 30 handle: /*#__PURE__*/ v.handleString(), 30 31 }); 32 + const _publishingScopesPrefSchema = /*#__PURE__*/ v.object({ 33 + $type: /*#__PURE__*/ v.optional( 34 + /*#__PURE__*/ v.literal("social.clippr.actor.defs#publishingScopesPref"), 35 + ), 36 + defaultScope: /*#__PURE__*/ v.string<"public" | "unlisted" | (string & {})>(), 37 + }); 31 38 39 + type preferences$schematype = typeof _preferencesSchema; 32 40 type profileView$schematype = typeof _profileViewSchema; 41 + type publishingScopesPref$schematype = typeof _publishingScopesPrefSchema; 33 42 43 + export interface preferencesSchema extends preferences$schematype {} 34 44 export interface profileViewSchema extends profileView$schematype {} 45 + export interface publishingScopesPrefSchema 46 + extends publishingScopesPref$schematype {} 35 47 48 + export const preferencesSchema = _preferencesSchema as preferencesSchema; 36 49 export const profileViewSchema = _profileViewSchema as profileViewSchema; 50 + export const publishingScopesPrefSchema = 51 + _publishingScopesPrefSchema as publishingScopesPrefSchema; 37 52 53 + export interface Preferences extends v.InferInput<typeof preferencesSchema> {} 38 54 export interface ProfileView extends v.InferInput<typeof profileViewSchema> {} 55 + export interface PublishingScopesPref 56 + extends v.InferInput<typeof publishingScopesPrefSchema> {}
+40
lexicons/lib/lexicons/types/social/clippr/actor/getPreferences.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprActorDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query( 13 + "social.clippr.actor.getPreferences", 14 + { 15 + params: /*#__PURE__*/ v.object({}), 16 + output: { 17 + type: "lex", 18 + schema: /*#__PURE__*/ v.object({ 19 + get preferences() { 20 + return SocialClipprActorDefs.preferencesSchema; 21 + }, 22 + }), 23 + }, 24 + }, 25 + ); 26 + 27 + type main$schematype = typeof _mainSchema; 28 + 29 + export interface mainSchema extends main$schematype {} 30 + 31 + export const mainSchema = _mainSchema as mainSchema; 32 + 33 + export interface $params extends v.InferInput<mainSchema["params"]> {} 34 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 35 + 36 + declare module "@atcute/lexicons/ambient" { 37 + interface XRPCQueries { 38 + "social.clippr.actor.getPreferences": mainSchema; 39 + } 40 + }
+2 -2
lexicons/lib/lexicons/types/social/clippr/actor/profile.ts
··· 21 21 ]), 22 22 ), 23 23 displayName: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 24 - /*#__PURE__*/ v.stringLength(10, 640), 25 - /*#__PURE__*/ v.stringGraphemes(1, 64), 24 + /*#__PURE__*/ v.stringLength(0, 640), 25 + /*#__PURE__*/ v.stringGraphemes(0, 64), 26 26 ]), 27 27 }), 28 28 );
+41
lexicons/lib/lexicons/types/social/clippr/actor/putPreferences.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprActorDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.procedure( 13 + "social.clippr.actor.putPreferences", 14 + { 15 + params: null, 16 + input: { 17 + type: "lex", 18 + schema: /*#__PURE__*/ v.object({ 19 + get preferences() { 20 + return SocialClipprActorDefs.preferencesSchema; 21 + }, 22 + }), 23 + }, 24 + output: null, 25 + }, 26 + ); 27 + 28 + type main$schematype = typeof _mainSchema; 29 + 30 + export interface mainSchema extends main$schematype {} 31 + 32 + export const mainSchema = _mainSchema as mainSchema; 33 + 34 + export interface $params {} 35 + export interface $input extends v.InferXRPCBodyInput<mainSchema["input"]> {} 36 + 37 + declare module "@atcute/lexicons/ambient" { 38 + interface XRPCProcedures { 39 + "social.clippr.actor.putPreferences": mainSchema; 40 + } 41 + }
+48
lexicons/lib/lexicons/types/social/clippr/actor/searchClips.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprFeedDefs from "../feed/defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query("social.clippr.actor.searchClips", { 13 + params: /*#__PURE__*/ v.object({ 14 + actor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.actorIdentifierString()), 15 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 16 + limit: /*#__PURE__*/ v.optional( 17 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ 18 + /*#__PURE__*/ v.integerRange(1, 100), 19 + ]), 20 + 25, 21 + ), 22 + q: /*#__PURE__*/ v.string(), 23 + }), 24 + output: { 25 + type: "lex", 26 + schema: /*#__PURE__*/ v.object({ 27 + get clips() { 28 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.clipViewSchema); 29 + }, 30 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 31 + }), 32 + }, 33 + }); 34 + 35 + type main$schematype = typeof _mainSchema; 36 + 37 + export interface mainSchema extends main$schematype {} 38 + 39 + export const mainSchema = _mainSchema as mainSchema; 40 + 41 + export interface $params extends v.InferInput<mainSchema["params"]> {} 42 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 43 + 44 + declare module "@atcute/lexicons/ambient" { 45 + interface XRPCQueries { 46 + "social.clippr.actor.searchClips": mainSchema; 47 + } 48 + }
+50
lexicons/lib/lexicons/types/social/clippr/actor/searchProfiles.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprActorDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query( 13 + "social.clippr.actor.searchProfiles", 14 + { 15 + params: /*#__PURE__*/ v.object({ 16 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 17 + limit: /*#__PURE__*/ v.optional( 18 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ 19 + /*#__PURE__*/ v.integerRange(1, 100), 20 + ]), 21 + 25, 22 + ), 23 + q: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 24 + }), 25 + output: { 26 + type: "lex", 27 + schema: /*#__PURE__*/ v.object({ 28 + get actors() { 29 + return /*#__PURE__*/ v.array(SocialClipprActorDefs.profileViewSchema); 30 + }, 31 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 32 + }), 33 + }, 34 + }, 35 + ); 36 + 37 + type main$schematype = typeof _mainSchema; 38 + 39 + export interface mainSchema extends main$schematype {} 40 + 41 + export const mainSchema = _mainSchema as mainSchema; 42 + 43 + export interface $params extends v.InferInput<mainSchema["params"]> {} 44 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 45 + 46 + declare module "@atcute/lexicons/ambient" { 47 + interface XRPCQueries { 48 + "social.clippr.actor.searchProfiles": mainSchema; 49 + } 50 + }
+48
lexicons/lib/lexicons/types/social/clippr/actor/searchTags.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprFeedDefs from "../feed/defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query("social.clippr.actor.searchTags", { 13 + params: /*#__PURE__*/ v.object({ 14 + actor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.actorIdentifierString()), 15 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 16 + limit: /*#__PURE__*/ v.optional( 17 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ 18 + /*#__PURE__*/ v.integerRange(1, 100), 19 + ]), 20 + 25, 21 + ), 22 + q: /*#__PURE__*/ v.string(), 23 + }), 24 + output: { 25 + type: "lex", 26 + schema: /*#__PURE__*/ v.object({ 27 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 28 + get tags() { 29 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.tagViewSchema); 30 + }, 31 + }), 32 + }, 33 + }); 34 + 35 + type main$schematype = typeof _mainSchema; 36 + 37 + export interface mainSchema extends main$schematype {} 38 + 39 + export const mainSchema = _mainSchema as mainSchema; 40 + 41 + export interface $params extends v.InferInput<mainSchema["params"]> {} 42 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 43 + 44 + declare module "@atcute/lexicons/ambient" { 45 + interface XRPCQueries { 46 + "social.clippr.actor.searchTags": mainSchema; 47 + } 48 + }
+8 -8
lexicons/lib/lexicons/types/social/clippr/feed/clip.ts
··· 15 15 $type: /*#__PURE__*/ v.literal("social.clippr.feed.clip"), 16 16 createdAt: /*#__PURE__*/ v.datetimeString(), 17 17 description: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 18 - /*#__PURE__*/ v.stringLength(10, 40960), 19 - /*#__PURE__*/ v.stringGraphemes(1, 4096), 18 + /*#__PURE__*/ v.stringLength(0, 40960), 19 + /*#__PURE__*/ v.stringGraphemes(0, 4096), 20 20 ]), 21 21 languages: /*#__PURE__*/ v.optional( 22 22 /*#__PURE__*/ v.constrain( ··· 26 26 ), 27 27 notes: /*#__PURE__*/ v.optional( 28 28 /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 29 - /*#__PURE__*/ v.stringLength(10, 100000), 30 - /*#__PURE__*/ v.stringGraphemes(1, 10000), 29 + /*#__PURE__*/ v.stringLength(0, 100000), 30 + /*#__PURE__*/ v.stringGraphemes(0, 10000), 31 31 ]), 32 32 ), 33 33 get tags() { ··· 36 36 ); 37 37 }, 38 38 title: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 39 - /*#__PURE__*/ v.stringLength(10, 20480), 40 - /*#__PURE__*/ v.stringGraphemes(1, 2048), 39 + /*#__PURE__*/ v.stringLength(0, 20480), 40 + /*#__PURE__*/ v.stringGraphemes(0, 2048), 41 41 ]), 42 42 unlisted: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean(), false), 43 43 unread: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean(), true), 44 44 url: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.genericUriString(), [ 45 - /*#__PURE__*/ v.stringLength(30, 20000), 46 - /*#__PURE__*/ v.stringGraphemes(3, 2000), 45 + /*#__PURE__*/ v.stringLength(0, 20000), 46 + /*#__PURE__*/ v.stringGraphemes(0, 2000), 47 47 ]), 48 48 }), 49 49 );
+46
lexicons/lib/lexicons/types/social/clippr/feed/defs.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import * as SocialClipprActorDefs from "../actor/defs.js"; 10 + 11 + const _clipViewSchema = /*#__PURE__*/ v.object({ 12 + $type: /*#__PURE__*/ v.optional( 13 + /*#__PURE__*/ v.literal("social.clippr.feed.defs#clipView"), 14 + ), 15 + get author() { 16 + return SocialClipprActorDefs.profileViewSchema; 17 + }, 18 + cid: /*#__PURE__*/ v.cidString(), 19 + indexedAt: /*#__PURE__*/ v.datetimeString(), 20 + record: /*#__PURE__*/ v.unknown(), 21 + uri: /*#__PURE__*/ v.resourceUriString(), 22 + }); 23 + const _tagViewSchema = /*#__PURE__*/ v.object({ 24 + $type: /*#__PURE__*/ v.optional( 25 + /*#__PURE__*/ v.literal("social.clippr.feed.defs#tagView"), 26 + ), 27 + get author() { 28 + return SocialClipprActorDefs.profileViewSchema; 29 + }, 30 + cid: /*#__PURE__*/ v.cidString(), 31 + indexedAt: /*#__PURE__*/ v.datetimeString(), 32 + record: /*#__PURE__*/ v.unknown(), 33 + uri: /*#__PURE__*/ v.resourceUriString(), 34 + }); 35 + 36 + type clipView$schematype = typeof _clipViewSchema; 37 + type tagView$schematype = typeof _tagViewSchema; 38 + 39 + export interface clipViewSchema extends clipView$schematype {} 40 + export interface tagViewSchema extends tagView$schematype {} 41 + 42 + export const clipViewSchema = _clipViewSchema as clipViewSchema; 43 + export const tagViewSchema = _tagViewSchema as tagViewSchema; 44 + 45 + export interface ClipView extends v.InferInput<typeof clipViewSchema> {} 46 + export interface TagView extends v.InferInput<typeof tagViewSchema> {}
+42
lexicons/lib/lexicons/types/social/clippr/feed/getClips.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprFeedDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query("social.clippr.feed.getClips", { 13 + params: /*#__PURE__*/ v.object({ 14 + uris: /*#__PURE__*/ v.constrain( 15 + /*#__PURE__*/ v.array(/*#__PURE__*/ v.resourceUriString()), 16 + [/*#__PURE__*/ v.arrayLength(1, 25)], 17 + ), 18 + }), 19 + output: { 20 + type: "lex", 21 + schema: /*#__PURE__*/ v.object({ 22 + get clips() { 23 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.clipViewSchema); 24 + }, 25 + }), 26 + }, 27 + }); 28 + 29 + type main$schematype = typeof _mainSchema; 30 + 31 + export interface mainSchema extends main$schematype {} 32 + 33 + export const mainSchema = _mainSchema as mainSchema; 34 + 35 + export interface $params extends v.InferInput<mainSchema["params"]> {} 36 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 37 + 38 + declare module "@atcute/lexicons/ambient" { 39 + interface XRPCQueries { 40 + "social.clippr.feed.getClips": mainSchema; 41 + } 42 + }
+56
lexicons/lib/lexicons/types/social/clippr/feed/getProfileClips.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprFeedDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query( 13 + "social.clippr.feed.getProfileClips", 14 + { 15 + params: /*#__PURE__*/ v.object({ 16 + actor: /*#__PURE__*/ v.actorIdentifierString(), 17 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 18 + filter: /*#__PURE__*/ v.optional( 19 + /*#__PURE__*/ v.string< 20 + "all_clips" | "tagged_clips" | "untagged_clips" | (string & {}) 21 + >(), 22 + "all_clips", 23 + ), 24 + limit: /*#__PURE__*/ v.optional( 25 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ 26 + /*#__PURE__*/ v.integerRange(1, 100), 27 + ]), 28 + 50, 29 + ), 30 + }), 31 + output: { 32 + type: "lex", 33 + schema: /*#__PURE__*/ v.object({ 34 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 35 + get feed() { 36 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.clipViewSchema); 37 + }, 38 + }), 39 + }, 40 + }, 41 + ); 42 + 43 + type main$schematype = typeof _mainSchema; 44 + 45 + export interface mainSchema extends main$schematype {} 46 + 47 + export const mainSchema = _mainSchema as mainSchema; 48 + 49 + export interface $params extends v.InferInput<mainSchema["params"]> {} 50 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 51 + 52 + declare module "@atcute/lexicons/ambient" { 53 + interface XRPCQueries { 54 + "social.clippr.feed.getProfileClips": mainSchema; 55 + } 56 + }
+47
lexicons/lib/lexicons/types/social/clippr/feed/getProfileTags.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprFeedDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query("social.clippr.feed.getProfileTags", { 13 + params: /*#__PURE__*/ v.object({ 14 + actor: /*#__PURE__*/ v.actorIdentifierString(), 15 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 16 + limit: /*#__PURE__*/ v.optional( 17 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ 18 + /*#__PURE__*/ v.integerRange(1, 100), 19 + ]), 20 + 50, 21 + ), 22 + }), 23 + output: { 24 + type: "lex", 25 + schema: /*#__PURE__*/ v.object({ 26 + cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), 27 + get feed() { 28 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.tagViewSchema); 29 + }, 30 + }), 31 + }, 32 + }); 33 + 34 + type main$schematype = typeof _mainSchema; 35 + 36 + export interface mainSchema extends main$schematype {} 37 + 38 + export const mainSchema = _mainSchema as mainSchema; 39 + 40 + export interface $params extends v.InferInput<mainSchema["params"]> {} 41 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 42 + 43 + declare module "@atcute/lexicons/ambient" { 44 + interface XRPCQueries { 45 + "social.clippr.feed.getProfileTags": mainSchema; 46 + } 47 + }
+39
lexicons/lib/lexicons/types/social/clippr/feed/getTagList.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprFeedDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query("social.clippr.feed.getTagList", { 13 + params: /*#__PURE__*/ v.object({ 14 + actor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.actorIdentifierString()), 15 + }), 16 + output: { 17 + type: "lex", 18 + schema: /*#__PURE__*/ v.object({ 19 + get tags() { 20 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.tagViewSchema); 21 + }, 22 + }), 23 + }, 24 + }); 25 + 26 + type main$schematype = typeof _mainSchema; 27 + 28 + export interface mainSchema extends main$schematype {} 29 + 30 + export const mainSchema = _mainSchema as mainSchema; 31 + 32 + export interface $params extends v.InferInput<mainSchema["params"]> {} 33 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 34 + 35 + declare module "@atcute/lexicons/ambient" { 36 + interface XRPCQueries { 37 + "social.clippr.feed.getTagList": mainSchema; 38 + } 39 + }
+42
lexicons/lib/lexicons/types/social/clippr/feed/getTags.ts
··· 1 + /* 2 + * clippr: a social bookmarking service for the AT Protocol 3 + * Copyright (c) 2025 clippr contributors. 4 + * SPDX-License-Identifier: AGPL-3.0-only 5 + */ 6 + 7 + import type {} from "@atcute/lexicons"; 8 + import * as v from "@atcute/lexicons/validations"; 9 + import type {} from "@atcute/lexicons/ambient"; 10 + import * as SocialClipprFeedDefs from "./defs.js"; 11 + 12 + const _mainSchema = /*#__PURE__*/ v.query("social.clippr.feed.getTags", { 13 + params: /*#__PURE__*/ v.object({ 14 + uris: /*#__PURE__*/ v.constrain( 15 + /*#__PURE__*/ v.array(/*#__PURE__*/ v.resourceUriString()), 16 + [/*#__PURE__*/ v.arrayLength(1, 25)], 17 + ), 18 + }), 19 + output: { 20 + type: "lex", 21 + schema: /*#__PURE__*/ v.object({ 22 + get tags() { 23 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.tagViewSchema); 24 + }, 25 + }), 26 + }, 27 + }); 28 + 29 + type main$schematype = typeof _mainSchema; 30 + 31 + export interface mainSchema extends main$schematype {} 32 + 33 + export const mainSchema = _mainSchema as mainSchema; 34 + 35 + export interface $params extends v.InferInput<mainSchema["params"]> {} 36 + export interface $output extends v.InferXRPCBodyInput<mainSchema["output"]> {} 37 + 38 + declare module "@atcute/lexicons/ambient" { 39 + interface XRPCQueries { 40 + "social.clippr.feed.getTags": mainSchema; 41 + } 42 + }
+10 -4
lexicons/lib/lexicons/types/social/clippr/feed/tag.ts
··· 14 14 $type: /*#__PURE__*/ v.literal("social.clippr.feed.tag"), 15 15 color: /*#__PURE__*/ v.optional( 16 16 /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 17 - /*#__PURE__*/ v.stringLength(40, 70), 18 - /*#__PURE__*/ v.stringGraphemes(4, 7), 17 + /*#__PURE__*/ v.stringLength(0, 70), 18 + /*#__PURE__*/ v.stringGraphemes(0, 7), 19 19 ]), 20 20 ), 21 21 createdAt: /*#__PURE__*/ v.datetimeString(), 22 + description: /*#__PURE__*/ v.optional( 23 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 24 + /*#__PURE__*/ v.stringLength(0, 50000), 25 + /*#__PURE__*/ v.stringGraphemes(0, 5000), 26 + ]), 27 + ), 22 28 name: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 23 - /*#__PURE__*/ v.stringLength(10, 640), 24 - /*#__PURE__*/ v.stringGraphemes(1, 64), 29 + /*#__PURE__*/ v.stringLength(0, 640), 30 + /*#__PURE__*/ v.stringGraphemes(0, 64), 25 31 ]), 26 32 }), 27 33 );
+2 -2
lexicons/package.json
··· 1 1 { 2 2 "type": "module", 3 3 "name": "@clipprjs/lexicons", 4 - "version": "0.1.4", 4 + "version": "1.0.2", 5 5 "description": "Clippr schema definitions", 6 6 "license": "AGPL-3.0-only", 7 7 "private": false, ··· 29 29 "prepublish": "rm -rf dist; pnpm run build" 30 30 }, 31 31 "dependencies": { 32 - "@atcute/atproto": "^3.1.0", 32 + "@atcute/atproto": "^3.1.1", 33 33 "@atcute/lexicons": "^1.1.0" 34 34 }, 35 35 "devDependencies": {
+5 -5
lexicons/pnpm-lock.yaml
··· 9 9 .: 10 10 dependencies: 11 11 '@atcute/atproto': 12 - specifier: ^3.1.0 13 - version: 3.1.0 12 + specifier: ^3.1.1 13 + version: 3.1.1 14 14 '@atcute/lexicons': 15 15 specifier: ^1.1.0 16 16 version: 1.1.0 ··· 24 24 25 25 packages: 26 26 27 - '@atcute/atproto@3.1.0': 28 - resolution: {integrity: sha512-aJbDsY7FcIh8APWKAimBtshPwqoRE056tc0UV6vw4TW4e3nYaHedoJmKhlh/k8KQWxyw64MQThNGMaC89HNoTg==} 27 + '@atcute/atproto@3.1.1': 28 + resolution: {integrity: sha512-D+RLTIPF0xLu7BPZY8KSewAPemJFh+3n3zeQ3ROsLxbTtCHbrTDMAmAFexaVRAPGcPYrwXaBUlv7yZjScJolMg==} 29 29 30 30 '@atcute/lex-cli@2.1.1': 31 31 resolution: {integrity: sha512-QaR0sOP8Z24opGHKsSfleDbP/ahUb6HECkVaOqSwG7ORZzbLK1w0265o1BRjCVr2dT6FxlsMUa2Ge85JMA9bxg==} ··· 64 64 65 65 snapshots: 66 66 67 - '@atcute/atproto@3.1.0': 67 + '@atcute/atproto@3.1.1': 68 68 dependencies: 69 69 '@atcute/lexicons': 1.1.0 70 70