social bookmarking for atproto

Compare changes

Choose any two refs to compare.

+6 -6
README.md
··· 18 18 each section will usually contain its own README.md file dedicated to it, going into more detail about that specific 19 19 package. 20 20 21 - | package | description | 22 - |--------------------------------------------------------------------------|------------------------------------------------------| 23 - | [``backend``](https://tangled.sh/@hexmani.ac/clippr/tree/main/backend) | the reference appview written using node and hono | 24 - | [``frontend``](https://tangled.sh/@hexmani.ac/clippr/tree/main/frontend) | the reference client written in astro and typescript | 25 - | [``lexdocs``](https://tangled.sh/@hexmani.ac/clippr/tree/main/lexdocs) | the original lexicon files | 26 - | [``lexicons``](https://tangled.sh/@hexmani.ac/clippr/tree/main/lexicons) | an atcute package for the clippr lexicons | 21 + | package | description | 22 + |--------------------------------------------------------------------------|---------------------------------------------------| 23 + | [``backend``](https://tangled.sh/@hexmani.ac/clippr/tree/main/backend) | the reference appview written using node and hono | 24 + | [``frontend``](https://tangled.sh/@hexmani.ac/clippr/tree/main/frontend) | the reference client written in solid | 25 + | [``lexdocs``](https://tangled.sh/@hexmani.ac/clippr/tree/main/lexdocs) | the original lexicon files | 26 + | [``lexicons``](https://tangled.sh/@hexmani.ac/clippr/tree/main/lexicons) | an atcute package for the clippr lexicons | 27 27 28 28 ## roadmap 29 29
+17 -17
backend/package.json
··· 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": "^1.0.1", 27 + "@clipprjs/lexicons": "^1.0.2", 28 28 "@eslint/eslintrc": "^3.3.1", 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", 29 + "@hono/node-server": "^1.19.0", 30 + "@libsql/client": "^0.15.12", 31 + "@scalar/hono-api-reference": "^0.9.13", 32 + "@scalar/openapi-to-markdown": "^0.2.26", 33 33 "@skyware/jetstream": "^0.2.5", 34 - "drizzle-orm": "^0.44.3", 35 - "hono": "^4.8.5", 34 + "drizzle-orm": "^0.44.4", 35 + "hono": "^4.9.2", 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.31.0", 43 - "@types/node": "^24.0.15", 44 - "@typescript-eslint/eslint-plugin": "^8.38.0", 45 - "@typescript-eslint/parser": "^8.38.0", 42 + "@eslint/js": "^9.33.0", 43 + "@types/node": "^24.3.0", 44 + "@typescript-eslint/eslint-plugin": "^8.40.0", 45 + "@typescript-eslint/parser": "^8.40.0", 46 46 "drizzle-kit": "^0.31.4", 47 - "eslint": "^9.31.0", 47 + "eslint": "^9.33.0", 48 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.3", 51 + "eslint-plugin-prettier": "^5.5.4", 52 52 "globals": "^16.3.0", 53 - "jiti": "^2.4.2", 53 + "jiti": "^2.5.1", 54 54 "prettier": "^3.6.2", 55 - "tsx": "^4.20.3", 56 - "typescript": "^5.8.3", 57 - "typescript-eslint": "^8.38.0" 55 + "tsx": "^4.20.4", 56 + "typescript": "^5.9.2", 57 + "typescript-eslint": "^8.40.0" 58 58 } 59 59 }
+647 -607
backend/pnpm-lock.yaml
··· 27 27 specifier: ^1.1.0 28 28 version: 1.1.0 29 29 '@clipprjs/lexicons': 30 - specifier: ^1.0.1 31 - version: 1.0.1 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.17.1 37 - version: 1.17.1(hono@4.8.5) 36 + specifier: ^1.19.0 37 + version: 1.19.0(hono@4.9.2) 38 38 '@libsql/client': 39 - specifier: ^0.15.10 40 - version: 0.15.10 39 + specifier: ^0.15.12 40 + version: 0.15.12 41 41 '@scalar/hono-api-reference': 42 - specifier: ^0.9.12 43 - version: 0.9.12(hono@4.8.5) 42 + specifier: ^0.9.13 43 + version: 0.9.13(hono@4.9.2) 44 44 '@scalar/openapi-to-markdown': 45 - specifier: ^0.2.23 46 - version: 0.2.23(typescript@5.8.3) 45 + specifier: ^0.2.26 46 + version: 0.2.26(typescript@5.9.2) 47 47 '@skyware/jetstream': 48 48 specifier: ^0.2.5 49 49 version: 0.2.5 50 50 drizzle-orm: 51 - specifier: ^0.44.3 52 - version: 0.44.3(@libsql/client@0.15.10)(bun-types@1.2.17) 51 + specifier: ^0.44.4 52 + version: 0.44.4(@libsql/client@0.15.12)(bun-types@1.2.17) 53 53 hono: 54 - specifier: ^4.8.5 55 - version: 4.8.5 54 + specifier: ^4.9.2 55 + version: 4.9.2 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.31.0 71 - version: 9.31.0 70 + specifier: ^9.33.0 71 + version: 9.33.0 72 72 '@types/node': 73 - specifier: ^24.0.15 74 - version: 24.0.15 73 + specifier: ^24.3.0 74 + version: 24.3.0 75 75 '@typescript-eslint/eslint-plugin': 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) 76 + specifier: ^8.40.0 77 + version: 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 78 78 '@typescript-eslint/parser': 79 - specifier: ^8.38.0 80 - version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 79 + specifier: ^8.40.0 80 + version: 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 81 81 drizzle-kit: 82 82 specifier: ^0.31.4 83 83 version: 0.31.4 84 84 eslint: 85 - specifier: ^9.31.0 86 - version: 9.31.0(jiti@2.4.2) 85 + specifier: ^9.33.0 86 + version: 9.33.0(jiti@2.5.1) 87 87 eslint-config-prettier: 88 88 specifier: ^10.1.8 89 - version: 10.1.8(eslint@9.31.0(jiti@2.4.2)) 89 + version: 10.1.8(eslint@9.33.0(jiti@2.5.1)) 90 90 eslint-plugin-drizzle: 91 91 specifier: ^0.2.3 92 - version: 0.2.3(eslint@9.31.0(jiti@2.4.2)) 92 + version: 0.2.3(eslint@9.33.0(jiti@2.5.1)) 93 93 eslint-plugin-import: 94 94 specifier: ^2.32.0 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)) 95 + version: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1)) 96 96 eslint-plugin-prettier: 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) 97 + specifier: ^5.5.4 98 + version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(prettier@3.6.2) 99 99 globals: 100 100 specifier: ^16.3.0 101 101 version: 16.3.0 102 102 jiti: 103 - specifier: ^2.4.2 104 - version: 2.4.2 103 + specifier: ^2.5.1 104 + version: 2.5.1 105 105 prettier: 106 106 specifier: ^3.6.2 107 107 version: 3.6.2 108 108 tsx: 109 - specifier: ^4.20.3 110 - version: 4.20.3 109 + specifier: ^4.20.4 110 + version: 4.20.4 111 111 typescript: 112 - specifier: ^5.8.3 113 - version: 5.8.3 112 + specifier: ^5.9.2 113 + version: 5.9.2 114 114 typescript-eslint: 115 - specifier: ^8.38.0 116 - version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 115 + specifier: ^8.40.0 116 + version: 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 117 117 118 118 packages: 119 119 120 120 '@atcute/atproto@3.1.1': 121 121 resolution: {integrity: sha512-D+RLTIPF0xLu7BPZY8KSewAPemJFh+3n3zeQ3ROsLxbTtCHbrTDMAmAFexaVRAPGcPYrwXaBUlv7yZjScJolMg==} 122 122 123 - '@atcute/bluesky@3.1.5': 124 - resolution: {integrity: sha512-OJO1HOqRZmpSQ2W2QSbgGIk301JUX7rmLV8LYqQGxsbpNJOLNJ8//vcD4Ag4WsxTRm+Z+vEUZ4qWXnNsZlgXXg==} 123 + '@atcute/bluesky@3.2.0': 124 + resolution: {integrity: sha512-OqPLqUNjXcgQ25MaPdU7H0QcWmZrx6QQk7d5B22A5U4xy+hZJ954kQ5mSAn24Bt0DEm4j/isq1WZovr3vaPTUA==} 125 125 126 126 '@atcute/client@4.0.3': 127 127 resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==} ··· 155 155 resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 156 156 engines: {node: '>=6.9.0'} 157 157 158 - '@babel/parser@7.28.0': 159 - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} 158 + '@babel/parser@7.28.3': 159 + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} 160 160 engines: {node: '>=6.0.0'} 161 161 hasBin: true 162 162 163 - '@babel/types@7.28.1': 164 - resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} 163 + '@babel/types@7.28.2': 164 + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 165 165 engines: {node: '>=6.9.0'} 166 166 167 - '@badrap/valita@0.4.5': 168 - resolution: {integrity: sha512-4QwGbuhh/JesHRQj79mO/l37PvJj4l/tlAu7+S1n4h47qwaNpZ0WDvIwUGLYUsdi9uQ5UPpiG9wb1Wm3XUFBUQ==} 167 + '@badrap/valita@0.4.6': 168 + resolution: {integrity: sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==} 169 169 engines: {node: '>= 18'} 170 170 171 - '@clipprjs/lexicons@1.0.1': 172 - resolution: {integrity: sha512-2vlFTntYj3YuOJyk8L8dVn1uRYq93GwiIZiDDmIRL2Q3tvbZlynYOYJH4mfNBLxS98L7om2kAVbtILMBLRNygg==} 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.8': 193 - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} 192 + '@esbuild/aix-ppc64@0.25.9': 193 + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} 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.8': 205 - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} 204 + '@esbuild/android-arm64@0.25.9': 205 + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} 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.8': 217 - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} 216 + '@esbuild/android-arm@0.25.9': 217 + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} 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.8': 229 - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} 228 + '@esbuild/android-x64@0.25.9': 229 + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} 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.8': 241 - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} 240 + '@esbuild/darwin-arm64@0.25.9': 241 + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} 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.8': 253 - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} 252 + '@esbuild/darwin-x64@0.25.9': 253 + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} 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.8': 265 - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} 264 + '@esbuild/freebsd-arm64@0.25.9': 265 + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} 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.8': 277 - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} 276 + '@esbuild/freebsd-x64@0.25.9': 277 + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} 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.8': 289 - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} 288 + '@esbuild/linux-arm64@0.25.9': 289 + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} 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.8': 301 - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} 300 + '@esbuild/linux-arm@0.25.9': 301 + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} 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.8': 313 - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} 312 + '@esbuild/linux-ia32@0.25.9': 313 + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} 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.8': 325 - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} 324 + '@esbuild/linux-loong64@0.25.9': 325 + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} 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.8': 337 - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} 336 + '@esbuild/linux-mips64el@0.25.9': 337 + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} 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.8': 349 - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} 348 + '@esbuild/linux-ppc64@0.25.9': 349 + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} 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.8': 361 - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} 360 + '@esbuild/linux-riscv64@0.25.9': 361 + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} 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.8': 373 - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} 372 + '@esbuild/linux-s390x@0.25.9': 373 + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} 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.8': 385 - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} 384 + '@esbuild/linux-x64@0.25.9': 385 + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} 386 386 engines: {node: '>=18'} 387 387 cpu: [x64] 388 388 os: [linux] 389 389 390 - '@esbuild/netbsd-arm64@0.25.8': 391 - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} 390 + '@esbuild/netbsd-arm64@0.25.9': 391 + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} 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.8': 403 - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} 402 + '@esbuild/netbsd-x64@0.25.9': 403 + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} 404 404 engines: {node: '>=18'} 405 405 cpu: [x64] 406 406 os: [netbsd] 407 407 408 - '@esbuild/openbsd-arm64@0.25.8': 409 - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} 408 + '@esbuild/openbsd-arm64@0.25.9': 409 + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} 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.8': 421 - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} 420 + '@esbuild/openbsd-x64@0.25.9': 421 + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} 422 422 engines: {node: '>=18'} 423 423 cpu: [x64] 424 424 os: [openbsd] 425 425 426 - '@esbuild/openharmony-arm64@0.25.8': 427 - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} 426 + '@esbuild/openharmony-arm64@0.25.9': 427 + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} 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.8': 439 - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} 438 + '@esbuild/sunos-x64@0.25.9': 439 + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} 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.8': 451 - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} 450 + '@esbuild/win32-arm64@0.25.9': 451 + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} 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.8': 463 - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} 462 + '@esbuild/win32-ia32@0.25.9': 463 + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} 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.8': 475 - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} 474 + '@esbuild/win32-x64@0.25.9': 475 + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} 476 476 engines: {node: '>=18'} 477 477 cpu: [x64] 478 478 os: [win32] ··· 491 491 resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} 492 492 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 493 493 494 - '@eslint/config-helpers@0.3.0': 495 - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} 494 + '@eslint/config-helpers@0.3.1': 495 + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} 496 496 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 497 497 498 - '@eslint/core@0.15.1': 499 - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} 498 + '@eslint/core@0.15.2': 499 + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} 500 500 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 501 501 502 502 '@eslint/eslintrc@3.3.1': 503 503 resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 504 504 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 505 505 506 - '@eslint/js@9.31.0': 507 - resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} 506 + '@eslint/js@9.33.0': 507 + resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} 508 508 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 509 509 510 510 '@eslint/object-schema@2.1.6': 511 511 resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 512 512 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 513 513 514 - '@eslint/plugin-kit@0.3.4': 515 - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} 514 + '@eslint/plugin-kit@0.3.5': 515 + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} 516 516 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 517 517 518 518 '@externdefs/collider@0.3.0': ··· 520 520 peerDependencies: 521 521 '@badrap/valita': ^0.4.4 522 522 523 - '@floating-ui/core@1.7.2': 524 - resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} 523 + '@floating-ui/core@1.7.3': 524 + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} 525 525 526 - '@floating-ui/dom@1.7.2': 527 - resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==} 526 + '@floating-ui/dom@1.7.3': 527 + resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} 528 528 529 529 '@floating-ui/utils@0.2.10': 530 530 resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} 531 531 532 - '@floating-ui/vue@1.1.7': 533 - resolution: {integrity: sha512-idmAtbAIigGXN2SI5gItiXYBYtNfDTP9yIiObxgu13dgtG7ARCHlNfnR29GxP4LI4o13oiwsJ8wVgghj1lNqcw==} 532 + '@floating-ui/vue@1.1.8': 533 + resolution: {integrity: sha512-SNJAa1jbT8Gh1LvWw2uIIViLL0saV2bCY59ISCvJzhbut5DSb2H3LKUK49Xkd7SixTNHKX4LFu59nbwIXt9jjQ==} 534 534 535 535 '@headlessui/vue@1.7.23': 536 536 resolution: {integrity: sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==} ··· 538 538 peerDependencies: 539 539 vue: ^3.2.0 540 540 541 - '@hono/node-server@1.17.1': 542 - resolution: {integrity: sha512-SY79W/C+2b1MyAzmIcV32Q47vO1b5XwLRwj8S9N6Jr5n1QCkIfAIH6umOSgqWZ4/v67hg6qq8Ha5vZonVidGsg==} 541 + '@hono/node-server@1.19.0': 542 + resolution: {integrity: sha512-1k8/8OHf5VIymJEcJyVksFpT+AQ5euY0VA5hUkCnlKpD4mr8FSbvXaHblxeTTEr90OaqWzAkQaqD80qHZQKxBA==} 543 543 engines: {node: '>=18.14.1'} 544 544 peerDependencies: 545 545 hono: ^4 ··· 585 585 '@internationalized/date@3.8.2': 586 586 resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==} 587 587 588 - '@internationalized/number@3.6.3': 589 - resolution: {integrity: sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==} 588 + '@internationalized/number@3.6.4': 589 + resolution: {integrity: sha512-P+/h+RDaiX8EGt3shB9AYM1+QgkvHmJ5rKi4/59k4sg9g58k9rqsRW0WxRO7jCoHyvVbFRRFKmVTdFYdehrxHg==} 590 590 591 - '@jridgewell/gen-mapping@0.3.12': 592 - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} 591 + '@jridgewell/gen-mapping@0.3.13': 592 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 593 593 594 594 '@jridgewell/resolve-uri@3.1.2': 595 595 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 596 596 engines: {node: '>=6.0.0'} 597 597 598 - '@jridgewell/source-map@0.3.10': 599 - resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} 598 + '@jridgewell/source-map@0.3.11': 599 + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} 600 600 601 - '@jridgewell/sourcemap-codec@1.5.4': 602 - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} 601 + '@jridgewell/sourcemap-codec@1.5.5': 602 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 603 603 604 - '@jridgewell/trace-mapping@0.3.29': 605 - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} 604 + '@jridgewell/trace-mapping@0.3.30': 605 + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} 606 606 607 - '@libsql/client@0.15.10': 608 - resolution: {integrity: sha512-J9cJQwrgH92JlPBYjUGxPIH5G9z3j/V/aPnQvcmmCgjatdVb/f7bzK3yNq15Phc+gVuKMwox3toXL+58qUMylg==} 607 + '@libsql/client@0.15.12': 608 + resolution: {integrity: sha512-JIqB0XsNrqYqBQZuhcgZdTcQoNOoQ5AMF+1yxc7vcZrLtm42QJwRazmTuBfyDwtWASEmVgjxeaLF4NT1iyVX8g==} 609 609 610 - '@libsql/core@0.15.10': 611 - resolution: {integrity: sha512-fAMD+GnGQNdZ9zxeNC8AiExpKnou/97GJWkiDDZbTRHj3c9dvF1y4jsRQ0WE72m/CqTdbMGyU98yL0SJ9hQVeg==} 610 + '@libsql/core@0.15.12': 611 + resolution: {integrity: sha512-S3tF6885ZizVjfym7f8SevL2VId/+DzxiKmP5zFbrhA8oMLh2XH8bYXChmhab7o9qUSHx+XjK4jCFpUwR5g+Ig==} 612 612 613 - '@libsql/darwin-arm64@0.5.15': 614 - resolution: {integrity: sha512-BD4c4WHUu988PmJCtF1WNKoSmY4nAg4T6ZRaigt6fKY2qlS/+9uSB8LSqIIq3WwqxQm9SuJijMGMKDoH6dEFdA==} 613 + '@libsql/darwin-arm64@0.5.17': 614 + resolution: {integrity: sha512-WTYG2skZsUnZmfZ2v7WFj7s3/5s2PfrYBZOWBKOnxHA8g4XCDc/4bFDaqob9Q2e88+GC7cWeJ8VNkVBFpD2Xxg==} 615 615 cpu: [arm64] 616 616 os: [darwin] 617 617 618 - '@libsql/darwin-x64@0.5.15': 619 - resolution: {integrity: sha512-mw5rRffZQIU0RqmP3KS6HsV+ZuThfX3fxlAbytSmWe1PPrDZgSm1BWmWt0OmYC656TGgAGqTsFnEkV5Dmzv3Jw==} 618 + '@libsql/darwin-x64@0.5.17': 619 + resolution: {integrity: sha512-ab0RlTR4KYrxgjNrZhAhY/10GibKoq6G0W4oi0kdm+eYiAv/Ip8GDMpSaZdAcoKA4T+iKR/ehczKHnMEB8MFxA==} 620 620 cpu: [x64] 621 621 os: [darwin] 622 622 ··· 630 630 '@libsql/isomorphic-ws@0.1.5': 631 631 resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} 632 632 633 - '@libsql/linux-arm-gnueabihf@0.5.15': 634 - resolution: {integrity: sha512-FPIh8ppymZqV+y8AUNtzzIXGwRH3LEpsFtvp7fuQU+OWOn0INjB7MdlCqyCSyHPFipC5i7Eg9BhSAyRhrvCptQ==} 633 + '@libsql/linux-arm-gnueabihf@0.5.17': 634 + resolution: {integrity: sha512-PcASh4k47RqC+kMWAbLUKf1y6Do0q8vnUGi0yhKY4ghJcimMExViBimjbjYRSa+WIb/zh3QxNoXOhQAXx3tiuw==} 635 635 cpu: [arm] 636 636 os: [linux] 637 637 638 - '@libsql/linux-arm-musleabihf@0.5.15': 639 - resolution: {integrity: sha512-mPiQ/Vah0cIZ2vMtrbEmQQywIdLCaZJsnWIM5OvBDlRj1QrEsfdHCNH0D0Z+e1+TJIap8+oQZrCmPiBQNHEXlQ==} 638 + '@libsql/linux-arm-musleabihf@0.5.17': 639 + resolution: {integrity: sha512-vxOkSLG9Wspit+SNle84nuIzMtr2G2qaxFzW7BhsZBjlZ8+kErf9RXcT2YJQdJYxmBYRbsOrc91gg0jLEQVCqg==} 640 640 cpu: [arm] 641 641 os: [linux] 642 642 643 - '@libsql/linux-arm64-gnu@0.5.15': 644 - resolution: {integrity: sha512-ckyquyUTjCrZlYJw8ijG2XwU3y9xvUtz3kjN4Y1XJxz8dbmH6kYZS+L8RYmOk5E6fe+2CuMZ9XBF8YqOTSJr2w==} 643 + '@libsql/linux-arm64-gnu@0.5.17': 644 + resolution: {integrity: sha512-L8jnaN01TxjBJlDuDTX2W2BKzBkAOhcnKfCOf3xzvvygblxnDOK0whkYwIXeTfwtd/rr4jN/d6dZD/bcHiDxEQ==} 645 645 cpu: [arm64] 646 646 os: [linux] 647 647 648 - '@libsql/linux-arm64-musl@0.5.15': 649 - resolution: {integrity: sha512-P0NWPCogDNig489dOCuQQOSOYS+040yo5nDtPERtsee9mgHL9Qc7QZdmJ/2F8UHumyhW4ETnA9I2dB6CQxUwPA==} 648 + '@libsql/linux-arm64-musl@0.5.17': 649 + resolution: {integrity: sha512-HfFD7TzQtmmTwyQsuiHhWZdMRtdNpKJ1p4tbMMTMRECk+971NFHrj69D64cc2ClVTAmn7fA9XibKPil7WN/Q7w==} 650 650 cpu: [arm64] 651 651 os: [linux] 652 652 653 - '@libsql/linux-x64-gnu@0.5.15': 654 - resolution: {integrity: sha512-4/IFOhqwdm8Un3Y14GJNZKgFyRf8ejmrN+tSu5XBGAtDOv2AM3xBrGO5UCd8DUTyUVUI6G6dGEIFwzE8NCXsfg==} 653 + '@libsql/linux-x64-gnu@0.5.17': 654 + resolution: {integrity: sha512-5l3XxWqUPVFrtX0xnZaXwqsXs0BFbP4w6ahRFTPSdXU50YBfUOajFznJRB6bJTMsCvraDSD0IkHhjSNfrE1CuQ==} 655 655 cpu: [x64] 656 656 os: [linux] 657 657 658 - '@libsql/linux-x64-musl@0.5.15': 659 - resolution: {integrity: sha512-f0Fm7I55ruVtUuGX0Sq8VfcD/MuD8Rag/v8bDlBa5L3cVbjD069SsRy8Nq3Sw9smctC4Zsul7APf09mGLlu/tQ==} 658 + '@libsql/linux-x64-musl@0.5.17': 659 + resolution: {integrity: sha512-FvSpWlwc+dIeYIFYlsSv+UdQ/NiZWr+SstwVji+QZ//8NnvzwWQU9cgP+Vpps6Qiq4jyYQm9chJhTYOVT9Y3BA==} 660 660 cpu: [x64] 661 661 os: [linux] 662 662 663 - '@libsql/win32-x64-msvc@0.5.15': 664 - resolution: {integrity: sha512-uAmRXE2tZV+9gg51m54NEvjfP9AKuoZeQLmzTnBylsHxy4VZviWCBz1i4tHSyk75rVOefmfWapBJ5ZdLegmpGg==} 663 + '@libsql/win32-x64-msvc@0.5.17': 664 + resolution: {integrity: sha512-f5bGH8+3A5sn6Lrqg8FsQ09a1pYXPnKGXGTFiAYlfQXVst1tUTxDTugnuWcJYKXyzDe/T7ccxyIZXeSmPOhq8A==} 665 665 cpu: [x64] 666 666 os: [win32] 667 667 ··· 690 690 '@rtsao/scc@1.1.0': 691 691 resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 692 692 693 - '@scalar/code-highlight@0.1.8': 694 - resolution: {integrity: sha512-SH7gqBVGotf9Hw2srAKd/s854Wjf5lpR4FgAf/l3AlCYC5QXJ4hbj+fk1/3tvzeRFm+wvS6/ah4FuiIzvDPOug==} 693 + '@scalar/code-highlight@0.1.9': 694 + resolution: {integrity: sha512-WUUVDd1Wk7QJVKWXl/Zdn/VINc2pc1NlWW8VJFYZRm3/hKJwBhi0on7+HjVQNKgUaRy7+zluru5Ckl1gcTHHEg==} 695 695 engines: {node: '>=20'} 696 696 697 - '@scalar/components@0.14.20': 698 - resolution: {integrity: sha512-wGHsxz3R6l+u7KASwvm4Y9d7byD2HjfWBbCVXAb+qQIDemaMDBNARjRCbXLpRB9UvYLxtgP/8fzdW+R0LEf4/A==} 697 + '@scalar/components@0.14.23': 698 + resolution: {integrity: sha512-rmIMRrlqOWlXAJaVbr9DArrKKp95P2fllNM69VrEAHtwMReambBRKuC02cQPwOZcbZCtPx4dZsv2aUB5QdtecQ==} 699 699 engines: {node: '>=20'} 700 700 701 - '@scalar/core@0.3.10': 702 - resolution: {integrity: sha512-WKLaZk5zj65CbS0Ox0BMZ1GX9gFrVdwgV/cdRjT2Av8H5CizOSirXk4PwdsU8V8Q4gAltVy9cnt6yKc2ZnRY+w==} 701 + '@scalar/core@0.3.11': 702 + resolution: {integrity: sha512-4O3mC29k2STz4quBHrpsl6czxi94F3dy8Ej/OPbELS2myKO4GoxromT0BiKSLPAThCnmJ0rqMZ7k9NsgzVjEgA==} 703 703 engines: {node: '>=20'} 704 704 705 - '@scalar/helpers@0.0.6': 706 - resolution: {integrity: sha512-VrkpJmEq3zLu0lYFVRplNLA54rZ9rBkiahEI8laVpLnzGl1QilIn2EhxBT9lK7/2jbPprCbTfgnZZv+zHgGYTw==} 705 + '@scalar/helpers@0.0.7': 706 + resolution: {integrity: sha512-ieexJgofs0PPAp3yxz+0S2tI/GWvo9btxplHE5KxUiWwq2bksYnrhrt+gwe4DoGPRaajzutzJuD1u4VnJd9bNA==} 707 707 engines: {node: '>=20'} 708 708 709 - '@scalar/hono-api-reference@0.9.12': 710 - resolution: {integrity: sha512-ygbQsh+5QaRyAx851utApy12FW+wSRLuOBTpL2U5RVzDjvN6vMBZs119mqH1BmY6ltVn8k7DvS2Ooyx0ttah/A==} 709 + '@scalar/hono-api-reference@0.9.13': 710 + resolution: {integrity: sha512-79Gs+/2/FcqwZ3Lp0lsv3pFKHY1qBF2ONkfgh/gxRsd8Z+RZRTDBZafe7OConj+c4tHm0Zz3bKTKEV0OMQi/aA==} 711 711 engines: {node: '>=20'} 712 712 peerDependencies: 713 713 hono: ^4.0.0 ··· 716 716 resolution: {integrity: sha512-ho9ee29Ik+Jv17bSaQEXvGn1e2ydNEyc7Sv8A8hqPq084aIOiTBtVFISPPt+k/O6z0SIRayfL8FEZqr93GyZPg==} 717 717 engines: {node: '>=20'} 718 718 719 - '@scalar/json-diff@0.0.4': 720 - resolution: {integrity: sha512-4u2gtyhA119T+HdQ4dVKYzQOCOos5Iaj08C1H2Hi6WW64sTNJaZuh9hpVtY94e0I9feRiCyNEtWvmbOjOAxbTw==} 719 + '@scalar/json-magic@0.1.0': 720 + resolution: {integrity: sha512-Slq3nheaAzbhLMdjgKHsJBNyEYv2ekDnWaOagOflo6K5XOx6UTmCLclaj26z89ihpTgWWtQJIRDC8bsRIJwpAg==} 721 721 engines: {node: '>=20'} 722 722 723 - '@scalar/oas-utils@0.4.15': 724 - resolution: {integrity: sha512-C2kGex6fwHxmBQhyiAmuVJHlIOP/rYoojuROfWvUQSrfLELkIjE5ZTyh4fj9PhwhGbS9iWWVaaOytjeT+8n8AQ==} 723 + '@scalar/oas-utils@0.4.18': 724 + resolution: {integrity: sha512-1VsTZLIEThZ7vwa3Fych4Ks1VTf8JetCuP8LA1VlamAhl/+qpLn9mgvxKSAdTyiLzM8ST5jtDi/Pg/2qWbTlzw==} 725 725 engines: {node: '>=20'} 726 726 727 - '@scalar/object-utils@1.2.2': 728 - resolution: {integrity: sha512-dnH/JeXLudjBfEISpYvnMrH3bLjpc06vWVx7UQmtNNWIIonJ+bDMg1ATnYon7q6m+V8aJZ9/To8SwYsunYRL9g==} 727 + '@scalar/object-utils@1.2.3': 728 + resolution: {integrity: sha512-1LW2pHs2jp5ixyK+NdpAyuUlOL+iJ8wQ0P2EgV45vLJ8YeZo5DtxQbKuFyqoaviTYjg2MWs1exavYP/qAaSqyQ==} 729 729 engines: {node: '>=20'} 730 730 731 - '@scalar/openapi-parser@0.18.2': 732 - resolution: {integrity: sha512-Mb0rRgnn8QgrwcsOcZY3g4uDr49cSuYcmh87oT7gDuV9IPFg5Wc71fjXNx0HdTRy5k21ugS/lDSl8sL+YBudOw==} 731 + '@scalar/openapi-parser@0.19.0': 732 + resolution: {integrity: sha512-U1FDug4NFK+o1ib93L2MerW13s61sEDPDgrmO14mp5qAV5iYkC2l0KqKQLMIbt3sWw6fDy900eXNKIgUuge4BA==} 733 733 engines: {node: '>=20'} 734 734 735 - '@scalar/openapi-to-markdown@0.2.23': 736 - resolution: {integrity: sha512-j47K57Q0pDT3C1kAHmewV4kIBInQTjlvG+y4W5QgJkE64mzb8n5aZuMqzSCpyEItX4BsMEasIPMDWBCIhiicpw==} 735 + '@scalar/openapi-to-markdown@0.2.26': 736 + resolution: {integrity: sha512-GqA1aItKQoTz6r36ClCSPqLCPHFDvMT4f7oNeg0mdzcNzN7/EE9DdMqNQFihkg5OPtl32nQFxL+r/XFwgGXDlQ==} 737 737 engines: {node: '>=20'} 738 738 739 - '@scalar/openapi-types@0.3.6': 740 - resolution: {integrity: sha512-hkLIgDIQxSgZNYCqNkty2p/V8hjeMf711uT8IKIjNw8oaT/cjT1HC/3V0FVhJ6x2eaufir+WXt5Zqv/iVk5pyQ==} 739 + '@scalar/openapi-types@0.3.7': 740 + resolution: {integrity: sha512-QHSvHBVDze3+dUwAhIGq6l1iOev4jdoqdBK7QpfeN1Q4h+6qpVEw3EEqBiH0AXUSh/iWwObBv4uMgfIx0aNZ5g==} 741 741 engines: {node: '>=20'} 742 742 743 - '@scalar/snippetz@0.4.3': 744 - resolution: {integrity: sha512-OcYI4uvz/SbIkGupa3SNS403+lCsp4RoPJRTP1Rd59lRX9Kyc8xXo8ZuJis06GYtlBP5rqshI+jFCIP/Ap+dFw==} 743 + '@scalar/snippetz@0.4.4': 744 + resolution: {integrity: sha512-Vml82Jhzr10lLj4bUrwZAcn4ym63pzfH+fOkrJ0Ig/dM9dP1bAHmwHkEDaUQkiGM6x2KIhe2eMsJtO7Y+VgHOQ==} 745 745 engines: {node: '>=20'} 746 746 747 - '@scalar/themes@0.13.11': 748 - resolution: {integrity: sha512-9rdNfVDbDFUr6Pi9IHt6OKs7Ui6TtrH7tR+ymga+I+jw8Xsnm4dbD1G2TFk1wUaYLVYdiqyQcj+JT15OJEGlkw==} 747 + '@scalar/themes@0.13.12': 748 + resolution: {integrity: sha512-fM010t8npZ8XqGle7ZjoAFGEfzkJ1XjEk1W3OJ5nLzSLq3hXXp72f4wHp6eaKoDWw8rFq+ZeOZk1GP7PgSr/Jw==} 749 749 engines: {node: '>=20'} 750 750 751 - '@scalar/types@0.2.10': 752 - resolution: {integrity: sha512-ZlOzYoYzzGRnMr6RufAnjksv94MyL4s4HElg9mdo9gQXPch24lNiE0pE0k6vxdB+ncgbGWZ1T6qCC/lJXMLL1Q==} 751 + '@scalar/types@0.2.11': 752 + resolution: {integrity: sha512-SUZzGmoisWsYv33LmmT/ajvSlcl9ZDj9d5RncJ+wB9ZQ2l018xlfpDIH9Kdfo+6KCKQOe3LYLXfH4Lzm891Mag==} 753 753 engines: {node: '>=20'} 754 754 755 755 '@scalar/use-hooks@0.2.4': ··· 760 760 resolution: {integrity: sha512-u+o77cdTNZ5ePqHPu8ZcFw1BLlISv+cthN0bR1zJHXmqBjvanFTy2kL+Gmv3eW9HxZiHdqycKVETlYd0mWiqJQ==} 761 761 engines: {node: '>=20'} 762 762 763 - '@scalar/workspace-store@0.10.2': 764 - resolution: {integrity: sha512-p4aDfAsZIFBBQPk2CcD96PMc2HFLOtGi2XMRNp86cqpQMncIIAqDTYCydzcsYvMPysmckIAAyuztdKDOPnry7g==} 763 + '@scalar/workspace-store@0.12.0': 764 + resolution: {integrity: sha512-e0OMEYTrQ6D/8gg4lAIim5lL5utK+8zLH5mdriYY34L9UszLTbzGTesZBfNA15Eao1mo7f3hbyRJPPBydwo0rw==} 765 765 engines: {node: '>=18'} 766 766 767 767 '@sinclair/typebox@0.34.37': ··· 805 805 '@types/ms@2.1.0': 806 806 resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} 807 807 808 - '@types/node@22.16.5': 809 - resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} 808 + '@types/node@22.17.2': 809 + resolution: {integrity: sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==} 810 810 811 - '@types/node@24.0.15': 812 - resolution: {integrity: sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==} 811 + '@types/node@24.3.0': 812 + resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} 813 813 814 814 '@types/triple-beam@1.3.5': 815 815 resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} ··· 823 823 '@types/ws@8.18.1': 824 824 resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} 825 825 826 - '@typescript-eslint/eslint-plugin@8.38.0': 827 - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} 826 + '@typescript-eslint/eslint-plugin@8.40.0': 827 + resolution: {integrity: sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==} 828 828 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 829 829 peerDependencies: 830 - '@typescript-eslint/parser': ^8.38.0 830 + '@typescript-eslint/parser': ^8.40.0 831 831 eslint: ^8.57.0 || ^9.0.0 832 - typescript: '>=4.8.4 <5.9.0' 832 + typescript: '>=4.8.4 <6.0.0' 833 833 834 - '@typescript-eslint/parser@8.38.0': 835 - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} 834 + '@typescript-eslint/parser@8.40.0': 835 + resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==} 836 836 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 837 837 peerDependencies: 838 838 eslint: ^8.57.0 || ^9.0.0 839 - typescript: '>=4.8.4 <5.9.0' 839 + typescript: '>=4.8.4 <6.0.0' 840 840 841 - '@typescript-eslint/project-service@8.38.0': 842 - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} 841 + '@typescript-eslint/project-service@8.40.0': 842 + resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==} 843 843 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 844 844 peerDependencies: 845 - typescript: '>=4.8.4 <5.9.0' 845 + typescript: '>=4.8.4 <6.0.0' 846 846 847 - '@typescript-eslint/scope-manager@8.38.0': 848 - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} 847 + '@typescript-eslint/scope-manager@8.40.0': 848 + resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==} 849 849 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 850 850 851 - '@typescript-eslint/tsconfig-utils@8.38.0': 852 - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} 851 + '@typescript-eslint/tsconfig-utils@8.40.0': 852 + resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==} 853 853 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 854 854 peerDependencies: 855 - typescript: '>=4.8.4 <5.9.0' 855 + typescript: '>=4.8.4 <6.0.0' 856 856 857 - '@typescript-eslint/type-utils@8.38.0': 858 - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} 857 + '@typescript-eslint/type-utils@8.40.0': 858 + resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==} 859 859 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 860 860 peerDependencies: 861 861 eslint: ^8.57.0 || ^9.0.0 862 - typescript: '>=4.8.4 <5.9.0' 862 + typescript: '>=4.8.4 <6.0.0' 863 863 864 - '@typescript-eslint/types@8.38.0': 865 - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} 864 + '@typescript-eslint/types@8.40.0': 865 + resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} 866 866 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 867 867 868 - '@typescript-eslint/typescript-estree@8.38.0': 869 - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} 868 + '@typescript-eslint/typescript-estree@8.40.0': 869 + resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==} 870 870 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 871 871 peerDependencies: 872 - typescript: '>=4.8.4 <5.9.0' 872 + typescript: '>=4.8.4 <6.0.0' 873 873 874 - '@typescript-eslint/utils@8.38.0': 875 - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} 874 + '@typescript-eslint/utils@8.40.0': 875 + resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==} 876 876 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 877 877 peerDependencies: 878 878 eslint: ^8.57.0 || ^9.0.0 879 - typescript: '>=4.8.4 <5.9.0' 879 + typescript: '>=4.8.4 <6.0.0' 880 880 881 - '@typescript-eslint/visitor-keys@8.38.0': 882 - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} 881 + '@typescript-eslint/visitor-keys@8.40.0': 882 + resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==} 883 883 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 884 884 885 885 '@ungap/structured-clone@1.3.0': 886 886 resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 887 887 888 - '@vue/compiler-core@3.5.17': 889 - resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==} 888 + '@vue/compiler-core@3.5.18': 889 + resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} 890 890 891 - '@vue/compiler-dom@3.5.17': 892 - resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==} 891 + '@vue/compiler-dom@3.5.18': 892 + resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} 893 893 894 - '@vue/compiler-sfc@3.5.17': 895 - resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==} 894 + '@vue/compiler-sfc@3.5.18': 895 + resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} 896 896 897 - '@vue/compiler-ssr@3.5.17': 898 - resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==} 897 + '@vue/compiler-ssr@3.5.18': 898 + resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} 899 899 900 - '@vue/reactivity@3.5.17': 901 - resolution: {integrity: sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==} 900 + '@vue/reactivity@3.5.18': 901 + resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} 902 902 903 - '@vue/runtime-core@3.5.17': 904 - resolution: {integrity: sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==} 903 + '@vue/runtime-core@3.5.18': 904 + resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} 905 905 906 - '@vue/runtime-dom@3.5.17': 907 - resolution: {integrity: sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==} 906 + '@vue/runtime-dom@3.5.18': 907 + resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} 908 908 909 - '@vue/server-renderer@3.5.17': 910 - resolution: {integrity: sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==} 909 + '@vue/server-renderer@3.5.18': 910 + resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} 911 911 peerDependencies: 912 - vue: 3.5.17 912 + vue: 3.5.18 913 913 914 - '@vue/shared@3.5.17': 915 - resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} 914 + '@vue/shared@3.5.18': 915 + resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} 916 916 917 917 '@vueuse/core@10.11.1': 918 918 resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} 919 + 920 + '@vueuse/core@11.3.0': 921 + resolution: {integrity: sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==} 919 922 920 923 '@vueuse/metadata@10.11.1': 921 924 resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} 922 925 926 + '@vueuse/metadata@11.3.0': 927 + resolution: {integrity: sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==} 928 + 923 929 '@vueuse/shared@10.11.1': 924 930 resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} 931 + 932 + '@vueuse/shared@11.3.0': 933 + resolution: {integrity: sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==} 925 934 926 935 acorn-jsx@5.3.2: 927 936 resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} ··· 1049 1058 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1050 1059 engines: {node: '>=10'} 1051 1060 1052 - chalk@5.4.1: 1053 - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} 1061 + chalk@5.6.0: 1062 + resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} 1054 1063 engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 1055 1064 1056 1065 character-entities-html4@2.1.0: ··· 1202 1211 resolution: {integrity: sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA==} 1203 1212 hasBin: true 1204 1213 1205 - drizzle-orm@0.44.3: 1206 - resolution: {integrity: sha512-8nIiYQxOpgUicEL04YFojJmvC4DNO4KoyXsEIqN44+g6gNBr6hmVpWk3uyAt4CaTiRGDwoU+alfqNNeonLAFOQ==} 1214 + drizzle-orm@0.44.4: 1215 + resolution: {integrity: sha512-ZyzKFpTC/Ut3fIqc2c0dPZ6nhchQXriTsqTNs4ayRgl6sZcFlMs9QZKPSHXK4bdOf41GHGWf+FrpcDDYwW+W6Q==} 1207 1216 peerDependencies: 1208 1217 '@aws-sdk/client-rds-data': '>=3' 1209 1218 '@cloudflare/workers-types': '>=4' ··· 1347 1356 engines: {node: '>=12'} 1348 1357 hasBin: true 1349 1358 1350 - esbuild@0.25.8: 1351 - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} 1359 + esbuild@0.25.9: 1360 + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} 1352 1361 engines: {node: '>=18'} 1353 1362 hasBin: true 1354 1363 ··· 1405 1414 '@typescript-eslint/parser': 1406 1415 optional: true 1407 1416 1408 - eslint-plugin-prettier@5.5.3: 1409 - resolution: {integrity: sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==} 1417 + eslint-plugin-prettier@5.5.4: 1418 + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} 1410 1419 engines: {node: ^14.18.0 || >=16.0.0} 1411 1420 peerDependencies: 1412 1421 '@types/eslint': '>=8.0.0' ··· 1431 1440 resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 1432 1441 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1433 1442 1434 - eslint@9.31.0: 1435 - resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} 1443 + eslint@9.33.0: 1444 + resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} 1436 1445 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1437 1446 hasBin: true 1438 1447 peerDependencies: ··· 1687 1696 highlightjs-vue@1.0.0: 1688 1697 resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} 1689 1698 1690 - hono@4.8.5: 1691 - resolution: {integrity: sha512-Up2cQbtNz1s111qpnnECdTGqSIUIhZJMLikdKkshebQSEBcoUKq6XJayLGqSZWidiH0zfHRCJqFu062Mz5UuRA==} 1699 + hono@4.9.2: 1700 + resolution: {integrity: sha512-UG2jXGS/gkLH42l/1uROnwXpkjvvxkl3kpopL3LBo27NuaDPI6xHNfuUSilIHcrBkPfl4y0z6y2ByI455TjNRw==} 1692 1701 engines: {node: '>=16.9.0'} 1693 1702 1694 1703 html-minifier-terser@7.2.0: ··· 1854 1863 isexe@2.0.0: 1855 1864 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1856 1865 1857 - jiti@2.4.2: 1858 - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 1866 + jiti@2.5.1: 1867 + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} 1859 1868 hasBin: true 1860 1869 1861 - js-base64@3.7.7: 1862 - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} 1870 + js-base64@3.7.8: 1871 + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} 1863 1872 1864 1873 js-yaml@4.1.0: 1865 1874 resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} ··· 1909 1918 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1910 1919 engines: {node: '>= 0.8.0'} 1911 1920 1912 - libsql@0.5.15: 1913 - resolution: {integrity: sha512-N1ZhjpTadoxDW8UNssgJyZz+cAX/gi9OxOFHapH8AY6p7Qk/6umTC5UwQ+6bPnACDcxqbzhRlbLO+Mk60owFRA==} 1921 + libsql@0.5.17: 1922 + resolution: {integrity: sha512-RRlj5XQI9+Wq+/5UY8EnugSWfRmHEw4hn3DKlPrkUgZONsge1PwTtHcpStP6MSNi8ohcbsRgEHJaymA33a8cBw==} 1914 1923 cpu: [x64, arm64, wasm32, arm] 1915 1924 os: [darwin, linux, win32] 1916 1925 ··· 2169 2178 parse5@7.3.0: 2170 2179 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 2171 2180 2172 - partysocket@1.1.4: 2173 - resolution: {integrity: sha512-jXP7PFj2h5/v4UjDS8P7MZy6NJUQ7sspiFyxL4uc/+oKOL+KdtXzHnTV8INPGxBrLTXgalyG3kd12Qm7WrYc3A==} 2181 + partysocket@1.1.5: 2182 + resolution: {integrity: sha512-8uw9foq9bij4sKLCtTSHvyqMrMTQ5FJjrHc7BjoM2s95Vu7xYCN63ABpI7OZHC7ZMP5xaom/A+SsoFPXmTV6ZQ==} 2174 2183 2175 2184 pascal-case@3.1.2: 2176 2185 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} ··· 2497 2506 tslib@2.8.1: 2498 2507 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 2499 2508 2500 - tsx@4.20.3: 2501 - resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} 2509 + tsx@4.20.4: 2510 + resolution: {integrity: sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==} 2502 2511 engines: {node: '>=18.0.0'} 2503 2512 hasBin: true 2504 2513 ··· 2526 2535 resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 2527 2536 engines: {node: '>= 0.4'} 2528 2537 2529 - typescript-eslint@8.38.0: 2530 - resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} 2538 + typescript-eslint@8.40.0: 2539 + resolution: {integrity: sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==} 2531 2540 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2532 2541 peerDependencies: 2533 2542 eslint: ^8.57.0 || ^9.0.0 2534 - typescript: '>=4.8.4 <5.9.0' 2543 + typescript: '>=4.8.4 <6.0.0' 2535 2544 2536 - typescript@5.8.3: 2537 - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 2545 + typescript@5.9.2: 2546 + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} 2538 2547 engines: {node: '>=14.17'} 2539 2548 hasBin: true 2540 2549 ··· 2545 2554 undici-types@6.21.0: 2546 2555 resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 2547 2556 2548 - undici-types@7.8.0: 2549 - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} 2557 + undici-types@7.10.0: 2558 + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} 2550 2559 2551 2560 unified@11.0.5: 2552 2561 resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} ··· 2582 2591 vfile-location@5.0.3: 2583 2592 resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} 2584 2593 2585 - vfile-message@4.0.2: 2586 - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 2594 + vfile-message@4.0.3: 2595 + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} 2587 2596 2588 2597 vfile@6.0.3: 2589 2598 resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 2599 + 2600 + vue-component-type-helpers@3.0.5: 2601 + resolution: {integrity: sha512-uoNZaJ+a1/zppa/Vgmi8zIOP2PHXDN2rT8NyF+zQRK6ZG94lNB9prcV0GdLJbY9i9lrD47JOVIH92SaiA7oJ1A==} 2590 2602 2591 2603 vue-demi@0.14.10: 2592 2604 resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} ··· 2602 2614 vue-sonner@1.3.2: 2603 2615 resolution: {integrity: sha512-UbZ48E9VIya3ToiRHAZUbodKute/z/M1iT8/3fU8zEbwBRE11AKuHikssv18LMk2gTTr6eMQT4qf6JoLHWuj/A==} 2604 2616 2605 - vue@3.5.17: 2606 - resolution: {integrity: sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==} 2617 + vue@3.5.18: 2618 + resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} 2607 2619 peerDependencies: 2608 2620 typescript: '*' 2609 2621 peerDependenciesMeta: ··· 2686 2698 dependencies: 2687 2699 '@atcute/lexicons': 1.1.0 2688 2700 2689 - '@atcute/bluesky@3.1.5': 2701 + '@atcute/bluesky@3.2.0': 2690 2702 dependencies: 2691 2703 '@atcute/atproto': 3.1.1 2692 2704 '@atcute/lexicons': 1.1.0 ··· 2701 2713 '@atcute/identity': 1.0.3 2702 2714 '@atcute/lexicons': 1.1.0 2703 2715 '@atcute/util-fetch': 1.0.1 2704 - '@badrap/valita': 0.4.5 2716 + '@badrap/valita': 0.4.6 2705 2717 2706 2718 '@atcute/identity@1.0.3': 2707 2719 dependencies: 2708 2720 '@atcute/lexicons': 1.1.0 2709 - '@badrap/valita': 0.4.5 2721 + '@badrap/valita': 0.4.6 2710 2722 2711 2723 '@atcute/lex-cli@2.1.1': 2712 2724 dependencies: 2713 2725 '@atcute/lexicon-doc': 1.0.3 2714 - '@badrap/valita': 0.4.5 2715 - '@externdefs/collider': 0.3.0(@badrap/valita@0.4.5) 2726 + '@badrap/valita': 0.4.6 2727 + '@externdefs/collider': 0.3.0(@badrap/valita@0.4.6) 2716 2728 picocolors: 1.1.1 2717 2729 prettier: 3.6.2 2718 2730 2719 2731 '@atcute/lexicon-doc@1.0.3': 2720 2732 dependencies: 2721 - '@badrap/valita': 0.4.5 2733 + '@badrap/valita': 0.4.6 2722 2734 2723 2735 '@atcute/lexicons@1.1.0': 2724 2736 dependencies: ··· 2726 2738 2727 2739 '@atcute/util-fetch@1.0.1': 2728 2740 dependencies: 2729 - '@badrap/valita': 0.4.5 2741 + '@badrap/valita': 0.4.6 2730 2742 2731 2743 '@babel/helper-string-parser@7.27.1': {} 2732 2744 2733 2745 '@babel/helper-validator-identifier@7.27.1': {} 2734 2746 2735 - '@babel/parser@7.28.0': 2747 + '@babel/parser@7.28.3': 2736 2748 dependencies: 2737 - '@babel/types': 7.28.1 2749 + '@babel/types': 7.28.2 2738 2750 2739 - '@babel/types@7.28.1': 2751 + '@babel/types@7.28.2': 2740 2752 dependencies: 2741 2753 '@babel/helper-string-parser': 7.27.1 2742 2754 '@babel/helper-validator-identifier': 7.27.1 2743 2755 2744 - '@badrap/valita@0.4.5': {} 2756 + '@badrap/valita@0.4.6': {} 2745 2757 2746 - '@clipprjs/lexicons@1.0.1': 2758 + '@clipprjs/lexicons@1.0.2': 2747 2759 dependencies: 2748 2760 '@atcute/atproto': 3.1.1 2749 2761 '@atcute/lexicons': 1.1.0 ··· 2768 2780 '@esbuild-kit/core-utils': 3.3.2 2769 2781 get-tsconfig: 4.10.1 2770 2782 2771 - '@esbuild/aix-ppc64@0.25.8': 2783 + '@esbuild/aix-ppc64@0.25.9': 2772 2784 optional: true 2773 2785 2774 2786 '@esbuild/android-arm64@0.18.20': 2775 2787 optional: true 2776 2788 2777 - '@esbuild/android-arm64@0.25.8': 2789 + '@esbuild/android-arm64@0.25.9': 2778 2790 optional: true 2779 2791 2780 2792 '@esbuild/android-arm@0.18.20': 2781 2793 optional: true 2782 2794 2783 - '@esbuild/android-arm@0.25.8': 2795 + '@esbuild/android-arm@0.25.9': 2784 2796 optional: true 2785 2797 2786 2798 '@esbuild/android-x64@0.18.20': 2787 2799 optional: true 2788 2800 2789 - '@esbuild/android-x64@0.25.8': 2801 + '@esbuild/android-x64@0.25.9': 2790 2802 optional: true 2791 2803 2792 2804 '@esbuild/darwin-arm64@0.18.20': 2793 2805 optional: true 2794 2806 2795 - '@esbuild/darwin-arm64@0.25.8': 2807 + '@esbuild/darwin-arm64@0.25.9': 2796 2808 optional: true 2797 2809 2798 2810 '@esbuild/darwin-x64@0.18.20': 2799 2811 optional: true 2800 2812 2801 - '@esbuild/darwin-x64@0.25.8': 2813 + '@esbuild/darwin-x64@0.25.9': 2802 2814 optional: true 2803 2815 2804 2816 '@esbuild/freebsd-arm64@0.18.20': 2805 2817 optional: true 2806 2818 2807 - '@esbuild/freebsd-arm64@0.25.8': 2819 + '@esbuild/freebsd-arm64@0.25.9': 2808 2820 optional: true 2809 2821 2810 2822 '@esbuild/freebsd-x64@0.18.20': 2811 2823 optional: true 2812 2824 2813 - '@esbuild/freebsd-x64@0.25.8': 2825 + '@esbuild/freebsd-x64@0.25.9': 2814 2826 optional: true 2815 2827 2816 2828 '@esbuild/linux-arm64@0.18.20': 2817 2829 optional: true 2818 2830 2819 - '@esbuild/linux-arm64@0.25.8': 2831 + '@esbuild/linux-arm64@0.25.9': 2820 2832 optional: true 2821 2833 2822 2834 '@esbuild/linux-arm@0.18.20': 2823 2835 optional: true 2824 2836 2825 - '@esbuild/linux-arm@0.25.8': 2837 + '@esbuild/linux-arm@0.25.9': 2826 2838 optional: true 2827 2839 2828 2840 '@esbuild/linux-ia32@0.18.20': 2829 2841 optional: true 2830 2842 2831 - '@esbuild/linux-ia32@0.25.8': 2843 + '@esbuild/linux-ia32@0.25.9': 2832 2844 optional: true 2833 2845 2834 2846 '@esbuild/linux-loong64@0.18.20': 2835 2847 optional: true 2836 2848 2837 - '@esbuild/linux-loong64@0.25.8': 2849 + '@esbuild/linux-loong64@0.25.9': 2838 2850 optional: true 2839 2851 2840 2852 '@esbuild/linux-mips64el@0.18.20': 2841 2853 optional: true 2842 2854 2843 - '@esbuild/linux-mips64el@0.25.8': 2855 + '@esbuild/linux-mips64el@0.25.9': 2844 2856 optional: true 2845 2857 2846 2858 '@esbuild/linux-ppc64@0.18.20': 2847 2859 optional: true 2848 2860 2849 - '@esbuild/linux-ppc64@0.25.8': 2861 + '@esbuild/linux-ppc64@0.25.9': 2850 2862 optional: true 2851 2863 2852 2864 '@esbuild/linux-riscv64@0.18.20': 2853 2865 optional: true 2854 2866 2855 - '@esbuild/linux-riscv64@0.25.8': 2867 + '@esbuild/linux-riscv64@0.25.9': 2856 2868 optional: true 2857 2869 2858 2870 '@esbuild/linux-s390x@0.18.20': 2859 2871 optional: true 2860 2872 2861 - '@esbuild/linux-s390x@0.25.8': 2873 + '@esbuild/linux-s390x@0.25.9': 2862 2874 optional: true 2863 2875 2864 2876 '@esbuild/linux-x64@0.18.20': 2865 2877 optional: true 2866 2878 2867 - '@esbuild/linux-x64@0.25.8': 2879 + '@esbuild/linux-x64@0.25.9': 2868 2880 optional: true 2869 2881 2870 - '@esbuild/netbsd-arm64@0.25.8': 2882 + '@esbuild/netbsd-arm64@0.25.9': 2871 2883 optional: true 2872 2884 2873 2885 '@esbuild/netbsd-x64@0.18.20': 2874 2886 optional: true 2875 2887 2876 - '@esbuild/netbsd-x64@0.25.8': 2888 + '@esbuild/netbsd-x64@0.25.9': 2877 2889 optional: true 2878 2890 2879 - '@esbuild/openbsd-arm64@0.25.8': 2891 + '@esbuild/openbsd-arm64@0.25.9': 2880 2892 optional: true 2881 2893 2882 2894 '@esbuild/openbsd-x64@0.18.20': 2883 2895 optional: true 2884 2896 2885 - '@esbuild/openbsd-x64@0.25.8': 2897 + '@esbuild/openbsd-x64@0.25.9': 2886 2898 optional: true 2887 2899 2888 - '@esbuild/openharmony-arm64@0.25.8': 2900 + '@esbuild/openharmony-arm64@0.25.9': 2889 2901 optional: true 2890 2902 2891 2903 '@esbuild/sunos-x64@0.18.20': 2892 2904 optional: true 2893 2905 2894 - '@esbuild/sunos-x64@0.25.8': 2906 + '@esbuild/sunos-x64@0.25.9': 2895 2907 optional: true 2896 2908 2897 2909 '@esbuild/win32-arm64@0.18.20': 2898 2910 optional: true 2899 2911 2900 - '@esbuild/win32-arm64@0.25.8': 2912 + '@esbuild/win32-arm64@0.25.9': 2901 2913 optional: true 2902 2914 2903 2915 '@esbuild/win32-ia32@0.18.20': 2904 2916 optional: true 2905 2917 2906 - '@esbuild/win32-ia32@0.25.8': 2918 + '@esbuild/win32-ia32@0.25.9': 2907 2919 optional: true 2908 2920 2909 2921 '@esbuild/win32-x64@0.18.20': 2910 2922 optional: true 2911 2923 2912 - '@esbuild/win32-x64@0.25.8': 2924 + '@esbuild/win32-x64@0.25.9': 2913 2925 optional: true 2914 2926 2915 - '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': 2927 + '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))': 2916 2928 dependencies: 2917 - eslint: 9.31.0(jiti@2.4.2) 2929 + eslint: 9.33.0(jiti@2.5.1) 2918 2930 eslint-visitor-keys: 3.4.3 2919 2931 2920 2932 '@eslint-community/regexpp@4.12.1': {} ··· 2927 2939 transitivePeerDependencies: 2928 2940 - supports-color 2929 2941 2930 - '@eslint/config-helpers@0.3.0': {} 2942 + '@eslint/config-helpers@0.3.1': {} 2931 2943 2932 - '@eslint/core@0.15.1': 2944 + '@eslint/core@0.15.2': 2933 2945 dependencies: 2934 2946 '@types/json-schema': 7.0.15 2935 2947 ··· 2947 2959 transitivePeerDependencies: 2948 2960 - supports-color 2949 2961 2950 - '@eslint/js@9.31.0': {} 2962 + '@eslint/js@9.33.0': {} 2951 2963 2952 2964 '@eslint/object-schema@2.1.6': {} 2953 2965 2954 - '@eslint/plugin-kit@0.3.4': 2966 + '@eslint/plugin-kit@0.3.5': 2955 2967 dependencies: 2956 - '@eslint/core': 0.15.1 2968 + '@eslint/core': 0.15.2 2957 2969 levn: 0.4.1 2958 2970 2959 - '@externdefs/collider@0.3.0(@badrap/valita@0.4.5)': 2971 + '@externdefs/collider@0.3.0(@badrap/valita@0.4.6)': 2960 2972 dependencies: 2961 - '@badrap/valita': 0.4.5 2973 + '@badrap/valita': 0.4.6 2962 2974 2963 - '@floating-ui/core@1.7.2': 2975 + '@floating-ui/core@1.7.3': 2964 2976 dependencies: 2965 2977 '@floating-ui/utils': 0.2.10 2966 2978 2967 - '@floating-ui/dom@1.7.2': 2979 + '@floating-ui/dom@1.7.3': 2968 2980 dependencies: 2969 - '@floating-ui/core': 1.7.2 2981 + '@floating-ui/core': 1.7.3 2970 2982 '@floating-ui/utils': 0.2.10 2971 2983 2972 2984 '@floating-ui/utils@0.2.10': {} 2973 2985 2974 - '@floating-ui/vue@1.1.7(vue@3.5.17(typescript@5.8.3))': 2986 + '@floating-ui/vue@1.1.8(vue@3.5.18(typescript@5.9.2))': 2975 2987 dependencies: 2976 - '@floating-ui/dom': 1.7.2 2988 + '@floating-ui/dom': 1.7.3 2977 2989 '@floating-ui/utils': 0.2.10 2978 - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) 2990 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) 2979 2991 transitivePeerDependencies: 2980 2992 - '@vue/composition-api' 2981 2993 - vue 2982 2994 2983 - '@headlessui/vue@1.7.23(vue@3.5.17(typescript@5.8.3))': 2995 + '@headlessui/vue@1.7.23(vue@3.5.18(typescript@5.9.2))': 2984 2996 dependencies: 2985 - '@tanstack/vue-virtual': 3.13.12(vue@3.5.17(typescript@5.8.3)) 2986 - vue: 3.5.17(typescript@5.8.3) 2997 + '@tanstack/vue-virtual': 3.13.12(vue@3.5.18(typescript@5.9.2)) 2998 + vue: 3.5.18(typescript@5.9.2) 2987 2999 2988 - '@hono/node-server@1.17.1(hono@4.8.5)': 3000 + '@hono/node-server@1.19.0(hono@4.9.2)': 2989 3001 dependencies: 2990 - hono: 4.8.5 3002 + hono: 4.9.2 2991 3003 2992 3004 '@humanfs/core@0.19.1': {} 2993 3005 ··· 3030 3042 dependencies: 3031 3043 '@swc/helpers': 0.5.17 3032 3044 3033 - '@internationalized/number@3.6.3': 3045 + '@internationalized/number@3.6.4': 3034 3046 dependencies: 3035 3047 '@swc/helpers': 0.5.17 3036 3048 3037 - '@jridgewell/gen-mapping@0.3.12': 3049 + '@jridgewell/gen-mapping@0.3.13': 3038 3050 dependencies: 3039 - '@jridgewell/sourcemap-codec': 1.5.4 3040 - '@jridgewell/trace-mapping': 0.3.29 3051 + '@jridgewell/sourcemap-codec': 1.5.5 3052 + '@jridgewell/trace-mapping': 0.3.30 3041 3053 3042 3054 '@jridgewell/resolve-uri@3.1.2': {} 3043 3055 3044 - '@jridgewell/source-map@0.3.10': 3056 + '@jridgewell/source-map@0.3.11': 3045 3057 dependencies: 3046 - '@jridgewell/gen-mapping': 0.3.12 3047 - '@jridgewell/trace-mapping': 0.3.29 3058 + '@jridgewell/gen-mapping': 0.3.13 3059 + '@jridgewell/trace-mapping': 0.3.30 3048 3060 3049 - '@jridgewell/sourcemap-codec@1.5.4': {} 3061 + '@jridgewell/sourcemap-codec@1.5.5': {} 3050 3062 3051 - '@jridgewell/trace-mapping@0.3.29': 3063 + '@jridgewell/trace-mapping@0.3.30': 3052 3064 dependencies: 3053 3065 '@jridgewell/resolve-uri': 3.1.2 3054 - '@jridgewell/sourcemap-codec': 1.5.4 3066 + '@jridgewell/sourcemap-codec': 1.5.5 3055 3067 3056 - '@libsql/client@0.15.10': 3068 + '@libsql/client@0.15.12': 3057 3069 dependencies: 3058 - '@libsql/core': 0.15.10 3070 + '@libsql/core': 0.15.12 3059 3071 '@libsql/hrana-client': 0.7.0 3060 - js-base64: 3.7.7 3061 - libsql: 0.5.15 3072 + js-base64: 3.7.8 3073 + libsql: 0.5.17 3062 3074 promise-limit: 2.7.0 3063 3075 transitivePeerDependencies: 3064 3076 - bufferutil 3065 3077 - utf-8-validate 3066 3078 3067 - '@libsql/core@0.15.10': 3079 + '@libsql/core@0.15.12': 3068 3080 dependencies: 3069 - js-base64: 3.7.7 3081 + js-base64: 3.7.8 3070 3082 3071 - '@libsql/darwin-arm64@0.5.15': 3083 + '@libsql/darwin-arm64@0.5.17': 3072 3084 optional: true 3073 3085 3074 - '@libsql/darwin-x64@0.5.15': 3086 + '@libsql/darwin-x64@0.5.17': 3075 3087 optional: true 3076 3088 3077 3089 '@libsql/hrana-client@0.7.0': 3078 3090 dependencies: 3079 3091 '@libsql/isomorphic-fetch': 0.3.1 3080 3092 '@libsql/isomorphic-ws': 0.1.5 3081 - js-base64: 3.7.7 3093 + js-base64: 3.7.8 3082 3094 node-fetch: 3.3.2 3083 3095 transitivePeerDependencies: 3084 3096 - bufferutil ··· 3094 3106 - bufferutil 3095 3107 - utf-8-validate 3096 3108 3097 - '@libsql/linux-arm-gnueabihf@0.5.15': 3109 + '@libsql/linux-arm-gnueabihf@0.5.17': 3098 3110 optional: true 3099 3111 3100 - '@libsql/linux-arm-musleabihf@0.5.15': 3112 + '@libsql/linux-arm-musleabihf@0.5.17': 3101 3113 optional: true 3102 3114 3103 - '@libsql/linux-arm64-gnu@0.5.15': 3115 + '@libsql/linux-arm64-gnu@0.5.17': 3104 3116 optional: true 3105 3117 3106 - '@libsql/linux-arm64-musl@0.5.15': 3118 + '@libsql/linux-arm64-musl@0.5.17': 3107 3119 optional: true 3108 3120 3109 - '@libsql/linux-x64-gnu@0.5.15': 3121 + '@libsql/linux-x64-gnu@0.5.17': 3110 3122 optional: true 3111 3123 3112 - '@libsql/linux-x64-musl@0.5.15': 3124 + '@libsql/linux-x64-musl@0.5.17': 3113 3125 optional: true 3114 3126 3115 - '@libsql/win32-x64-msvc@0.5.15': 3127 + '@libsql/win32-x64-msvc@0.5.17': 3116 3128 optional: true 3117 3129 3118 3130 '@neon-rs/load@0.0.4': {} ··· 3135 3147 3136 3148 '@rtsao/scc@1.1.0': {} 3137 3149 3138 - '@scalar/code-highlight@0.1.8': 3150 + '@scalar/code-highlight@0.1.9': 3139 3151 dependencies: 3140 3152 hast-util-to-text: 4.0.2 3141 3153 highlight.js: 11.11.1 ··· 3157 3169 transitivePeerDependencies: 3158 3170 - supports-color 3159 3171 3160 - '@scalar/components@0.14.20(typescript@5.8.3)': 3172 + '@scalar/components@0.14.23(typescript@5.9.2)': 3161 3173 dependencies: 3162 3174 '@floating-ui/utils': 0.2.10 3163 - '@floating-ui/vue': 1.1.7(vue@3.5.17(typescript@5.8.3)) 3164 - '@headlessui/vue': 1.7.23(vue@3.5.17(typescript@5.8.3)) 3165 - '@scalar/code-highlight': 0.1.8 3166 - '@scalar/icons': 0.4.6(typescript@5.8.3) 3167 - '@scalar/oas-utils': 0.4.15(typescript@5.8.3) 3168 - '@scalar/themes': 0.13.11 3169 - '@scalar/use-hooks': 0.2.4(typescript@5.8.3) 3170 - '@scalar/use-toasts': 0.8.0(typescript@5.8.3) 3171 - '@vueuse/core': 10.11.1(vue@3.5.17(typescript@5.8.3)) 3172 - cva: 1.0.0-beta.2(typescript@5.8.3) 3175 + '@floating-ui/vue': 1.1.8(vue@3.5.18(typescript@5.9.2)) 3176 + '@headlessui/vue': 1.7.23(vue@3.5.18(typescript@5.9.2)) 3177 + '@scalar/code-highlight': 0.1.9 3178 + '@scalar/icons': 0.4.6(typescript@5.9.2) 3179 + '@scalar/oas-utils': 0.4.18(typescript@5.9.2) 3180 + '@scalar/themes': 0.13.12 3181 + '@scalar/use-hooks': 0.2.4(typescript@5.9.2) 3182 + '@scalar/use-toasts': 0.8.0(typescript@5.9.2) 3183 + '@vueuse/core': 11.3.0(vue@3.5.18(typescript@5.9.2)) 3184 + cva: 1.0.0-beta.2(typescript@5.9.2) 3173 3185 nanoid: 5.1.5 3174 3186 pretty-bytes: 6.1.1 3175 - radix-vue: 1.9.17(vue@3.5.17(typescript@5.8.3)) 3176 - vue: 3.5.17(typescript@5.8.3) 3187 + radix-vue: 1.9.17(vue@3.5.18(typescript@5.9.2)) 3188 + vue: 3.5.18(typescript@5.9.2) 3189 + vue-component-type-helpers: 3.0.5 3177 3190 transitivePeerDependencies: 3178 3191 - '@vue/composition-api' 3179 3192 - supports-color 3180 3193 - typescript 3181 3194 3182 - '@scalar/core@0.3.10': 3195 + '@scalar/core@0.3.11': 3183 3196 dependencies: 3184 - '@scalar/types': 0.2.10 3197 + '@scalar/types': 0.2.11 3185 3198 3186 - '@scalar/helpers@0.0.6': {} 3199 + '@scalar/helpers@0.0.7': {} 3187 3200 3188 - '@scalar/hono-api-reference@0.9.12(hono@4.8.5)': 3201 + '@scalar/hono-api-reference@0.9.13(hono@4.9.2)': 3189 3202 dependencies: 3190 - '@scalar/core': 0.3.10 3191 - hono: 4.8.5 3203 + '@scalar/core': 0.3.11 3204 + hono: 4.9.2 3192 3205 3193 - '@scalar/icons@0.4.6(typescript@5.8.3)': 3206 + '@scalar/icons@0.4.6(typescript@5.9.2)': 3194 3207 dependencies: 3195 3208 '@phosphor-icons/core': 2.1.1 3196 - '@types/node': 22.16.5 3197 - chalk: 5.4.1 3198 - vue: 3.5.17(typescript@5.8.3) 3209 + '@types/node': 22.17.2 3210 + chalk: 5.6.0 3211 + vue: 3.5.18(typescript@5.9.2) 3199 3212 transitivePeerDependencies: 3200 3213 - typescript 3201 3214 3202 - '@scalar/json-diff@0.0.4': {} 3215 + '@scalar/json-magic@0.1.0(typescript@5.9.2)': 3216 + dependencies: 3217 + vue: 3.5.18(typescript@5.9.2) 3218 + yaml: 2.8.0 3219 + transitivePeerDependencies: 3220 + - typescript 3203 3221 3204 - '@scalar/oas-utils@0.4.15(typescript@5.8.3)': 3222 + '@scalar/oas-utils@0.4.18(typescript@5.9.2)': 3205 3223 dependencies: 3206 3224 '@hyperjump/browser': 1.3.1 3207 3225 '@hyperjump/json-schema': 1.16.2(@hyperjump/browser@1.3.1) 3208 - '@scalar/helpers': 0.0.6 3209 - '@scalar/object-utils': 1.2.2 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) 3226 + '@scalar/helpers': 0.0.7 3227 + '@scalar/object-utils': 1.2.3 3228 + '@scalar/openapi-types': 0.3.7 3229 + '@scalar/themes': 0.13.12 3230 + '@scalar/types': 0.2.11 3231 + '@scalar/workspace-store': 0.12.0(typescript@5.9.2) 3214 3232 '@types/har-format': 1.2.16 3215 3233 flatted: 3.3.3 3216 3234 microdiff: 1.5.0 ··· 3222 3240 - supports-color 3223 3241 - typescript 3224 3242 3225 - '@scalar/object-utils@1.2.2': 3243 + '@scalar/object-utils@1.2.3': 3226 3244 dependencies: 3245 + '@scalar/helpers': 0.0.7 3227 3246 flatted: 3.3.3 3228 3247 just-clone: 6.2.0 3229 3248 ts-deepmerge: 7.0.3 3230 3249 type-fest: 4.41.0 3231 3250 3232 - '@scalar/openapi-parser@0.18.2': 3251 + '@scalar/openapi-parser@0.19.0': 3233 3252 dependencies: 3253 + '@scalar/openapi-types': 0.3.7 3234 3254 ajv: 8.17.1 3235 3255 ajv-draft-04: 1.0.0(ajv@8.17.1) 3236 3256 ajv-formats: 3.0.1(ajv@8.17.1) ··· 3238 3258 leven: 4.0.0 3239 3259 yaml: 2.8.0 3240 3260 3241 - '@scalar/openapi-to-markdown@0.2.23(typescript@5.8.3)': 3261 + '@scalar/openapi-to-markdown@0.2.26(typescript@5.9.2)': 3242 3262 dependencies: 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 3263 + '@scalar/components': 0.14.23(typescript@5.9.2) 3264 + '@scalar/oas-utils': 0.4.18(typescript@5.9.2) 3265 + '@scalar/openapi-parser': 0.19.0 3266 + '@scalar/openapi-types': 0.3.7 3267 + '@scalar/snippetz': 0.4.4 3268 + '@scalar/types': 0.2.11 3249 3269 html-minifier-terser: 7.2.0 3250 3270 object-to-xml: 2.0.0 3251 3271 rehype-parse: 9.0.1 ··· 3255 3275 remark-gfm: 4.0.1 3256 3276 remark-stringify: 11.0.0 3257 3277 unified: 11.0.5 3258 - vue: 3.5.17(typescript@5.8.3) 3278 + vue: 3.5.18(typescript@5.9.2) 3259 3279 transitivePeerDependencies: 3260 3280 - '@vue/composition-api' 3261 3281 - supports-color 3262 3282 - typescript 3263 3283 3264 - '@scalar/openapi-types@0.3.6': 3284 + '@scalar/openapi-types@0.3.7': 3265 3285 dependencies: 3266 3286 zod: 3.24.1 3267 3287 3268 - '@scalar/snippetz@0.4.3': 3288 + '@scalar/snippetz@0.4.4': 3269 3289 dependencies: 3270 - '@scalar/types': 0.2.10 3290 + '@scalar/types': 0.2.11 3271 3291 stringify-object: 5.0.0 3272 3292 3273 - '@scalar/themes@0.13.11': 3293 + '@scalar/themes@0.13.12': 3274 3294 dependencies: 3275 - '@scalar/types': 0.2.10 3295 + '@scalar/types': 0.2.11 3276 3296 nanoid: 5.1.5 3277 3297 3278 - '@scalar/types@0.2.10': 3298 + '@scalar/types@0.2.11': 3279 3299 dependencies: 3280 - '@scalar/openapi-types': 0.3.6 3300 + '@scalar/openapi-types': 0.3.7 3281 3301 nanoid: 5.1.5 3282 3302 zod: 3.24.1 3283 3303 3284 - '@scalar/use-hooks@0.2.4(typescript@5.8.3)': 3304 + '@scalar/use-hooks@0.2.4(typescript@5.9.2)': 3285 3305 dependencies: 3286 - '@scalar/use-toasts': 0.8.0(typescript@5.8.3) 3287 - '@vueuse/core': 10.11.1(vue@3.5.17(typescript@5.8.3)) 3288 - cva: 1.0.0-beta.2(typescript@5.8.3) 3306 + '@scalar/use-toasts': 0.8.0(typescript@5.9.2) 3307 + '@vueuse/core': 10.11.1(vue@3.5.18(typescript@5.9.2)) 3308 + cva: 1.0.0-beta.2(typescript@5.9.2) 3289 3309 tailwind-merge: 2.6.0 3290 - vue: 3.5.17(typescript@5.8.3) 3310 + vue: 3.5.18(typescript@5.9.2) 3291 3311 zod: 3.24.1 3292 3312 transitivePeerDependencies: 3293 3313 - '@vue/composition-api' 3294 3314 - typescript 3295 3315 3296 - '@scalar/use-toasts@0.8.0(typescript@5.8.3)': 3316 + '@scalar/use-toasts@0.8.0(typescript@5.9.2)': 3297 3317 dependencies: 3298 3318 nanoid: 5.1.5 3299 - vue: 3.5.17(typescript@5.8.3) 3319 + vue: 3.5.18(typescript@5.9.2) 3300 3320 vue-sonner: 1.3.2 3301 3321 transitivePeerDependencies: 3302 3322 - typescript 3303 3323 3304 - '@scalar/workspace-store@0.10.2(typescript@5.8.3)': 3324 + '@scalar/workspace-store@0.12.0(typescript@5.9.2)': 3305 3325 dependencies: 3306 - '@scalar/code-highlight': 0.1.8 3307 - '@scalar/helpers': 0.0.6 3308 - '@scalar/json-diff': 0.0.4 3309 - '@scalar/openapi-parser': 0.18.2 3310 - '@scalar/openapi-types': 0.3.6 3311 - '@scalar/types': 0.2.10 3326 + '@scalar/code-highlight': 0.1.9 3327 + '@scalar/helpers': 0.0.7 3328 + '@scalar/json-magic': 0.1.0(typescript@5.9.2) 3329 + '@scalar/openapi-parser': 0.19.0 3330 + '@scalar/types': 0.2.11 3312 3331 '@sinclair/typebox': 0.34.37 3313 3332 github-slugger: 2.0.0 3314 - vue: 3.5.17(typescript@5.8.3) 3333 + vue: 3.5.18(typescript@5.9.2) 3315 3334 yaml: 2.8.0 3316 3335 transitivePeerDependencies: 3317 3336 - supports-color ··· 3322 3341 '@skyware/jetstream@0.2.5': 3323 3342 dependencies: 3324 3343 '@atcute/atproto': 3.1.1 3325 - '@atcute/bluesky': 3.1.5 3344 + '@atcute/bluesky': 3.2.0 3326 3345 '@atcute/lexicons': 1.1.0 3327 - partysocket: 1.1.4 3346 + partysocket: 1.1.5 3328 3347 tiny-emitter: 2.1.0 3329 3348 3330 3349 '@swc/helpers@0.5.17': ··· 3333 3352 3334 3353 '@tanstack/virtual-core@3.13.12': {} 3335 3354 3336 - '@tanstack/vue-virtual@3.13.12(vue@3.5.17(typescript@5.8.3))': 3355 + '@tanstack/vue-virtual@3.13.12(vue@3.5.18(typescript@5.9.2))': 3337 3356 dependencies: 3338 3357 '@tanstack/virtual-core': 3.13.12 3339 - vue: 3.5.17(typescript@5.8.3) 3358 + vue: 3.5.18(typescript@5.9.2) 3340 3359 3341 3360 '@types/debug@4.1.12': 3342 3361 dependencies: ··· 3360 3379 3361 3380 '@types/ms@2.1.0': {} 3362 3381 3363 - '@types/node@22.16.5': 3382 + '@types/node@22.17.2': 3364 3383 dependencies: 3365 3384 undici-types: 6.21.0 3366 3385 3367 - '@types/node@24.0.15': 3386 + '@types/node@24.3.0': 3368 3387 dependencies: 3369 - undici-types: 7.8.0 3388 + undici-types: 7.10.0 3370 3389 3371 3390 '@types/triple-beam@1.3.5': {} 3372 3391 ··· 3376 3395 3377 3396 '@types/ws@8.18.1': 3378 3397 dependencies: 3379 - '@types/node': 24.0.15 3398 + '@types/node': 24.3.0 3380 3399 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)': 3400 + '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': 3382 3401 dependencies: 3383 3402 '@eslint-community/regexpp': 4.12.1 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) 3403 + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 3404 + '@typescript-eslint/scope-manager': 8.40.0 3405 + '@typescript-eslint/type-utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 3406 + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 3407 + '@typescript-eslint/visitor-keys': 8.40.0 3408 + eslint: 9.33.0(jiti@2.5.1) 3390 3409 graphemer: 1.4.0 3391 3410 ignore: 7.0.5 3392 3411 natural-compare: 1.4.0 3393 - ts-api-utils: 2.1.0(typescript@5.8.3) 3394 - typescript: 5.8.3 3412 + ts-api-utils: 2.1.0(typescript@5.9.2) 3413 + typescript: 5.9.2 3395 3414 transitivePeerDependencies: 3396 3415 - supports-color 3397 3416 3398 - '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': 3417 + '@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': 3399 3418 dependencies: 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 3419 + '@typescript-eslint/scope-manager': 8.40.0 3420 + '@typescript-eslint/types': 8.40.0 3421 + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) 3422 + '@typescript-eslint/visitor-keys': 8.40.0 3404 3423 debug: 4.4.1 3405 - eslint: 9.31.0(jiti@2.4.2) 3406 - typescript: 5.8.3 3424 + eslint: 9.33.0(jiti@2.5.1) 3425 + typescript: 5.9.2 3407 3426 transitivePeerDependencies: 3408 3427 - supports-color 3409 3428 3410 - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': 3429 + '@typescript-eslint/project-service@8.40.0(typescript@5.9.2)': 3411 3430 dependencies: 3412 - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) 3413 - '@typescript-eslint/types': 8.38.0 3431 + '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2) 3432 + '@typescript-eslint/types': 8.40.0 3414 3433 debug: 4.4.1 3415 - typescript: 5.8.3 3434 + typescript: 5.9.2 3416 3435 transitivePeerDependencies: 3417 3436 - supports-color 3418 3437 3419 - '@typescript-eslint/scope-manager@8.38.0': 3438 + '@typescript-eslint/scope-manager@8.40.0': 3420 3439 dependencies: 3421 - '@typescript-eslint/types': 8.38.0 3422 - '@typescript-eslint/visitor-keys': 8.38.0 3440 + '@typescript-eslint/types': 8.40.0 3441 + '@typescript-eslint/visitor-keys': 8.40.0 3423 3442 3424 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': 3443 + '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)': 3425 3444 dependencies: 3426 - typescript: 5.8.3 3445 + typescript: 5.9.2 3427 3446 3428 - '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': 3447 + '@typescript-eslint/type-utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': 3429 3448 dependencies: 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) 3449 + '@typescript-eslint/types': 8.40.0 3450 + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) 3451 + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 3433 3452 debug: 4.4.1 3434 - eslint: 9.31.0(jiti@2.4.2) 3435 - ts-api-utils: 2.1.0(typescript@5.8.3) 3436 - typescript: 5.8.3 3453 + eslint: 9.33.0(jiti@2.5.1) 3454 + ts-api-utils: 2.1.0(typescript@5.9.2) 3455 + typescript: 5.9.2 3437 3456 transitivePeerDependencies: 3438 3457 - supports-color 3439 3458 3440 - '@typescript-eslint/types@8.38.0': {} 3459 + '@typescript-eslint/types@8.40.0': {} 3441 3460 3442 - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': 3461 + '@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)': 3443 3462 dependencies: 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 3463 + '@typescript-eslint/project-service': 8.40.0(typescript@5.9.2) 3464 + '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2) 3465 + '@typescript-eslint/types': 8.40.0 3466 + '@typescript-eslint/visitor-keys': 8.40.0 3448 3467 debug: 4.4.1 3449 3468 fast-glob: 3.3.3 3450 3469 is-glob: 4.0.3 3451 3470 minimatch: 9.0.5 3452 3471 semver: 7.7.2 3453 - ts-api-utils: 2.1.0(typescript@5.8.3) 3454 - typescript: 5.8.3 3472 + ts-api-utils: 2.1.0(typescript@5.9.2) 3473 + typescript: 5.9.2 3455 3474 transitivePeerDependencies: 3456 3475 - supports-color 3457 3476 3458 - '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': 3477 + '@typescript-eslint/utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': 3459 3478 dependencies: 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) 3465 - typescript: 5.8.3 3479 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) 3480 + '@typescript-eslint/scope-manager': 8.40.0 3481 + '@typescript-eslint/types': 8.40.0 3482 + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) 3483 + eslint: 9.33.0(jiti@2.5.1) 3484 + typescript: 5.9.2 3466 3485 transitivePeerDependencies: 3467 3486 - supports-color 3468 3487 3469 - '@typescript-eslint/visitor-keys@8.38.0': 3488 + '@typescript-eslint/visitor-keys@8.40.0': 3470 3489 dependencies: 3471 - '@typescript-eslint/types': 8.38.0 3490 + '@typescript-eslint/types': 8.40.0 3472 3491 eslint-visitor-keys: 4.2.1 3473 3492 3474 3493 '@ungap/structured-clone@1.3.0': {} 3475 3494 3476 - '@vue/compiler-core@3.5.17': 3495 + '@vue/compiler-core@3.5.18': 3477 3496 dependencies: 3478 - '@babel/parser': 7.28.0 3479 - '@vue/shared': 3.5.17 3497 + '@babel/parser': 7.28.3 3498 + '@vue/shared': 3.5.18 3480 3499 entities: 4.5.0 3481 3500 estree-walker: 2.0.2 3482 3501 source-map-js: 1.2.1 3483 3502 3484 - '@vue/compiler-dom@3.5.17': 3503 + '@vue/compiler-dom@3.5.18': 3485 3504 dependencies: 3486 - '@vue/compiler-core': 3.5.17 3487 - '@vue/shared': 3.5.17 3505 + '@vue/compiler-core': 3.5.18 3506 + '@vue/shared': 3.5.18 3488 3507 3489 - '@vue/compiler-sfc@3.5.17': 3508 + '@vue/compiler-sfc@3.5.18': 3490 3509 dependencies: 3491 - '@babel/parser': 7.28.0 3492 - '@vue/compiler-core': 3.5.17 3493 - '@vue/compiler-dom': 3.5.17 3494 - '@vue/compiler-ssr': 3.5.17 3495 - '@vue/shared': 3.5.17 3510 + '@babel/parser': 7.28.3 3511 + '@vue/compiler-core': 3.5.18 3512 + '@vue/compiler-dom': 3.5.18 3513 + '@vue/compiler-ssr': 3.5.18 3514 + '@vue/shared': 3.5.18 3496 3515 estree-walker: 2.0.2 3497 3516 magic-string: 0.30.17 3498 3517 postcss: 8.5.6 3499 3518 source-map-js: 1.2.1 3500 3519 3501 - '@vue/compiler-ssr@3.5.17': 3520 + '@vue/compiler-ssr@3.5.18': 3502 3521 dependencies: 3503 - '@vue/compiler-dom': 3.5.17 3504 - '@vue/shared': 3.5.17 3522 + '@vue/compiler-dom': 3.5.18 3523 + '@vue/shared': 3.5.18 3505 3524 3506 - '@vue/reactivity@3.5.17': 3525 + '@vue/reactivity@3.5.18': 3507 3526 dependencies: 3508 - '@vue/shared': 3.5.17 3527 + '@vue/shared': 3.5.18 3509 3528 3510 - '@vue/runtime-core@3.5.17': 3529 + '@vue/runtime-core@3.5.18': 3511 3530 dependencies: 3512 - '@vue/reactivity': 3.5.17 3513 - '@vue/shared': 3.5.17 3531 + '@vue/reactivity': 3.5.18 3532 + '@vue/shared': 3.5.18 3514 3533 3515 - '@vue/runtime-dom@3.5.17': 3534 + '@vue/runtime-dom@3.5.18': 3516 3535 dependencies: 3517 - '@vue/reactivity': 3.5.17 3518 - '@vue/runtime-core': 3.5.17 3519 - '@vue/shared': 3.5.17 3536 + '@vue/reactivity': 3.5.18 3537 + '@vue/runtime-core': 3.5.18 3538 + '@vue/shared': 3.5.18 3520 3539 csstype: 3.1.3 3521 3540 3522 - '@vue/server-renderer@3.5.17(vue@3.5.17(typescript@5.8.3))': 3541 + '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.9.2))': 3523 3542 dependencies: 3524 - '@vue/compiler-ssr': 3.5.17 3525 - '@vue/shared': 3.5.17 3526 - vue: 3.5.17(typescript@5.8.3) 3543 + '@vue/compiler-ssr': 3.5.18 3544 + '@vue/shared': 3.5.18 3545 + vue: 3.5.18(typescript@5.9.2) 3527 3546 3528 - '@vue/shared@3.5.17': {} 3547 + '@vue/shared@3.5.18': {} 3529 3548 3530 - '@vueuse/core@10.11.1(vue@3.5.17(typescript@5.8.3))': 3549 + '@vueuse/core@10.11.1(vue@3.5.18(typescript@5.9.2))': 3531 3550 dependencies: 3532 3551 '@types/web-bluetooth': 0.0.20 3533 3552 '@vueuse/metadata': 10.11.1 3534 - '@vueuse/shared': 10.11.1(vue@3.5.17(typescript@5.8.3)) 3535 - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) 3553 + '@vueuse/shared': 10.11.1(vue@3.5.18(typescript@5.9.2)) 3554 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) 3555 + transitivePeerDependencies: 3556 + - '@vue/composition-api' 3557 + - vue 3558 + 3559 + '@vueuse/core@11.3.0(vue@3.5.18(typescript@5.9.2))': 3560 + dependencies: 3561 + '@types/web-bluetooth': 0.0.20 3562 + '@vueuse/metadata': 11.3.0 3563 + '@vueuse/shared': 11.3.0(vue@3.5.18(typescript@5.9.2)) 3564 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) 3536 3565 transitivePeerDependencies: 3537 3566 - '@vue/composition-api' 3538 3567 - vue 3539 3568 3540 3569 '@vueuse/metadata@10.11.1': {} 3541 3570 3542 - '@vueuse/shared@10.11.1(vue@3.5.17(typescript@5.8.3))': 3571 + '@vueuse/metadata@11.3.0': {} 3572 + 3573 + '@vueuse/shared@10.11.1(vue@3.5.18(typescript@5.9.2))': 3543 3574 dependencies: 3544 - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) 3575 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) 3576 + transitivePeerDependencies: 3577 + - '@vue/composition-api' 3578 + - vue 3579 + 3580 + '@vueuse/shared@11.3.0(vue@3.5.18(typescript@5.9.2))': 3581 + dependencies: 3582 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) 3545 3583 transitivePeerDependencies: 3546 3584 - '@vue/composition-api' 3547 3585 - vue ··· 3663 3701 3664 3702 bun-types@1.2.17: 3665 3703 dependencies: 3666 - '@types/node': 24.0.15 3704 + '@types/node': 24.3.0 3667 3705 optional: true 3668 3706 3669 3707 call-bind-apply-helpers@1.0.2: ··· 3697 3735 ansi-styles: 4.3.0 3698 3736 supports-color: 7.2.0 3699 3737 3700 - chalk@5.4.1: {} 3738 + chalk@5.6.0: {} 3701 3739 3702 3740 character-entities-html4@2.1.0: {} 3703 3741 ··· 3756 3794 3757 3795 csstype@3.1.3: {} 3758 3796 3759 - cva@1.0.0-beta.2(typescript@5.8.3): 3797 + cva@1.0.0-beta.2(typescript@5.9.2): 3760 3798 dependencies: 3761 3799 clsx: 2.1.1 3762 3800 optionalDependencies: 3763 - typescript: 5.8.3 3801 + typescript: 5.9.2 3764 3802 3765 3803 dank-each@1.0.0: {} 3766 3804 ··· 3835 3873 dependencies: 3836 3874 '@drizzle-team/brocli': 0.10.2 3837 3875 '@esbuild-kit/esm-loader': 2.6.5 3838 - esbuild: 0.25.8 3839 - esbuild-register: 3.6.0(esbuild@0.25.8) 3876 + esbuild: 0.25.9 3877 + esbuild-register: 3.6.0(esbuild@0.25.9) 3840 3878 transitivePeerDependencies: 3841 3879 - supports-color 3842 3880 3843 - drizzle-orm@0.44.3(@libsql/client@0.15.10)(bun-types@1.2.17): 3881 + drizzle-orm@0.44.4(@libsql/client@0.15.12)(bun-types@1.2.17): 3844 3882 optionalDependencies: 3845 - '@libsql/client': 0.15.10 3883 + '@libsql/client': 0.15.12 3846 3884 bun-types: 1.2.17 3847 3885 3848 3886 dunder-proto@1.0.1: ··· 3939 3977 is-date-object: 1.1.0 3940 3978 is-symbol: 1.1.1 3941 3979 3942 - esbuild-register@3.6.0(esbuild@0.25.8): 3980 + esbuild-register@3.6.0(esbuild@0.25.9): 3943 3981 dependencies: 3944 3982 debug: 4.4.1 3945 - esbuild: 0.25.8 3983 + esbuild: 0.25.9 3946 3984 transitivePeerDependencies: 3947 3985 - supports-color 3948 3986 ··· 3971 4009 '@esbuild/win32-ia32': 0.18.20 3972 4010 '@esbuild/win32-x64': 0.18.20 3973 4011 3974 - esbuild@0.25.8: 4012 + esbuild@0.25.9: 3975 4013 optionalDependencies: 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 4014 + '@esbuild/aix-ppc64': 0.25.9 4015 + '@esbuild/android-arm': 0.25.9 4016 + '@esbuild/android-arm64': 0.25.9 4017 + '@esbuild/android-x64': 0.25.9 4018 + '@esbuild/darwin-arm64': 0.25.9 4019 + '@esbuild/darwin-x64': 0.25.9 4020 + '@esbuild/freebsd-arm64': 0.25.9 4021 + '@esbuild/freebsd-x64': 0.25.9 4022 + '@esbuild/linux-arm': 0.25.9 4023 + '@esbuild/linux-arm64': 0.25.9 4024 + '@esbuild/linux-ia32': 0.25.9 4025 + '@esbuild/linux-loong64': 0.25.9 4026 + '@esbuild/linux-mips64el': 0.25.9 4027 + '@esbuild/linux-ppc64': 0.25.9 4028 + '@esbuild/linux-riscv64': 0.25.9 4029 + '@esbuild/linux-s390x': 0.25.9 4030 + '@esbuild/linux-x64': 0.25.9 4031 + '@esbuild/netbsd-arm64': 0.25.9 4032 + '@esbuild/netbsd-x64': 0.25.9 4033 + '@esbuild/openbsd-arm64': 0.25.9 4034 + '@esbuild/openbsd-x64': 0.25.9 4035 + '@esbuild/openharmony-arm64': 0.25.9 4036 + '@esbuild/sunos-x64': 0.25.9 4037 + '@esbuild/win32-arm64': 0.25.9 4038 + '@esbuild/win32-ia32': 0.25.9 4039 + '@esbuild/win32-x64': 0.25.9 4002 4040 4003 4041 escape-string-regexp@4.0.0: {} 4004 4042 4005 4043 escape-string-regexp@5.0.0: {} 4006 4044 4007 - eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)): 4045 + eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)): 4008 4046 dependencies: 4009 - eslint: 9.31.0(jiti@2.4.2) 4047 + eslint: 9.33.0(jiti@2.5.1) 4010 4048 4011 4049 eslint-import-resolver-node@0.3.9: 4012 4050 dependencies: ··· 4016 4054 transitivePeerDependencies: 4017 4055 - supports-color 4018 4056 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)): 4057 + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)): 4020 4058 dependencies: 4021 4059 debug: 3.2.7 4022 4060 optionalDependencies: 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) 4061 + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 4062 + eslint: 9.33.0(jiti@2.5.1) 4025 4063 eslint-import-resolver-node: 0.3.9 4026 4064 transitivePeerDependencies: 4027 4065 - supports-color 4028 4066 4029 - eslint-plugin-drizzle@0.2.3(eslint@9.31.0(jiti@2.4.2)): 4067 + eslint-plugin-drizzle@0.2.3(eslint@9.33.0(jiti@2.5.1)): 4030 4068 dependencies: 4031 - eslint: 9.31.0(jiti@2.4.2) 4069 + eslint: 9.33.0(jiti@2.5.1) 4032 4070 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)): 4071 + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1)): 4034 4072 dependencies: 4035 4073 '@rtsao/scc': 1.1.0 4036 4074 array-includes: 3.1.9 ··· 4039 4077 array.prototype.flatmap: 1.3.3 4040 4078 debug: 3.2.7 4041 4079 doctrine: 2.1.0 4042 - eslint: 9.31.0(jiti@2.4.2) 4080 + eslint: 9.33.0(jiti@2.5.1) 4043 4081 eslint-import-resolver-node: 0.3.9 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)) 4082 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) 4045 4083 hasown: 2.0.2 4046 4084 is-core-module: 2.16.1 4047 4085 is-glob: 4.0.3 ··· 4053 4091 string.prototype.trimend: 1.0.9 4054 4092 tsconfig-paths: 3.15.0 4055 4093 optionalDependencies: 4056 - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) 4094 + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 4057 4095 transitivePeerDependencies: 4058 4096 - eslint-import-resolver-typescript 4059 4097 - eslint-import-resolver-webpack 4060 4098 - supports-color 4061 4099 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): 4100 + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(prettier@3.6.2): 4063 4101 dependencies: 4064 - eslint: 9.31.0(jiti@2.4.2) 4102 + eslint: 9.33.0(jiti@2.5.1) 4065 4103 prettier: 3.6.2 4066 4104 prettier-linter-helpers: 1.0.0 4067 4105 synckit: 0.11.11 4068 4106 optionalDependencies: 4069 - eslint-config-prettier: 10.1.8(eslint@9.31.0(jiti@2.4.2)) 4107 + eslint-config-prettier: 10.1.8(eslint@9.33.0(jiti@2.5.1)) 4070 4108 4071 4109 eslint-scope@8.4.0: 4072 4110 dependencies: ··· 4077 4115 4078 4116 eslint-visitor-keys@4.2.1: {} 4079 4117 4080 - eslint@9.31.0(jiti@2.4.2): 4118 + eslint@9.33.0(jiti@2.5.1): 4081 4119 dependencies: 4082 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) 4120 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) 4083 4121 '@eslint-community/regexpp': 4.12.1 4084 4122 '@eslint/config-array': 0.21.0 4085 - '@eslint/config-helpers': 0.3.0 4086 - '@eslint/core': 0.15.1 4123 + '@eslint/config-helpers': 0.3.1 4124 + '@eslint/core': 0.15.2 4087 4125 '@eslint/eslintrc': 3.3.1 4088 - '@eslint/js': 9.31.0 4089 - '@eslint/plugin-kit': 0.3.4 4126 + '@eslint/js': 9.33.0 4127 + '@eslint/plugin-kit': 0.3.5 4090 4128 '@humanfs/node': 0.16.6 4091 4129 '@humanwhocodes/module-importer': 1.0.1 4092 4130 '@humanwhocodes/retry': 0.4.3 ··· 4115 4153 natural-compare: 1.4.0 4116 4154 optionator: 0.9.4 4117 4155 optionalDependencies: 4118 - jiti: 2.4.2 4156 + jiti: 2.5.1 4119 4157 transitivePeerDependencies: 4120 4158 - supports-color 4121 4159 ··· 4317 4355 hast-util-from-parse5: 8.0.3 4318 4356 parse5: 7.3.0 4319 4357 vfile: 6.0.3 4320 - vfile-message: 4.0.2 4358 + vfile-message: 4.0.3 4321 4359 4322 4360 hast-util-from-parse5@8.0.3: 4323 4361 dependencies: ··· 4450 4488 4451 4489 highlightjs-vue@1.0.0: {} 4452 4490 4453 - hono@4.8.5: {} 4491 + hono@4.9.2: {} 4454 4492 4455 4493 html-minifier-terser@7.2.0: 4456 4494 dependencies: ··· 4608 4646 4609 4647 isexe@2.0.0: {} 4610 4648 4611 - jiti@2.4.2: {} 4649 + jiti@2.5.1: {} 4612 4650 4613 - js-base64@3.7.7: {} 4651 + js-base64@3.7.8: {} 4614 4652 4615 4653 js-yaml@4.1.0: 4616 4654 dependencies: ··· 4649 4687 prelude-ls: 1.2.1 4650 4688 type-check: 0.4.0 4651 4689 4652 - libsql@0.5.15: 4690 + libsql@0.5.17: 4653 4691 dependencies: 4654 4692 '@neon-rs/load': 0.0.4 4655 4693 detect-libc: 2.0.2 4656 4694 optionalDependencies: 4657 - '@libsql/darwin-arm64': 0.5.15 4658 - '@libsql/darwin-x64': 0.5.15 4659 - '@libsql/linux-arm-gnueabihf': 0.5.15 4660 - '@libsql/linux-arm-musleabihf': 0.5.15 4661 - '@libsql/linux-arm64-gnu': 0.5.15 4662 - '@libsql/linux-arm64-musl': 0.5.15 4663 - '@libsql/linux-x64-gnu': 0.5.15 4664 - '@libsql/linux-x64-musl': 0.5.15 4665 - '@libsql/win32-x64-msvc': 0.5.15 4695 + '@libsql/darwin-arm64': 0.5.17 4696 + '@libsql/darwin-x64': 0.5.17 4697 + '@libsql/linux-arm-gnueabihf': 0.5.17 4698 + '@libsql/linux-arm-musleabihf': 0.5.17 4699 + '@libsql/linux-arm64-gnu': 0.5.17 4700 + '@libsql/linux-arm64-musl': 0.5.17 4701 + '@libsql/linux-x64-gnu': 0.5.17 4702 + '@libsql/linux-x64-musl': 0.5.17 4703 + '@libsql/win32-x64-msvc': 0.5.17 4666 4704 4667 4705 locate-path@6.0.0: 4668 4706 dependencies: ··· 4693 4731 4694 4732 magic-string@0.30.17: 4695 4733 dependencies: 4696 - '@jridgewell/sourcemap-codec': 1.5.4 4734 + '@jridgewell/sourcemap-codec': 1.5.5 4697 4735 4698 4736 markdown-table@3.0.4: {} 4699 4737 ··· 5123 5161 dependencies: 5124 5162 entities: 6.0.1 5125 5163 5126 - partysocket@1.1.4: 5164 + partysocket@1.1.5: 5127 5165 dependencies: 5128 5166 event-target-polyfill: 0.0.4 5129 5167 ··· 5170 5208 5171 5209 queue-microtask@1.2.3: {} 5172 5210 5173 - radix-vue@1.9.17(vue@3.5.17(typescript@5.8.3)): 5211 + radix-vue@1.9.17(vue@3.5.18(typescript@5.9.2)): 5174 5212 dependencies: 5175 - '@floating-ui/dom': 1.7.2 5176 - '@floating-ui/vue': 1.1.7(vue@3.5.17(typescript@5.8.3)) 5213 + '@floating-ui/dom': 1.7.3 5214 + '@floating-ui/vue': 1.1.8(vue@3.5.18(typescript@5.9.2)) 5177 5215 '@internationalized/date': 3.8.2 5178 - '@internationalized/number': 3.6.3 5179 - '@tanstack/vue-virtual': 3.13.12(vue@3.5.17(typescript@5.8.3)) 5180 - '@vueuse/core': 10.11.1(vue@3.5.17(typescript@5.8.3)) 5181 - '@vueuse/shared': 10.11.1(vue@3.5.17(typescript@5.8.3)) 5216 + '@internationalized/number': 3.6.4 5217 + '@tanstack/vue-virtual': 3.13.12(vue@3.5.18(typescript@5.9.2)) 5218 + '@vueuse/core': 10.11.1(vue@3.5.18(typescript@5.9.2)) 5219 + '@vueuse/shared': 10.11.1(vue@3.5.18(typescript@5.9.2)) 5182 5220 aria-hidden: 1.2.6 5183 5221 defu: 6.1.4 5184 5222 fast-deep-equal: 3.1.3 5185 5223 nanoid: 5.1.5 5186 - vue: 3.5.17(typescript@5.8.3) 5224 + vue: 3.5.18(typescript@5.9.2) 5187 5225 transitivePeerDependencies: 5188 5226 - '@vue/composition-api' 5189 5227 ··· 5480 5518 5481 5519 terser@5.43.1: 5482 5520 dependencies: 5483 - '@jridgewell/source-map': 0.3.10 5521 + '@jridgewell/source-map': 0.3.11 5484 5522 acorn: 8.15.0 5485 5523 commander: 2.20.3 5486 5524 source-map-support: 0.5.21 ··· 5503 5541 5504 5542 trough@2.2.0: {} 5505 5543 5506 - ts-api-utils@2.1.0(typescript@5.8.3): 5544 + ts-api-utils@2.1.0(typescript@5.9.2): 5507 5545 dependencies: 5508 - typescript: 5.8.3 5546 + typescript: 5.9.2 5509 5547 5510 5548 ts-deepmerge@7.0.3: {} 5511 5549 ··· 5518 5556 5519 5557 tslib@2.8.1: {} 5520 5558 5521 - tsx@4.20.3: 5559 + tsx@4.20.4: 5522 5560 dependencies: 5523 - esbuild: 0.25.8 5561 + esbuild: 0.25.9 5524 5562 get-tsconfig: 4.10.1 5525 5563 optionalDependencies: 5526 5564 fsevents: 2.3.3 ··· 5564 5602 possible-typed-array-names: 1.1.0 5565 5603 reflect.getprototypeof: 1.0.10 5566 5604 5567 - typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): 5605 + typescript-eslint@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): 5568 5606 dependencies: 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) 5574 - typescript: 5.8.3 5607 + '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 5608 + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 5609 + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) 5610 + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) 5611 + eslint: 9.33.0(jiti@2.5.1) 5612 + typescript: 5.9.2 5575 5613 transitivePeerDependencies: 5576 5614 - supports-color 5577 5615 5578 - typescript@5.8.3: {} 5616 + typescript@5.9.2: {} 5579 5617 5580 5618 unbox-primitive@1.1.0: 5581 5619 dependencies: ··· 5586 5624 5587 5625 undici-types@6.21.0: {} 5588 5626 5589 - undici-types@7.8.0: {} 5627 + undici-types@7.10.0: {} 5590 5628 5591 5629 unified@11.0.5: 5592 5630 dependencies: ··· 5639 5677 '@types/unist': 3.0.3 5640 5678 vfile: 6.0.3 5641 5679 5642 - vfile-message@4.0.2: 5680 + vfile-message@4.0.3: 5643 5681 dependencies: 5644 5682 '@types/unist': 3.0.3 5645 5683 unist-util-stringify-position: 4.0.0 ··· 5647 5685 vfile@6.0.3: 5648 5686 dependencies: 5649 5687 '@types/unist': 3.0.3 5650 - vfile-message: 4.0.2 5688 + vfile-message: 4.0.3 5651 5689 5652 - vue-demi@0.14.10(vue@3.5.17(typescript@5.8.3)): 5690 + vue-component-type-helpers@3.0.5: {} 5691 + 5692 + vue-demi@0.14.10(vue@3.5.18(typescript@5.9.2)): 5653 5693 dependencies: 5654 - vue: 3.5.17(typescript@5.8.3) 5694 + vue: 3.5.18(typescript@5.9.2) 5655 5695 5656 5696 vue-sonner@1.3.2: {} 5657 5697 5658 - vue@3.5.17(typescript@5.8.3): 5698 + vue@3.5.18(typescript@5.9.2): 5659 5699 dependencies: 5660 - '@vue/compiler-dom': 3.5.17 5661 - '@vue/compiler-sfc': 3.5.17 5662 - '@vue/runtime-dom': 3.5.17 5663 - '@vue/server-renderer': 3.5.17(vue@3.5.17(typescript@5.8.3)) 5664 - '@vue/shared': 3.5.17 5700 + '@vue/compiler-dom': 3.5.18 5701 + '@vue/compiler-sfc': 3.5.18 5702 + '@vue/runtime-dom': 3.5.18 5703 + '@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.9.2)) 5704 + '@vue/shared': 3.5.18 5665 5705 optionalDependencies: 5666 - typescript: 5.8.3 5706 + typescript: 5.9.2 5667 5707 5668 5708 web-namespaces@2.0.1: {} 5669 5709
+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 + }
+3 -2
backend/src/db/schema.ts
··· 6 6 7 7 import { int, sqliteTable, text } from "drizzle-orm/sqlite-core"; 8 8 import { sql } from "drizzle-orm"; 9 + import type { TagRef } from "../api/types.js"; 9 10 10 11 // WebStorm keeps throwing errors with the default statements as it wants 11 12 // an actual SQLite query, despite being valid. Sucks. ··· 23 24 unlisted: int("unlisted", { mode: "boolean" }).notNull(), 24 25 notes: text("notes"), 25 26 tags: text("tags", { mode: "json" }) 26 - .$type<string[]>() 27 + .$type<TagRef[]>() 27 28 .default(sql`'[]'`), 28 29 unread: int("unread", { mode: "boolean" }), 29 30 languages: text("languages", { mode: "json" }) ··· 63 64 .default(sql`(unixepoch() * 1000)`), 64 65 did: text("did").notNull().unique(), 65 66 cid: text("cid").notNull(), 66 - displayName: text("displayName"), 67 + displayName: text("displayName").notNull(), 67 68 description: text("description"), 68 69 avatar: text("avatar"), 69 70 createdAt: int("createdAt", { mode: "timestamp_ms" })
+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 + }
+25 -5
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 + import { eq } from "drizzle-orm"; 21 22 22 23 const db = Database.getInstance().getDb(); 23 24 ··· 65 66 }; 66 67 67 68 // xxh64, NOT xxh3 learned that the hard way 68 - const { h64 } = await xxhash(); 69 - const urlHash = h64(record.url).toString(16); 69 + const urlHash: string = await hashString(record.url); 70 70 71 71 if (urlHash !== event.commit.rkey) { 72 72 Logger.verbose( ··· 166 166 export async function handleProfile( 167 167 event: CommitEvent<`social.clippr.${string}`>, 168 168 ): Promise<void> { 169 - if (event.commit.operation !== "create") { 169 + if (event.commit.operation === "delete") { 170 170 Logger.warn( 171 171 `Operation '${event.commit.operation}' for ${event.commit.collection} not supported. Ignoring.`, 172 172 ); 173 173 return; 174 - } // We currently do not handle these. 174 + } // We currently do not handle deletes. 175 175 176 176 if (event.commit.record.$type !== "social.clippr.actor.profile") { 177 177 Logger.verbose( ··· 242 242 243 243 // Independent validations 244 244 if (!(await validateProfile(record))) { 245 + return; 246 + } 247 + 248 + if (event.commit.operation === "update") { 249 + await db 250 + .update(usersTable) 251 + .set({ 252 + did: convertDidToString(event.did), 253 + cid: event.commit.cid, 254 + timestamp: convertMicroToDate(event.time_us), 255 + createdAt: new Date(record.createdAt), 256 + displayName: record.displayName, 257 + avatar: record.avatar?.ref.$link, 258 + description: record.description, 259 + }) 260 + .where(eq(usersTable.did, convertDidToString(event.did))) 261 + .execute(); 262 + 263 + Logger.verbose(`Updated profile: ${convertDidToString(event.did)}`, event); 264 + 245 265 return; 246 266 } 247 267
-9
backend/src/network/converters.ts
··· 31 31 } 32 32 } 33 33 34 - // TODO: Stop leeching off the Bluesky CDN and get the blob directly from the user's PDS 35 - // Get a CDN URI from a blob's CID 36 - export async function getUriFromBlobCid( 37 - did: string, 38 - cid: string, 39 - ): Promise<string> { 40 - return `https://cdn.bsky.app/img/avatar/plain/${did}/${cid}`; 41 - } 42 - 43 34 // Get a user's handle from their DID. DID method agnostic. 44 35 export async function getHandleFromDid(did: string): Promise<string> { 45 36 const docResolver = new CompositeDidDocumentResolver({
+114 -6
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 { 12 - getDidFromHandle, 13 - getHandleFromDid, 14 - getUriFromBlobCid, 15 - } 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"; 16 17 17 18 const app = new Hono(); 18 19 const db = Database.getInstance().getDb(); ··· 101 102 } else actorHandle = actor; 102 103 103 104 // TODO: Add placeholder avatar 105 + // This is a mess and should be replaced with a real solution! 104 106 const avatarCid: string = 105 107 profileSearch[0]?.avatar || "https://missing.avatar"; 106 108 let actorAvatar; 107 109 if (avatarCid !== "https://missing.avatar") { 108 - actorAvatar = await getUriFromBlobCid(actorDid, avatarCid); 110 + actorAvatar = await createAvatarLink(actorDid, avatarCid); 109 111 } else actorAvatar = avatarCid; 110 112 111 113 // Right now we don't do de-duplication in the database, so we just take the ··· 118 120 description: profileSearch[0]?.description || null, 119 121 createdAt: profileSearch[0]?.createdAt, 120 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); 121 229 }); 122 230 123 231 app.get("/_health", async (c) => {
+2
backend/src/server.ts
··· 10 10 import Logger from "./logger.js"; 11 11 import { logger } from "hono/logger"; 12 12 import openapi from "./routes/openapi.js"; 13 + import { cors } from "hono/cors"; 13 14 14 15 export function winstonLogger(message: string, ...rest: unknown[]) { 15 16 Logger.http(message, ...rest); ··· 17 18 18 19 const app = new Hono(); 19 20 app.use(logger(winstonLogger)); 21 + app.use(cors()); 20 22 21 23 // Link all routes up 22 24 app.route("/", misc);
+1226 -1290
backend/static/api.json
··· 1 1 { 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 - }, 12 - "servers": [ 13 - { 14 - "url": "http://localhost:9090", 15 - "description": "Development server" 16 - }, 17 - { 18 - "url": "https://api.clippr.social", 19 - "description": "Production server" 20 - } 21 - ], 22 - "tags": [ 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 - { 32 - "name": "Profile", 33 - "description": "API paths that relate to user profiles." 34 - }, 35 - { 36 - "name": "Misc", 37 - "description": "API paths that don't fit into any other category." 38 - } 39 - ], 40 - "paths": { 41 - "/xrpc/social.clippr.actor.getPreferences": { 42 - "get": { 43 - "tags": [ 44 - "Profile" 45 - ], 46 - "summary": "Get a user's preferences", 47 - "operationId": "social.clippr.actor.getPreferences", 48 - "description": "Get a user's private preferences. Requires authentication.", 49 - "security": [ 50 - { 51 - "Bearer": [] 52 - } 53 - ], 54 - "responses": { 55 - "200": { 56 - "description": "OK", 57 - "content": { 58 - "application/json": { 59 - "schema": { 60 - "$ref": "#/components/schemas/social.clippr.actor.defs.preferences" 61 - } 62 - } 63 - } 64 - }, 65 - "400": { 66 - "description": "Bad Request", 67 - "content": { 68 - "application/json": { 69 - "schema": { 70 - "type": "object", 71 - "properties": { 72 - "error": { 73 - "type": "string", 74 - "description": "A general error code", 75 - "oneOf": [ 76 - { 77 - "const": "InvalidRequest" 78 - }, 79 - { 80 - "const": "ExpiredToken" 81 - }, 82 - { 83 - "const": "InvalidToken" 84 - } 85 - ] 86 - }, 87 - "message": { 88 - "type": "string", 89 - "description": "A detailed description of the error" 90 - } 91 - } 92 - } 93 - } 94 - } 95 - }, 96 - "401": { 97 - "description": "Unauthorized", 98 - "content": { 99 - "application/json": { 100 - "schema": { 101 - "type": "object", 102 - "properties": { 103 - "error": { 104 - "type": "string", 105 - "description": "A general error code", 106 - "oneOf": [ 107 - { 108 - "const": "AuthMissing" 109 - } 110 - ] 111 - }, 112 - "message": { 113 - "type": "string", 114 - "description": "A detailed description of the error" 115 - } 116 - } 117 - } 118 - } 119 - } 120 - } 121 - } 122 - } 123 - }, 124 - "/xrpc/social.clippr.actor.getProfile": { 125 - "get": { 126 - "tags": [ 127 - "Profile" 128 - ], 129 - "summary": "Get a profile", 130 - "operationId": "social.clippr.actor.getProfile", 131 - "description": "Get a user's profile based on a given DID or handle.", 132 - "parameters": [ 133 - { 134 - "name": "actor", 135 - "in": "query", 136 - "description": "Handle or DID of account to fetch profile of", 137 - "required": true, 138 - "content": { 139 - "schema": { 140 - "type": "string", 141 - "description": "Handle or DID of account to fetch profile of", 142 - "format": "at-identifier" 143 - } 144 - }, 145 - "deprecated": false, 146 - "allowEmptyValue": false 147 - } 148 - ], 149 - "responses": { 150 - "200": { 151 - "description": "OK", 152 - "content": { 153 - "application/json": { 154 - "schema": { 155 - "type": "object", 156 - "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 157 - } 158 - } 159 - } 160 - }, 161 - "400": { 162 - "description": "Bad Request", 163 - "content": { 164 - "application/json": { 165 - "schema": { 166 - "type": "object", 167 - "properties": { 168 - "error": { 169 - "type": "string", 170 - "description": "A general error code", 171 - "oneOf": [ 172 - { 173 - "const": "InvalidRequest" 174 - } 175 - ] 176 - }, 177 - "message": { 178 - "type": "string", 179 - "description": "A detailed description of the error" 180 - } 181 - } 182 - } 183 - } 184 - } 185 - } 186 - } 187 - } 188 - }, 189 - "/xrpc/social.clippr.actor.putPreferences": { 190 - "post": { 191 - "tags": [ 192 - "Profile" 193 - ], 194 - "summary": "Set a user's preferences", 195 - "operationId": "social.clippr.actor.putPreferences", 196 - "description": "Sets the private preferences attached to the account. Requires authentication.", 197 - "security": [ 198 - { 199 - "Bearer": [] 200 - } 201 - ], 202 - "requestBody": { 203 - "required": true, 204 - "content": { 205 - "application/json": { 206 - "schema": { 207 - "type": "object", 208 - "properties": { 209 - "preferences": { 210 - "$ref": "#/components/schemas/social.clippr.actor.defs.preferences" 211 - } 212 - } 213 - } 214 - } 215 - } 216 - }, 217 - "responses": { 218 - "200": { 219 - "description": "OK" 220 - }, 221 - "400": { 222 - "description": "Bad Request", 223 - "content": { 224 - "application/json": { 225 - "schema": { 226 - "type": "object", 227 - "properties": { 228 - "error": { 229 - "type": "string", 230 - "oneOf": [ 231 - { 232 - "const": "InvalidRequest" 233 - }, 234 - { 235 - "const": "ExpiredToken" 236 - }, 237 - { 238 - "const": "InvalidToken" 239 - } 240 - ], 241 - "description": "A general error code" 242 - }, 243 - "message": { 244 - "type": "string", 245 - "description": "A detailed description of the error" 246 - } 247 - } 248 - } 249 - } 250 - } 251 - }, 252 - "401": { 253 - "description": "Unauthorized", 254 - "content": { 255 - "application/json": { 256 - "schema": { 257 - "type": "object", 258 - "properties": { 259 - "error": { 260 - "type": "string", 261 - "description": "A general error code", 262 - "oneOf": [ 263 - { 264 - "const": "AuthMissing" 265 - } 266 - ] 267 - }, 268 - "message": { 269 - "type": "string", 270 - "description": "A detailed description of the error" 271 - } 272 - } 273 - } 274 - } 275 - } 276 - } 277 - } 278 - } 279 - }, 280 - "/xrpc/social.clippr.actor.searchClips": { 281 - "get": { 282 - "tags": [ 283 - "Clips" 284 - ], 285 - "summary": "Search clips", 286 - "operationId": "social.clippr.actor.searchClips", 287 - "description": "Find clips matching search criteria.", 288 - "parameters": [ 289 - { 290 - "name": "q", 291 - "in": "query", 292 - "description": "Search query string", 293 - "required": true, 294 - "schema": { 295 - "type": "string", 296 - "description": "Search query string" 297 - } 298 - }, 299 - { 300 - "name": "limit", 301 - "in": "query", 302 - "description": "How many clips to return in the query output", 303 - "required": false, 304 - "schema": { 305 - "type": "integer", 306 - "minimum": 1, 307 - "maximum": 100, 308 - "default": 25 309 - } 310 - }, 311 - { 312 - "name": "actor", 313 - "in": "query", 314 - "description": "An actor to filter results to", 315 - "required": false, 316 - "schema": { 317 - "type": "string", 318 - "description": "An actor to filter results to", 319 - "format": "at-identifier" 320 - } 321 - }, 322 - { 323 - "name": "cursor", 324 - "in": "query", 325 - "description": "A parameter to paginate results", 326 - "required": false, 327 - "schema": { 328 - "type": "string", 329 - "description": "A parameter to paginate results" 330 - } 331 - } 332 - ], 333 - "responses": { 334 - "200": { 335 - "description": "OK", 336 - "content": { 337 - "application/json": { 338 - "schema": { 339 - "type": "object", 340 - "properties": { 341 - "cursor": { 342 - "type": "string", 343 - "description": "A parameter to paginate results" 344 - }, 345 - "clips": { 346 - "type": "array", 347 - "items": { 348 - "$ref": "#/components/schemas/social.clippr.feed.defs.clipView" 349 - } 350 - } 351 - } 352 - } 353 - } 354 - } 355 - }, 356 - "400": { 357 - "description": "Bad Request", 358 - "content": { 359 - "application/json": { 360 - "schema": { 361 - "type": "object", 362 - "properties": { 363 - "error": { 364 - "type": "string", 365 - "description": "A general error code", 366 - "oneOf": [ 367 - { 368 - "const": "InvalidRequest" 369 - } 370 - ] 371 - }, 372 - "message": { 373 - "type": "string", 374 - "description": "A detailed description of the error" 375 - } 376 - } 377 - } 378 - } 379 - } 380 - } 381 - } 382 - } 383 - }, 384 - "/xrpc/social.clippr.actor.searchProfiles": { 385 - "get": { 386 - "tags": [ 387 - "Profile" 388 - ], 389 - "summary": "Search profiles", 390 - "operationId": "social.clippr.actor.searchProfiles", 391 - "description": "Find profiles matching search criteria.", 392 - "parameters": [ 393 - { 394 - "name": "q", 395 - "in": "query", 396 - "description": "Search query string", 397 - "required": false, 398 - "schema": { 399 - "type": "string", 400 - "description": "Search query string" 401 - } 402 - }, 403 - { 404 - "name": "limit", 405 - "in": "query", 406 - "description": "The number of profiles to be returned in the query", 407 - "required": false, 408 - "schema": { 409 - "type": "integer", 410 - "minimum": 1, 411 - "maximum": 100, 412 - "default": 25 413 - } 414 - }, 415 - { 416 - "name": "cursor", 417 - "in": "query", 418 - "description": "A parameter used for pagination", 419 - "required": false, 420 - "schema": { 421 - "type": "string", 422 - "description": "A parameter used for pagination" 423 - } 424 - } 425 - ], 426 - "responses": { 427 - "200": { 428 - "description": "OK", 429 - "content": { 430 - "application/json": { 431 - "schema": { 432 - "type": "object", 433 - "properties": { 434 - "cursor": { 435 - "type": "string", 436 - "description": "A parameter used for pagination" 437 - }, 438 - "actors": { 439 - "type": "array", 440 - "items": { 441 - "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 442 - } 443 - } 444 - } 445 - } 446 - } 447 - } 448 - }, 449 - "400": { 450 - "description": "Bad Request", 451 - "content": { 452 - "application/json": { 453 - "schema": { 454 - "type": "object", 455 - "properties": { 456 - "error": { 457 - "type": "string", 458 - "description": "A general error code", 459 - "oneOf": [ 460 - { 461 - "const": "InvalidRequest" 462 - } 463 - ] 464 - }, 465 - "message": { 466 - "type": "string", 467 - "description": "A detailed description of the error" 468 - } 469 - } 470 - } 471 - } 472 - } 473 - } 474 - } 475 - } 476 - }, 477 - "/xrpc/social.clippr.actor.searchTags": { 478 - "get": { 479 - "tags": [ 480 - "Tags" 481 - ], 482 - "summary": "Search tags", 483 - "operationId": "social.clippr.actor.searchTags", 484 - "description": "Find tags matching search criteria.", 485 - "parameters": [ 486 - { 487 - "name": "q", 488 - "in": "query", 489 - "description": "Search query string", 490 - "required": true, 491 - "schema": { 492 - "type": "string", 493 - "description": "Search query string" 494 - } 495 - }, 496 - { 497 - "name": "limit", 498 - "in": "query", 499 - "description": "How many tags to return in the query output", 500 - "required": false, 501 - "schema": { 502 - "type": "integer", 503 - "minimum": 1, 504 - "maximum": 100, 505 - "default": 25 506 - } 507 - }, 508 - { 509 - "name": "actor", 510 - "in": "query", 511 - "description": "An actor to filter results to", 512 - "required": false, 513 - "schema": { 514 - "type": "string", 515 - "description": "An actor to filter results to", 516 - "format": "at-identifier" 517 - } 518 - }, 519 - { 520 - "name": "cursor", 521 - "in": "query", 522 - "description": "A parameter to paginate results", 523 - "required": false, 524 - "schema": { 525 - "type": "string", 526 - "description": "A parameter to paginate results" 527 - } 528 - } 529 - ], 530 - "responses": { 531 - "200": { 532 - "description": "OK", 533 - "content": { 534 - "application/json": { 535 - "schema": { 536 - "type": "object", 537 - "properties": { 538 - "cursor": { 539 - "type": "string", 540 - "description": "A parameter to paginate results" 541 - }, 542 - "tags": { 543 - "type": "array", 544 - "items": { 545 - "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 546 - } 547 - } 548 - } 549 - } 550 - } 551 - } 552 - }, 553 - "400": { 554 - "description": "Bad Request", 555 - "content": { 556 - "application/json": { 557 - "schema": { 558 - "type": "object", 559 - "properties": { 560 - "error": { 561 - "type": "string", 562 - "description": "A general error code", 563 - "oneOf": [ 564 - { 565 - "const": "InvalidRequest" 566 - } 567 - ] 568 - }, 569 - "message": { 570 - "type": "string", 571 - "description": "A detailed description of the error" 572 - } 573 - } 574 - } 575 - } 576 - } 577 - } 578 - } 579 - } 580 - }, 581 - "/xrpc/social.clippr.feed.getClips": { 582 - "get": { 583 - "tags": [ 584 - "Clips" 585 - ], 586 - "summary": "Get clips", 587 - "operationId": "social.clippr.feed.getClips", 588 - "description": "Get the hydrated views of a list of clips from their AT URIs.", 589 - "parameters": [ 590 - { 591 - "name": "uris", 592 - "in": "query", 593 - "description": "List of tag AT-URIs to return hydrated views for", 594 - "required": true, 595 - "schema": { 596 - "type": "array", 597 - "items": { 598 - "type": "string", 599 - "format": "at-uri" 600 - }, 601 - "maxItems": 25 602 - } 603 - } 604 - ], 605 - "responses": { 606 - "200": { 607 - "description": "OK", 608 - "content": { 609 - "application/json": { 610 - "schema": { 611 - "type": "array", 612 - "items": { 613 - "$ref": "#/components/schemas/social.clippr.feed.defs.clipView" 614 - } 615 - } 616 - } 617 - } 618 - }, 619 - "400": { 620 - "description": "Bad Request", 621 - "content": { 622 - "application/json": { 623 - "schema": { 624 - "type": "object", 625 - "properties": { 626 - "error": { 627 - "type": "string", 628 - "description": "A general error code", 629 - "oneOf": [ 630 - { 631 - "const": "InvalidRequest" 632 - } 633 - ] 634 - }, 635 - "message": { 636 - "type": "string", 637 - "description": "A detailed description of the error" 638 - } 639 - } 640 - } 641 - } 642 - } 643 - } 644 - } 645 - } 646 - }, 647 - "/xrpc/social.clippr.feed.getTags": { 648 - "get": { 649 - "tags": [ 650 - "Tags" 651 - ], 652 - "summary": "Get tags", 653 - "operationId": "social.clippr.feed.getTags", 654 - "description": "Get a the hydrated views of a list of tags from their AT URIs.", 655 - "parameters": [ 656 - { 657 - "name": "uris", 658 - "in": "query", 659 - "description": "List of tag AT-URIs to return hydrated views for", 660 - "required": true, 661 - "schema": { 662 - "type": "array", 663 - "items": { 664 - "type": "string", 665 - "format": "at-uri" 666 - }, 667 - "maxItems": 25 668 - } 669 - } 670 - ], 671 - "responses": { 672 - "200": { 673 - "description": "OK", 674 - "content": { 675 - "application/json": { 676 - "schema": { 677 - "type": "array", 678 - "items": { 679 - "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 680 - } 681 - } 682 - } 683 - } 684 - }, 685 - "400": { 686 - "description": "Bad Request", 687 - "content": { 688 - "application/json": { 689 - "schema": { 690 - "type": "object", 691 - "properties": { 692 - "error": { 693 - "type": "string", 694 - "description": "A general error code", 695 - "oneOf": [ 696 - { 697 - "const": "InvalidRequest" 698 - } 699 - ] 700 - }, 701 - "message": { 702 - "type": "string", 703 - "description": "A detailed description of the error" 704 - } 705 - } 706 - } 707 - } 708 - } 709 - } 710 - } 711 - } 712 - }, 713 - "/xrpc/social.clippr.feed.getProfileClips": { 714 - "get": { 715 - "tags": [ 716 - "Clips" 717 - ], 718 - "summary": "Get a profile's clip feed", 719 - "operationId": "social.clippr.feed.getProfileClips", 720 - "description": "Get a view of a profile's reverse-chronological clips feed.", 721 - "parameters": [ 722 - { 723 - "name": "actor", 724 - "in": "query", 725 - "description": "An actor to get feed data from", 726 - "required": true, 727 - "schema": { 728 - "type": "string", 729 - "description": "An actor to get feed data from", 730 - "format": "at-identifier" 731 - } 732 - }, 733 - { 734 - "name": "limit", 735 - "in": "query", 736 - "description": "How many results to return with the query", 737 - "required": false, 738 - "schema": { 739 - "type": "integer", 740 - "minimum": 1, 741 - "maximum": 100, 742 - "default": 50 743 - } 744 - }, 745 - { 746 - "name": "cursor", 747 - "in": "query", 748 - "description": "A parameter to paginate results", 749 - "required": false, 750 - "schema": { 751 - "type": "string", 752 - "description": "A parameter to paginate results" 753 - } 754 - }, 755 - { 756 - "name": "filter", 757 - "in": "query", 758 - "description": "What types to include in response", 759 - "required": false, 760 - "schema": { 761 - "type": "string", 762 - "description": "What types of clips to include in response", 763 - "default": "all_clips", 764 - "enum": [ 765 - "all_clips", 766 - "tagged_clips", 767 - "untagged_clips" 768 - ] 769 - } 770 - } 771 - ], 772 - "responses": { 773 - "200": { 774 - "description": "OK", 775 - "content": { 776 - "application/json": { 777 - "schema": { 778 - "type": "object", 779 - "properties": { 780 - "cursor": { 781 - "type": "string" 782 - }, 783 - "feed": { 784 - "type": "array", 785 - "items": { 786 - "$ref": "#/components/schemas/social.clippr.feed.defs.clipView" 787 - } 788 - } 789 - } 790 - } 791 - } 792 - } 793 - }, 794 - "400": { 795 - "description": "Bad Request", 796 - "content": { 797 - "application/json": { 798 - "schema": { 799 - "type": "object", 800 - "properties": { 801 - "error": { 802 - "type": "string", 803 - "description": "A general error code", 804 - "oneOf": [ 805 - { 806 - "const": "InvalidRequest" 807 - } 808 - ] 809 - }, 810 - "message": { 811 - "type": "string", 812 - "description": "A detailed description of the error" 813 - } 814 - } 815 - } 816 - } 817 - } 818 - } 819 - } 820 - } 821 - }, 822 - "/xrpc/social.clippr.feed.getProfileTags": { 823 - "get": { 824 - "tags": [ 825 - "Tags" 826 - ], 827 - "summary": "Get a profile's tag feed", 828 - "operationId": "social.clippr.feed.getProfileTags", 829 - "description": "Get a view of a profile's reverse-chronological clips feed.", 830 - "parameters": [ 831 - { 832 - "name": "actor", 833 - "in": "query", 834 - "description": "An actor to get feed data from", 835 - "required": true, 836 - "schema": { 837 - "type": "string", 838 - "description": "An actor to get feed data from", 839 - "format": "at-identifier" 840 - } 841 - }, 842 - { 843 - "name": "limit", 844 - "in": "query", 845 - "description": "How many results to return with the query", 846 - "required": false, 847 - "schema": { 848 - "type": "integer", 849 - "minimum": 1, 850 - "maximum": 100, 851 - "default": 50 852 - } 853 - }, 854 - { 855 - "name": "cursor", 856 - "in": "query", 857 - "description": "A parameter to paginate results", 858 - "required": false, 859 - "schema": { 860 - "type": "string", 861 - "description": "A parameter to paginate results" 862 - } 863 - } 864 - ], 865 - "responses": { 866 - "200": { 867 - "description": "OK", 868 - "content": { 869 - "application/json": { 870 - "schema": { 871 - "type": "object", 872 - "properties": { 873 - "cursor": { 874 - "type": "string" 875 - }, 876 - "feed": { 877 - "type": "array", 878 - "items": { 879 - "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 880 - } 881 - } 882 - } 883 - } 884 - } 885 - } 886 - }, 887 - "400": { 888 - "description": "Bad Request", 889 - "content": { 890 - "application/json": { 891 - "schema": { 892 - "type": "object", 893 - "properties": { 894 - "error": { 895 - "type": "string", 896 - "description": "A general error code", 897 - "oneOf": [ 898 - { 899 - "const": "InvalidRequest" 900 - } 901 - ] 902 - }, 903 - "message": { 904 - "type": "string", 905 - "description": "A detailed description of the error" 906 - } 907 - } 908 - } 909 - } 910 - } 911 - } 912 - } 913 - } 914 - }, 915 - "/xrpc/social.clippr.feed.getTagList": { 916 - "get": { 917 - "tags": [ 918 - "Tags" 919 - ], 920 - "summary": "Get a profile's tag list", 921 - "operationId": "social.clippr.feed.getProfileTags", 922 - "description": "Get a profile's complete list of tags.", 923 - "parameters": [ 924 - { 925 - "name": "actor", 926 - "in": "query", 927 - "description": "An actor to fetch the tag list from", 928 - "required": false, 929 - "schema": { 930 - "type": "string", 931 - "description": "An actor to fetch the tag list from", 932 - "format": "at-identifier" 933 - } 934 - } 935 - ], 936 - "responses": { 937 - "200": { 938 - "description": "OK", 939 - "content": { 940 - "application/json": { 941 - "schema": { 942 - "type": "object", 943 - "properties": { 944 - "tags": { 945 - "type": "array", 946 - "items": { 947 - "$ref": "#/components/schemas/social.clippr.feed.defs.tagView" 948 - } 949 - } 950 - } 951 - } 952 - } 953 - } 954 - }, 955 - "400": { 956 - "description": "Bad Request", 957 - "content": { 958 - "application/json": { 959 - "schema": { 960 - "type": "object", 961 - "properties": { 962 - "error": { 963 - "type": "string", 964 - "description": "A general error code", 965 - "oneOf": [ 966 - { 967 - "error": "InvalidRequest" 968 - } 969 - ] 970 - }, 971 - "message": { 972 - "type": "string", 973 - "description": "A detailed description of the error" 974 - } 975 - } 976 - } 977 - } 978 - } 979 - } 980 - } 981 - } 982 - }, 983 - "/xrpc/_health": { 984 - "get": { 985 - "summary": "Health check", 986 - "description": "Check the health of the server. If it is functioning properly, you will receive the server's version number.", 987 - "responses": { 988 - "200": { 989 - "description": "OK", 990 - "content": { 991 - "application/json": { 992 - "schema": { 993 - "type": "object", 994 - "properties": { 995 - "version": { 996 - "type": "string", 997 - "description": "The version number of the AppView." 998 - } 999 - } 1000 - } 1001 - } 1002 - } 1003 - } 1004 - }, 1005 - "tags": [ 1006 - "Misc" 1007 - ] 1008 - } 1009 - } 1010 - }, 1011 - "components": { 1012 - "schemas": { 1013 - "com.atproto.repo.strongRef": { 1014 - "type": "object", 1015 - "required": [ 1016 - "uri", 1017 - "cid" 1018 - ], 1019 - "properties": { 1020 - "uri": { 1021 - "type": "string", 1022 - "format": "at-uri" 1023 - }, 1024 - "cid": { 1025 - "type": "string", 1026 - "format": "cid" 1027 - } 1028 - } 1029 - }, 1030 - "social.clippr.actor.defs.profileView": { 1031 - "type": "object", 1032 - "description": "A view of an actor's profile", 1033 - "required": [ 1034 - "did", 1035 - "handle", 1036 - "displayName" 1037 - ], 1038 - "properties": { 1039 - "did": { 1040 - "type": "string", 1041 - "description": "The DID of the profile", 1042 - "format": "did" 1043 - }, 1044 - "handle": { 1045 - "type": "string", 1046 - "description": "The handle of the profile", 1047 - "format": "handle" 1048 - }, 1049 - "displayName": { 1050 - "type": "string", 1051 - "description": "The display name associated to the profile", 1052 - "maxLength": 64 1053 - }, 1054 - "description": { 1055 - "type": "string", 1056 - "description": "The biography associated to the profile", 1057 - "maxLength": 500 1058 - }, 1059 - "avatar": { 1060 - "type": "string", 1061 - "description": "A link to the profile's avatar", 1062 - "format": "uri" 1063 - }, 1064 - "createdAt": { 1065 - "type": "string", 1066 - "description": "When the profile record was first created", 1067 - "format": "date-time" 1068 - } 1069 - } 1070 - }, 1071 - "social.clippr.actor.defs.preferences": { 1072 - "type": "array", 1073 - "items": { 1074 - "oneOf": [ 1075 - { 1076 - "$ref": "#/components/schemas/social.clippr.actor.defs.publishingScopesPref" 1077 - } 1078 - ] 1079 - } 1080 - }, 1081 - "social.clippr.actor.defs.publishingScopesPref": { 1082 - "type": "object", 1083 - "description": "Preferences for a user's publishing scopes", 1084 - "required": [ 1085 - "defaultScope" 1086 - ], 1087 - "properties": { 1088 - "defaultScope": { 1089 - "type": "string", 1090 - "description": "What publishing scope to mark a clip as by default", 1091 - "enum": [ 1092 - "public", 1093 - "unlisted" 1094 - ] 1095 - } 1096 - } 1097 - }, 1098 - "social.clippr.feed.defs.clipView": { 1099 - "type": "object", 1100 - "description": "A view of a single bookmark (or 'clip')", 1101 - "required": [ 1102 - "uri", 1103 - "cid", 1104 - "author", 1105 - "record", 1106 - "indexedAt" 1107 - ], 1108 - "properties": { 1109 - "uri": { 1110 - "type": "string", 1111 - "description": "The AT-URI of the clip", 1112 - "format": "at-uri" 1113 - }, 1114 - "cid": { 1115 - "type": "string", 1116 - "description": "The CID of the clip", 1117 - "format": "cid" 1118 - }, 1119 - "author": { 1120 - "description": "A reference to the actor's profile", 1121 - "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 1122 - }, 1123 - "record": { 1124 - "type": "object", 1125 - "description": "The raw record of the clip" 1126 - }, 1127 - "indexedAt": { 1128 - "type": "string", 1129 - "description": "The time in which the clip's record was indexed by the AppView", 1130 - "format": "date-time" 1131 - } 1132 - } 1133 - }, 1134 - "social.clippr.feed.defs.tagView": { 1135 - "type": "object", 1136 - "description": "A view of a single tag", 1137 - "required": [ 1138 - "uri", 1139 - "cid", 1140 - "author", 1141 - "record", 1142 - "indexedAt" 1143 - ], 1144 - "properties": { 1145 - "uri": { 1146 - "type": "string", 1147 - "description": "The AT-URI to the tag", 1148 - "format": "at-uri" 1149 - }, 1150 - "cid": { 1151 - "type": "string", 1152 - "description": "The CID of the tag", 1153 - "format": "cid" 1154 - }, 1155 - "author": { 1156 - "description": "A reference to the actor's profile", 1157 - "$ref": "#/components/schemas/social.clippr.actor.defs.profileView" 1158 - }, 1159 - "record": { 1160 - "type": "object", 1161 - "description": "The raw record of the clip" 1162 - }, 1163 - "indexedAt": { 1164 - "type": "string", 1165 - "description": "The time in which the tag's record was indexed by the AppView", 1166 - "format": "date-time" 1167 - } 1168 - } 1169 - }, 1170 - "social.clippr.actor.profile": { 1171 - "type": "object", 1172 - "required": [ 1173 - "createdAt", 1174 - "displayName" 1175 - ], 1176 - "properties": { 1177 - "displayName": { 1178 - "type": "string", 1179 - "description": "A display name to be shown on a profile", 1180 - "maxLength": 64 1181 - }, 1182 - "description": { 1183 - "type": "string", 1184 - "description": "Text for user to describe themselves", 1185 - "maxLength": 500 1186 - }, 1187 - "avatar": { 1188 - "type": "blob", 1189 - "maxSize": 1000000, 1190 - "description": "Image to show on user's profiles" 1191 - }, 1192 - "createdAt": { 1193 - "type": "string", 1194 - "description": "The creation date of the profile", 1195 - "format": "date-time" 1196 - } 1197 - } 1198 - }, 1199 - "social.clippr.feed.clip": { 1200 - "type": "object", 1201 - "required": [ 1202 - "url", 1203 - "title", 1204 - "description", 1205 - "unlisted", 1206 - "createdAt" 1207 - ], 1208 - "properties": { 1209 - "url": { 1210 - "type": "string", 1211 - "description": "The URL of the bookmark. Cannot be left empty or be modified after creation.", 1212 - "format": "uri", 1213 - "maxLength": 2000 1214 - }, 1215 - "title": { 1216 - "type": "string", 1217 - "description": "The title of the bookmark. If left empty, reuse the URL.", 1218 - "maxLength": 2048 1219 - }, 1220 - "description": { 1221 - "type": "string", 1222 - "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.", 1223 - "maxLength": 4096 1224 - }, 1225 - "notes": { 1226 - "type": "string", 1227 - "description": "User-written notes for the bookmark. Public and personal.", 1228 - "maxLength": 10000 1229 - }, 1230 - "tags": { 1231 - "type": "array", 1232 - "description": "An array of tags. A format of solely alphanumeric characters and dashes should be used.", 1233 - "items": { 1234 - "$ref": "#/components/schemas/com.atproto.repo.strongRef" 1235 - } 1236 - }, 1237 - "unlisted": { 1238 - "type": "boolean", 1239 - "description": "Whether the bookmark can be used for feed indexing and aggregation" 1240 - }, 1241 - "unread": { 1242 - "type": "boolean", 1243 - "description": "Whether the bookmark has been read by the user", 1244 - "default": true 1245 - }, 1246 - "languages": { 1247 - "type": "array", 1248 - "items": { 1249 - "type": "string", 1250 - "format": "language" 1251 - }, 1252 - "maxItems": 5 1253 - }, 1254 - "createdAt": { 1255 - "type": "string", 1256 - "description": "Client-declared timestamp when the bookmark is created", 1257 - "format": "date-time" 1258 - } 1259 - } 1260 - }, 1261 - "social.clippr.feed.tag": { 1262 - "type": "object", 1263 - "required": [ 1264 - "name", 1265 - "createdAt" 1266 - ], 1267 - "properties": { 1268 - "name": { 1269 - "type": "string", 1270 - "description": "A de-duplicated string containing the name of the tag", 1271 - "maxLength": 64 1272 - }, 1273 - "color": { 1274 - "type": "string", 1275 - "description": "A hexadecimal color code", 1276 - "maxLength": 7 1277 - }, 1278 - "description": { 1279 - "type": "string", 1280 - "description": "A description of the tag for additional context", 1281 - "maxLength": 5000 1282 - }, 1283 - "createdAt": { 1284 - "type": "string", 1285 - "description": "A client-defined timestamp for the creation of the tag", 1286 - "format": "date-time" 1287 - } 1288 - } 1289 - } 1290 - } 1291 - } 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 + }, 12 + "servers": [ 13 + { 14 + "url": "http://localhost:9090", 15 + "description": "Development server" 16 + }, 17 + { 18 + "url": "https://api.clippr.social", 19 + "description": "Production server" 20 + } 21 + ], 22 + "tags": [ 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 + { 32 + "name": "Profile", 33 + "description": "API paths that relate to user profiles." 34 + }, 35 + { 36 + "name": "Misc", 37 + "description": "API paths that don't fit into any other category." 38 + } 39 + ], 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 + }, 122 + "/xrpc/social.clippr.actor.getProfile": { 123 + "get": { 124 + "tags": ["Profile"], 125 + "summary": "Get a profile", 126 + "operationId": "social.clippr.actor.getProfile", 127 + "description": "Get a user's profile based on a given DID or handle.", 128 + "parameters": [ 129 + { 130 + "name": "actor", 131 + "in": "query", 132 + "description": "Handle or DID of account to fetch profile of", 133 + "required": true, 134 + "content": { 135 + "schema": { 136 + "type": "string", 137 + "description": "Handle or DID of account to fetch profile of", 138 + "format": "at-identifier" 139 + } 140 + }, 141 + "deprecated": false, 142 + "allowEmptyValue": false 143 + } 144 + ], 145 + "responses": { 146 + "200": { 147 + "description": "OK", 148 + "content": { 149 + "application/json": { 150 + "schema": { 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", 163 + "properties": { 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": { 677 + "type": "string", 678 + "description": "A general error code", 679 + "oneOf": [ 680 + { 681 + "const": "InvalidRequest" 682 + } 683 + ] 684 + }, 685 + "message": { 686 + "type": "string", 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" 760 + }, 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": { 780 + "type": "string", 781 + "description": "A general error code", 782 + "oneOf": [ 783 + { 784 + "const": "InvalidRequest" 785 + } 786 + ] 787 + }, 788 + "message": { 789 + "type": "string", 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" 851 + }, 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": { 871 + "type": "string", 872 + "description": "A general error code", 873 + "oneOf": [ 874 + { 875 + "const": "InvalidRequest" 876 + } 877 + ] 878 + }, 879 + "message": { 880 + "type": "string", 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 + } 923 + } 924 + } 925 + } 926 + } 927 + } 928 + }, 929 + "400": { 930 + "description": "Bad Request", 931 + "content": { 932 + "application/json": { 933 + "schema": { 934 + "type": "object", 935 + "properties": { 936 + "error": { 937 + "type": "string", 938 + "description": "A general error code", 939 + "oneOf": [ 940 + { 941 + "error": "InvalidRequest" 942 + } 943 + ] 944 + }, 945 + "message": { 946 + "type": "string", 947 + "description": "A detailed description of the error" 948 + } 949 + } 950 + } 951 + } 952 + } 953 + } 954 + } 955 + } 956 + }, 957 + "/xrpc/_health": { 958 + "get": { 959 + "summary": "Health check", 960 + "description": "Check the health of the server. If it is functioning properly, you will receive the server's version number.", 961 + "responses": { 962 + "200": { 963 + "description": "OK", 964 + "content": { 965 + "application/json": { 966 + "schema": { 967 + "type": "object", 968 + "properties": { 969 + "version": { 970 + "type": "string", 971 + "description": "The version number of the AppView." 972 + } 973 + } 974 + } 975 + } 976 + } 977 + } 978 + }, 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 + } 1225 + } 1226 + } 1227 + } 1292 1228 }
+2 -23
frontend/.gitignore
··· 1 - # build output 1 + node_modules/ 2 2 dist/ 3 - # generated types 4 - .astro/ 5 - 6 - # dependencies 7 - node_modules/ 8 - 9 - # logs 10 - npm-debug.log* 11 - yarn-debug.log* 12 - yarn-error.log* 13 - pnpm-debug.log* 14 - 15 - 16 - # environment variables 17 - .env 18 - .env.production 19 - 20 - # macOS-specific files 21 - .DS_Store 22 - 23 - # jetbrains setting folder 24 - .idea/ 3 + did.json
+2
frontend/.prettierignore
··· 1 + pnpm-lock.yaml 2 + dist/*
+24
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 + "overrides": [ 10 + { 11 + "files": ["tsconfig.json", "jsconfig.json"], 12 + "options": { 13 + "parser": "jsonc" 14 + } 15 + }, 16 + { 17 + "files": ["*.md"], 18 + "options": { 19 + "printWidth": 100, 20 + "proseWrap": "always" 21 + } 22 + } 23 + ] 24 + }
-4
frontend/.vscode/extensions.json
··· 1 - { 2 - "recommendations": ["astro-build.astro-vscode"], 3 - "unwantedRecommendations": [] 4 - }
-11
frontend/.vscode/launch.json
··· 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 - ] 11 - }
+13 -5
frontend/README.md
··· 1 1 # @clipprjs/client 2 - astro-based reference frontend for clippr, meant to use as little javascript as possible 2 + 3 + This is a reference implementation for the Clippr frontend using Solid. 4 + 5 + ## development 3 6 4 - ## run 5 - ```bash 7 + ```shell 6 8 pnpm install 9 + cp .env.example .env # Modify this if necessary 7 10 pnpm run dev 8 - # pnpm run build 9 - ``` 11 + ``` 12 + 13 + ## deployment 14 + 15 + ```shell 16 + pnpm run build 17 + ```
-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({});
+34
frontend/index.html
··· 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 + <!doctype html> 8 + <html lang="en"> 9 + <head> 10 + <meta charset="utf-8" /> 11 + <meta name="viewport" content="width=device-width, initial-scale=1" /> 12 + <link rel="icon" type="image/ico" href="src/assets/favicon.ico" /> 13 + <link rel="stylesheet" href="src/styles/index.css" /> 14 + <meta property="og:title" content="clippr" /> 15 + <meta property="og:type" content="website" /> 16 + <meta property="og:url" content="https://clippr.social" /> 17 + <meta 18 + property="og:description" 19 + content="A social bookmarking service for the AT Protocol." 20 + /> 21 + <meta 22 + property="description" 23 + content="A social bookmarking service for the AT Protocol." 24 + /> 25 + <title>clippr</title> 26 + <script src="src/index.tsx" type="module"></script> 27 + </head> 28 + <body id="root"> 29 + <noscript 30 + >You need to enable JavaScript to run this app. Yes, we know this is 31 + inconvenient.</noscript 32 + > 33 + </body> 34 + </html>
+30 -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 + "version": "0.1.0", 4 + "description": "Reference implementation frontend for Clippr", 5 + "type": "module", 6 + "scripts": { 7 + "start": "vite", 8 + "dev": "vite", 9 + "build": "vite build", 10 + "serve": "vite preview", 11 + "fmt": "pnpm exec prettier --write ." 12 + }, 13 + "license": "AGPL-3.0-only", 14 + "devDependencies": { 15 + "@types/node": "^24.3.0", 16 + "prettier": "^3.6.2", 17 + "solid-devtools": "^0.34.3", 18 + "typescript": "^5.9.2", 19 + "vite": "^6.3.5", 20 + "vite-plugin-solid": "^2.11.8" 21 + }, 22 + "dependencies": { 23 + "@atcute/client": "^4.0.3", 24 + "@atcute/identity-resolver": "^1.1.3", 25 + "@atcute/lexicons": "^1.1.0", 26 + "@atcute/oauth-browser-client": "^1.0.26", 27 + "@mary/exif-rm": "jsr:^0.2.2", 28 + "@solidjs/router": "^0.15.3", 29 + "solid-js": "^1.9.9" 30 + } 31 + }
+844 -2472
frontend/pnpm-lock.yaml
··· 8 8 9 9 .: 10 10 dependencies: 11 - astro: 12 - specifier: ^5.9.1 13 - version: 5.9.1(@types/node@22.15.30)(rollup@4.42.0)(typescript@5.8.3) 11 + '@atcute/client': 12 + specifier: ^4.0.3 13 + version: 4.0.3 14 + '@atcute/identity-resolver': 15 + specifier: ^1.1.3 16 + version: 1.1.3(@atcute/identity@1.0.3) 17 + '@atcute/lexicons': 18 + specifier: ^1.1.0 19 + version: 1.1.0 20 + '@atcute/oauth-browser-client': 21 + specifier: ^1.0.26 22 + version: 1.0.26 23 + '@mary/exif-rm': 24 + specifier: jsr:^0.2.2 25 + version: '@jsr/mary__exif-rm@0.2.2' 26 + '@solidjs/router': 27 + specifier: ^0.15.3 28 + version: 0.15.3(solid-js@1.9.9) 29 + solid-js: 30 + specifier: ^1.9.9 31 + version: 1.9.9 32 + devDependencies: 33 + '@types/node': 34 + specifier: ^24.3.0 35 + version: 24.3.0 36 + prettier: 37 + specifier: ^3.6.2 38 + version: 3.6.2 39 + solid-devtools: 40 + specifier: ^0.34.3 41 + version: 0.34.3(solid-js@1.9.9)(vite@6.3.5(@types/node@24.3.0)) 42 + typescript: 43 + specifier: ^5.9.2 44 + version: 5.9.2 45 + vite: 46 + specifier: ^6.3.5 47 + version: 6.3.5(@types/node@24.3.0) 48 + vite-plugin-solid: 49 + specifier: ^2.11.8 50 + version: 2.11.8(solid-js@1.9.9)(vite@6.3.5(@types/node@24.3.0)) 14 51 15 52 packages: 16 53 17 - '@astrojs/compiler@2.12.1': 18 - resolution: {integrity: sha512-WDSyVIiz7sNcJcCJxJFITu6XjfGhJ50Z0auyaWsrM+xb07IlhBLFtQuDkNy0caVHWNcKTM2LISAaHhgkRqGAVg==} 54 + '@ampproject/remapping@2.3.0': 55 + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 56 + engines: {node: '>=6.0.0'} 19 57 20 - '@astrojs/internal-helpers@0.6.1': 21 - resolution: {integrity: sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==} 58 + '@atcute/client@4.0.3': 59 + resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==} 22 60 23 - '@astrojs/markdown-remark@6.3.2': 24 - resolution: {integrity: sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==} 61 + '@atcute/identity-resolver@1.1.3': 62 + resolution: {integrity: sha512-KZgGgg99CWaV7Df3+h3X/WMrDzTPQVfsaoIVbTNLx2B56BvCL2EmaxPSVw/7BFUJMZHlVU4rtoEB4lyvNyMswA==} 63 + peerDependencies: 64 + '@atcute/identity': ^1.0.0 25 65 26 - '@astrojs/prism@3.3.0': 27 - resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} 28 - engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} 66 + '@atcute/identity@1.0.3': 67 + resolution: {integrity: sha512-mNMxbKHFGys03A8JXKk0KfMBzdd0vrYMzZZWjpw1nYTs0+ea6bo5S1hwqVUZxHdo1gFHSe/t63jxQIF4yL9aKw==} 29 68 30 - '@astrojs/telemetry@3.3.0': 31 - resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} 32 - engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} 69 + '@atcute/lexicons@1.1.0': 70 + resolution: {integrity: sha512-LFqwnria78xLYb62Ri/+WwQpUTgZp2DuyolNGIIOV1dpiKhFFFh//nscHMA6IExFLQRqWDs3tTjy7zv0h3sf1Q==} 71 + 72 + '@atcute/multibase@1.1.4': 73 + resolution: {integrity: sha512-NUf5AeeSOmuZHGU+4GAaMtISJoG+ZHtW/vUVA4lK/YDt/7LODAW0Fd0NNIIUPVUoW0xJS6zSEIWvwLLuxmEHhA==} 74 + 75 + '@atcute/oauth-browser-client@1.0.26': 76 + resolution: {integrity: sha512-z8VUmwRO1sFu5Dq1qYQOQLenkTSNaOyzlUZhVwFR41ru+AP84MS5UHHW/NsdC1xJAq1v6mlLySJ+pjxdDW8IYA==} 77 + 78 + '@atcute/uint8array@1.0.3': 79 + resolution: {integrity: sha512-M/K+ihiVW8Pl2PFLzaC4E3l4JaZ1IH05Q0AbPWUC4cVHnd/gZ/1kAF5ngdtGvJeDMirHZ2VAy7OmAsPwR/2nlA==} 80 + 81 + '@atcute/util-fetch@1.0.1': 82 + resolution: {integrity: sha512-Clc0E/5ufyGBVfYBUwWNlHONlZCoblSr4Ho50l1LhmRPGB1Wu/AQ9Sz+rsBg7fdaW/auve8ulmwhRhnX2cGRow==} 83 + 84 + '@babel/code-frame@7.27.1': 85 + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 86 + engines: {node: '>=6.9.0'} 87 + 88 + '@babel/compat-data@7.28.0': 89 + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} 90 + engines: {node: '>=6.9.0'} 91 + 92 + '@babel/core@7.28.3': 93 + resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} 94 + engines: {node: '>=6.9.0'} 95 + 96 + '@babel/generator@7.28.3': 97 + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} 98 + engines: {node: '>=6.9.0'} 99 + 100 + '@babel/helper-compilation-targets@7.27.2': 101 + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} 102 + engines: {node: '>=6.9.0'} 103 + 104 + '@babel/helper-globals@7.28.0': 105 + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 106 + engines: {node: '>=6.9.0'} 107 + 108 + '@babel/helper-module-imports@7.18.6': 109 + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 110 + engines: {node: '>=6.9.0'} 111 + 112 + '@babel/helper-module-imports@7.27.1': 113 + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 114 + engines: {node: '>=6.9.0'} 115 + 116 + '@babel/helper-module-transforms@7.28.3': 117 + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 118 + engines: {node: '>=6.9.0'} 119 + peerDependencies: 120 + '@babel/core': ^7.0.0 121 + 122 + '@babel/helper-plugin-utils@7.27.1': 123 + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 124 + engines: {node: '>=6.9.0'} 33 125 34 126 '@babel/helper-string-parser@7.27.1': 35 127 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} ··· 39 131 resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 40 132 engines: {node: '>=6.9.0'} 41 133 42 - '@babel/parser@7.27.5': 43 - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} 134 + '@babel/helper-validator-option@7.27.1': 135 + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 136 + engines: {node: '>=6.9.0'} 137 + 138 + '@babel/helpers@7.28.3': 139 + resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} 140 + engines: {node: '>=6.9.0'} 141 + 142 + '@babel/parser@7.28.3': 143 + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} 44 144 engines: {node: '>=6.0.0'} 45 145 hasBin: true 46 146 47 - '@babel/types@7.27.6': 48 - resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} 147 + '@babel/plugin-syntax-jsx@7.27.1': 148 + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} 49 149 engines: {node: '>=6.9.0'} 150 + peerDependencies: 151 + '@babel/core': ^7.0.0-0 50 152 51 - '@capsizecss/unpack@2.4.0': 52 - resolution: {integrity: sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==} 153 + '@babel/plugin-syntax-typescript@7.27.1': 154 + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} 155 + engines: {node: '>=6.9.0'} 156 + peerDependencies: 157 + '@babel/core': ^7.0.0-0 53 158 54 - '@emnapi/runtime@1.4.3': 55 - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} 159 + '@babel/template@7.27.2': 160 + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 161 + engines: {node: '>=6.9.0'} 56 162 57 - '@esbuild/aix-ppc64@0.25.5': 58 - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} 163 + '@babel/traverse@7.28.3': 164 + resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} 165 + engines: {node: '>=6.9.0'} 166 + 167 + '@babel/types@7.28.2': 168 + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 169 + engines: {node: '>=6.9.0'} 170 + 171 + '@badrap/valita@0.4.6': 172 + resolution: {integrity: sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==} 173 + engines: {node: '>= 18'} 174 + 175 + '@esbuild/aix-ppc64@0.25.9': 176 + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} 59 177 engines: {node: '>=18'} 60 178 cpu: [ppc64] 61 179 os: [aix] 62 180 63 - '@esbuild/android-arm64@0.25.5': 64 - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} 181 + '@esbuild/android-arm64@0.25.9': 182 + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} 65 183 engines: {node: '>=18'} 66 184 cpu: [arm64] 67 185 os: [android] 68 186 69 - '@esbuild/android-arm@0.25.5': 70 - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} 187 + '@esbuild/android-arm@0.25.9': 188 + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} 71 189 engines: {node: '>=18'} 72 190 cpu: [arm] 73 191 os: [android] 74 192 75 - '@esbuild/android-x64@0.25.5': 76 - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} 193 + '@esbuild/android-x64@0.25.9': 194 + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} 77 195 engines: {node: '>=18'} 78 196 cpu: [x64] 79 197 os: [android] 80 198 81 - '@esbuild/darwin-arm64@0.25.5': 82 - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} 199 + '@esbuild/darwin-arm64@0.25.9': 200 + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} 83 201 engines: {node: '>=18'} 84 202 cpu: [arm64] 85 203 os: [darwin] 86 204 87 - '@esbuild/darwin-x64@0.25.5': 88 - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} 205 + '@esbuild/darwin-x64@0.25.9': 206 + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} 89 207 engines: {node: '>=18'} 90 208 cpu: [x64] 91 209 os: [darwin] 92 210 93 - '@esbuild/freebsd-arm64@0.25.5': 94 - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} 211 + '@esbuild/freebsd-arm64@0.25.9': 212 + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} 95 213 engines: {node: '>=18'} 96 214 cpu: [arm64] 97 215 os: [freebsd] 98 216 99 - '@esbuild/freebsd-x64@0.25.5': 100 - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} 217 + '@esbuild/freebsd-x64@0.25.9': 218 + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} 101 219 engines: {node: '>=18'} 102 220 cpu: [x64] 103 221 os: [freebsd] 104 222 105 - '@esbuild/linux-arm64@0.25.5': 106 - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} 223 + '@esbuild/linux-arm64@0.25.9': 224 + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} 107 225 engines: {node: '>=18'} 108 226 cpu: [arm64] 109 227 os: [linux] 110 228 111 - '@esbuild/linux-arm@0.25.5': 112 - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} 229 + '@esbuild/linux-arm@0.25.9': 230 + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} 113 231 engines: {node: '>=18'} 114 232 cpu: [arm] 115 233 os: [linux] 116 234 117 - '@esbuild/linux-ia32@0.25.5': 118 - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} 235 + '@esbuild/linux-ia32@0.25.9': 236 + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} 119 237 engines: {node: '>=18'} 120 238 cpu: [ia32] 121 239 os: [linux] 122 240 123 - '@esbuild/linux-loong64@0.25.5': 124 - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} 241 + '@esbuild/linux-loong64@0.25.9': 242 + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} 125 243 engines: {node: '>=18'} 126 244 cpu: [loong64] 127 245 os: [linux] 128 246 129 - '@esbuild/linux-mips64el@0.25.5': 130 - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} 247 + '@esbuild/linux-mips64el@0.25.9': 248 + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} 131 249 engines: {node: '>=18'} 132 250 cpu: [mips64el] 133 251 os: [linux] 134 252 135 - '@esbuild/linux-ppc64@0.25.5': 136 - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} 253 + '@esbuild/linux-ppc64@0.25.9': 254 + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} 137 255 engines: {node: '>=18'} 138 256 cpu: [ppc64] 139 257 os: [linux] 140 258 141 - '@esbuild/linux-riscv64@0.25.5': 142 - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} 259 + '@esbuild/linux-riscv64@0.25.9': 260 + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} 143 261 engines: {node: '>=18'} 144 262 cpu: [riscv64] 145 263 os: [linux] 146 264 147 - '@esbuild/linux-s390x@0.25.5': 148 - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} 265 + '@esbuild/linux-s390x@0.25.9': 266 + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} 149 267 engines: {node: '>=18'} 150 268 cpu: [s390x] 151 269 os: [linux] 152 270 153 - '@esbuild/linux-x64@0.25.5': 154 - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} 271 + '@esbuild/linux-x64@0.25.9': 272 + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} 155 273 engines: {node: '>=18'} 156 274 cpu: [x64] 157 275 os: [linux] 158 276 159 - '@esbuild/netbsd-arm64@0.25.5': 160 - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} 277 + '@esbuild/netbsd-arm64@0.25.9': 278 + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} 161 279 engines: {node: '>=18'} 162 280 cpu: [arm64] 163 281 os: [netbsd] 164 282 165 - '@esbuild/netbsd-x64@0.25.5': 166 - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} 283 + '@esbuild/netbsd-x64@0.25.9': 284 + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} 167 285 engines: {node: '>=18'} 168 286 cpu: [x64] 169 287 os: [netbsd] 170 288 171 - '@esbuild/openbsd-arm64@0.25.5': 172 - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} 289 + '@esbuild/openbsd-arm64@0.25.9': 290 + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} 173 291 engines: {node: '>=18'} 174 292 cpu: [arm64] 175 293 os: [openbsd] 176 294 177 - '@esbuild/openbsd-x64@0.25.5': 178 - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} 295 + '@esbuild/openbsd-x64@0.25.9': 296 + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} 179 297 engines: {node: '>=18'} 180 298 cpu: [x64] 181 299 os: [openbsd] 182 300 183 - '@esbuild/sunos-x64@0.25.5': 184 - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} 301 + '@esbuild/openharmony-arm64@0.25.9': 302 + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} 303 + engines: {node: '>=18'} 304 + cpu: [arm64] 305 + os: [openharmony] 306 + 307 + '@esbuild/sunos-x64@0.25.9': 308 + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} 185 309 engines: {node: '>=18'} 186 310 cpu: [x64] 187 311 os: [sunos] 188 312 189 - '@esbuild/win32-arm64@0.25.5': 190 - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} 313 + '@esbuild/win32-arm64@0.25.9': 314 + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} 191 315 engines: {node: '>=18'} 192 316 cpu: [arm64] 193 317 os: [win32] 194 318 195 - '@esbuild/win32-ia32@0.25.5': 196 - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} 319 + '@esbuild/win32-ia32@0.25.9': 320 + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} 197 321 engines: {node: '>=18'} 198 322 cpu: [ia32] 199 323 os: [win32] 200 324 201 - '@esbuild/win32-x64@0.25.5': 202 - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} 325 + '@esbuild/win32-x64@0.25.9': 326 + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} 203 327 engines: {node: '>=18'} 204 328 cpu: [x64] 205 329 os: [win32] 206 330 207 - '@img/sharp-darwin-arm64@0.33.5': 208 - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 209 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 210 - cpu: [arm64] 211 - os: [darwin] 331 + '@jridgewell/gen-mapping@0.3.13': 332 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 212 333 213 - '@img/sharp-darwin-x64@0.33.5': 214 - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} 215 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 216 - cpu: [x64] 217 - os: [darwin] 334 + '@jridgewell/resolve-uri@3.1.2': 335 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 336 + engines: {node: '>=6.0.0'} 218 337 219 - '@img/sharp-libvips-darwin-arm64@1.0.4': 220 - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} 221 - cpu: [arm64] 222 - os: [darwin] 338 + '@jridgewell/sourcemap-codec@1.5.5': 339 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 223 340 224 - '@img/sharp-libvips-darwin-x64@1.0.4': 225 - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} 226 - cpu: [x64] 227 - os: [darwin] 341 + '@jridgewell/trace-mapping@0.3.30': 342 + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} 228 343 229 - '@img/sharp-libvips-linux-arm64@1.0.4': 230 - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} 231 - cpu: [arm64] 232 - os: [linux] 344 + '@jsr/mary__exif-rm@0.2.2': 345 + resolution: {integrity: sha512-+ZpLaC+1CyqWhH608Sqd6/yTG0pOlokn2tCXha7s1SMQ+GLKo4Nn/PskTeeP9Pt+6gNYSu6ednoSlRvXb2ZGxg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__exif-rm/0.2.2.tgz} 233 346 234 - '@img/sharp-libvips-linux-arm@1.0.5': 235 - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} 236 - cpu: [arm] 237 - os: [linux] 347 + '@nothing-but/utils@0.17.0': 348 + resolution: {integrity: sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==} 238 349 239 - '@img/sharp-libvips-linux-s390x@1.0.4': 240 - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} 241 - cpu: [s390x] 242 - os: [linux] 243 - 244 - '@img/sharp-libvips-linux-x64@1.0.4': 245 - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} 246 - cpu: [x64] 247 - os: [linux] 248 - 249 - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 250 - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} 251 - cpu: [arm64] 252 - os: [linux] 253 - 254 - '@img/sharp-libvips-linuxmusl-x64@1.0.4': 255 - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} 256 - cpu: [x64] 257 - os: [linux] 258 - 259 - '@img/sharp-linux-arm64@0.33.5': 260 - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} 261 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 262 - cpu: [arm64] 263 - os: [linux] 264 - 265 - '@img/sharp-linux-arm@0.33.5': 266 - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} 267 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 268 - cpu: [arm] 269 - os: [linux] 270 - 271 - '@img/sharp-linux-s390x@0.33.5': 272 - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} 273 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 274 - cpu: [s390x] 275 - os: [linux] 276 - 277 - '@img/sharp-linux-x64@0.33.5': 278 - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} 279 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 280 - cpu: [x64] 281 - os: [linux] 282 - 283 - '@img/sharp-linuxmusl-arm64@0.33.5': 284 - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} 285 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 286 - cpu: [arm64] 287 - os: [linux] 288 - 289 - '@img/sharp-linuxmusl-x64@0.33.5': 290 - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} 291 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 292 - cpu: [x64] 293 - os: [linux] 294 - 295 - '@img/sharp-wasm32@0.33.5': 296 - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} 297 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 298 - cpu: [wasm32] 299 - 300 - '@img/sharp-win32-ia32@0.33.5': 301 - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} 302 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 303 - cpu: [ia32] 304 - os: [win32] 305 - 306 - '@img/sharp-win32-x64@0.33.5': 307 - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} 308 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 309 - cpu: [x64] 310 - os: [win32] 311 - 312 - '@jridgewell/sourcemap-codec@1.5.0': 313 - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 314 - 315 - '@oslojs/encoding@1.1.0': 316 - resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} 317 - 318 - '@rollup/pluginutils@5.1.4': 319 - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} 320 - engines: {node: '>=14.0.0'} 321 - peerDependencies: 322 - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 323 - peerDependenciesMeta: 324 - rollup: 325 - optional: true 326 - 327 - '@rollup/rollup-android-arm-eabi@4.42.0': 328 - resolution: {integrity: sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==} 350 + '@rollup/rollup-android-arm-eabi@4.46.3': 351 + resolution: {integrity: sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA==} 329 352 cpu: [arm] 330 353 os: [android] 331 354 332 - '@rollup/rollup-android-arm64@4.42.0': 333 - resolution: {integrity: sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==} 355 + '@rollup/rollup-android-arm64@4.46.3': 356 + resolution: {integrity: sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg==} 334 357 cpu: [arm64] 335 358 os: [android] 336 359 337 - '@rollup/rollup-darwin-arm64@4.42.0': 338 - resolution: {integrity: sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==} 360 + '@rollup/rollup-darwin-arm64@4.46.3': 361 + resolution: {integrity: sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA==} 339 362 cpu: [arm64] 340 363 os: [darwin] 341 364 342 - '@rollup/rollup-darwin-x64@4.42.0': 343 - resolution: {integrity: sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==} 365 + '@rollup/rollup-darwin-x64@4.46.3': 366 + resolution: {integrity: sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw==} 344 367 cpu: [x64] 345 368 os: [darwin] 346 369 347 - '@rollup/rollup-freebsd-arm64@4.42.0': 348 - resolution: {integrity: sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==} 370 + '@rollup/rollup-freebsd-arm64@4.46.3': 371 + resolution: {integrity: sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw==} 349 372 cpu: [arm64] 350 373 os: [freebsd] 351 374 352 - '@rollup/rollup-freebsd-x64@4.42.0': 353 - resolution: {integrity: sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==} 375 + '@rollup/rollup-freebsd-x64@4.46.3': 376 + resolution: {integrity: sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A==} 354 377 cpu: [x64] 355 378 os: [freebsd] 356 379 357 - '@rollup/rollup-linux-arm-gnueabihf@4.42.0': 358 - resolution: {integrity: sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==} 380 + '@rollup/rollup-linux-arm-gnueabihf@4.46.3': 381 + resolution: {integrity: sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA==} 359 382 cpu: [arm] 360 383 os: [linux] 361 384 362 - '@rollup/rollup-linux-arm-musleabihf@4.42.0': 363 - resolution: {integrity: sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==} 385 + '@rollup/rollup-linux-arm-musleabihf@4.46.3': 386 + resolution: {integrity: sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ==} 364 387 cpu: [arm] 365 388 os: [linux] 366 389 367 - '@rollup/rollup-linux-arm64-gnu@4.42.0': 368 - resolution: {integrity: sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==} 390 + '@rollup/rollup-linux-arm64-gnu@4.46.3': 391 + resolution: {integrity: sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw==} 369 392 cpu: [arm64] 370 393 os: [linux] 371 394 372 - '@rollup/rollup-linux-arm64-musl@4.42.0': 373 - resolution: {integrity: sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==} 395 + '@rollup/rollup-linux-arm64-musl@4.46.3': 396 + resolution: {integrity: sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w==} 374 397 cpu: [arm64] 375 398 os: [linux] 376 399 377 - '@rollup/rollup-linux-loongarch64-gnu@4.42.0': 378 - resolution: {integrity: sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==} 400 + '@rollup/rollup-linux-loongarch64-gnu@4.46.3': 401 + resolution: {integrity: sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ==} 379 402 cpu: [loong64] 380 403 os: [linux] 381 404 382 - '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': 383 - resolution: {integrity: sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==} 405 + '@rollup/rollup-linux-ppc64-gnu@4.46.3': 406 + resolution: {integrity: sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A==} 384 407 cpu: [ppc64] 385 408 os: [linux] 386 409 387 - '@rollup/rollup-linux-riscv64-gnu@4.42.0': 388 - resolution: {integrity: sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==} 410 + '@rollup/rollup-linux-riscv64-gnu@4.46.3': 411 + resolution: {integrity: sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA==} 389 412 cpu: [riscv64] 390 413 os: [linux] 391 414 392 - '@rollup/rollup-linux-riscv64-musl@4.42.0': 393 - resolution: {integrity: sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==} 415 + '@rollup/rollup-linux-riscv64-musl@4.46.3': 416 + resolution: {integrity: sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg==} 394 417 cpu: [riscv64] 395 418 os: [linux] 396 419 397 - '@rollup/rollup-linux-s390x-gnu@4.42.0': 398 - resolution: {integrity: sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==} 420 + '@rollup/rollup-linux-s390x-gnu@4.46.3': 421 + resolution: {integrity: sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg==} 399 422 cpu: [s390x] 400 423 os: [linux] 401 424 402 - '@rollup/rollup-linux-x64-gnu@4.42.0': 403 - resolution: {integrity: sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==} 425 + '@rollup/rollup-linux-x64-gnu@4.46.3': 426 + resolution: {integrity: sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg==} 404 427 cpu: [x64] 405 428 os: [linux] 406 429 407 - '@rollup/rollup-linux-x64-musl@4.42.0': 408 - resolution: {integrity: sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==} 430 + '@rollup/rollup-linux-x64-musl@4.46.3': 431 + resolution: {integrity: sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ==} 409 432 cpu: [x64] 410 433 os: [linux] 411 434 412 - '@rollup/rollup-win32-arm64-msvc@4.42.0': 413 - resolution: {integrity: sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==} 435 + '@rollup/rollup-win32-arm64-msvc@4.46.3': 436 + resolution: {integrity: sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg==} 414 437 cpu: [arm64] 415 438 os: [win32] 416 439 417 - '@rollup/rollup-win32-ia32-msvc@4.42.0': 418 - resolution: {integrity: sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==} 440 + '@rollup/rollup-win32-ia32-msvc@4.46.3': 441 + resolution: {integrity: sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg==} 419 442 cpu: [ia32] 420 443 os: [win32] 421 444 422 - '@rollup/rollup-win32-x64-msvc@4.42.0': 423 - resolution: {integrity: sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==} 445 + '@rollup/rollup-win32-x64-msvc@4.46.3': 446 + resolution: {integrity: sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ==} 424 447 cpu: [x64] 425 448 os: [win32] 426 449 427 - '@shikijs/core@3.6.0': 428 - resolution: {integrity: sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==} 450 + '@solid-devtools/debugger@0.28.1': 451 + resolution: {integrity: sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==} 452 + peerDependencies: 453 + solid-js: ^1.9.0 429 454 430 - '@shikijs/engine-javascript@3.6.0': 431 - resolution: {integrity: sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==} 455 + '@solid-devtools/shared@0.20.0': 456 + resolution: {integrity: sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==} 457 + peerDependencies: 458 + solid-js: ^1.9.0 432 459 433 - '@shikijs/engine-oniguruma@3.6.0': 434 - resolution: {integrity: sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==} 460 + '@solid-primitives/bounds@0.1.3': 461 + resolution: {integrity: sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==} 462 + peerDependencies: 463 + solid-js: ^1.6.12 435 464 436 - '@shikijs/langs@3.6.0': 437 - resolution: {integrity: sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==} 465 + '@solid-primitives/event-listener@2.4.3': 466 + resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==} 467 + peerDependencies: 468 + solid-js: ^1.6.12 438 469 439 - '@shikijs/themes@3.6.0': 440 - resolution: {integrity: sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==} 470 + '@solid-primitives/keyboard@1.3.3': 471 + resolution: {integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==} 472 + peerDependencies: 473 + solid-js: ^1.6.12 441 474 442 - '@shikijs/types@3.6.0': 443 - resolution: {integrity: sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==} 475 + '@solid-primitives/media@2.3.3': 476 + resolution: {integrity: sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==} 477 + peerDependencies: 478 + solid-js: ^1.6.12 444 479 445 - '@shikijs/vscode-textmate@10.0.2': 446 - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} 480 + '@solid-primitives/refs@1.1.2': 481 + resolution: {integrity: sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==} 482 + peerDependencies: 483 + solid-js: ^1.6.12 447 484 448 - '@swc/helpers@0.5.17': 449 - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} 485 + '@solid-primitives/resize-observer@2.1.3': 486 + resolution: {integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==} 487 + peerDependencies: 488 + solid-js: ^1.6.12 450 489 451 - '@types/debug@4.1.12': 452 - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} 490 + '@solid-primitives/rootless@1.5.2': 491 + resolution: {integrity: sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==} 492 + peerDependencies: 493 + solid-js: ^1.6.12 453 494 454 - '@types/estree@1.0.7': 455 - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 495 + '@solid-primitives/scheduled@1.5.2': 496 + resolution: {integrity: sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==} 497 + peerDependencies: 498 + solid-js: ^1.6.12 456 499 457 - '@types/estree@1.0.8': 458 - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 500 + '@solid-primitives/static-store@0.1.2': 501 + resolution: {integrity: sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==} 502 + peerDependencies: 503 + solid-js: ^1.6.12 459 504 460 - '@types/fontkit@2.0.8': 461 - resolution: {integrity: sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==} 505 + '@solid-primitives/styles@0.1.2': 506 + resolution: {integrity: sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==} 507 + peerDependencies: 508 + solid-js: ^1.6.12 462 509 463 - '@types/hast@3.0.4': 464 - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 510 + '@solid-primitives/utils@6.3.2': 511 + resolution: {integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==} 512 + peerDependencies: 513 + solid-js: ^1.6.12 465 514 466 - '@types/mdast@4.0.4': 467 - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 515 + '@solidjs/router@0.15.3': 516 + resolution: {integrity: sha512-iEbW8UKok2Oio7o6Y4VTzLj+KFCmQPGEpm1fS3xixwFBdclFVBvaQVeibl1jys4cujfAK5Kn6+uG2uBm3lxOMw==} 517 + peerDependencies: 518 + solid-js: ^1.8.6 468 519 469 - '@types/ms@2.1.0': 470 - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} 520 + '@types/babel__core@7.20.5': 521 + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 471 522 472 - '@types/nlcst@2.0.3': 473 - resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} 523 + '@types/babel__generator@7.27.0': 524 + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 474 525 475 - '@types/node@22.15.30': 476 - resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==} 526 + '@types/babel__template@7.4.4': 527 + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 477 528 478 - '@types/unist@3.0.3': 479 - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 529 + '@types/babel__traverse@7.28.0': 530 + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 480 531 481 - '@ungap/structured-clone@1.3.0': 482 - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 532 + '@types/estree@1.0.8': 533 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 483 534 484 - acorn@8.15.0: 485 - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 486 - engines: {node: '>=0.4.0'} 487 - hasBin: true 535 + '@types/node@24.3.0': 536 + resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} 488 537 489 - ansi-align@3.0.1: 490 - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 538 + babel-plugin-jsx-dom-expressions@0.40.1: 539 + resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==} 540 + peerDependencies: 541 + '@babel/core': ^7.20.12 491 542 492 - ansi-regex@5.0.1: 493 - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 494 - engines: {node: '>=8'} 495 - 496 - ansi-regex@6.1.0: 497 - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 498 - engines: {node: '>=12'} 499 - 500 - ansi-styles@6.2.1: 501 - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 502 - engines: {node: '>=12'} 503 - 504 - anymatch@3.1.3: 505 - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 506 - engines: {node: '>= 8'} 507 - 508 - argparse@2.0.1: 509 - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 510 - 511 - aria-query@5.3.2: 512 - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 513 - engines: {node: '>= 0.4'} 514 - 515 - array-iterate@2.0.1: 516 - resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} 543 + babel-preset-solid@1.9.9: 544 + resolution: {integrity: sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw==} 545 + peerDependencies: 546 + '@babel/core': ^7.0.0 547 + solid-js: ^1.9.8 548 + peerDependenciesMeta: 549 + solid-js: 550 + optional: true 517 551 518 - astro@5.9.1: 519 - resolution: {integrity: sha512-wxoJcTbuDZNFSv6EaL0PAlrp0Wx6VnOAULCXvy0scsV70oWMeUkdxuBxfO54JxO5Qgyvwj9h99y6E0elqOpGtA==} 520 - engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} 552 + browserslist@4.25.3: 553 + resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==} 554 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 521 555 hasBin: true 522 556 523 - axobject-query@4.1.0: 524 - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 525 - engines: {node: '>= 0.4'} 526 - 527 - bail@2.0.2: 528 - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} 529 - 530 - base-64@1.0.0: 531 - resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} 532 - 533 - base64-js@1.5.1: 534 - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 535 - 536 - blob-to-buffer@1.2.9: 537 - resolution: {integrity: sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==} 538 - 539 - boxen@8.0.1: 540 - resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} 541 - engines: {node: '>=18'} 542 - 543 - brotli@1.3.3: 544 - resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} 545 - 546 - camelcase@8.0.0: 547 - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} 548 - engines: {node: '>=16'} 549 - 550 - ccount@2.0.1: 551 - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 552 - 553 - chalk@5.4.1: 554 - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} 555 - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 556 - 557 - character-entities-html4@2.1.0: 558 - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 559 - 560 - character-entities-legacy@3.0.0: 561 - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 562 - 563 - character-entities@2.0.2: 564 - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} 565 - 566 - chokidar@4.0.3: 567 - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 568 - engines: {node: '>= 14.16.0'} 569 - 570 - ci-info@4.2.0: 571 - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} 572 - engines: {node: '>=8'} 573 - 574 - cli-boxes@3.0.0: 575 - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} 576 - engines: {node: '>=10'} 577 - 578 - clone@2.1.2: 579 - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} 580 - engines: {node: '>=0.8'} 581 - 582 - clsx@2.1.1: 583 - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 584 - engines: {node: '>=6'} 585 - 586 - color-convert@2.0.1: 587 - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 588 - engines: {node: '>=7.0.0'} 589 - 590 - color-name@1.1.4: 591 - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 592 - 593 - color-string@1.9.1: 594 - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 595 - 596 - color@4.2.3: 597 - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 598 - engines: {node: '>=12.5.0'} 599 - 600 - comma-separated-tokens@2.0.3: 601 - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 602 - 603 - common-ancestor-path@1.0.1: 604 - resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} 557 + caniuse-lite@1.0.30001735: 558 + resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} 605 559 606 - cookie-es@1.2.2: 607 - resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} 560 + convert-source-map@2.0.0: 561 + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 608 562 609 - cookie@1.0.2: 610 - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} 611 - engines: {node: '>=18'} 612 - 613 - cross-fetch@3.2.0: 614 - resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} 615 - 616 - crossws@0.3.5: 617 - resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} 618 - 619 - css-tree@3.1.0: 620 - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} 621 - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 622 - 623 - cssesc@3.0.0: 624 - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 625 - engines: {node: '>=4'} 626 - hasBin: true 563 + csstype@3.1.3: 564 + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 627 565 628 566 debug@4.4.1: 629 567 resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} ··· 634 572 supports-color: 635 573 optional: true 636 574 637 - decode-named-character-reference@1.1.0: 638 - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} 639 - 640 - defu@6.1.4: 641 - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 642 - 643 - dequal@2.0.3: 644 - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 645 - engines: {node: '>=6'} 646 - 647 - destr@2.0.5: 648 - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} 649 - 650 - detect-libc@2.0.4: 651 - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} 652 - engines: {node: '>=8'} 653 - 654 - deterministic-object-hash@2.0.2: 655 - resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} 656 - engines: {node: '>=18'} 657 - 658 - devalue@5.1.1: 659 - resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 660 - 661 - devlop@1.1.0: 662 - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 663 - 664 - dfa@1.2.0: 665 - resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} 666 - 667 - diff@5.2.0: 668 - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} 669 - engines: {node: '>=0.3.1'} 670 - 671 - dlv@1.1.3: 672 - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 673 - 674 - dset@3.1.4: 675 - resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} 676 - engines: {node: '>=4'} 677 - 678 - emoji-regex@10.4.0: 679 - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} 680 - 681 - emoji-regex@8.0.0: 682 - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 575 + electron-to-chromium@1.5.207: 576 + resolution: {integrity: sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==} 683 577 684 578 entities@6.0.1: 685 579 resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 686 580 engines: {node: '>=0.12'} 687 581 688 - es-module-lexer@1.7.0: 689 - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 690 - 691 - esbuild@0.25.5: 692 - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} 582 + esbuild@0.25.9: 583 + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} 693 584 engines: {node: '>=18'} 694 585 hasBin: true 695 586 696 - escape-string-regexp@5.0.0: 697 - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 698 - engines: {node: '>=12'} 587 + escalade@3.2.0: 588 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 589 + engines: {node: '>=6'} 699 590 700 - estree-walker@2.0.2: 701 - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 591 + esm-env@1.2.2: 592 + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 702 593 703 - estree-walker@3.0.3: 704 - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 705 - 706 - eventemitter3@5.0.1: 707 - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 708 - 709 - extend@3.0.2: 710 - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 711 - 712 - fast-deep-equal@3.1.3: 713 - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 714 - 715 - fdir@6.4.5: 716 - resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} 594 + fdir@6.5.0: 595 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 596 + engines: {node: '>=12.0.0'} 717 597 peerDependencies: 718 598 picomatch: ^3 || ^4 719 599 peerDependenciesMeta: 720 600 picomatch: 721 601 optional: true 722 602 723 - flattie@1.1.1: 724 - resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} 725 - engines: {node: '>=8'} 726 - 727 - fontace@0.3.0: 728 - resolution: {integrity: sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==} 729 - 730 - fontkit@2.0.4: 731 - resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} 732 - 733 603 fsevents@2.3.3: 734 604 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 735 605 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 736 606 os: [darwin] 737 607 738 - get-east-asian-width@1.3.0: 739 - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} 740 - engines: {node: '>=18'} 741 - 742 - github-slugger@2.0.0: 743 - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} 744 - 745 - h3@1.15.3: 746 - resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} 747 - 748 - hast-util-from-html@2.0.3: 749 - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} 750 - 751 - hast-util-from-parse5@8.0.3: 752 - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} 753 - 754 - hast-util-is-element@3.0.0: 755 - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} 756 - 757 - hast-util-parse-selector@4.0.0: 758 - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} 759 - 760 - hast-util-raw@9.1.0: 761 - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} 762 - 763 - hast-util-to-html@9.0.5: 764 - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} 765 - 766 - hast-util-to-parse5@8.0.0: 767 - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} 768 - 769 - hast-util-to-text@4.0.2: 770 - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} 771 - 772 - hast-util-whitespace@3.0.0: 773 - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} 774 - 775 - hastscript@9.0.1: 776 - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} 777 - 778 - html-escaper@3.0.3: 779 - resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} 780 - 781 - html-void-elements@3.0.0: 782 - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 783 - 784 - http-cache-semantics@4.2.0: 785 - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} 786 - 787 - import-meta-resolve@4.1.0: 788 - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 789 - 790 - iron-webcrypto@1.2.1: 791 - resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} 792 - 793 - is-arrayish@0.3.2: 794 - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 795 - 796 - is-docker@3.0.0: 797 - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 798 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 799 - hasBin: true 800 - 801 - is-fullwidth-code-point@3.0.0: 802 - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 803 - engines: {node: '>=8'} 608 + gensync@1.0.0-beta.2: 609 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 610 + engines: {node: '>=6.9.0'} 804 611 805 - is-inside-container@1.0.0: 806 - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 807 - engines: {node: '>=14.16'} 808 - hasBin: true 809 - 810 - is-plain-obj@4.1.0: 811 - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 812 - engines: {node: '>=12'} 612 + html-entities@2.3.3: 613 + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 813 614 814 - is-wsl@3.1.0: 815 - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} 816 - engines: {node: '>=16'} 615 + is-what@4.1.16: 616 + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 617 + engines: {node: '>=12.13'} 817 618 818 - js-yaml@4.1.0: 819 - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 820 - hasBin: true 619 + js-tokens@4.0.0: 620 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 821 621 822 - kleur@3.0.3: 823 - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 622 + jsesc@3.1.0: 623 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 824 624 engines: {node: '>=6'} 625 + hasBin: true 825 626 826 - kleur@4.1.5: 827 - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 627 + json5@2.2.3: 628 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 828 629 engines: {node: '>=6'} 829 - 830 - longest-streak@3.1.0: 831 - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} 832 - 833 - lru-cache@10.4.3: 834 - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 835 - 836 - magic-string@0.30.17: 837 - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 838 - 839 - magicast@0.3.5: 840 - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} 841 - 842 - markdown-table@3.0.4: 843 - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} 844 - 845 - mdast-util-definitions@6.0.0: 846 - resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} 847 - 848 - mdast-util-find-and-replace@3.0.2: 849 - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} 850 - 851 - mdast-util-from-markdown@2.0.2: 852 - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} 853 - 854 - mdast-util-gfm-autolink-literal@2.0.1: 855 - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} 856 - 857 - mdast-util-gfm-footnote@2.1.0: 858 - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} 859 - 860 - mdast-util-gfm-strikethrough@2.0.0: 861 - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} 862 - 863 - mdast-util-gfm-table@2.0.0: 864 - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} 865 - 866 - mdast-util-gfm-task-list-item@2.0.0: 867 - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} 868 - 869 - mdast-util-gfm@3.1.0: 870 - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} 871 - 872 - mdast-util-phrasing@4.1.0: 873 - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} 874 - 875 - mdast-util-to-hast@13.2.0: 876 - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} 877 - 878 - mdast-util-to-markdown@2.1.2: 879 - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} 880 - 881 - mdast-util-to-string@4.0.0: 882 - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} 883 - 884 - mdn-data@2.12.2: 885 - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} 886 - 887 - micromark-core-commonmark@2.0.3: 888 - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} 889 - 890 - micromark-extension-gfm-autolink-literal@2.1.0: 891 - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} 892 - 893 - micromark-extension-gfm-footnote@2.1.0: 894 - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} 895 - 896 - micromark-extension-gfm-strikethrough@2.1.0: 897 - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} 898 - 899 - micromark-extension-gfm-table@2.1.1: 900 - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} 901 - 902 - micromark-extension-gfm-tagfilter@2.0.0: 903 - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} 904 - 905 - micromark-extension-gfm-task-list-item@2.1.0: 906 - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} 907 - 908 - micromark-extension-gfm@3.0.0: 909 - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} 910 - 911 - micromark-factory-destination@2.0.1: 912 - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} 913 - 914 - micromark-factory-label@2.0.1: 915 - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} 916 - 917 - micromark-factory-space@2.0.1: 918 - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} 919 - 920 - micromark-factory-title@2.0.1: 921 - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} 630 + hasBin: true 922 631 923 - micromark-factory-whitespace@2.0.1: 924 - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} 632 + lru-cache@5.1.1: 633 + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 925 634 926 - micromark-util-character@2.1.1: 927 - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} 928 - 929 - micromark-util-chunked@2.0.1: 930 - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} 931 - 932 - micromark-util-classify-character@2.0.1: 933 - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} 934 - 935 - micromark-util-combine-extensions@2.0.1: 936 - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} 937 - 938 - micromark-util-decode-numeric-character-reference@2.0.2: 939 - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} 940 - 941 - micromark-util-decode-string@2.0.1: 942 - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} 943 - 944 - micromark-util-encode@2.0.1: 945 - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} 946 - 947 - micromark-util-html-tag-name@2.0.1: 948 - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} 949 - 950 - micromark-util-normalize-identifier@2.0.1: 951 - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} 952 - 953 - micromark-util-resolve-all@2.0.1: 954 - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} 955 - 956 - micromark-util-sanitize-uri@2.0.1: 957 - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} 958 - 959 - micromark-util-subtokenize@2.1.0: 960 - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} 961 - 962 - micromark-util-symbol@2.0.1: 963 - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} 964 - 965 - micromark-util-types@2.0.2: 966 - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} 967 - 968 - micromark@4.0.2: 969 - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} 970 - 971 - mrmime@2.0.1: 972 - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 973 - engines: {node: '>=10'} 635 + merge-anything@5.1.7: 636 + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} 637 + engines: {node: '>=12.13'} 974 638 975 639 ms@2.1.3: 976 640 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} ··· 980 644 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 981 645 hasBin: true 982 646 983 - neotraverse@0.6.18: 984 - resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} 985 - engines: {node: '>= 10'} 986 - 987 - nlcst-to-string@4.0.0: 988 - resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} 989 - 990 - node-fetch-native@1.6.6: 991 - resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} 992 - 993 - node-fetch@2.7.0: 994 - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 995 - engines: {node: 4.x || >=6.0.0} 996 - peerDependencies: 997 - encoding: ^0.1.0 998 - peerDependenciesMeta: 999 - encoding: 1000 - optional: true 1001 - 1002 - node-mock-http@1.0.0: 1003 - resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} 1004 - 1005 - normalize-path@3.0.0: 1006 - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1007 - engines: {node: '>=0.10.0'} 1008 - 1009 - ofetch@1.4.1: 1010 - resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} 1011 - 1012 - ohash@2.0.11: 1013 - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} 1014 - 1015 - oniguruma-parser@0.12.1: 1016 - resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} 1017 - 1018 - oniguruma-to-es@4.3.3: 1019 - resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} 1020 - 1021 - p-limit@6.2.0: 1022 - resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} 1023 - engines: {node: '>=18'} 1024 - 1025 - p-queue@8.1.0: 1026 - resolution: {integrity: sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==} 1027 - engines: {node: '>=18'} 1028 - 1029 - p-timeout@6.1.4: 1030 - resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} 1031 - engines: {node: '>=14.16'} 647 + nanoid@5.1.5: 648 + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} 649 + engines: {node: ^18 || >=20} 650 + hasBin: true 1032 651 1033 - package-manager-detector@1.3.0: 1034 - resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} 1035 - 1036 - pako@0.2.9: 1037 - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} 1038 - 1039 - parse-latin@7.0.0: 1040 - resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} 652 + node-releases@2.0.19: 653 + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1041 654 1042 655 parse5@7.3.0: 1043 656 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} ··· 1045 658 picocolors@1.1.1: 1046 659 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1047 660 1048 - picomatch@2.3.1: 1049 - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1050 - engines: {node: '>=8.6'} 1051 - 1052 - picomatch@4.0.2: 1053 - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 661 + picomatch@4.0.3: 662 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1054 663 engines: {node: '>=12'} 1055 664 1056 - postcss@8.5.4: 1057 - resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} 665 + postcss@8.5.6: 666 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1058 667 engines: {node: ^10 || ^12 || >=14} 1059 668 1060 - prismjs@1.30.0: 1061 - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} 1062 - engines: {node: '>=6'} 1063 - 1064 - prompts@2.4.2: 1065 - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1066 - engines: {node: '>= 6'} 1067 - 1068 - property-information@6.5.0: 1069 - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} 1070 - 1071 - property-information@7.1.0: 1072 - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 1073 - 1074 - radix3@1.1.2: 1075 - resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} 1076 - 1077 - readdirp@4.1.2: 1078 - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1079 - engines: {node: '>= 14.18.0'} 1080 - 1081 - regex-recursion@6.0.2: 1082 - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} 1083 - 1084 - regex-utilities@2.3.0: 1085 - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} 669 + prettier@3.6.2: 670 + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} 671 + engines: {node: '>=14'} 672 + hasBin: true 1086 673 1087 - regex@6.0.1: 1088 - resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} 1089 - 1090 - rehype-parse@9.0.1: 1091 - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} 1092 - 1093 - rehype-raw@7.0.0: 1094 - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} 1095 - 1096 - rehype-stringify@10.0.1: 1097 - resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} 1098 - 1099 - rehype@13.0.2: 1100 - resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} 1101 - 1102 - remark-gfm@4.0.1: 1103 - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} 1104 - 1105 - remark-parse@11.0.0: 1106 - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} 1107 - 1108 - remark-rehype@11.1.2: 1109 - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} 1110 - 1111 - remark-smartypants@3.0.2: 1112 - resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} 1113 - engines: {node: '>=16.0.0'} 1114 - 1115 - remark-stringify@11.0.0: 1116 - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} 1117 - 1118 - restructure@3.0.2: 1119 - resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} 1120 - 1121 - retext-latin@4.0.0: 1122 - resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} 1123 - 1124 - retext-smartypants@6.2.0: 1125 - resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} 1126 - 1127 - retext-stringify@4.0.0: 1128 - resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} 1129 - 1130 - retext@9.0.0: 1131 - resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} 1132 - 1133 - rollup@4.42.0: 1134 - resolution: {integrity: sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==} 674 + rollup@4.46.3: 675 + resolution: {integrity: sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw==} 1135 676 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1136 677 hasBin: true 1137 678 1138 - semver@7.7.2: 1139 - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 1140 - engines: {node: '>=10'} 679 + semver@6.3.1: 680 + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1141 681 hasBin: true 1142 682 1143 - sharp@0.33.5: 1144 - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 1145 - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 683 + seroval-plugins@1.3.2: 684 + resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} 685 + engines: {node: '>=10'} 686 + peerDependencies: 687 + seroval: ^1.0 1146 688 1147 - shiki@3.6.0: 1148 - resolution: {integrity: sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==} 689 + seroval@1.3.2: 690 + resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 691 + engines: {node: '>=10'} 1149 692 1150 - simple-swizzle@0.2.2: 1151 - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 693 + solid-devtools@0.34.3: 694 + resolution: {integrity: sha512-ZQua959n+Zu3sLbm9g0IRjYUb1YYlYbu83PWLRoKbSsq0a3ItQNhnS2OBU7rQNmOKZiMexNo9Z3izas9BcOKDg==} 695 + peerDependencies: 696 + solid-js: ^1.9.0 697 + vite: ^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 698 + peerDependenciesMeta: 699 + vite: 700 + optional: true 1152 701 1153 - sisteransi@1.0.5: 1154 - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 702 + solid-js@1.9.9: 703 + resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} 1155 704 1156 - smol-toml@1.3.4: 1157 - resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==} 1158 - engines: {node: '>= 18'} 705 + solid-refresh@0.6.3: 706 + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} 707 + peerDependencies: 708 + solid-js: ^1.3 1159 709 1160 710 source-map-js@1.2.1: 1161 711 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1162 712 engines: {node: '>=0.10.0'} 1163 713 1164 - space-separated-tokens@2.0.2: 1165 - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 1166 - 1167 - string-width@4.2.3: 1168 - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1169 - engines: {node: '>=8'} 1170 - 1171 - string-width@7.2.0: 1172 - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1173 - engines: {node: '>=18'} 1174 - 1175 - stringify-entities@4.0.4: 1176 - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} 1177 - 1178 - strip-ansi@6.0.1: 1179 - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1180 - engines: {node: '>=8'} 1181 - 1182 - strip-ansi@7.1.0: 1183 - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1184 - engines: {node: '>=12'} 1185 - 1186 - tiny-inflate@1.0.3: 1187 - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} 1188 - 1189 - tinyexec@0.3.2: 1190 - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1191 - 1192 714 tinyglobby@0.2.14: 1193 715 resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} 1194 716 engines: {node: '>=12.0.0'} 1195 717 1196 - tr46@0.0.3: 1197 - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1198 - 1199 - trim-lines@3.0.1: 1200 - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 1201 - 1202 - trough@2.2.0: 1203 - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} 1204 - 1205 - tsconfck@3.1.6: 1206 - resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} 1207 - engines: {node: ^18 || >=20} 718 + typescript@5.9.2: 719 + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} 720 + engines: {node: '>=14.17'} 1208 721 hasBin: true 1209 - peerDependencies: 1210 - typescript: ^5.0.0 1211 - peerDependenciesMeta: 1212 - typescript: 1213 - optional: true 1214 722 1215 - tslib@2.8.1: 1216 - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 723 + undici-types@7.10.0: 724 + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} 1217 725 1218 - type-fest@4.41.0: 1219 - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} 1220 - engines: {node: '>=16'} 1221 - 1222 - typescript@5.8.3: 1223 - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1224 - engines: {node: '>=14.17'} 726 + update-browserslist-db@1.1.3: 727 + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1225 728 hasBin: true 729 + peerDependencies: 730 + browserslist: '>= 4.21.0' 1226 731 1227 - ufo@1.6.1: 1228 - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 732 + validate-html-nesting@1.2.3: 733 + resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} 1229 734 1230 - ultrahtml@1.6.0: 1231 - resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} 1232 - 1233 - uncrypto@0.1.3: 1234 - resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} 1235 - 1236 - undici-types@6.21.0: 1237 - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1238 - 1239 - unicode-properties@1.4.1: 1240 - resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} 1241 - 1242 - unicode-trie@2.0.0: 1243 - resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} 1244 - 1245 - unified@11.0.5: 1246 - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} 1247 - 1248 - unifont@0.5.0: 1249 - resolution: {integrity: sha512-4DueXMP5Hy4n607sh+vJ+rajoLu778aU3GzqeTCqsD/EaUcvqZT9wPC8kgK6Vjh22ZskrxyRCR71FwNOaYn6jA==} 1250 - 1251 - unist-util-find-after@5.0.0: 1252 - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} 1253 - 1254 - unist-util-is@6.0.0: 1255 - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} 1256 - 1257 - unist-util-modify-children@4.0.0: 1258 - resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} 1259 - 1260 - unist-util-position@5.0.0: 1261 - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} 1262 - 1263 - unist-util-remove-position@5.0.0: 1264 - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} 1265 - 1266 - unist-util-stringify-position@4.0.0: 1267 - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 1268 - 1269 - unist-util-visit-children@3.0.0: 1270 - resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} 1271 - 1272 - unist-util-visit-parents@6.0.1: 1273 - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} 1274 - 1275 - unist-util-visit@5.0.0: 1276 - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 1277 - 1278 - unstorage@1.16.0: 1279 - resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} 735 + vite-plugin-solid@2.11.8: 736 + resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==} 1280 737 peerDependencies: 1281 - '@azure/app-configuration': ^1.8.0 1282 - '@azure/cosmos': ^4.2.0 1283 - '@azure/data-tables': ^13.3.0 1284 - '@azure/identity': ^4.6.0 1285 - '@azure/keyvault-secrets': ^4.9.0 1286 - '@azure/storage-blob': ^12.26.0 1287 - '@capacitor/preferences': ^6.0.3 || ^7.0.0 1288 - '@deno/kv': '>=0.9.0' 1289 - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 1290 - '@planetscale/database': ^1.19.0 1291 - '@upstash/redis': ^1.34.3 1292 - '@vercel/blob': '>=0.27.1' 1293 - '@vercel/kv': ^1.0.1 1294 - aws4fetch: ^1.0.20 1295 - db0: '>=0.2.1' 1296 - idb-keyval: ^6.2.1 1297 - ioredis: ^5.4.2 1298 - uploadthing: ^7.4.4 738 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 739 + solid-js: ^1.7.2 740 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 1299 741 peerDependenciesMeta: 1300 - '@azure/app-configuration': 1301 - optional: true 1302 - '@azure/cosmos': 1303 - optional: true 1304 - '@azure/data-tables': 1305 - optional: true 1306 - '@azure/identity': 1307 - optional: true 1308 - '@azure/keyvault-secrets': 1309 - optional: true 1310 - '@azure/storage-blob': 1311 - optional: true 1312 - '@capacitor/preferences': 1313 - optional: true 1314 - '@deno/kv': 1315 - optional: true 1316 - '@netlify/blobs': 1317 - optional: true 1318 - '@planetscale/database': 1319 - optional: true 1320 - '@upstash/redis': 1321 - optional: true 1322 - '@vercel/blob': 1323 - optional: true 1324 - '@vercel/kv': 1325 - optional: true 1326 - aws4fetch: 1327 - optional: true 1328 - db0: 1329 - optional: true 1330 - idb-keyval: 1331 - optional: true 1332 - ioredis: 1333 - optional: true 1334 - uploadthing: 742 + '@testing-library/jest-dom': 1335 743 optional: true 1336 744 1337 - vfile-location@5.0.3: 1338 - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} 1339 - 1340 - vfile-message@4.0.2: 1341 - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 1342 - 1343 - vfile@6.0.3: 1344 - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 1345 - 1346 745 vite@6.3.5: 1347 746 resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} 1348 747 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} ··· 1383 782 yaml: 1384 783 optional: true 1385 784 1386 - vitefu@1.0.6: 1387 - resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} 785 + vitefu@1.1.1: 786 + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} 1388 787 peerDependencies: 1389 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 788 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 1390 789 peerDependenciesMeta: 1391 790 vite: 1392 791 optional: true 1393 792 1394 - web-namespaces@2.0.1: 1395 - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} 793 + yallist@3.1.1: 794 + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1396 795 1397 - webidl-conversions@3.0.1: 1398 - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 796 + snapshots: 1399 797 1400 - whatwg-url@5.0.0: 1401 - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 798 + '@ampproject/remapping@2.3.0': 799 + dependencies: 800 + '@jridgewell/gen-mapping': 0.3.13 801 + '@jridgewell/trace-mapping': 0.3.30 1402 802 1403 - which-pm-runs@1.1.0: 1404 - resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} 1405 - engines: {node: '>=4'} 803 + '@atcute/client@4.0.3': 804 + dependencies: 805 + '@atcute/identity': 1.0.3 806 + '@atcute/lexicons': 1.1.0 1406 807 1407 - widest-line@5.0.0: 1408 - resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} 1409 - engines: {node: '>=18'} 808 + '@atcute/identity-resolver@1.1.3(@atcute/identity@1.0.3)': 809 + dependencies: 810 + '@atcute/identity': 1.0.3 811 + '@atcute/lexicons': 1.1.0 812 + '@atcute/util-fetch': 1.0.1 813 + '@badrap/valita': 0.4.6 1410 814 1411 - wrap-ansi@9.0.0: 1412 - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1413 - engines: {node: '>=18'} 815 + '@atcute/identity@1.0.3': 816 + dependencies: 817 + '@atcute/lexicons': 1.1.0 818 + '@badrap/valita': 0.4.6 1414 819 1415 - xxhash-wasm@1.1.0: 1416 - resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} 820 + '@atcute/lexicons@1.1.0': 821 + dependencies: 822 + esm-env: 1.2.2 1417 823 1418 - yargs-parser@21.1.1: 1419 - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1420 - engines: {node: '>=12'} 824 + '@atcute/multibase@1.1.4': 825 + dependencies: 826 + '@atcute/uint8array': 1.0.3 1421 827 1422 - yocto-queue@1.2.1: 1423 - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} 1424 - engines: {node: '>=12.20'} 828 + '@atcute/oauth-browser-client@1.0.26': 829 + dependencies: 830 + '@atcute/client': 4.0.3 831 + '@atcute/identity': 1.0.3 832 + '@atcute/lexicons': 1.1.0 833 + '@atcute/multibase': 1.1.4 834 + '@atcute/uint8array': 1.0.3 835 + nanoid: 5.1.5 1425 836 1426 - yocto-spinner@0.2.3: 1427 - resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} 1428 - engines: {node: '>=18.19'} 837 + '@atcute/uint8array@1.0.3': {} 1429 838 1430 - yoctocolors@2.1.1: 1431 - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} 1432 - engines: {node: '>=18'} 839 + '@atcute/util-fetch@1.0.1': 840 + dependencies: 841 + '@badrap/valita': 0.4.6 1433 842 1434 - zod-to-json-schema@3.24.5: 1435 - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} 1436 - peerDependencies: 1437 - zod: ^3.24.1 843 + '@babel/code-frame@7.27.1': 844 + dependencies: 845 + '@babel/helper-validator-identifier': 7.27.1 846 + js-tokens: 4.0.0 847 + picocolors: 1.1.1 1438 848 1439 - zod-to-ts@1.2.0: 1440 - resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} 1441 - peerDependencies: 1442 - typescript: ^4.9.4 || ^5.0.2 1443 - zod: ^3 849 + '@babel/compat-data@7.28.0': {} 1444 850 1445 - zod@3.25.56: 1446 - resolution: {integrity: sha512-rd6eEF3BTNvQnR2e2wwolfTmUTnp70aUTqr0oaGbHifzC3BKJsoV+Gat8vxUMR1hwOKBs6El+qWehrHbCpW6SQ==} 851 + '@babel/core@7.28.3': 852 + dependencies: 853 + '@ampproject/remapping': 2.3.0 854 + '@babel/code-frame': 7.27.1 855 + '@babel/generator': 7.28.3 856 + '@babel/helper-compilation-targets': 7.27.2 857 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) 858 + '@babel/helpers': 7.28.3 859 + '@babel/parser': 7.28.3 860 + '@babel/template': 7.27.2 861 + '@babel/traverse': 7.28.3 862 + '@babel/types': 7.28.2 863 + convert-source-map: 2.0.0 864 + debug: 4.4.1 865 + gensync: 1.0.0-beta.2 866 + json5: 2.2.3 867 + semver: 6.3.1 868 + transitivePeerDependencies: 869 + - supports-color 1447 870 1448 - zwitch@2.0.4: 1449 - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 871 + '@babel/generator@7.28.3': 872 + dependencies: 873 + '@babel/parser': 7.28.3 874 + '@babel/types': 7.28.2 875 + '@jridgewell/gen-mapping': 0.3.13 876 + '@jridgewell/trace-mapping': 0.3.30 877 + jsesc: 3.1.0 1450 878 1451 - snapshots: 879 + '@babel/helper-compilation-targets@7.27.2': 880 + dependencies: 881 + '@babel/compat-data': 7.28.0 882 + '@babel/helper-validator-option': 7.27.1 883 + browserslist: 4.25.3 884 + lru-cache: 5.1.1 885 + semver: 6.3.1 1452 886 1453 - '@astrojs/compiler@2.12.1': {} 887 + '@babel/helper-globals@7.28.0': {} 1454 888 1455 - '@astrojs/internal-helpers@0.6.1': {} 889 + '@babel/helper-module-imports@7.18.6': 890 + dependencies: 891 + '@babel/types': 7.28.2 1456 892 1457 - '@astrojs/markdown-remark@6.3.2': 893 + '@babel/helper-module-imports@7.27.1': 1458 894 dependencies: 1459 - '@astrojs/internal-helpers': 0.6.1 1460 - '@astrojs/prism': 3.3.0 1461 - github-slugger: 2.0.0 1462 - hast-util-from-html: 2.0.3 1463 - hast-util-to-text: 4.0.2 1464 - import-meta-resolve: 4.1.0 1465 - js-yaml: 4.1.0 1466 - mdast-util-definitions: 6.0.0 1467 - rehype-raw: 7.0.0 1468 - rehype-stringify: 10.0.1 1469 - remark-gfm: 4.0.1 1470 - remark-parse: 11.0.0 1471 - remark-rehype: 11.1.2 1472 - remark-smartypants: 3.0.2 1473 - shiki: 3.6.0 1474 - smol-toml: 1.3.4 1475 - unified: 11.0.5 1476 - unist-util-remove-position: 5.0.0 1477 - unist-util-visit: 5.0.0 1478 - unist-util-visit-parents: 6.0.1 1479 - vfile: 6.0.3 895 + '@babel/traverse': 7.28.3 896 + '@babel/types': 7.28.2 1480 897 transitivePeerDependencies: 1481 898 - supports-color 1482 899 1483 - '@astrojs/prism@3.3.0': 1484 - dependencies: 1485 - prismjs: 1.30.0 1486 - 1487 - '@astrojs/telemetry@3.3.0': 900 + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': 1488 901 dependencies: 1489 - ci-info: 4.2.0 1490 - debug: 4.4.1 1491 - dlv: 1.1.3 1492 - dset: 3.1.4 1493 - is-docker: 3.0.0 1494 - is-wsl: 3.1.0 1495 - which-pm-runs: 1.1.0 902 + '@babel/core': 7.28.3 903 + '@babel/helper-module-imports': 7.27.1 904 + '@babel/helper-validator-identifier': 7.27.1 905 + '@babel/traverse': 7.28.3 1496 906 transitivePeerDependencies: 1497 907 - supports-color 908 + 909 + '@babel/helper-plugin-utils@7.27.1': {} 1498 910 1499 911 '@babel/helper-string-parser@7.27.1': {} 1500 912 1501 913 '@babel/helper-validator-identifier@7.27.1': {} 1502 914 1503 - '@babel/parser@7.27.5': 1504 - dependencies: 1505 - '@babel/types': 7.27.6 915 + '@babel/helper-validator-option@7.27.1': {} 1506 916 1507 - '@babel/types@7.27.6': 917 + '@babel/helpers@7.28.3': 1508 918 dependencies: 1509 - '@babel/helper-string-parser': 7.27.1 1510 - '@babel/helper-validator-identifier': 7.27.1 919 + '@babel/template': 7.27.2 920 + '@babel/types': 7.28.2 1511 921 1512 - '@capsizecss/unpack@2.4.0': 922 + '@babel/parser@7.28.3': 1513 923 dependencies: 1514 - blob-to-buffer: 1.2.9 1515 - cross-fetch: 3.2.0 1516 - fontkit: 2.0.4 1517 - transitivePeerDependencies: 1518 - - encoding 924 + '@babel/types': 7.28.2 1519 925 1520 - '@emnapi/runtime@1.4.3': 926 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': 1521 927 dependencies: 1522 - tslib: 2.8.1 1523 - optional: true 1524 - 1525 - '@esbuild/aix-ppc64@0.25.5': 1526 - optional: true 1527 - 1528 - '@esbuild/android-arm64@0.25.5': 1529 - optional: true 1530 - 1531 - '@esbuild/android-arm@0.25.5': 1532 - optional: true 1533 - 1534 - '@esbuild/android-x64@0.25.5': 1535 - optional: true 1536 - 1537 - '@esbuild/darwin-arm64@0.25.5': 1538 - optional: true 1539 - 1540 - '@esbuild/darwin-x64@0.25.5': 1541 - optional: true 1542 - 1543 - '@esbuild/freebsd-arm64@0.25.5': 1544 - optional: true 1545 - 1546 - '@esbuild/freebsd-x64@0.25.5': 1547 - optional: true 1548 - 1549 - '@esbuild/linux-arm64@0.25.5': 1550 - optional: true 928 + '@babel/core': 7.28.3 929 + '@babel/helper-plugin-utils': 7.27.1 1551 930 1552 - '@esbuild/linux-arm@0.25.5': 1553 - optional: true 931 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': 932 + dependencies: 933 + '@babel/core': 7.28.3 934 + '@babel/helper-plugin-utils': 7.27.1 1554 935 1555 - '@esbuild/linux-ia32@0.25.5': 1556 - optional: true 1557 - 1558 - '@esbuild/linux-loong64@0.25.5': 1559 - optional: true 936 + '@babel/template@7.27.2': 937 + dependencies: 938 + '@babel/code-frame': 7.27.1 939 + '@babel/parser': 7.28.3 940 + '@babel/types': 7.28.2 1560 941 1561 - '@esbuild/linux-mips64el@0.25.5': 1562 - optional: true 942 + '@babel/traverse@7.28.3': 943 + dependencies: 944 + '@babel/code-frame': 7.27.1 945 + '@babel/generator': 7.28.3 946 + '@babel/helper-globals': 7.28.0 947 + '@babel/parser': 7.28.3 948 + '@babel/template': 7.27.2 949 + '@babel/types': 7.28.2 950 + debug: 4.4.1 951 + transitivePeerDependencies: 952 + - supports-color 1563 953 1564 - '@esbuild/linux-ppc64@0.25.5': 1565 - optional: true 954 + '@babel/types@7.28.2': 955 + dependencies: 956 + '@babel/helper-string-parser': 7.27.1 957 + '@babel/helper-validator-identifier': 7.27.1 1566 958 1567 - '@esbuild/linux-riscv64@0.25.5': 1568 - optional: true 959 + '@badrap/valita@0.4.6': {} 1569 960 1570 - '@esbuild/linux-s390x@0.25.5': 961 + '@esbuild/aix-ppc64@0.25.9': 1571 962 optional: true 1572 963 1573 - '@esbuild/linux-x64@0.25.5': 964 + '@esbuild/android-arm64@0.25.9': 1574 965 optional: true 1575 966 1576 - '@esbuild/netbsd-arm64@0.25.5': 967 + '@esbuild/android-arm@0.25.9': 1577 968 optional: true 1578 969 1579 - '@esbuild/netbsd-x64@0.25.5': 970 + '@esbuild/android-x64@0.25.9': 1580 971 optional: true 1581 972 1582 - '@esbuild/openbsd-arm64@0.25.5': 973 + '@esbuild/darwin-arm64@0.25.9': 1583 974 optional: true 1584 975 1585 - '@esbuild/openbsd-x64@0.25.5': 976 + '@esbuild/darwin-x64@0.25.9': 1586 977 optional: true 1587 978 1588 - '@esbuild/sunos-x64@0.25.5': 979 + '@esbuild/freebsd-arm64@0.25.9': 1589 980 optional: true 1590 981 1591 - '@esbuild/win32-arm64@0.25.5': 982 + '@esbuild/freebsd-x64@0.25.9': 1592 983 optional: true 1593 984 1594 - '@esbuild/win32-ia32@0.25.5': 985 + '@esbuild/linux-arm64@0.25.9': 1595 986 optional: true 1596 987 1597 - '@esbuild/win32-x64@0.25.5': 988 + '@esbuild/linux-arm@0.25.9': 1598 989 optional: true 1599 990 1600 - '@img/sharp-darwin-arm64@0.33.5': 1601 - optionalDependencies: 1602 - '@img/sharp-libvips-darwin-arm64': 1.0.4 991 + '@esbuild/linux-ia32@0.25.9': 1603 992 optional: true 1604 993 1605 - '@img/sharp-darwin-x64@0.33.5': 1606 - optionalDependencies: 1607 - '@img/sharp-libvips-darwin-x64': 1.0.4 994 + '@esbuild/linux-loong64@0.25.9': 1608 995 optional: true 1609 996 1610 - '@img/sharp-libvips-darwin-arm64@1.0.4': 997 + '@esbuild/linux-mips64el@0.25.9': 1611 998 optional: true 1612 999 1613 - '@img/sharp-libvips-darwin-x64@1.0.4': 1000 + '@esbuild/linux-ppc64@0.25.9': 1614 1001 optional: true 1615 1002 1616 - '@img/sharp-libvips-linux-arm64@1.0.4': 1003 + '@esbuild/linux-riscv64@0.25.9': 1617 1004 optional: true 1618 1005 1619 - '@img/sharp-libvips-linux-arm@1.0.5': 1006 + '@esbuild/linux-s390x@0.25.9': 1620 1007 optional: true 1621 1008 1622 - '@img/sharp-libvips-linux-s390x@1.0.4': 1009 + '@esbuild/linux-x64@0.25.9': 1623 1010 optional: true 1624 1011 1625 - '@img/sharp-libvips-linux-x64@1.0.4': 1012 + '@esbuild/netbsd-arm64@0.25.9': 1626 1013 optional: true 1627 1014 1628 - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 1015 + '@esbuild/netbsd-x64@0.25.9': 1629 1016 optional: true 1630 1017 1631 - '@img/sharp-libvips-linuxmusl-x64@1.0.4': 1018 + '@esbuild/openbsd-arm64@0.25.9': 1632 1019 optional: true 1633 1020 1634 - '@img/sharp-linux-arm64@0.33.5': 1635 - optionalDependencies: 1636 - '@img/sharp-libvips-linux-arm64': 1.0.4 1021 + '@esbuild/openbsd-x64@0.25.9': 1637 1022 optional: true 1638 1023 1639 - '@img/sharp-linux-arm@0.33.5': 1640 - optionalDependencies: 1641 - '@img/sharp-libvips-linux-arm': 1.0.5 1024 + '@esbuild/openharmony-arm64@0.25.9': 1642 1025 optional: true 1643 1026 1644 - '@img/sharp-linux-s390x@0.33.5': 1645 - optionalDependencies: 1646 - '@img/sharp-libvips-linux-s390x': 1.0.4 1027 + '@esbuild/sunos-x64@0.25.9': 1647 1028 optional: true 1648 1029 1649 - '@img/sharp-linux-x64@0.33.5': 1650 - optionalDependencies: 1651 - '@img/sharp-libvips-linux-x64': 1.0.4 1030 + '@esbuild/win32-arm64@0.25.9': 1652 1031 optional: true 1653 1032 1654 - '@img/sharp-linuxmusl-arm64@0.33.5': 1655 - optionalDependencies: 1656 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 1033 + '@esbuild/win32-ia32@0.25.9': 1657 1034 optional: true 1658 1035 1659 - '@img/sharp-linuxmusl-x64@0.33.5': 1660 - optionalDependencies: 1661 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 1036 + '@esbuild/win32-x64@0.25.9': 1662 1037 optional: true 1663 1038 1664 - '@img/sharp-wasm32@0.33.5': 1039 + '@jridgewell/gen-mapping@0.3.13': 1665 1040 dependencies: 1666 - '@emnapi/runtime': 1.4.3 1667 - optional: true 1041 + '@jridgewell/sourcemap-codec': 1.5.5 1042 + '@jridgewell/trace-mapping': 0.3.30 1668 1043 1669 - '@img/sharp-win32-ia32@0.33.5': 1670 - optional: true 1044 + '@jridgewell/resolve-uri@3.1.2': {} 1671 1045 1672 - '@img/sharp-win32-x64@0.33.5': 1673 - optional: true 1046 + '@jridgewell/sourcemap-codec@1.5.5': {} 1674 1047 1675 - '@jridgewell/sourcemap-codec@1.5.0': {} 1048 + '@jridgewell/trace-mapping@0.3.30': 1049 + dependencies: 1050 + '@jridgewell/resolve-uri': 3.1.2 1051 + '@jridgewell/sourcemap-codec': 1.5.5 1676 1052 1677 - '@oslojs/encoding@1.1.0': {} 1053 + '@jsr/mary__exif-rm@0.2.2': {} 1678 1054 1679 - '@rollup/pluginutils@5.1.4(rollup@4.42.0)': 1680 - dependencies: 1681 - '@types/estree': 1.0.8 1682 - estree-walker: 2.0.2 1683 - picomatch: 4.0.2 1684 - optionalDependencies: 1685 - rollup: 4.42.0 1055 + '@nothing-but/utils@0.17.0': {} 1686 1056 1687 - '@rollup/rollup-android-arm-eabi@4.42.0': 1057 + '@rollup/rollup-android-arm-eabi@4.46.3': 1688 1058 optional: true 1689 1059 1690 - '@rollup/rollup-android-arm64@4.42.0': 1060 + '@rollup/rollup-android-arm64@4.46.3': 1691 1061 optional: true 1692 1062 1693 - '@rollup/rollup-darwin-arm64@4.42.0': 1063 + '@rollup/rollup-darwin-arm64@4.46.3': 1694 1064 optional: true 1695 1065 1696 - '@rollup/rollup-darwin-x64@4.42.0': 1066 + '@rollup/rollup-darwin-x64@4.46.3': 1697 1067 optional: true 1698 1068 1699 - '@rollup/rollup-freebsd-arm64@4.42.0': 1069 + '@rollup/rollup-freebsd-arm64@4.46.3': 1700 1070 optional: true 1701 1071 1702 - '@rollup/rollup-freebsd-x64@4.42.0': 1072 + '@rollup/rollup-freebsd-x64@4.46.3': 1703 1073 optional: true 1704 1074 1705 - '@rollup/rollup-linux-arm-gnueabihf@4.42.0': 1075 + '@rollup/rollup-linux-arm-gnueabihf@4.46.3': 1706 1076 optional: true 1707 1077 1708 - '@rollup/rollup-linux-arm-musleabihf@4.42.0': 1078 + '@rollup/rollup-linux-arm-musleabihf@4.46.3': 1709 1079 optional: true 1710 1080 1711 - '@rollup/rollup-linux-arm64-gnu@4.42.0': 1081 + '@rollup/rollup-linux-arm64-gnu@4.46.3': 1712 1082 optional: true 1713 1083 1714 - '@rollup/rollup-linux-arm64-musl@4.42.0': 1084 + '@rollup/rollup-linux-arm64-musl@4.46.3': 1715 1085 optional: true 1716 1086 1717 - '@rollup/rollup-linux-loongarch64-gnu@4.42.0': 1087 + '@rollup/rollup-linux-loongarch64-gnu@4.46.3': 1718 1088 optional: true 1719 1089 1720 - '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': 1090 + '@rollup/rollup-linux-ppc64-gnu@4.46.3': 1721 1091 optional: true 1722 1092 1723 - '@rollup/rollup-linux-riscv64-gnu@4.42.0': 1093 + '@rollup/rollup-linux-riscv64-gnu@4.46.3': 1724 1094 optional: true 1725 1095 1726 - '@rollup/rollup-linux-riscv64-musl@4.42.0': 1096 + '@rollup/rollup-linux-riscv64-musl@4.46.3': 1727 1097 optional: true 1728 1098 1729 - '@rollup/rollup-linux-s390x-gnu@4.42.0': 1099 + '@rollup/rollup-linux-s390x-gnu@4.46.3': 1730 1100 optional: true 1731 1101 1732 - '@rollup/rollup-linux-x64-gnu@4.42.0': 1102 + '@rollup/rollup-linux-x64-gnu@4.46.3': 1733 1103 optional: true 1734 1104 1735 - '@rollup/rollup-linux-x64-musl@4.42.0': 1105 + '@rollup/rollup-linux-x64-musl@4.46.3': 1736 1106 optional: true 1737 1107 1738 - '@rollup/rollup-win32-arm64-msvc@4.42.0': 1108 + '@rollup/rollup-win32-arm64-msvc@4.46.3': 1739 1109 optional: true 1740 1110 1741 - '@rollup/rollup-win32-ia32-msvc@4.42.0': 1111 + '@rollup/rollup-win32-ia32-msvc@4.46.3': 1742 1112 optional: true 1743 1113 1744 - '@rollup/rollup-win32-x64-msvc@4.42.0': 1114 + '@rollup/rollup-win32-x64-msvc@4.46.3': 1745 1115 optional: true 1746 1116 1747 - '@shikijs/core@3.6.0': 1117 + '@solid-devtools/debugger@0.28.1(solid-js@1.9.9)': 1748 1118 dependencies: 1749 - '@shikijs/types': 3.6.0 1750 - '@shikijs/vscode-textmate': 10.0.2 1751 - '@types/hast': 3.0.4 1752 - hast-util-to-html: 9.0.5 1119 + '@nothing-but/utils': 0.17.0 1120 + '@solid-devtools/shared': 0.20.0(solid-js@1.9.9) 1121 + '@solid-primitives/bounds': 0.1.3(solid-js@1.9.9) 1122 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1123 + '@solid-primitives/keyboard': 1.3.3(solid-js@1.9.9) 1124 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1125 + '@solid-primitives/scheduled': 1.5.2(solid-js@1.9.9) 1126 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1127 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1128 + solid-js: 1.9.9 1753 1129 1754 - '@shikijs/engine-javascript@3.6.0': 1130 + '@solid-devtools/shared@0.20.0(solid-js@1.9.9)': 1755 1131 dependencies: 1756 - '@shikijs/types': 3.6.0 1757 - '@shikijs/vscode-textmate': 10.0.2 1758 - oniguruma-to-es: 4.3.3 1132 + '@nothing-but/utils': 0.17.0 1133 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1134 + '@solid-primitives/media': 2.3.3(solid-js@1.9.9) 1135 + '@solid-primitives/refs': 1.1.2(solid-js@1.9.9) 1136 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1137 + '@solid-primitives/scheduled': 1.5.2(solid-js@1.9.9) 1138 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1139 + '@solid-primitives/styles': 0.1.2(solid-js@1.9.9) 1140 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1141 + solid-js: 1.9.9 1759 1142 1760 - '@shikijs/engine-oniguruma@3.6.0': 1143 + '@solid-primitives/bounds@0.1.3(solid-js@1.9.9)': 1761 1144 dependencies: 1762 - '@shikijs/types': 3.6.0 1763 - '@shikijs/vscode-textmate': 10.0.2 1145 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1146 + '@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.9) 1147 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1148 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1149 + solid-js: 1.9.9 1764 1150 1765 - '@shikijs/langs@3.6.0': 1151 + '@solid-primitives/event-listener@2.4.3(solid-js@1.9.9)': 1766 1152 dependencies: 1767 - '@shikijs/types': 3.6.0 1153 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1154 + solid-js: 1.9.9 1768 1155 1769 - '@shikijs/themes@3.6.0': 1156 + '@solid-primitives/keyboard@1.3.3(solid-js@1.9.9)': 1770 1157 dependencies: 1771 - '@shikijs/types': 3.6.0 1158 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1159 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1160 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1161 + solid-js: 1.9.9 1772 1162 1773 - '@shikijs/types@3.6.0': 1163 + '@solid-primitives/media@2.3.3(solid-js@1.9.9)': 1774 1164 dependencies: 1775 - '@shikijs/vscode-textmate': 10.0.2 1776 - '@types/hast': 3.0.4 1777 - 1778 - '@shikijs/vscode-textmate@10.0.2': {} 1165 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1166 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1167 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1168 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1169 + solid-js: 1.9.9 1779 1170 1780 - '@swc/helpers@0.5.17': 1171 + '@solid-primitives/refs@1.1.2(solid-js@1.9.9)': 1781 1172 dependencies: 1782 - tslib: 2.8.1 1173 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1174 + solid-js: 1.9.9 1783 1175 1784 - '@types/debug@4.1.12': 1176 + '@solid-primitives/resize-observer@2.1.3(solid-js@1.9.9)': 1785 1177 dependencies: 1786 - '@types/ms': 2.1.0 1178 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1179 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1180 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1181 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1182 + solid-js: 1.9.9 1787 1183 1788 - '@types/estree@1.0.7': {} 1789 - 1790 - '@types/estree@1.0.8': {} 1791 - 1792 - '@types/fontkit@2.0.8': 1184 + '@solid-primitives/rootless@1.5.2(solid-js@1.9.9)': 1793 1185 dependencies: 1794 - '@types/node': 22.15.30 1186 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1187 + solid-js: 1.9.9 1795 1188 1796 - '@types/hast@3.0.4': 1189 + '@solid-primitives/scheduled@1.5.2(solid-js@1.9.9)': 1797 1190 dependencies: 1798 - '@types/unist': 3.0.3 1191 + solid-js: 1.9.9 1799 1192 1800 - '@types/mdast@4.0.4': 1193 + '@solid-primitives/static-store@0.1.2(solid-js@1.9.9)': 1801 1194 dependencies: 1802 - '@types/unist': 3.0.3 1803 - 1804 - '@types/ms@2.1.0': {} 1195 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1196 + solid-js: 1.9.9 1805 1197 1806 - '@types/nlcst@2.0.3': 1198 + '@solid-primitives/styles@0.1.2(solid-js@1.9.9)': 1807 1199 dependencies: 1808 - '@types/unist': 3.0.3 1200 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1201 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1202 + solid-js: 1.9.9 1809 1203 1810 - '@types/node@22.15.30': 1204 + '@solid-primitives/utils@6.3.2(solid-js@1.9.9)': 1811 1205 dependencies: 1812 - undici-types: 6.21.0 1813 - 1814 - '@types/unist@3.0.3': {} 1206 + solid-js: 1.9.9 1815 1207 1816 - '@ungap/structured-clone@1.3.0': {} 1817 - 1818 - acorn@8.15.0: {} 1819 - 1820 - ansi-align@3.0.1: 1208 + '@solidjs/router@0.15.3(solid-js@1.9.9)': 1821 1209 dependencies: 1822 - string-width: 4.2.3 1210 + solid-js: 1.9.9 1823 1211 1824 - ansi-regex@5.0.1: {} 1825 - 1826 - ansi-regex@6.1.0: {} 1827 - 1828 - ansi-styles@6.2.1: {} 1829 - 1830 - anymatch@3.1.3: 1212 + '@types/babel__core@7.20.5': 1831 1213 dependencies: 1832 - normalize-path: 3.0.0 1833 - picomatch: 2.3.1 1834 - 1835 - argparse@2.0.1: {} 1836 - 1837 - aria-query@5.3.2: {} 1838 - 1839 - array-iterate@2.0.1: {} 1214 + '@babel/parser': 7.28.3 1215 + '@babel/types': 7.28.2 1216 + '@types/babel__generator': 7.27.0 1217 + '@types/babel__template': 7.4.4 1218 + '@types/babel__traverse': 7.28.0 1840 1219 1841 - astro@5.9.1(@types/node@22.15.30)(rollup@4.42.0)(typescript@5.8.3): 1220 + '@types/babel__generator@7.27.0': 1842 1221 dependencies: 1843 - '@astrojs/compiler': 2.12.1 1844 - '@astrojs/internal-helpers': 0.6.1 1845 - '@astrojs/markdown-remark': 6.3.2 1846 - '@astrojs/telemetry': 3.3.0 1847 - '@capsizecss/unpack': 2.4.0 1848 - '@oslojs/encoding': 1.1.0 1849 - '@rollup/pluginutils': 5.1.4(rollup@4.42.0) 1850 - acorn: 8.15.0 1851 - aria-query: 5.3.2 1852 - axobject-query: 4.1.0 1853 - boxen: 8.0.1 1854 - ci-info: 4.2.0 1855 - clsx: 2.1.1 1856 - common-ancestor-path: 1.0.1 1857 - cookie: 1.0.2 1858 - cssesc: 3.0.0 1859 - debug: 4.4.1 1860 - deterministic-object-hash: 2.0.2 1861 - devalue: 5.1.1 1862 - diff: 5.2.0 1863 - dlv: 1.1.3 1864 - dset: 3.1.4 1865 - es-module-lexer: 1.7.0 1866 - esbuild: 0.25.5 1867 - estree-walker: 3.0.3 1868 - flattie: 1.1.1 1869 - fontace: 0.3.0 1870 - github-slugger: 2.0.0 1871 - html-escaper: 3.0.3 1872 - http-cache-semantics: 4.2.0 1873 - import-meta-resolve: 4.1.0 1874 - js-yaml: 4.1.0 1875 - kleur: 4.1.5 1876 - magic-string: 0.30.17 1877 - magicast: 0.3.5 1878 - mrmime: 2.0.1 1879 - neotraverse: 0.6.18 1880 - p-limit: 6.2.0 1881 - p-queue: 8.1.0 1882 - package-manager-detector: 1.3.0 1883 - picomatch: 4.0.2 1884 - prompts: 2.4.2 1885 - rehype: 13.0.2 1886 - semver: 7.7.2 1887 - shiki: 3.6.0 1888 - tinyexec: 0.3.2 1889 - tinyglobby: 0.2.14 1890 - tsconfck: 3.1.6(typescript@5.8.3) 1891 - ultrahtml: 1.6.0 1892 - unifont: 0.5.0 1893 - unist-util-visit: 5.0.0 1894 - unstorage: 1.16.0 1895 - 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)) 1898 - xxhash-wasm: 1.1.0 1899 - yargs-parser: 21.1.1 1900 - 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) 1904 - optionalDependencies: 1905 - sharp: 0.33.5 1906 - transitivePeerDependencies: 1907 - - '@azure/app-configuration' 1908 - - '@azure/cosmos' 1909 - - '@azure/data-tables' 1910 - - '@azure/identity' 1911 - - '@azure/keyvault-secrets' 1912 - - '@azure/storage-blob' 1913 - - '@capacitor/preferences' 1914 - - '@deno/kv' 1915 - - '@netlify/blobs' 1916 - - '@planetscale/database' 1917 - - '@types/node' 1918 - - '@upstash/redis' 1919 - - '@vercel/blob' 1920 - - '@vercel/kv' 1921 - - aws4fetch 1922 - - db0 1923 - - encoding 1924 - - idb-keyval 1925 - - ioredis 1926 - - jiti 1927 - - less 1928 - - lightningcss 1929 - - rollup 1930 - - sass 1931 - - sass-embedded 1932 - - stylus 1933 - - sugarss 1934 - - supports-color 1935 - - terser 1936 - - tsx 1937 - - typescript 1938 - - uploadthing 1939 - - yaml 1940 - 1941 - axobject-query@4.1.0: {} 1222 + '@babel/types': 7.28.2 1942 1223 1943 - bail@2.0.2: {} 1944 - 1945 - base-64@1.0.0: {} 1946 - 1947 - base64-js@1.5.1: {} 1948 - 1949 - blob-to-buffer@1.2.9: {} 1950 - 1951 - boxen@8.0.1: 1224 + '@types/babel__template@7.4.4': 1952 1225 dependencies: 1953 - ansi-align: 3.0.1 1954 - camelcase: 8.0.0 1955 - chalk: 5.4.1 1956 - cli-boxes: 3.0.0 1957 - string-width: 7.2.0 1958 - type-fest: 4.41.0 1959 - widest-line: 5.0.0 1960 - wrap-ansi: 9.0.0 1226 + '@babel/parser': 7.28.3 1227 + '@babel/types': 7.28.2 1961 1228 1962 - brotli@1.3.3: 1229 + '@types/babel__traverse@7.28.0': 1963 1230 dependencies: 1964 - base64-js: 1.5.1 1965 - 1966 - camelcase@8.0.0: {} 1967 - 1968 - ccount@2.0.1: {} 1231 + '@babel/types': 7.28.2 1969 1232 1970 - chalk@5.4.1: {} 1233 + '@types/estree@1.0.8': {} 1971 1234 1972 - character-entities-html4@2.1.0: {} 1973 - 1974 - character-entities-legacy@3.0.0: {} 1975 - 1976 - character-entities@2.0.2: {} 1977 - 1978 - chokidar@4.0.3: 1235 + '@types/node@24.3.0': 1979 1236 dependencies: 1980 - readdirp: 4.1.2 1981 - 1982 - ci-info@4.2.0: {} 1237 + undici-types: 7.10.0 1983 1238 1984 - cli-boxes@3.0.0: {} 1985 - 1986 - clone@2.1.2: {} 1987 - 1988 - clsx@2.1.1: {} 1989 - 1990 - color-convert@2.0.1: 1239 + babel-plugin-jsx-dom-expressions@0.40.1(@babel/core@7.28.3): 1991 1240 dependencies: 1992 - color-name: 1.1.4 1993 - optional: true 1241 + '@babel/core': 7.28.3 1242 + '@babel/helper-module-imports': 7.18.6 1243 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) 1244 + '@babel/types': 7.28.2 1245 + html-entities: 2.3.3 1246 + parse5: 7.3.0 1247 + validate-html-nesting: 1.2.3 1994 1248 1995 - color-name@1.1.4: 1996 - optional: true 1997 - 1998 - color-string@1.9.1: 1249 + babel-preset-solid@1.9.9(@babel/core@7.28.3)(solid-js@1.9.9): 1999 1250 dependencies: 2000 - color-name: 1.1.4 2001 - simple-swizzle: 0.2.2 2002 - optional: true 1251 + '@babel/core': 7.28.3 1252 + babel-plugin-jsx-dom-expressions: 0.40.1(@babel/core@7.28.3) 1253 + optionalDependencies: 1254 + solid-js: 1.9.9 2003 1255 2004 - color@4.2.3: 1256 + browserslist@4.25.3: 2005 1257 dependencies: 2006 - color-convert: 2.0.1 2007 - color-string: 1.9.1 2008 - optional: true 1258 + caniuse-lite: 1.0.30001735 1259 + electron-to-chromium: 1.5.207 1260 + node-releases: 2.0.19 1261 + update-browserslist-db: 1.1.3(browserslist@4.25.3) 2009 1262 2010 - comma-separated-tokens@2.0.3: {} 2011 - 2012 - common-ancestor-path@1.0.1: {} 2013 - 2014 - cookie-es@1.2.2: {} 2015 - 2016 - cookie@1.0.2: {} 2017 - 2018 - cross-fetch@3.2.0: 2019 - dependencies: 2020 - node-fetch: 2.7.0 2021 - transitivePeerDependencies: 2022 - - encoding 1263 + caniuse-lite@1.0.30001735: {} 2023 1264 2024 - crossws@0.3.5: 2025 - dependencies: 2026 - uncrypto: 0.1.3 1265 + convert-source-map@2.0.0: {} 2027 1266 2028 - css-tree@3.1.0: 2029 - dependencies: 2030 - mdn-data: 2.12.2 2031 - source-map-js: 1.2.1 2032 - 2033 - cssesc@3.0.0: {} 1267 + csstype@3.1.3: {} 2034 1268 2035 1269 debug@4.4.1: 2036 1270 dependencies: 2037 1271 ms: 2.1.3 2038 1272 2039 - decode-named-character-reference@1.1.0: 2040 - dependencies: 2041 - character-entities: 2.0.2 2042 - 2043 - defu@6.1.4: {} 2044 - 2045 - dequal@2.0.3: {} 2046 - 2047 - destr@2.0.5: {} 2048 - 2049 - detect-libc@2.0.4: 2050 - optional: true 2051 - 2052 - deterministic-object-hash@2.0.2: 2053 - dependencies: 2054 - base-64: 1.0.0 2055 - 2056 - devalue@5.1.1: {} 2057 - 2058 - devlop@1.1.0: 2059 - dependencies: 2060 - dequal: 2.0.3 2061 - 2062 - dfa@1.2.0: {} 2063 - 2064 - diff@5.2.0: {} 2065 - 2066 - dlv@1.1.3: {} 2067 - 2068 - dset@3.1.4: {} 2069 - 2070 - emoji-regex@10.4.0: {} 2071 - 2072 - emoji-regex@8.0.0: {} 1273 + electron-to-chromium@1.5.207: {} 2073 1274 2074 1275 entities@6.0.1: {} 2075 1276 2076 - es-module-lexer@1.7.0: {} 2077 - 2078 - esbuild@0.25.5: 1277 + esbuild@0.25.9: 2079 1278 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 2105 - 2106 - escape-string-regexp@5.0.0: {} 2107 - 2108 - estree-walker@2.0.2: {} 2109 - 2110 - estree-walker@3.0.3: 2111 - dependencies: 2112 - '@types/estree': 1.0.8 2113 - 2114 - eventemitter3@5.0.1: {} 1279 + '@esbuild/aix-ppc64': 0.25.9 1280 + '@esbuild/android-arm': 0.25.9 1281 + '@esbuild/android-arm64': 0.25.9 1282 + '@esbuild/android-x64': 0.25.9 1283 + '@esbuild/darwin-arm64': 0.25.9 1284 + '@esbuild/darwin-x64': 0.25.9 1285 + '@esbuild/freebsd-arm64': 0.25.9 1286 + '@esbuild/freebsd-x64': 0.25.9 1287 + '@esbuild/linux-arm': 0.25.9 1288 + '@esbuild/linux-arm64': 0.25.9 1289 + '@esbuild/linux-ia32': 0.25.9 1290 + '@esbuild/linux-loong64': 0.25.9 1291 + '@esbuild/linux-mips64el': 0.25.9 1292 + '@esbuild/linux-ppc64': 0.25.9 1293 + '@esbuild/linux-riscv64': 0.25.9 1294 + '@esbuild/linux-s390x': 0.25.9 1295 + '@esbuild/linux-x64': 0.25.9 1296 + '@esbuild/netbsd-arm64': 0.25.9 1297 + '@esbuild/netbsd-x64': 0.25.9 1298 + '@esbuild/openbsd-arm64': 0.25.9 1299 + '@esbuild/openbsd-x64': 0.25.9 1300 + '@esbuild/openharmony-arm64': 0.25.9 1301 + '@esbuild/sunos-x64': 0.25.9 1302 + '@esbuild/win32-arm64': 0.25.9 1303 + '@esbuild/win32-ia32': 0.25.9 1304 + '@esbuild/win32-x64': 0.25.9 2115 1305 2116 - extend@3.0.2: {} 1306 + escalade@3.2.0: {} 2117 1307 2118 - fast-deep-equal@3.1.3: {} 1308 + esm-env@1.2.2: {} 2119 1309 2120 - fdir@6.4.5(picomatch@4.0.2): 1310 + fdir@6.5.0(picomatch@4.0.3): 2121 1311 optionalDependencies: 2122 - picomatch: 4.0.2 2123 - 2124 - flattie@1.1.1: {} 2125 - 2126 - fontace@0.3.0: 2127 - dependencies: 2128 - '@types/fontkit': 2.0.8 2129 - fontkit: 2.0.4 2130 - 2131 - fontkit@2.0.4: 2132 - dependencies: 2133 - '@swc/helpers': 0.5.17 2134 - brotli: 1.3.3 2135 - clone: 2.1.2 2136 - dfa: 1.2.0 2137 - fast-deep-equal: 3.1.3 2138 - restructure: 3.0.2 2139 - tiny-inflate: 1.0.3 2140 - unicode-properties: 1.4.1 2141 - unicode-trie: 2.0.0 1312 + picomatch: 4.0.3 2142 1313 2143 1314 fsevents@2.3.3: 2144 1315 optional: true 2145 1316 2146 - get-east-asian-width@1.3.0: {} 2147 - 2148 - github-slugger@2.0.0: {} 2149 - 2150 - h3@1.15.3: 2151 - dependencies: 2152 - cookie-es: 1.2.2 2153 - crossws: 0.3.5 2154 - defu: 6.1.4 2155 - destr: 2.0.5 2156 - iron-webcrypto: 1.2.1 2157 - node-mock-http: 1.0.0 2158 - radix3: 1.1.2 2159 - ufo: 1.6.1 2160 - uncrypto: 0.1.3 2161 - 2162 - hast-util-from-html@2.0.3: 2163 - dependencies: 2164 - '@types/hast': 3.0.4 2165 - devlop: 1.1.0 2166 - hast-util-from-parse5: 8.0.3 2167 - parse5: 7.3.0 2168 - vfile: 6.0.3 2169 - vfile-message: 4.0.2 2170 - 2171 - hast-util-from-parse5@8.0.3: 2172 - dependencies: 2173 - '@types/hast': 3.0.4 2174 - '@types/unist': 3.0.3 2175 - devlop: 1.1.0 2176 - hastscript: 9.0.1 2177 - property-information: 7.1.0 2178 - vfile: 6.0.3 2179 - vfile-location: 5.0.3 2180 - web-namespaces: 2.0.1 2181 - 2182 - hast-util-is-element@3.0.0: 2183 - dependencies: 2184 - '@types/hast': 3.0.4 2185 - 2186 - hast-util-parse-selector@4.0.0: 2187 - dependencies: 2188 - '@types/hast': 3.0.4 2189 - 2190 - hast-util-raw@9.1.0: 2191 - dependencies: 2192 - '@types/hast': 3.0.4 2193 - '@types/unist': 3.0.3 2194 - '@ungap/structured-clone': 1.3.0 2195 - hast-util-from-parse5: 8.0.3 2196 - hast-util-to-parse5: 8.0.0 2197 - html-void-elements: 3.0.0 2198 - mdast-util-to-hast: 13.2.0 2199 - parse5: 7.3.0 2200 - unist-util-position: 5.0.0 2201 - unist-util-visit: 5.0.0 2202 - vfile: 6.0.3 2203 - web-namespaces: 2.0.1 2204 - zwitch: 2.0.4 2205 - 2206 - hast-util-to-html@9.0.5: 2207 - dependencies: 2208 - '@types/hast': 3.0.4 2209 - '@types/unist': 3.0.3 2210 - ccount: 2.0.1 2211 - comma-separated-tokens: 2.0.3 2212 - hast-util-whitespace: 3.0.0 2213 - html-void-elements: 3.0.0 2214 - mdast-util-to-hast: 13.2.0 2215 - property-information: 7.1.0 2216 - space-separated-tokens: 2.0.2 2217 - stringify-entities: 4.0.4 2218 - zwitch: 2.0.4 2219 - 2220 - hast-util-to-parse5@8.0.0: 2221 - dependencies: 2222 - '@types/hast': 3.0.4 2223 - comma-separated-tokens: 2.0.3 2224 - devlop: 1.1.0 2225 - property-information: 6.5.0 2226 - space-separated-tokens: 2.0.2 2227 - web-namespaces: 2.0.1 2228 - zwitch: 2.0.4 2229 - 2230 - hast-util-to-text@4.0.2: 2231 - dependencies: 2232 - '@types/hast': 3.0.4 2233 - '@types/unist': 3.0.3 2234 - hast-util-is-element: 3.0.0 2235 - unist-util-find-after: 5.0.0 2236 - 2237 - hast-util-whitespace@3.0.0: 2238 - dependencies: 2239 - '@types/hast': 3.0.4 2240 - 2241 - hastscript@9.0.1: 2242 - dependencies: 2243 - '@types/hast': 3.0.4 2244 - comma-separated-tokens: 2.0.3 2245 - hast-util-parse-selector: 4.0.0 2246 - property-information: 7.1.0 2247 - space-separated-tokens: 2.0.2 2248 - 2249 - html-escaper@3.0.3: {} 2250 - 2251 - html-void-elements@3.0.0: {} 2252 - 2253 - http-cache-semantics@4.2.0: {} 2254 - 2255 - import-meta-resolve@4.1.0: {} 2256 - 2257 - iron-webcrypto@1.2.1: {} 2258 - 2259 - is-arrayish@0.3.2: 2260 - optional: true 2261 - 2262 - is-docker@3.0.0: {} 2263 - 2264 - is-fullwidth-code-point@3.0.0: {} 2265 - 2266 - is-inside-container@1.0.0: 2267 - dependencies: 2268 - is-docker: 3.0.0 2269 - 2270 - is-plain-obj@4.1.0: {} 2271 - 2272 - is-wsl@3.1.0: 2273 - dependencies: 2274 - is-inside-container: 1.0.0 2275 - 2276 - js-yaml@4.1.0: 2277 - dependencies: 2278 - argparse: 2.0.1 2279 - 2280 - kleur@3.0.3: {} 2281 - 2282 - kleur@4.1.5: {} 2283 - 2284 - longest-streak@3.1.0: {} 2285 - 2286 - lru-cache@10.4.3: {} 2287 - 2288 - magic-string@0.30.17: 2289 - dependencies: 2290 - '@jridgewell/sourcemap-codec': 1.5.0 2291 - 2292 - magicast@0.3.5: 2293 - dependencies: 2294 - '@babel/parser': 7.27.5 2295 - '@babel/types': 7.27.6 2296 - source-map-js: 1.2.1 2297 - 2298 - markdown-table@3.0.4: {} 2299 - 2300 - mdast-util-definitions@6.0.0: 2301 - dependencies: 2302 - '@types/mdast': 4.0.4 2303 - '@types/unist': 3.0.3 2304 - unist-util-visit: 5.0.0 2305 - 2306 - mdast-util-find-and-replace@3.0.2: 2307 - dependencies: 2308 - '@types/mdast': 4.0.4 2309 - escape-string-regexp: 5.0.0 2310 - unist-util-is: 6.0.0 2311 - unist-util-visit-parents: 6.0.1 2312 - 2313 - mdast-util-from-markdown@2.0.2: 2314 - dependencies: 2315 - '@types/mdast': 4.0.4 2316 - '@types/unist': 3.0.3 2317 - decode-named-character-reference: 1.1.0 2318 - devlop: 1.1.0 2319 - mdast-util-to-string: 4.0.0 2320 - micromark: 4.0.2 2321 - micromark-util-decode-numeric-character-reference: 2.0.2 2322 - micromark-util-decode-string: 2.0.1 2323 - micromark-util-normalize-identifier: 2.0.1 2324 - micromark-util-symbol: 2.0.1 2325 - micromark-util-types: 2.0.2 2326 - unist-util-stringify-position: 4.0.0 2327 - transitivePeerDependencies: 2328 - - supports-color 2329 - 2330 - mdast-util-gfm-autolink-literal@2.0.1: 2331 - dependencies: 2332 - '@types/mdast': 4.0.4 2333 - ccount: 2.0.1 2334 - devlop: 1.1.0 2335 - mdast-util-find-and-replace: 3.0.2 2336 - micromark-util-character: 2.1.1 2337 - 2338 - mdast-util-gfm-footnote@2.1.0: 2339 - dependencies: 2340 - '@types/mdast': 4.0.4 2341 - devlop: 1.1.0 2342 - mdast-util-from-markdown: 2.0.2 2343 - mdast-util-to-markdown: 2.1.2 2344 - micromark-util-normalize-identifier: 2.0.1 2345 - transitivePeerDependencies: 2346 - - supports-color 2347 - 2348 - mdast-util-gfm-strikethrough@2.0.0: 2349 - dependencies: 2350 - '@types/mdast': 4.0.4 2351 - mdast-util-from-markdown: 2.0.2 2352 - mdast-util-to-markdown: 2.1.2 2353 - transitivePeerDependencies: 2354 - - supports-color 2355 - 2356 - mdast-util-gfm-table@2.0.0: 2357 - dependencies: 2358 - '@types/mdast': 4.0.4 2359 - devlop: 1.1.0 2360 - markdown-table: 3.0.4 2361 - mdast-util-from-markdown: 2.0.2 2362 - mdast-util-to-markdown: 2.1.2 2363 - transitivePeerDependencies: 2364 - - supports-color 2365 - 2366 - mdast-util-gfm-task-list-item@2.0.0: 2367 - dependencies: 2368 - '@types/mdast': 4.0.4 2369 - devlop: 1.1.0 2370 - mdast-util-from-markdown: 2.0.2 2371 - mdast-util-to-markdown: 2.1.2 2372 - transitivePeerDependencies: 2373 - - supports-color 2374 - 2375 - mdast-util-gfm@3.1.0: 2376 - dependencies: 2377 - mdast-util-from-markdown: 2.0.2 2378 - mdast-util-gfm-autolink-literal: 2.0.1 2379 - mdast-util-gfm-footnote: 2.1.0 2380 - mdast-util-gfm-strikethrough: 2.0.0 2381 - mdast-util-gfm-table: 2.0.0 2382 - mdast-util-gfm-task-list-item: 2.0.0 2383 - mdast-util-to-markdown: 2.1.2 2384 - transitivePeerDependencies: 2385 - - supports-color 2386 - 2387 - mdast-util-phrasing@4.1.0: 2388 - dependencies: 2389 - '@types/mdast': 4.0.4 2390 - unist-util-is: 6.0.0 2391 - 2392 - mdast-util-to-hast@13.2.0: 2393 - dependencies: 2394 - '@types/hast': 3.0.4 2395 - '@types/mdast': 4.0.4 2396 - '@ungap/structured-clone': 1.3.0 2397 - devlop: 1.1.0 2398 - micromark-util-sanitize-uri: 2.0.1 2399 - trim-lines: 3.0.1 2400 - unist-util-position: 5.0.0 2401 - unist-util-visit: 5.0.0 2402 - vfile: 6.0.3 2403 - 2404 - mdast-util-to-markdown@2.1.2: 2405 - dependencies: 2406 - '@types/mdast': 4.0.4 2407 - '@types/unist': 3.0.3 2408 - longest-streak: 3.1.0 2409 - mdast-util-phrasing: 4.1.0 2410 - mdast-util-to-string: 4.0.0 2411 - micromark-util-classify-character: 2.0.1 2412 - micromark-util-decode-string: 2.0.1 2413 - unist-util-visit: 5.0.0 2414 - zwitch: 2.0.4 2415 - 2416 - mdast-util-to-string@4.0.0: 2417 - dependencies: 2418 - '@types/mdast': 4.0.4 2419 - 2420 - mdn-data@2.12.2: {} 2421 - 2422 - micromark-core-commonmark@2.0.3: 2423 - dependencies: 2424 - decode-named-character-reference: 1.1.0 2425 - devlop: 1.1.0 2426 - micromark-factory-destination: 2.0.1 2427 - micromark-factory-label: 2.0.1 2428 - micromark-factory-space: 2.0.1 2429 - micromark-factory-title: 2.0.1 2430 - micromark-factory-whitespace: 2.0.1 2431 - micromark-util-character: 2.1.1 2432 - micromark-util-chunked: 2.0.1 2433 - micromark-util-classify-character: 2.0.1 2434 - micromark-util-html-tag-name: 2.0.1 2435 - micromark-util-normalize-identifier: 2.0.1 2436 - micromark-util-resolve-all: 2.0.1 2437 - micromark-util-subtokenize: 2.1.0 2438 - micromark-util-symbol: 2.0.1 2439 - micromark-util-types: 2.0.2 2440 - 2441 - micromark-extension-gfm-autolink-literal@2.1.0: 2442 - dependencies: 2443 - micromark-util-character: 2.1.1 2444 - micromark-util-sanitize-uri: 2.0.1 2445 - micromark-util-symbol: 2.0.1 2446 - micromark-util-types: 2.0.2 1317 + gensync@1.0.0-beta.2: {} 2447 1318 2448 - micromark-extension-gfm-footnote@2.1.0: 2449 - dependencies: 2450 - devlop: 1.1.0 2451 - micromark-core-commonmark: 2.0.3 2452 - micromark-factory-space: 2.0.1 2453 - micromark-util-character: 2.1.1 2454 - micromark-util-normalize-identifier: 2.0.1 2455 - micromark-util-sanitize-uri: 2.0.1 2456 - micromark-util-symbol: 2.0.1 2457 - micromark-util-types: 2.0.2 1319 + html-entities@2.3.3: {} 2458 1320 2459 - micromark-extension-gfm-strikethrough@2.1.0: 2460 - dependencies: 2461 - devlop: 1.1.0 2462 - micromark-util-chunked: 2.0.1 2463 - micromark-util-classify-character: 2.0.1 2464 - micromark-util-resolve-all: 2.0.1 2465 - micromark-util-symbol: 2.0.1 2466 - micromark-util-types: 2.0.2 1321 + is-what@4.1.16: {} 2467 1322 2468 - micromark-extension-gfm-table@2.1.1: 2469 - dependencies: 2470 - devlop: 1.1.0 2471 - micromark-factory-space: 2.0.1 2472 - micromark-util-character: 2.1.1 2473 - micromark-util-symbol: 2.0.1 2474 - micromark-util-types: 2.0.2 1323 + js-tokens@4.0.0: {} 2475 1324 2476 - micromark-extension-gfm-tagfilter@2.0.0: 2477 - dependencies: 2478 - micromark-util-types: 2.0.2 1325 + jsesc@3.1.0: {} 2479 1326 2480 - micromark-extension-gfm-task-list-item@2.1.0: 2481 - dependencies: 2482 - devlop: 1.1.0 2483 - micromark-factory-space: 2.0.1 2484 - micromark-util-character: 2.1.1 2485 - micromark-util-symbol: 2.0.1 2486 - micromark-util-types: 2.0.2 1327 + json5@2.2.3: {} 2487 1328 2488 - micromark-extension-gfm@3.0.0: 1329 + lru-cache@5.1.1: 2489 1330 dependencies: 2490 - micromark-extension-gfm-autolink-literal: 2.1.0 2491 - micromark-extension-gfm-footnote: 2.1.0 2492 - micromark-extension-gfm-strikethrough: 2.1.0 2493 - micromark-extension-gfm-table: 2.1.1 2494 - micromark-extension-gfm-tagfilter: 2.0.0 2495 - micromark-extension-gfm-task-list-item: 2.1.0 2496 - micromark-util-combine-extensions: 2.0.1 2497 - micromark-util-types: 2.0.2 1331 + yallist: 3.1.1 2498 1332 2499 - micromark-factory-destination@2.0.1: 1333 + merge-anything@5.1.7: 2500 1334 dependencies: 2501 - micromark-util-character: 2.1.1 2502 - micromark-util-symbol: 2.0.1 2503 - micromark-util-types: 2.0.2 2504 - 2505 - micromark-factory-label@2.0.1: 2506 - dependencies: 2507 - devlop: 1.1.0 2508 - micromark-util-character: 2.1.1 2509 - micromark-util-symbol: 2.0.1 2510 - micromark-util-types: 2.0.2 2511 - 2512 - micromark-factory-space@2.0.1: 2513 - dependencies: 2514 - micromark-util-character: 2.1.1 2515 - micromark-util-types: 2.0.2 2516 - 2517 - micromark-factory-title@2.0.1: 2518 - dependencies: 2519 - micromark-factory-space: 2.0.1 2520 - micromark-util-character: 2.1.1 2521 - micromark-util-symbol: 2.0.1 2522 - micromark-util-types: 2.0.2 2523 - 2524 - micromark-factory-whitespace@2.0.1: 2525 - dependencies: 2526 - micromark-factory-space: 2.0.1 2527 - micromark-util-character: 2.1.1 2528 - micromark-util-symbol: 2.0.1 2529 - micromark-util-types: 2.0.2 2530 - 2531 - micromark-util-character@2.1.1: 2532 - dependencies: 2533 - micromark-util-symbol: 2.0.1 2534 - micromark-util-types: 2.0.2 2535 - 2536 - micromark-util-chunked@2.0.1: 2537 - dependencies: 2538 - micromark-util-symbol: 2.0.1 2539 - 2540 - micromark-util-classify-character@2.0.1: 2541 - dependencies: 2542 - micromark-util-character: 2.1.1 2543 - micromark-util-symbol: 2.0.1 2544 - micromark-util-types: 2.0.2 2545 - 2546 - micromark-util-combine-extensions@2.0.1: 2547 - dependencies: 2548 - micromark-util-chunked: 2.0.1 2549 - micromark-util-types: 2.0.2 2550 - 2551 - micromark-util-decode-numeric-character-reference@2.0.2: 2552 - dependencies: 2553 - micromark-util-symbol: 2.0.1 2554 - 2555 - micromark-util-decode-string@2.0.1: 2556 - dependencies: 2557 - decode-named-character-reference: 1.1.0 2558 - micromark-util-character: 2.1.1 2559 - micromark-util-decode-numeric-character-reference: 2.0.2 2560 - micromark-util-symbol: 2.0.1 2561 - 2562 - micromark-util-encode@2.0.1: {} 2563 - 2564 - micromark-util-html-tag-name@2.0.1: {} 2565 - 2566 - micromark-util-normalize-identifier@2.0.1: 2567 - dependencies: 2568 - micromark-util-symbol: 2.0.1 2569 - 2570 - micromark-util-resolve-all@2.0.1: 2571 - dependencies: 2572 - micromark-util-types: 2.0.2 2573 - 2574 - micromark-util-sanitize-uri@2.0.1: 2575 - dependencies: 2576 - micromark-util-character: 2.1.1 2577 - micromark-util-encode: 2.0.1 2578 - micromark-util-symbol: 2.0.1 2579 - 2580 - micromark-util-subtokenize@2.1.0: 2581 - dependencies: 2582 - devlop: 1.1.0 2583 - micromark-util-chunked: 2.0.1 2584 - micromark-util-symbol: 2.0.1 2585 - micromark-util-types: 2.0.2 2586 - 2587 - micromark-util-symbol@2.0.1: {} 2588 - 2589 - micromark-util-types@2.0.2: {} 2590 - 2591 - micromark@4.0.2: 2592 - dependencies: 2593 - '@types/debug': 4.1.12 2594 - debug: 4.4.1 2595 - decode-named-character-reference: 1.1.0 2596 - devlop: 1.1.0 2597 - micromark-core-commonmark: 2.0.3 2598 - micromark-factory-space: 2.0.1 2599 - micromark-util-character: 2.1.1 2600 - micromark-util-chunked: 2.0.1 2601 - micromark-util-combine-extensions: 2.0.1 2602 - micromark-util-decode-numeric-character-reference: 2.0.2 2603 - micromark-util-encode: 2.0.1 2604 - micromark-util-normalize-identifier: 2.0.1 2605 - micromark-util-resolve-all: 2.0.1 2606 - micromark-util-sanitize-uri: 2.0.1 2607 - micromark-util-subtokenize: 2.1.0 2608 - micromark-util-symbol: 2.0.1 2609 - micromark-util-types: 2.0.2 2610 - transitivePeerDependencies: 2611 - - supports-color 2612 - 2613 - mrmime@2.0.1: {} 1335 + is-what: 4.1.16 2614 1336 2615 1337 ms@2.1.3: {} 2616 1338 2617 1339 nanoid@3.3.11: {} 2618 1340 2619 - neotraverse@0.6.18: {} 2620 - 2621 - nlcst-to-string@4.0.0: 2622 - dependencies: 2623 - '@types/nlcst': 2.0.3 2624 - 2625 - node-fetch-native@1.6.6: {} 2626 - 2627 - node-fetch@2.7.0: 2628 - dependencies: 2629 - whatwg-url: 5.0.0 2630 - 2631 - node-mock-http@1.0.0: {} 2632 - 2633 - normalize-path@3.0.0: {} 2634 - 2635 - ofetch@1.4.1: 2636 - dependencies: 2637 - destr: 2.0.5 2638 - node-fetch-native: 1.6.6 2639 - ufo: 1.6.1 2640 - 2641 - ohash@2.0.11: {} 2642 - 2643 - oniguruma-parser@0.12.1: {} 2644 - 2645 - oniguruma-to-es@4.3.3: 2646 - dependencies: 2647 - oniguruma-parser: 0.12.1 2648 - regex: 6.0.1 2649 - regex-recursion: 6.0.2 2650 - 2651 - p-limit@6.2.0: 2652 - dependencies: 2653 - yocto-queue: 1.2.1 2654 - 2655 - p-queue@8.1.0: 2656 - dependencies: 2657 - eventemitter3: 5.0.1 2658 - p-timeout: 6.1.4 1341 + nanoid@5.1.5: {} 2659 1342 2660 - p-timeout@6.1.4: {} 2661 - 2662 - package-manager-detector@1.3.0: {} 2663 - 2664 - pako@0.2.9: {} 2665 - 2666 - parse-latin@7.0.0: 2667 - dependencies: 2668 - '@types/nlcst': 2.0.3 2669 - '@types/unist': 3.0.3 2670 - nlcst-to-string: 4.0.0 2671 - unist-util-modify-children: 4.0.0 2672 - unist-util-visit-children: 3.0.0 2673 - vfile: 6.0.3 1343 + node-releases@2.0.19: {} 2674 1344 2675 1345 parse5@7.3.0: 2676 1346 dependencies: ··· 2678 1348 2679 1349 picocolors@1.1.1: {} 2680 1350 2681 - picomatch@2.3.1: {} 1351 + picomatch@4.0.3: {} 2682 1352 2683 - picomatch@4.0.2: {} 2684 - 2685 - postcss@8.5.4: 1353 + postcss@8.5.6: 2686 1354 dependencies: 2687 1355 nanoid: 3.3.11 2688 1356 picocolors: 1.1.1 2689 1357 source-map-js: 1.2.1 2690 1358 2691 - prismjs@1.30.0: {} 1359 + prettier@3.6.2: {} 2692 1360 2693 - prompts@2.4.2: 1361 + rollup@4.46.3: 2694 1362 dependencies: 2695 - kleur: 3.0.3 2696 - sisteransi: 1.0.5 1363 + '@types/estree': 1.0.8 1364 + optionalDependencies: 1365 + '@rollup/rollup-android-arm-eabi': 4.46.3 1366 + '@rollup/rollup-android-arm64': 4.46.3 1367 + '@rollup/rollup-darwin-arm64': 4.46.3 1368 + '@rollup/rollup-darwin-x64': 4.46.3 1369 + '@rollup/rollup-freebsd-arm64': 4.46.3 1370 + '@rollup/rollup-freebsd-x64': 4.46.3 1371 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.3 1372 + '@rollup/rollup-linux-arm-musleabihf': 4.46.3 1373 + '@rollup/rollup-linux-arm64-gnu': 4.46.3 1374 + '@rollup/rollup-linux-arm64-musl': 4.46.3 1375 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.3 1376 + '@rollup/rollup-linux-ppc64-gnu': 4.46.3 1377 + '@rollup/rollup-linux-riscv64-gnu': 4.46.3 1378 + '@rollup/rollup-linux-riscv64-musl': 4.46.3 1379 + '@rollup/rollup-linux-s390x-gnu': 4.46.3 1380 + '@rollup/rollup-linux-x64-gnu': 4.46.3 1381 + '@rollup/rollup-linux-x64-musl': 4.46.3 1382 + '@rollup/rollup-win32-arm64-msvc': 4.46.3 1383 + '@rollup/rollup-win32-ia32-msvc': 4.46.3 1384 + '@rollup/rollup-win32-x64-msvc': 4.46.3 1385 + fsevents: 2.3.3 2697 1386 2698 - property-information@6.5.0: {} 2699 - 2700 - property-information@7.1.0: {} 2701 - 2702 - radix3@1.1.2: {} 2703 - 2704 - readdirp@4.1.2: {} 1387 + semver@6.3.1: {} 2705 1388 2706 - regex-recursion@6.0.2: 1389 + seroval-plugins@1.3.2(seroval@1.3.2): 2707 1390 dependencies: 2708 - regex-utilities: 2.3.0 1391 + seroval: 1.3.2 2709 1392 2710 - regex-utilities@2.3.0: {} 2711 - 2712 - regex@6.0.1: 2713 - dependencies: 2714 - regex-utilities: 2.3.0 2715 - 2716 - rehype-parse@9.0.1: 2717 - dependencies: 2718 - '@types/hast': 3.0.4 2719 - hast-util-from-html: 2.0.3 2720 - unified: 11.0.5 2721 - 2722 - rehype-raw@7.0.0: 2723 - dependencies: 2724 - '@types/hast': 3.0.4 2725 - hast-util-raw: 9.1.0 2726 - vfile: 6.0.3 2727 - 2728 - rehype-stringify@10.0.1: 2729 - dependencies: 2730 - '@types/hast': 3.0.4 2731 - hast-util-to-html: 9.0.5 2732 - unified: 11.0.5 2733 - 2734 - rehype@13.0.2: 2735 - dependencies: 2736 - '@types/hast': 3.0.4 2737 - rehype-parse: 9.0.1 2738 - rehype-stringify: 10.0.1 2739 - unified: 11.0.5 2740 - 2741 - remark-gfm@4.0.1: 2742 - dependencies: 2743 - '@types/mdast': 4.0.4 2744 - mdast-util-gfm: 3.1.0 2745 - micromark-extension-gfm: 3.0.0 2746 - remark-parse: 11.0.0 2747 - remark-stringify: 11.0.0 2748 - unified: 11.0.5 2749 - transitivePeerDependencies: 2750 - - supports-color 1393 + seroval@1.3.2: {} 2751 1394 2752 - remark-parse@11.0.0: 1395 + solid-devtools@0.34.3(solid-js@1.9.9)(vite@6.3.5(@types/node@24.3.0)): 2753 1396 dependencies: 2754 - '@types/mdast': 4.0.4 2755 - mdast-util-from-markdown: 2.0.2 2756 - micromark-util-types: 2.0.2 2757 - unified: 11.0.5 1397 + '@babel/core': 7.28.3 1398 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) 1399 + '@babel/types': 7.28.2 1400 + '@solid-devtools/debugger': 0.28.1(solid-js@1.9.9) 1401 + '@solid-devtools/shared': 0.20.0(solid-js@1.9.9) 1402 + solid-js: 1.9.9 1403 + optionalDependencies: 1404 + vite: 6.3.5(@types/node@24.3.0) 2758 1405 transitivePeerDependencies: 2759 1406 - supports-color 2760 1407 2761 - remark-rehype@11.1.2: 2762 - dependencies: 2763 - '@types/hast': 3.0.4 2764 - '@types/mdast': 4.0.4 2765 - mdast-util-to-hast: 13.2.0 2766 - unified: 11.0.5 2767 - vfile: 6.0.3 2768 - 2769 - remark-smartypants@3.0.2: 2770 - dependencies: 2771 - retext: 9.0.0 2772 - retext-smartypants: 6.2.0 2773 - unified: 11.0.5 2774 - unist-util-visit: 5.0.0 2775 - 2776 - remark-stringify@11.0.0: 2777 - dependencies: 2778 - '@types/mdast': 4.0.4 2779 - mdast-util-to-markdown: 2.1.2 2780 - unified: 11.0.5 2781 - 2782 - restructure@3.0.2: {} 2783 - 2784 - retext-latin@4.0.0: 1408 + solid-js@1.9.9: 2785 1409 dependencies: 2786 - '@types/nlcst': 2.0.3 2787 - parse-latin: 7.0.0 2788 - unified: 11.0.5 1410 + csstype: 3.1.3 1411 + seroval: 1.3.2 1412 + seroval-plugins: 1.3.2(seroval@1.3.2) 2789 1413 2790 - retext-smartypants@6.2.0: 1414 + solid-refresh@0.6.3(solid-js@1.9.9): 2791 1415 dependencies: 2792 - '@types/nlcst': 2.0.3 2793 - nlcst-to-string: 4.0.0 2794 - unist-util-visit: 5.0.0 2795 - 2796 - retext-stringify@4.0.0: 2797 - dependencies: 2798 - '@types/nlcst': 2.0.3 2799 - nlcst-to-string: 4.0.0 2800 - unified: 11.0.5 2801 - 2802 - retext@9.0.0: 2803 - dependencies: 2804 - '@types/nlcst': 2.0.3 2805 - retext-latin: 4.0.0 2806 - retext-stringify: 4.0.0 2807 - unified: 11.0.5 2808 - 2809 - rollup@4.42.0: 2810 - dependencies: 2811 - '@types/estree': 1.0.7 2812 - 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 2833 - fsevents: 2.3.3 2834 - 2835 - semver@7.7.2: {} 2836 - 2837 - sharp@0.33.5: 2838 - dependencies: 2839 - color: 4.2.3 2840 - detect-libc: 2.0.4 2841 - semver: 7.7.2 2842 - optionalDependencies: 2843 - '@img/sharp-darwin-arm64': 0.33.5 2844 - '@img/sharp-darwin-x64': 0.33.5 2845 - '@img/sharp-libvips-darwin-arm64': 1.0.4 2846 - '@img/sharp-libvips-darwin-x64': 1.0.4 2847 - '@img/sharp-libvips-linux-arm': 1.0.5 2848 - '@img/sharp-libvips-linux-arm64': 1.0.4 2849 - '@img/sharp-libvips-linux-s390x': 1.0.4 2850 - '@img/sharp-libvips-linux-x64': 1.0.4 2851 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 2852 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 2853 - '@img/sharp-linux-arm': 0.33.5 2854 - '@img/sharp-linux-arm64': 0.33.5 2855 - '@img/sharp-linux-s390x': 0.33.5 2856 - '@img/sharp-linux-x64': 0.33.5 2857 - '@img/sharp-linuxmusl-arm64': 0.33.5 2858 - '@img/sharp-linuxmusl-x64': 0.33.5 2859 - '@img/sharp-wasm32': 0.33.5 2860 - '@img/sharp-win32-ia32': 0.33.5 2861 - '@img/sharp-win32-x64': 0.33.5 2862 - optional: true 2863 - 2864 - shiki@3.6.0: 2865 - 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 2872 - '@shikijs/vscode-textmate': 10.0.2 2873 - '@types/hast': 3.0.4 2874 - 2875 - simple-swizzle@0.2.2: 2876 - dependencies: 2877 - is-arrayish: 0.3.2 2878 - optional: true 2879 - 2880 - sisteransi@1.0.5: {} 2881 - 2882 - smol-toml@1.3.4: {} 1416 + '@babel/generator': 7.28.3 1417 + '@babel/helper-module-imports': 7.27.1 1418 + '@babel/types': 7.28.2 1419 + solid-js: 1.9.9 1420 + transitivePeerDependencies: 1421 + - supports-color 2883 1422 2884 1423 source-map-js@1.2.1: {} 2885 1424 2886 - space-separated-tokens@2.0.2: {} 2887 - 2888 - string-width@4.2.3: 2889 - dependencies: 2890 - emoji-regex: 8.0.0 2891 - is-fullwidth-code-point: 3.0.0 2892 - strip-ansi: 6.0.1 2893 - 2894 - string-width@7.2.0: 2895 - dependencies: 2896 - emoji-regex: 10.4.0 2897 - get-east-asian-width: 1.3.0 2898 - strip-ansi: 7.1.0 2899 - 2900 - stringify-entities@4.0.4: 2901 - dependencies: 2902 - character-entities-html4: 2.1.0 2903 - character-entities-legacy: 3.0.0 2904 - 2905 - strip-ansi@6.0.1: 2906 - dependencies: 2907 - ansi-regex: 5.0.1 2908 - 2909 - strip-ansi@7.1.0: 2910 - dependencies: 2911 - ansi-regex: 6.1.0 2912 - 2913 - tiny-inflate@1.0.3: {} 2914 - 2915 - tinyexec@0.3.2: {} 2916 - 2917 1425 tinyglobby@0.2.14: 2918 1426 dependencies: 2919 - fdir: 6.4.5(picomatch@4.0.2) 2920 - picomatch: 4.0.2 2921 - 2922 - tr46@0.0.3: {} 2923 - 2924 - trim-lines@3.0.1: {} 2925 - 2926 - trough@2.2.0: {} 2927 - 2928 - tsconfck@3.1.6(typescript@5.8.3): 2929 - optionalDependencies: 2930 - typescript: 5.8.3 2931 - 2932 - tslib@2.8.1: {} 2933 - 2934 - type-fest@4.41.0: {} 2935 - 2936 - typescript@5.8.3: {} 2937 - 2938 - ufo@1.6.1: {} 2939 - 2940 - ultrahtml@1.6.0: {} 2941 - 2942 - uncrypto@0.1.3: {} 2943 - 2944 - undici-types@6.21.0: {} 2945 - 2946 - unicode-properties@1.4.1: 2947 - dependencies: 2948 - base64-js: 1.5.1 2949 - unicode-trie: 2.0.0 2950 - 2951 - unicode-trie@2.0.0: 2952 - dependencies: 2953 - pako: 0.2.9 2954 - tiny-inflate: 1.0.3 2955 - 2956 - unified@11.0.5: 2957 - dependencies: 2958 - '@types/unist': 3.0.3 2959 - bail: 2.0.2 2960 - devlop: 1.1.0 2961 - extend: 3.0.2 2962 - is-plain-obj: 4.1.0 2963 - trough: 2.2.0 2964 - vfile: 6.0.3 1427 + fdir: 6.5.0(picomatch@4.0.3) 1428 + picomatch: 4.0.3 2965 1429 2966 - unifont@0.5.0: 2967 - dependencies: 2968 - css-tree: 3.1.0 2969 - ohash: 2.0.11 1430 + typescript@5.9.2: {} 2970 1431 2971 - unist-util-find-after@5.0.0: 2972 - dependencies: 2973 - '@types/unist': 3.0.3 2974 - unist-util-is: 6.0.0 1432 + undici-types@7.10.0: {} 2975 1433 2976 - unist-util-is@6.0.0: 1434 + update-browserslist-db@1.1.3(browserslist@4.25.3): 2977 1435 dependencies: 2978 - '@types/unist': 3.0.3 1436 + browserslist: 4.25.3 1437 + escalade: 3.2.0 1438 + picocolors: 1.1.1 2979 1439 2980 - unist-util-modify-children@4.0.0: 2981 - dependencies: 2982 - '@types/unist': 3.0.3 2983 - array-iterate: 2.0.1 1440 + validate-html-nesting@1.2.3: {} 2984 1441 2985 - unist-util-position@5.0.0: 1442 + vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@6.3.5(@types/node@24.3.0)): 2986 1443 dependencies: 2987 - '@types/unist': 3.0.3 1444 + '@babel/core': 7.28.3 1445 + '@types/babel__core': 7.20.5 1446 + babel-preset-solid: 1.9.9(@babel/core@7.28.3)(solid-js@1.9.9) 1447 + merge-anything: 5.1.7 1448 + solid-js: 1.9.9 1449 + solid-refresh: 0.6.3(solid-js@1.9.9) 1450 + vite: 6.3.5(@types/node@24.3.0) 1451 + vitefu: 1.1.1(vite@6.3.5(@types/node@24.3.0)) 1452 + transitivePeerDependencies: 1453 + - supports-color 2988 1454 2989 - unist-util-remove-position@5.0.0: 1455 + vite@6.3.5(@types/node@24.3.0): 2990 1456 dependencies: 2991 - '@types/unist': 3.0.3 2992 - unist-util-visit: 5.0.0 2993 - 2994 - unist-util-stringify-position@4.0.0: 2995 - dependencies: 2996 - '@types/unist': 3.0.3 2997 - 2998 - unist-util-visit-children@3.0.0: 2999 - dependencies: 3000 - '@types/unist': 3.0.3 3001 - 3002 - unist-util-visit-parents@6.0.1: 3003 - dependencies: 3004 - '@types/unist': 3.0.3 3005 - unist-util-is: 6.0.0 3006 - 3007 - unist-util-visit@5.0.0: 3008 - dependencies: 3009 - '@types/unist': 3.0.3 3010 - unist-util-is: 6.0.0 3011 - unist-util-visit-parents: 6.0.1 3012 - 3013 - unstorage@1.16.0: 3014 - dependencies: 3015 - anymatch: 3.1.3 3016 - chokidar: 4.0.3 3017 - destr: 2.0.5 3018 - h3: 1.15.3 3019 - lru-cache: 10.4.3 3020 - node-fetch-native: 1.6.6 3021 - ofetch: 1.4.1 3022 - ufo: 1.6.1 3023 - 3024 - vfile-location@5.0.3: 3025 - dependencies: 3026 - '@types/unist': 3.0.3 3027 - vfile: 6.0.3 3028 - 3029 - vfile-message@4.0.2: 3030 - dependencies: 3031 - '@types/unist': 3.0.3 3032 - unist-util-stringify-position: 4.0.0 3033 - 3034 - vfile@6.0.3: 3035 - dependencies: 3036 - '@types/unist': 3.0.3 3037 - vfile-message: 4.0.2 3038 - 3039 - vite@6.3.5(@types/node@22.15.30): 3040 - 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 1457 + esbuild: 0.25.9 1458 + fdir: 6.5.0(picomatch@4.0.3) 1459 + picomatch: 4.0.3 1460 + postcss: 8.5.6 1461 + rollup: 4.46.3 3046 1462 tinyglobby: 0.2.14 3047 1463 optionalDependencies: 3048 - '@types/node': 22.15.30 1464 + '@types/node': 24.3.0 3049 1465 fsevents: 2.3.3 3050 1466 3051 - vitefu@1.0.6(vite@6.3.5(@types/node@22.15.30)): 1467 + vitefu@1.1.1(vite@6.3.5(@types/node@24.3.0)): 3052 1468 optionalDependencies: 3053 - vite: 6.3.5(@types/node@22.15.30) 3054 - 3055 - web-namespaces@2.0.1: {} 3056 - 3057 - webidl-conversions@3.0.1: {} 3058 - 3059 - whatwg-url@5.0.0: 3060 - dependencies: 3061 - tr46: 0.0.3 3062 - webidl-conversions: 3.0.1 3063 - 3064 - which-pm-runs@1.1.0: {} 1469 + vite: 6.3.5(@types/node@24.3.0) 3065 1470 3066 - widest-line@5.0.0: 3067 - dependencies: 3068 - string-width: 7.2.0 3069 - 3070 - wrap-ansi@9.0.0: 3071 - dependencies: 3072 - ansi-styles: 6.2.1 3073 - string-width: 7.2.0 3074 - strip-ansi: 7.1.0 3075 - 3076 - xxhash-wasm@1.1.0: {} 3077 - 3078 - yargs-parser@21.1.1: {} 3079 - 3080 - yocto-queue@1.2.1: {} 3081 - 3082 - yocto-spinner@0.2.3: 3083 - dependencies: 3084 - yoctocolors: 2.1.1 3085 - 3086 - yoctocolors@2.1.1: {} 3087 - 3088 - zod-to-json-schema@3.24.5(zod@3.25.56): 3089 - dependencies: 3090 - zod: 3.25.56 3091 - 3092 - zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.56): 3093 - dependencies: 3094 - typescript: 5.8.3 3095 - zod: 3.25.56 3096 - 3097 - zod@3.25.56: {} 3098 - 3099 - zwitch@2.0.4: {} 1471 + yallist@3.1.1: {}
-1
frontend/pnpm-workspace.yaml
··· 1 1 onlyBuiltDependencies: 2 2 - esbuild 3 - - sharp
-9
frontend/public/favicon.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128"> 2 - <path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" /> 3 - <style> 4 - path { fill: #000; } 5 - @media (prefers-color-scheme: dark) { 6 - path { fill: #FFF; } 7 - } 8 - </style> 9 - </svg>
frontend/public/images/404.png

This is a binary file and will not be displayed.

+12
frontend/public/oauth/client-metadata.json
··· 1 + { 2 + "client_id": "https://clippr.social/oauth/client-metadata.json", 3 + "client_name": "Clippr", 4 + "client_uri": "https://clippr.social", 5 + "redirect_uris": ["https://clippr.social/"], 6 + "scope": "atproto blob?accept=image/* repo:social.clippr.actor.profile repo:social.clippr.feed.clip repo:social.clippr.feed.tag", 7 + "grant_types": ["authorization_code", "refresh_token"], 8 + "response_types": ["code"], 9 + "token_endpoint_auth_method": "none", 10 + "application_type": "web", 11 + "dpop_bound_access_tokens": true 12 + }
frontend/src/assets/favicon.ico

This is a binary file and will not be displayed.

-18
frontend/src/components/Clip.astro
··· 1 - --- 2 - import TagList from "./TagList.astro"; 3 - const { title, tagList, link, description, originalClipper, firstClipDate } = Astro.props; 4 - --- 5 - <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>
-9
frontend/src/components/SidebarItem.astro
··· 1 - --- 2 - const {title} = Astro.props; 3 - --- 4 - <div class="sidebar-item"> 5 - <h2>{title}</h2> 6 - <div class="sidebar-content"> 7 - <slot /> 8 - </div> 9 - </div>
-12
frontend/src/components/TagList.astro
··· 1 - --- 2 - const {tags} = Astro.props; 3 - let tags_arr; 4 - if (typeof tags !== 'undefined') { 5 - tags_arr = tags.split(','); 6 - } 7 - --- 8 - <div class="clip-tags"> 9 - { 10 - tags_arr?.map((element: string) => (<small>{element}</small>)) 11 - } 12 - </div>
+24
frontend/src/components/footer.tsx
··· 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 + const Footer = () => { 8 + return ( 9 + <footer> 10 + <div id="footer-left"> 11 + <p>copyright ยฉ 2025 clippr contributors</p> 12 + </div> 13 + <div id="footer-right"> 14 + <nav> 15 + <a href="https://bsky.app/profile/did:web:clippr.social">bluesky</a> 16 + <a href="https://pol.is/8cijewmm37">feedback</a> 17 + <a href="https://tangled.sh/@hexmani.ac/clippr">git</a> 18 + </nav> 19 + </div> 20 + </footer> 21 + ); 22 + }; 23 + 24 + export { Footer };
+34
frontend/src/components/header.tsx
··· 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 { agent, loginState } from "./loginForm.tsx"; 8 + import { A } from "@solidjs/router"; 9 + 10 + const Header = () => { 11 + return ( 12 + <header> 13 + <div id="header-left"> 14 + <A href={loginState() ? "/home" : "/"}> 15 + <p class="silent-link">clippr (beta)</p> 16 + </A> 17 + </div> 18 + <div id="header-right"> 19 + <nav> 20 + {loginState() ? ( 21 + <> 22 + <A href={`/profile/${agent.sub}`}>profile</A> 23 + <A href="/settings">settings</A> 24 + </> 25 + ) : ( 26 + <A href="/login">login</A> 27 + )} 28 + </nav> 29 + </div> 30 + </header> 31 + ); 32 + }; 33 + 34 + export { Header };
+141
frontend/src/components/loginForm.tsx
··· 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 + configureOAuth, 9 + createAuthorizationUrl, 10 + deleteStoredSession, 11 + finalizeAuthorization, 12 + getSession, 13 + OAuthUserAgent, 14 + resolveFromIdentity, 15 + resolveFromService, 16 + Session, 17 + } from "@atcute/oauth-browser-client"; 18 + import { createSignal } from "solid-js"; 19 + import { Did, isHandle } from "@atcute/lexicons/syntax"; 20 + 21 + configureOAuth({ 22 + metadata: { 23 + client_id: import.meta.env.VITE_OAUTH_CLIENT_ID, 24 + redirect_uri: import.meta.env.VITE_OAUTH_REDIRECT_URI, 25 + }, 26 + }); 27 + 28 + export const [loginState, setLoginState] = createSignal(false); 29 + let agent: OAuthUserAgent; 30 + 31 + const LoginForm = () => { 32 + const [notice, setNotice] = createSignal(""); 33 + const [loginInput, setLoginInput] = createSignal(""); 34 + 35 + const login = async (handle: string) => { 36 + try { 37 + if (!handle) return; 38 + let resolved; 39 + document.getElementById("submitDetails")!.removeAttribute("hidden"); 40 + document 41 + .querySelector('button[type="submit"]')! 42 + .setAttribute("disabled", "true"); 43 + if (!isHandle(handle)) { 44 + setNotice(`Resolving your service...`); 45 + resolved = await resolveFromService(handle); 46 + } else { 47 + setNotice(`Resolving your identity...`); 48 + resolved = await resolveFromIdentity(handle); 49 + } 50 + 51 + setNotice(`Contacting your data server...`); 52 + const authUrl = await createAuthorizationUrl({ 53 + scope: import.meta.env.VITE_OAUTH_SCOPE, 54 + ...resolved, 55 + }); 56 + 57 + setNotice(`Redirecting...`); 58 + await new Promise((resolve) => setTimeout(resolve, 500)); 59 + 60 + location.assign(authUrl); 61 + } catch (e: unknown) { 62 + if (e instanceof Error) { 63 + console.error(e); 64 + setNotice(`${e.message}`); 65 + } else { 66 + console.error(e); 67 + setNotice(`Unknown error, check console ยฏ\\_(ใƒ„)_/ยฏ`); 68 + } 69 + } 70 + }; 71 + 72 + return ( 73 + <> 74 + <form onclick={(e) => e.preventDefault()}> 75 + <label for="handle">Bluesky handle or DID</label> 76 + <input 77 + type="text" 78 + name="handle" 79 + id="handle" 80 + placeholder="alice.bsky.social" 81 + onInput={(e) => setLoginInput(e.currentTarget.value)} 82 + /> 83 + <button type="submit" onclick={() => login(loginInput())}> 84 + log in 85 + </button> 86 + </form> 87 + <p id="submitDetails" hidden> 88 + {notice()} 89 + </p> 90 + </> 91 + ); 92 + }; 93 + 94 + const retrieveSession = async (): Promise<void> => { 95 + const init = async (): Promise<Session | undefined> => { 96 + const params = new URLSearchParams(location.hash.slice(1)); 97 + 98 + if (params.has("state") && (params.has("code") || params.has("error"))) { 99 + history.replaceState(null, "", location.pathname + location.search); 100 + 101 + const session = await finalizeAuthorization(params); 102 + console.log("Finalizing authorization...", session); 103 + const agent = new OAuthUserAgent(session); 104 + console.log(await agent.getSession()); 105 + const did = session.info.sub; 106 + 107 + localStorage.setItem("currentUser", did); 108 + return session; 109 + } else { 110 + const currentUser = localStorage.getItem("currentUser"); 111 + 112 + if (currentUser) { 113 + try { 114 + console.log("Retrieving session..."); 115 + return await getSession(currentUser as Did); 116 + } catch (err) { 117 + deleteStoredSession(currentUser as Did); 118 + localStorage.removeItem("currentUser"); 119 + throw err; 120 + } 121 + } 122 + } 123 + }; 124 + 125 + const session = await init().catch(() => {}); 126 + 127 + if (session) { 128 + console.log("Retrieved session!", session); 129 + agent = new OAuthUserAgent(session); 130 + setLoginState(true); 131 + } 132 + }; 133 + 134 + const killSession = async (): Promise<void> => { 135 + await agent.signOut(); 136 + setLoginState(false); 137 + localStorage.removeItem("currentUser"); 138 + location.href = "/"; 139 + }; 140 + 141 + export { LoginForm, retrieveSession, agent, killSession };
+52
frontend/src/components/pageLocation.tsx
··· 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 { splitProps } from "solid-js"; 8 + 9 + // How to define the path because I forgot how to and struggled for half an hour: 10 + // ``` 11 + // [ 12 + // { 13 + // name: "home", 14 + // link: "/" 15 + // } 16 + // ] 17 + // ``` 18 + type PathItem = { 19 + name: string; 20 + link: string; 21 + }; 22 + 23 + const PageLocation = (props: any) => { 24 + const [local, others] = splitProps(props, ["lastLocation", "path"]); 25 + const path = local.path; 26 + 27 + if (typeof path === "undefined") { 28 + return ( 29 + <div id="page-location"> 30 + <p id="page-location-last">{local.lastLocation || "blank"}</p> 31 + </div> 32 + ); 33 + } 34 + 35 + return ( 36 + <div id="page-location"> 37 + {path.map((item: PathItem) => { 38 + return ( 39 + <> 40 + <p class="page-location-parent" {...others}> 41 + <a href={item.link || ""}>{item.name}</a> 42 + </p> 43 + <p>โ†’</p> 44 + </> 45 + ); 46 + })} 47 + <p id="page-location-last">{local.lastLocation || "blank"}</p> 48 + </div> 49 + ); 50 + }; 51 + 52 + export { PageLocation };
+185
frontend/src/components/profileEditor.tsx
··· 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 { createResource, createSignal } from "solid-js"; 8 + import { Client, ClientResponse } from "@atcute/client"; 9 + import { remove } from "@mary/exif-rm"; 10 + import { agent } from "./loginForm.tsx"; 11 + import { fetchProfile } from "../utils/profile.ts"; 12 + 13 + const ProfileEditor = () => { 14 + const [actor, setActor] = createSignal(); 15 + const [avatarPreview, setAvatarPreview] = createSignal(""); 16 + const [notice, setNotice] = createSignal(""); 17 + let formRef: HTMLFormElement = document.createElement("form"); 18 + 19 + setActor(agent.session.info.sub); 20 + const [profile] = createResource(actor, fetchProfile); 21 + 22 + const uploadBlob = async () => { 23 + setNotice(""); 24 + console.log("starting avatar upload..."); 25 + let blob: Blob; 26 + 27 + const file = (document.getElementById("avatar") as HTMLInputElement) 28 + ?.files?.[0]; 29 + if (!file) return; 30 + 31 + if (!file.type.startsWith("image/")) { 32 + setNotice("error: avatar must be an image"); 33 + console.log(file); 34 + return; 35 + } 36 + 37 + if (file.size > 1000000) { 38 + setNotice("error: avatar must be less than 1MB"); 39 + console.log(file); 40 + return; 41 + } 42 + 43 + blob = file; 44 + console.log("removing exif data..."); 45 + const exifRemoved = remove(new Uint8Array(await blob.arrayBuffer())); 46 + if (exifRemoved !== null) { 47 + // @ts-ignore 48 + blob = new Blob([exifRemoved], { type: blob.type }); 49 + } 50 + 51 + console.log(blob); 52 + 53 + const rpc = new Client({ handler: agent! }); 54 + setNotice("uploading avatar..."); 55 + const uploadRes: ClientResponse<any, any> = await rpc.post( 56 + // @ts-ignore 57 + "com.atproto.repo.uploadBlob", 58 + { 59 + input: blob, 60 + }, 61 + ); 62 + (document.getElementById("avatar") as HTMLInputElement).value = ""; 63 + if (!uploadRes.ok) { 64 + setNotice(uploadRes.data.error); 65 + return; 66 + } 67 + setNotice(""); 68 + setAvatarPreview(URL.createObjectURL(blob)); 69 + 70 + console.log(uploadRes.data); 71 + localStorage.setItem("avatar", JSON.stringify(uploadRes.data.blob)); 72 + }; 73 + 74 + const applyProfileChanges = async (formData: FormData) => { 75 + const rpc = new Client({ handler: agent! }); 76 + 77 + const avatar = localStorage.getItem("avatar"); 78 + 79 + if (avatar === null) { 80 + setNotice("error: avatar is missing"); 81 + return; 82 + } 83 + 84 + const displayName = formData.get("displayName") as string; 85 + if (displayName === null || displayName === "") { 86 + setNotice("error: display name is missing"); 87 + return; 88 + } 89 + 90 + if (displayName.length > 64) { 91 + setNotice("error: display name is too long"); 92 + return; 93 + } 94 + 95 + let description = formData.get("description") as string; 96 + if (description === null || description === "") { 97 + description = "This user does not have a bio."; 98 + } 99 + 100 + if (description.length > 500) { 101 + setNotice("error: description is too long"); 102 + return; 103 + } 104 + 105 + try { 106 + // @ts-ignore 107 + const res = await rpc.post("com.atproto.repo.putRecord", { 108 + input: { 109 + repo: agent!.sub, 110 + collection: "social.clippr.actor.profile", 111 + rkey: "self", 112 + record: { 113 + $type: "social.clippr.actor.profile", 114 + avatar: JSON.parse(avatar), 115 + displayName: formData.get("displayName"), 116 + description: formData.get("description") || "", 117 + // TODO: Take 'createdAt' string from previous version if it exists 118 + createdAt: new Date().toISOString(), 119 + }, 120 + }, 121 + }); 122 + 123 + if (!res.ok) { 124 + setNotice(res.data.error); 125 + return; 126 + } 127 + } catch (e: any) { 128 + setNotice(e.message); 129 + return; 130 + } 131 + 132 + setNotice("profile changed!"); 133 + localStorage.removeItem("avatar"); 134 + }; 135 + 136 + return ( 137 + <div> 138 + <form ref={formRef}> 139 + <label for="avatar" class="file-upload"> 140 + upload avatar 141 + </label> 142 + <input 143 + type="file" 144 + name="avatar" 145 + id="avatar" 146 + accept=".jpg,.jpeg,.png,image/jpeg,image/png" 147 + onChange={() => uploadBlob()} 148 + /> 149 + <img class="profile-picture" src={avatarPreview()} alt="The user's uploaded avatar." hidden={avatarPreview() === ""} /> 150 + <label for="displayName">display name</label> 151 + <input 152 + type="text" 153 + name="displayName" 154 + id="displayName" 155 + maxLength="64" 156 + placeholder="Alice" 157 + value={profile()?.displayName || ""} 158 + /> 159 + <label for="description">bio</label> 160 + <textarea 161 + name="description" 162 + id="description" 163 + maxLength="500" 164 + placeholder="describe yourself..." 165 + value={profile()?.description || ""} 166 + ></textarea> 167 + <button 168 + type="submit" 169 + onClick={(e) => { 170 + e.preventDefault(); 171 + // @ts-ignore 172 + applyProfileChanges(new FormData(formRef)).then(); 173 + }} 174 + > 175 + apply changes 176 + </button> 177 + </form> 178 + <p id="submitDetails" hidden={notice() === null}> 179 + {notice()} 180 + </p> 181 + </div> 182 + ); 183 + }; 184 + 185 + export { ProfileEditor };
+60
frontend/src/components/profileWidget.tsx
··· 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 + createResource, 9 + Match, 10 + Show, 11 + splitProps, 12 + Switch, 13 + } from "solid-js"; 14 + import { agent } from "./loginForm.tsx"; 15 + import { fetchProfile } from "../utils/profile.ts"; 16 + 17 + interface ProfileProps { 18 + actor?: string; 19 + } 20 + 21 + const ProfileWidget = (props: ProfileProps) => { 22 + const [local] = splitProps(props, ["actor"]); 23 + const actor = () => local.actor ?? agent.session.info.sub; 24 + 25 + 26 + const [profile] = createResource(actor, fetchProfile); 27 + 28 + return ( 29 + <div> 30 + <Show when={profile.loading}> 31 + <p>loading...</p> 32 + </Show> 33 + <Switch> 34 + <Match when={profile.error}> 35 + <p>error: {profile.error.message}</p> 36 + </Match> 37 + <Match when={profile()}> 38 + <div id="profile-view"> 39 + <img 40 + src={profile()?.avatar} 41 + class="profile-picture" 42 + alt="The user's avatar." 43 + /> 44 + <div> 45 + <p> 46 + <b>{profile()?.displayName}</b> 47 + </p> 48 + <p title={profile()?.did}> 49 + {profile()?.handle.replace("at://", "@")} 50 + </p> 51 + <p>{profile()?.description}</p> 52 + </div> 53 + </div> 54 + </Match> 55 + </Switch> 56 + </div> 57 + ); 58 + }; 59 + 60 + export { ProfileWidget };
+31
frontend/src/index.tsx
··· 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 + /* @refresh reload */ 8 + import { render } from "solid-js/web"; 9 + import { Route, Router } from "@solidjs/router"; 10 + import { Layout } from "./layout.tsx"; 11 + import { LandingPage } from "./views/landingPage.tsx"; 12 + import { Login } from "./views/login.tsx"; 13 + import { NotFound } from "./views/notFound.tsx"; 14 + import { Home } from "./views/home.tsx"; 15 + import "solid-devtools"; 16 + import { Profile } from "./views/profile.tsx"; 17 + import { Settings } from "./views/settings.tsx"; 18 + 19 + render( 20 + () => ( 21 + <Router root={Layout}> 22 + <Route path="/" component={LandingPage} /> 23 + <Route path="/login" component={Login} /> 24 + <Route path="/home" component={Home} /> 25 + <Route path={["/profile/:id", "/profile"]} component={Profile} /> 26 + <Route path="/settings" component={Settings} /> 27 + <Route path="*paramName" component={NotFound} /> 28 + </Router> 29 + ), 30 + document.getElementById("root") as HTMLElement, 31 + );
+35
frontend/src/layout.tsx
··· 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 { RouteSectionProps } from "@solidjs/router"; 8 + import { Header } from "./components/header.tsx"; 9 + import { Footer } from "./components/footer.tsx"; 10 + import { onMount, createSignal, Show } from "solid-js"; 11 + import { loginState, retrieveSession } from "./components/loginForm.tsx"; 12 + 13 + const Layout = (props: RouteSectionProps<unknown>) => { 14 + const [isLoading, setIsLoading] = createSignal(true); 15 + 16 + onMount(async () => { 17 + await retrieveSession(); 18 + if (loginState() && location.pathname === "/") { 19 + window.location.href = "/home"; 20 + } 21 + setIsLoading(false); 22 + }); 23 + 24 + return ( 25 + <Show when={!isLoading()} fallback={<></>}> 26 + <> 27 + <Header /> 28 + {props.children} 29 + <Footer /> 30 + </> 31 + </Show> 32 + ); 33 + }; 34 + 35 + export { Layout };
-20
frontend/src/layouts/Base.astro
··· 1 - --- 2 - const { title } = Astro.props; 3 - import '../styles/main.css'; 4 - --- 5 - <!doctype html> 6 - <!-- 7 - * clippr: a social bookmarking service for the AT Protocol 8 - * Copyright (c) 2025 clippr contributors. 9 - * SPDX-License-Identifier: AGPL-3.0-only 10 - --> 11 - <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> 20 - </html>
-20
frontend/src/layouts/Footer.astro
··· 1 - --- 2 - --- 3 - <footer> 4 - <small> 5 - shoutout popbob! | ยฉ 2025 clippr contributors | <a href="https://tangled.sh/@noob.quest/clippr">source code</a> 6 - </small> 7 - </footer> 8 - 9 - <style> 10 - footer { 11 - background-color: #ddd; 12 - padding: 1em 0; 13 - color: black; 14 - text-align: center; 15 - 16 - a { 17 - color: revert; 18 - } 19 - } 20 - </style>
-10
frontend/src/layouts/Header.astro
··· 1 - --- 2 - --- 3 - <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>
-32
frontend/src/pages/404.astro
··· 1 - --- 2 - import Base from "../layouts/Base.astro"; 3 - import Header from "../layouts/Header.astro"; 4 - import Footer from "../layouts/Footer.astro"; 5 - --- 6 - <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/> 14 - </Base> 15 - 16 - <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 - } 24 - 25 - h2, p { 26 - margin: 0.5rem 0; 27 - } 28 - 29 - a { 30 - color: revert; 31 - } 32 - </style>
-12
frontend/src/pages/about.astro
··· 1 - --- 2 - import Base from "../layouts/Base.astro"; 3 - import Header from "../layouts/Header.astro"; 4 - import Footer from "../layouts/Footer.astro"; 5 - --- 6 - <Base title="about"> 7 - <Header/> 8 - <main> 9 - <p>Fill in later!</p> 10 - </main> 11 - <Footer/> 12 - </Base>
-36
frontend/src/pages/index.astro
··· 1 - --- 2 - import Base from '../layouts/Base.astro'; 3 - import Header from "../layouts/Header.astro"; 4 - import Footer from "../layouts/Footer.astro"; 5 - import Clip from "../components/Clip.astro"; 6 - import SidebarItem from "../components/SidebarItem.astro"; 7 - --- 8 - <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>
-95
frontend/src/pages/login.astro
··· 1 - --- 2 - import Base from '../layouts/Base.astro'; 3 - import Header from "../layouts/Header.astro"; 4 - import Footer from "../layouts/Footer.astro"; 5 - --- 6 - <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/> 25 - </Base> 26 - 27 - <style> 28 - main { 29 - display: flex !important; 30 - flex-direction: column; 31 - align-items: center; 32 - justify-content: center; 33 - gap: 1rem; 34 - } 35 - 36 - form { 37 - display: flex; 38 - flex-direction: column; 39 - justify-content: center; 40 - 41 - label { 42 - text-align: center; 43 - font-weight: bold; 44 - margin-bottom: 0.5rem; 45 - } 46 - 47 - input[type="submit"] { 48 - margin: 1rem 0 0 0; 49 - padding: 0.5rem 0; 50 - width: 50%; 51 - align-self: center; 52 - } 53 - } 54 - 55 - a { 56 - color: revert; 57 - } 58 - 59 - #or { 60 - border: 2px black solid; 61 - padding: 0.5rem 2rem; 62 - margin: 0; 63 - font-weight: bold; 64 - } 65 - 66 - h2 { 67 - text-align: center; 68 - } 69 - 70 - #bluesky-login { 71 - display: flex; 72 - flex-direction: column; 73 - justify-content: center; 74 - align-items: center; 75 - 76 - h2 { 77 - margin: 1rem 0; 78 - margin-top: 0; 79 - } 80 - } 81 - 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 - } 89 - 90 - #bluesky-login-button:hover { 91 - cursor: pointer; 92 - filter: brightness(90%); 93 - transition: filter 0.3s ease-in-out; 94 - } 95 - </style>
+264
frontend/src/styles/index.css
··· 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 + :root { 8 + color-scheme: dark light; 9 + font-family: Arial, sans-serif; 10 + } 11 + 12 + @media (prefers-color-scheme: dark) { 13 + :root { 14 + --bg: #222 !important; 15 + --fg: #fff !important; 16 + --controls-bg: #2B2A33 !important; 17 + --controls-bg-hover: #52525E !important; 18 + --controls-border: #8F8F9D !important; 19 + } 20 + } 21 + 22 + @media (prefers-color-scheme: light) { 23 + :root { 24 + --bg: #fff !important; 25 + --fg: #222 !important; 26 + --controls-bg: #E9E9ED !important; 27 + --controls-bg-hover: #D0D0D7 !important; 28 + --controls-border: #8F8F9D !important; 29 + } 30 + } 31 + 32 + body { 33 + background-color: var(--bg); 34 + color: var(--fg); 35 + width: 70vw; 36 + margin: 1rem auto; 37 + } 38 + 39 + header { 40 + display: flex; 41 + justify-content: space-between; 42 + align-items: center; 43 + padding: 0 1rem; 44 + border-bottom: 1px solid var(--fg); 45 + 46 + #header-left { 47 + font-weight: bold; 48 + } 49 + 50 + #header-right nav { 51 + display: inline-flex; 52 + align-items: center; 53 + justify-content: space-between; 54 + gap: 1rem; 55 + } 56 + } 57 + 58 + main { 59 + margin: 1rem; 60 + } 61 + 62 + #main-headings { 63 + h1 { 64 + margin: 0; 65 + } 66 + 67 + margin: 1rem 0 1rem 0; 68 + } 69 + 70 + #page-location { 71 + display: flex; 72 + align-items: start; 73 + gap: 0.5rem; 74 + padding: 0 0 0 0.5rem; 75 + border: 1px solid var(--fg); 76 + 77 + p { 78 + margin: 0; 79 + padding: 0.5rem 0; 80 + } 81 + } 82 + 83 + #page-location-last { 84 + font-weight: bold; 85 + } 86 + 87 + #content { 88 + display: flex; 89 + flex-direction: row; 90 + gap: 2rem; 91 + justify-content: space-between; 92 + } 93 + 94 + #main-content { 95 + h3 { 96 + margin: 0; 97 + } 98 + 99 + p { 100 + line-height: 1.5; 101 + } 102 + } 103 + 104 + #sidebar { 105 + display: flex; 106 + flex-direction: column; 107 + gap: 1rem; 108 + } 109 + 110 + .centered { 111 + text-align: center; 112 + margin: 0 auto; 113 + } 114 + 115 + .sidebar-item { 116 + border: 1px solid var(--fg); 117 + display: flex; 118 + flex-direction: column; 119 + align-items: center; 120 + justify-content: space-between; 121 + padding: 0.5rem; 122 + text-align: center; 123 + 124 + h3 { 125 + margin: 0.5rem 0 1rem 0; 126 + } 127 + 128 + h4 { 129 + margin: 0; 130 + } 131 + } 132 + 133 + .stat-counter { 134 + font-weight: bold; 135 + font-size: 1.5rem; 136 + margin: 0.5rem 0; 137 + } 138 + 139 + form { 140 + display: flex; 141 + flex-direction: column; 142 + align-items: center; 143 + gap: 0.5rem; 144 + 145 + input { 146 + padding: 0.25rem; 147 + margin: 0.5rem; 148 + } 149 + } 150 + 151 + button { 152 + padding: 0.25rem 2rem; 153 + margin: 0 0 0.5rem 0; 154 + } 155 + 156 + footer { 157 + display: flex; 158 + justify-content: space-between; 159 + align-items: center; 160 + padding: 0 1rem; 161 + border-top: 1px solid var(--fg); 162 + 163 + #footer-right nav { 164 + display: inline-flex; 165 + align-items: center; 166 + justify-content: space-between; 167 + gap: 1rem; 168 + } 169 + } 170 + 171 + a { 172 + text-decoration: none; 173 + color: #8c8cfe; 174 + } 175 + 176 + a:hover { 177 + font-style: italic; 178 + font-weight: bold; 179 + cursor: pointer; 180 + } 181 + 182 + a:visited { 183 + color: #8c8cfe; 184 + } 185 + 186 + .silent-link { 187 + color: var(--fg); 188 + 189 + &:hover { 190 + font-style: revert; 191 + font-weight: revert; 192 + } 193 + } 194 + 195 + #profile-view { 196 + display: flex; 197 + flex-direction: row; 198 + align-items: center; 199 + gap: 2rem; 200 + 201 + div { 202 + text-align: left; 203 + } 204 + 205 + * { 206 + margin: 0.5rem 0; 207 + } 208 + } 209 + 210 + .profile-picture { 211 + border-radius: 50%; 212 + width: 150px; 213 + height: 150px; 214 + } 215 + 216 + form input[type="file"] { 217 + display: none; 218 + } 219 + 220 + .file-upload { 221 + border: 1px solid var(--controls-border); 222 + display: inline-block; 223 + padding: 6px 12px; 224 + background-color: var(--controls-bg); 225 + border-radius: 6px; 226 + margin: 0.5rem 0; 227 + } 228 + 229 + .file-upload:hover { 230 + background-color: var(--controls-bg-hover); 231 + } 232 + 233 + textarea { 234 + padding: 0.5rem; 235 + width: 275px; 236 + height: 100px; 237 + font-family: Arial, sans-serif; 238 + } 239 + 240 + @media (max-width: 768px) { 241 + body { 242 + width: 90vw; 243 + } 244 + 245 + header { 246 + flex-direction: column; 247 + padding-bottom: 1rem; 248 + } 249 + 250 + #content { 251 + flex-direction: column; 252 + } 253 + 254 + #profile-view { 255 + flex-direction: column; 256 + align-items: center; 257 + gap: 0.1rem; 258 + } 259 + 260 + footer { 261 + flex-direction: column; 262 + text-align: center; 263 + } 264 + }
-184
frontend/src/styles/main.css
··· 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 - body { 8 - margin: 2rem auto; 9 - font-family: Arial, sans-serif; 10 - background-color: #bbb; 11 - width: 63%; 12 - } 13 - 14 - @media (max-width: 768px) { 15 - body { 16 - margin: auto; 17 - width: 100%; 18 - } 19 - } 20 - 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; 29 - 30 - h1 { 31 - font-size: 1rem; 32 - } 33 - 34 - ul { 35 - list-style-type: none; 36 - margin: 0; 37 - display: flex; 38 - flex-direction: row; 39 - gap: 1.5rem; 40 - } 41 - } 42 - 43 - a { 44 - text-decoration: none; 45 - color: white; 46 - } 47 - 48 - a:hover { 49 - font-style: italic; 50 - } 51 - 52 - main { 53 - background-color: white; 54 - background-clip: border-box; 55 - padding: 1rem 0.5rem; 56 - 57 - display: grid; 58 - grid-template-columns: 70% 30%; 59 - } 60 - 61 - #clip-list { 62 - margin: 0 0.5rem; 63 - 64 - .clip:first-of-type { 65 - margin: 0; 66 - } 67 - 68 - .clip { 69 - margin: 1.5rem 0; 70 - } 71 - } 72 - 73 - .clip { 74 - display: grid; 75 - grid-template-columns: auto; 76 - grid-template-rows: auto; 77 - grid-gap: 0.5rem; 78 - 79 - a { 80 - color: revert; 81 - } 82 - 83 - .clip-head { 84 - display: flex; 85 - flex-direction: row; 86 - align-items: center; 87 - gap: 1rem; 88 - 89 - h2 { 90 - margin: 0; 91 - } 92 - 93 - grid-column: 1; 94 - grid-row: 1; 95 - } 96 - 97 - .clip-link { 98 - grid-column: 1; 99 - grid-row: 2; 100 - } 101 - 102 - .clip-description { 103 - grid-column: 1; 104 - grid-row: 3; 105 - 106 - font-size: 0.8rem; 107 - margin: 0.25rem 0; 108 - } 109 - 110 - .clip-tags { 111 - margin: 0; 112 - } 113 - 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 - } 121 - 122 - .clip-actions { 123 - display: flex; 124 - flex-direction: row; 125 - gap: 0.5rem; 126 - font-size: 0.8rem; 127 - 128 - grid-column: 1; 129 - grid-row: 4; 130 - } 131 - 132 - .original-clipper { 133 - color: #777 !important; 134 - } 135 - } 136 - 137 - #sidebar { 138 - margin: 0 1rem; 139 - } 140 - 141 - .sidebar-content { 142 - background-color: #bbbbbb; 143 - display: flex; 144 - flex-direction: column; 145 - align-items: center; 146 - justify-content: center; 147 - 148 - h3, p { 149 - margin: 0.5rem; 150 - } 151 - 152 - .item-counter { 153 - font-size: 2rem; 154 - } 155 - } 156 - 157 - .sidebar-item { 158 - padding: 0.5rem 0; 159 - 160 - h2 { 161 - margin: 0.5rem 0; 162 - } 163 - 164 - a { 165 - align-self: start; 166 - color: revert; 167 - padding: 0.5rem 0.5rem; 168 - } 169 - 170 - a:hover { 171 - font-style: revert; 172 - text-decoration: underline; 173 - } 174 - } 175 - 176 - .sidebar-item:first-of-type { 177 - padding-top: 0; 178 - 179 - h2 { 180 - margin-top: 0; 181 - } 182 - } 183 - 184 -
+19
frontend/src/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 + export type ErrorResponse = { 8 + error: string; 9 + message: string; 10 + }; 11 + 12 + export type ProfileViewQuery = Object & { 13 + did: string; 14 + handle: string; 15 + displayName: string; 16 + avatar: string; 17 + description: string; 18 + createdAt: string; 19 + }
+83
frontend/src/utils/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 { ErrorResponse, ProfileViewQuery } from "../types.ts"; 8 + import { 9 + CompositeDidDocumentResolver, 10 + DocumentNotFoundError, 11 + FailedDocumentResolutionError, 12 + HandleResolutionError, 13 + ImproperDidError, 14 + PlcDidDocumentResolver, 15 + UnsupportedDidMethodError, 16 + WebDidDocumentResolver, 17 + } from "@atcute/identity-resolver"; 18 + 19 + export const fetchProfile = async (actor: any): Promise<ProfileViewQuery> => { 20 + const response: Response = await fetch( 21 + `${import.meta.env.VITE_CLIPPR_APPVIEW}/xrpc/social.clippr.actor.getProfile?actor=${actor}`, 22 + ); 23 + 24 + if (response.status !== 200) { 25 + if (response.status === 400) { 26 + const json: ErrorResponse = await response.json(); 27 + console.log(json); 28 + throw new Error(json.message); 29 + } else { 30 + throw new Error(response.statusText); 31 + } 32 + } 33 + 34 + return response.json(); 35 + }; 36 + 37 + export const convertDidToHandle = async (did: string): Promise<string> => { 38 + let convertedDid; 39 + if (did.startsWith("did:plc:")) { 40 + convertedDid = did as `did:plc:${string}`; 41 + } else convertedDid = did as `did:web:${string}`; 42 + const docResolver = new CompositeDidDocumentResolver({ 43 + methods: { 44 + plc: new PlcDidDocumentResolver(), 45 + web: new WebDidDocumentResolver(), 46 + }, 47 + }); 48 + 49 + let doc; 50 + 51 + try { 52 + doc = await docResolver.resolve(convertedDid); 53 + } catch (err) { 54 + if (err instanceof DocumentNotFoundError) { 55 + throw new Error("Document not found"); 56 + } 57 + if (err instanceof UnsupportedDidMethodError) { 58 + throw new Error("Unsupported did method"); 59 + } 60 + if (err instanceof ImproperDidError) { 61 + throw new Error("Improper did"); 62 + } 63 + if (err instanceof FailedDocumentResolutionError) { 64 + throw new Error("Failed document resolution"); 65 + } 66 + if (err instanceof HandleResolutionError) { 67 + throw new Error("Generic handle resolution error"); 68 + } 69 + } 70 + 71 + if (doc === undefined) { 72 + throw new Error("Could not get DID document"); 73 + } 74 + 75 + if (doc.alsoKnownAs === undefined) { 76 + throw new Error("No handles found"); 77 + } 78 + if (doc.alsoKnownAs[0] === undefined) { 79 + throw new Error("No handles found"); 80 + } 81 + 82 + return doc.alsoKnownAs[0].substring(doc.alsoKnownAs[0].lastIndexOf("/") + 1); 83 + };
+28
frontend/src/views/home.tsx
··· 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 { loginState } from "../components/loginForm.tsx"; 8 + import { ProfileWidget } from "../components/profileWidget.tsx"; 9 + import { PageLocation } from "../components/pageLocation.tsx"; 10 + 11 + const Home = () => { 12 + if (!loginState()) { 13 + location.href = "/login"; 14 + } 15 + 16 + return ( 17 + <main> 18 + <PageLocation lastLocation={"home"} /> 19 + <div id="content"> 20 + <div id="main-content" class="centered"> 21 + <ProfileWidget /> 22 + </div> 23 + </div> 24 + </main> 25 + ); 26 + }; 27 + 28 + export { Home };
+86
frontend/src/views/landingPage.tsx
··· 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 { LoginForm } from "../components/loginForm.tsx"; 8 + 9 + const LandingPage = () => { 10 + return ( 11 + <> 12 + <main> 13 + <div id="main-headings"> 14 + <h1>clippr</h1> 15 + <h2>social bookmarking for the AT Protocol</h2> 16 + </div> 17 + 18 + <div id="content"> 19 + <div id="main-content"> 20 + <h3>what is clippr?</h3> 21 + <p> 22 + Clippr is an application based on the{" "} 23 + <a href="https://atproto.com">AT Protocol</a> that allows you to 24 + bookmark, organize and share links with your friends. 25 + </p> 26 + <h3>is this app ready yet?</h3> 27 + <p> 28 + While you can use it right now, the application is still in{" "} 29 + <i>heavy</i> development, and things will eventually break. We do 30 + not recommend using Clippr as your primary bookmarking tool until 31 + it is out of beta. 32 + </p> 33 + <h3>what is the AT Protocol?</h3> 34 + <p> 35 + The AT Protocol (or "ATproto" for short) is a decentralized social 36 + networking protocol designed to allow users to have a single, 37 + portable identity across multiple interoperable applications. It 38 + is used mainly by the microblogging app Bluesky, but anyone can 39 + build an application that uses the protocol, even if it isn't 40 + related to Bluesky. 41 + </p> 42 + <h3> 43 + what's different about clippr compared to [other social 44 + bookmarking app]? 45 + </h3> 46 + <p> 47 + The main difference between Clippr and other bookmarking 48 + application such as Pocket, Instapaper, Wallabag, Linkding or 49 + Pinboard is that your data isn't locked to a specific platform. 50 + Anyone can build an extension or application that is interoperable 51 + with Clippr's API and data structures (or any other application), 52 + and we encourage you to do so. 53 + <br /> 54 + <br /> 55 + All of our code is available as{" "} 56 + <a href="https://tangled.sh/@hexmani.ac/clippr">free software</a>, 57 + and we provide a{" "} 58 + <a href="https://www.npmjs.com/package/@clipprjs/lexicons"> 59 + NPM package 60 + </a>{" "} 61 + to make it easier to develop with Clippr. 62 + </p> 63 + </div> 64 + 65 + <div id="sidebar"> 66 + <div class="sidebar-item"> 67 + <h3>log in</h3> 68 + <LoginForm /> 69 + </div> 70 + <div class="sidebar-item"> 71 + <h3>stats</h3> 72 + <h4>clips</h4> 73 + <p class="stat-counter">0</p> 74 + <h4>tags</h4> 75 + <p class="stat-counter">0</p> 76 + <h4>users</h4> 77 + <p class="stat-counter">0</p> 78 + </div> 79 + </div> 80 + </div> 81 + </main> 82 + </> 83 + ); 84 + }; 85 + 86 + export { LandingPage };
+29
frontend/src/views/login.tsx
··· 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 { LoginForm, loginState } from "../components/loginForm.tsx"; 8 + 9 + const Login = () => { 10 + // TODO: Fix weird transition states 11 + if (loginState()) { 12 + location.href = "/home"; 13 + } 14 + 15 + return ( 16 + <> 17 + <main> 18 + <div id="content"> 19 + <div id="main-content" class="centered"> 20 + <h2>login</h2> 21 + <LoginForm /> 22 + </div> 23 + </div> 24 + </main> 25 + </> 26 + ); 27 + }; 28 + 29 + export { Login };
+27
frontend/src/views/notFound.tsx
··· 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 { loginState } from "../components/loginForm.tsx"; 8 + 9 + const NotFound = () => { 10 + return ( 11 + <> 12 + <main> 13 + <div id="content"> 14 + <div id="main-content" class="centered"> 15 + <h2>404 | page not found</h2> 16 + <p>the party seems to be over...</p> 17 + <a href={loginState() ? "/home" : "/"}>go home</a> 18 + <br /> 19 + <br /> 20 + </div> 21 + </div> 22 + </main> 23 + </> 24 + ); 25 + }; 26 + 27 + export { NotFound };
+47
frontend/src/views/profile.tsx
··· 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 { createAsync, useParams } from "@solidjs/router"; 8 + import { PageLocation } from "../components/pageLocation.tsx"; 9 + import { ProfileWidget } from "../components/profileWidget.tsx"; 10 + import { agent, loginState } from "../components/loginForm.tsx"; 11 + import { convertDidToHandle } from "../utils/profile.ts"; 12 + 13 + const Profile = () => { 14 + const params = useParams(); 15 + 16 + // Authentication check for profile route catch-all 17 + if (!loginState() && location.pathname === "/profile") { 18 + location.href = "/login"; 19 + } 20 + 21 + let handle; 22 + try { 23 + handle = createAsync(() => convertDidToHandle(params.id || agent.sub)); 24 + } catch (e) { 25 + console.error(e); 26 + handle = null; 27 + } 28 + 29 + return ( 30 + <main> 31 + <PageLocation 32 + path={[{ name: "home", link: `${loginState() ? "/home" : "/"}` }]} 33 + lastLocation={handle || params.id} 34 + /> 35 + <div id="main-headings"> 36 + <h1>profile</h1> 37 + </div> 38 + <div id="content"> 39 + <div id="main-content" class="centered"> 40 + <ProfileWidget actor={params.id} /> 41 + </div> 42 + </div> 43 + </main> 44 + ); 45 + }; 46 + 47 + export { Profile };
+31
frontend/src/views/settings.tsx
··· 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 { ProfileEditor } from "../components/profileEditor.tsx"; 8 + import { killSession, loginState } from "../components/loginForm.tsx"; 9 + import { PageLocation } from "../components/pageLocation.tsx"; 10 + 11 + const Settings = () => { 12 + if (!loginState()) { 13 + location.href = "/login"; 14 + } 15 + 16 + return ( 17 + <main> 18 + <PageLocation lastLocation={"settings"} /> 19 + <div id="content"> 20 + <div id="main-content" class="centered"> 21 + <h2>account settings</h2> 22 + <button onclick={killSession}>Log out</button> 23 + <h2>edit profile</h2> 24 + <ProfileEditor /> 25 + </div> 26 + </div> 27 + </main> 28 + ); 29 + }; 30 + 31 + export { Settings };
+24
frontend/src/vite-env.d.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 + interface ImportMetaEnv { 8 + readonly VITE_DEV_SERVER_PORT?: string; 9 + 10 + /// OAuth environment variables 11 + readonly VITE_CLIENT_URI: string; 12 + readonly VITE_OAUTH_CLIENT_ID: string; 13 + readonly VITE_OAUTH_REDIRECT_URI: string; 14 + readonly VITE_OAUTH_SCOPE: string; 15 + 16 + /// Clippr-related environment variables 17 + /// 18 + /// A URL for where the clippr appview is hosted 19 + readonly VITE_CLIPPR_APPVIEW: string; 20 + } 21 + 22 + interface ImportMeta { 23 + readonly env: ImportMetaEnv; 24 + }
+26
frontend/tsconfig.app.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ESNext", 4 + "useDefineForClassFields": true, 5 + "module": "ESNext", 6 + "lib": ["ESNext", "DOM", "DOM.Iterable"], 7 + "types": [], 8 + "skipLibCheck": true, 9 + 10 + /* Bundler mode */ 11 + "moduleResolution": "bundler", 12 + "allowImportingTsExtensions": true, 13 + "isolatedModules": true, 14 + "moduleDetection": "force", 15 + "noEmit": true, 16 + "jsx": "preserve", 17 + "jsxImportSource": "solid-js", 18 + 19 + /* Linting */ 20 + "strict": true, 21 + "noUnusedLocals": true, 22 + "noUnusedParameters": true, 23 + "noFallthroughCasesInSwitch": true 24 + }, 25 + "include": ["src"] 26 + }
+5 -3
frontend/tsconfig.json
··· 1 1 { 2 - "extends": "astro/tsconfigs/strictest", 3 - "include": [".astro/types.d.ts", "**/*"], 4 - "exclude": ["dist"] 2 + "files": [], 3 + "references": [ 4 + { "path": "./tsconfig.app.json" }, 5 + { "path": "./tsconfig.node.json" }, 6 + ], 5 7 }
+23
frontend/tsconfig.node.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ESNext", 4 + "lib": ["ESNext"], 5 + "types": ["node"], 6 + "module": "ESNext", 7 + "skipLibCheck": true, 8 + 9 + /* Bundler mode */ 10 + "moduleResolution": "bundler", 11 + "allowImportingTsExtensions": true, 12 + "isolatedModules": true, 13 + "moduleDetection": "force", 14 + "noEmit": true, 15 + 16 + /* Linting */ 17 + "strict": true, 18 + "noUnusedLocals": true, 19 + "noUnusedParameters": true, 20 + "noFallthroughCasesInSwitch": true 21 + }, 22 + "include": ["vite.config.ts"] 23 + }
+58
frontend/vite.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 + import { defineConfig } from "vite"; 8 + import solidPlugin from "vite-plugin-solid"; 9 + import metadata from "./public/oauth/client-metadata.json"; 10 + import { devtoolsPlugin } from "solid-devtools/vite"; 11 + 12 + const SERVER_HOST = "127.0.0.1"; 13 + const SERVER_PORT = 3000; 14 + 15 + export default defineConfig({ 16 + plugins: [ 17 + devtoolsPlugin({ 18 + autoname: true, 19 + }), 20 + solidPlugin(), 21 + { 22 + // Shamelessly stolen from PDSls: https://github.com/notjuliet/pdsls/blob/main/vite.config.ts 23 + name: "oauth", 24 + config(_conf, { command }) { 25 + if (command === "build") { 26 + process.env.VITE_OAUTH_CLIENT_ID = metadata.client_id; 27 + process.env.VITE_OAUTH_REDIRECT_URI = metadata.redirect_uris[0]; 28 + process.env.VITE_CLIPPR_APPVIEW = "https://api.clippr.social"; 29 + } else { 30 + const redirectUri = ((): string => { 31 + const url = new URL(metadata.redirect_uris[0]); 32 + return `http://${SERVER_HOST}:${SERVER_PORT}${url.pathname}`; 33 + })(); 34 + 35 + const clientId = 36 + `http://localhost` + 37 + `?redirect_uri=${encodeURIComponent(redirectUri)}` + 38 + `&scope=${encodeURIComponent(metadata.scope)}`; 39 + 40 + process.env.VITE_DEV_SERVER_PORT = "" + SERVER_PORT; 41 + process.env.VITE_OAUTH_CLIENT_ID = clientId; 42 + process.env.VITE_OAUTH_REDIRECT_URI = redirectUri; 43 + process.env.VITE_CLIPPR_APPVIEW = `http://localhost:9090`; 44 + } 45 + 46 + process.env.VITE_CLIENT_URI = metadata.client_uri; 47 + process.env.VITE_OAUTH_SCOPE = metadata.scope; 48 + }, 49 + }, 50 + ], 51 + server: { 52 + host: SERVER_HOST, 53 + port: SERVER_PORT, 54 + }, 55 + build: { 56 + target: "esnext", 57 + }, 58 + });
+4 -3
lexdocs/social/clippr/actor/defs.json
··· 7 7 "description": "A view of an actor's profile.", 8 8 "required": [ 9 9 "did", 10 - "handle" 10 + "handle", 11 + "displayName" 11 12 ], 12 13 "properties": { 13 14 "did": { ··· 46 47 }, 47 48 "preferences": { 48 49 "type": "array", 49 - "description": "An array of refs to various preferences", 50 + "description": "An array of refs to various preferences.", 50 51 "items": { 51 52 "type": "union", 52 53 "refs": [ ··· 56 57 }, 57 58 "publishingScopesPref": { 58 59 "type": "object", 59 - "description": "Preferences for an user's publishing scopes", 60 + "description": "Preferences for an user's publishing scopes.", 60 61 "required": [ 61 62 "defaultScope" 62 63 ],
+2 -2
lexdocs/social/clippr/feed/defs.json
··· 35 35 "indexedAt": { 36 36 "type": "string", 37 37 "format": "datetime", 38 - "description": "The time in which the clip's record was indexed by the AppView" 38 + "description": "When the tag was first indexed by the AppView" 39 39 } 40 40 } 41 41 }, ··· 72 72 "indexedAt": { 73 73 "type": "string", 74 74 "format": "datetime", 75 - "description": "The time in which the tag's recoord was indexed by the AppView" 75 + "description": "When the tag was first indexed by the AppView" 76 76 } 77 77 } 78 78 }
+1 -1
lexdocs/social/clippr/feed/getClips.json
··· 13 13 "properties": { 14 14 "uris": { 15 15 "type": "array", 16 - "description": "List of clip AT-URIs to return hydrated views for.", 16 + "description": "List of clip AT-URIs to return hydrated views for", 17 17 "items": { 18 18 "type": "string", 19 19 "format": "at-uri"
+1 -1
lexdocs/social/clippr/feed/getTags.json
··· 1 1 { 2 2 "lexicon": 1, 3 - "id": "social.clippr.feed.getClips", 3 + "id": "social.clippr.feed.getTags", 4 4 "defs": { 5 5 "main": { 6 6 "type": "query",
+4
lexicons/CHANGELOG.md
··· 1 1 # changelog for @clipprjs/lexicons 2 2 3 + ## v1.0.2 4 + * fix some description typos 5 + * fix `social.clippr.feed.getTags` not existing due to an ID collision 6 + 3 7 ## v1.0.1 4 8 5 9 * remove minimum character prompts due to schema validation errors that broke otherwise valid records
+1
lexicons/lib/lexicons/index.ts
··· 18 18 export * as SocialClipprFeedGetProfileClips from "./types/social/clippr/feed/getProfileClips.js"; 19 19 export * as SocialClipprFeedGetProfileTags from "./types/social/clippr/feed/getProfileTags.js"; 20 20 export * as SocialClipprFeedGetTagList from "./types/social/clippr/feed/getTagList.js"; 21 + export * as SocialClipprFeedGetTags from "./types/social/clippr/feed/getTags.js"; 21 22 export * as SocialClipprFeedTag from "./types/social/clippr/feed/tag.js";
+4 -6
lexicons/lib/lexicons/types/social/clippr/actor/defs.ts
··· 23 23 ]), 24 24 ), 25 25 did: /*#__PURE__*/ v.didString(), 26 - displayName: /*#__PURE__*/ v.optional( 27 - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 28 - /*#__PURE__*/ v.stringLength(0, 640), 29 - /*#__PURE__*/ v.stringGraphemes(0, 64), 30 - ]), 31 - ), 26 + displayName: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 27 + /*#__PURE__*/ v.stringLength(0, 640), 28 + /*#__PURE__*/ v.stringGraphemes(0, 64), 29 + ]), 32 30 handle: /*#__PURE__*/ v.handleString(), 33 31 }); 34 32 const _publishingScopesPrefSchema = /*#__PURE__*/ v.object({
+2 -2
lexicons/lib/lexicons/types/social/clippr/feed/getClips.ts
··· 19 19 output: { 20 20 type: "lex", 21 21 schema: /*#__PURE__*/ v.object({ 22 - get tags() { 23 - return /*#__PURE__*/ v.array(SocialClipprFeedDefs.tagViewSchema); 22 + get clips() { 23 + return /*#__PURE__*/ v.array(SocialClipprFeedDefs.clipViewSchema); 24 24 }, 25 25 }), 26 26 },
+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 + }
+1 -1
lexicons/package.json
··· 1 1 { 2 2 "type": "module", 3 3 "name": "@clipprjs/lexicons", 4 - "version": "1.0.1", 4 + "version": "1.0.2", 5 5 "description": "Clippr schema definitions", 6 6 "license": "AGPL-3.0-only", 7 7 "private": false,