The Cloudflare Worker code behind favicon.blueat.net favicon.blueat.net
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

added readme.md

+1584
+5
.gitignore
··· 1 + node_modules/ 2 + .wrangler/ 3 + .dev.vars 4 + *.log 5 + .DS_Store
+56
README.md
··· 1 + # favicon.blueat.net 2 + 3 + A small [Cloudflare Worker](https://developers.cloudflare.com/workers/) that fetches a website’s favicon by domain, caches responses at the edge, and returns the image (or a redirect fallback). 4 + 5 + ## Quick start 6 + 7 + ```bash 8 + npm install 9 + npm run dev 10 + ``` 11 + 12 + Open `http://localhost:8787/example.com` while `dev` is running. 13 + 14 + Deploy: 15 + 16 + ```bash 17 + npx wrangler login # once per machine 18 + npm run deploy 19 + ``` 20 + 21 + Edit `wrangler.toml` and set `name` to the Worker name you want in Cloudflare. 22 + 23 + ## Usage 24 + 25 + Request path is the domain (no protocol): 26 + 27 + | URL | Meaning | 28 + |-----|--------| 29 + | `/{domain}` | Resolve favicon for `domain` | 30 + 31 + **Query parameters** 32 + 33 + | Param | Effect | 34 + |--------|--------| 35 + | `larger=true` | Prefer larger icons (e.g. Google s2 at 128px, SVG, or big apple-touch sizes from HTML) | 36 + | `default-avatar=<url>` | If no favicon is found, `302` redirect to this URL | 37 + | `throw-error-on-404=true` | If no favicon is found, return `404` instead of redirecting | 38 + 39 + Successful responses include `Cache-Control`, `Access-Control-Allow-Origin: *`, and `X-Favicon-Source` describing where the icon came from. 40 + 41 + ## How it works 42 + 43 + 1. Check the Workers cache for this domain (and `larger` flag). 44 + 2. If `larger`, try Google’s favicon service at 128px. 45 + 3. Otherwise fetch the site HTML and parse `<link rel="icon">` / apple-touch-icon tags. 46 + 4. Fall back to `/favicon.ico`, then Google’s 32px favicon. 47 + 5. If nothing works, redirect to a default image or your `default-avatar`, or `404` when requested. 48 + 49 + ## Files 50 + 51 + - `worker.js` — Worker entrypoint 52 + - `wrangler.toml` — Wrangler project config 53 + 54 + ## License 55 + 56 + Use and modify as you like for your own deployment.
+1502
package-lock.json
··· 1 + { 2 + "name": "favicon-blueat", 3 + "lockfileVersion": 3, 4 + "requires": true, 5 + "packages": { 6 + "": { 7 + "name": "favicon-blueat", 8 + "devDependencies": { 9 + "wrangler": "^4.0.0" 10 + } 11 + }, 12 + "node_modules/@cloudflare/kv-asset-handler": { 13 + "version": "0.4.2", 14 + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", 15 + "integrity": "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==", 16 + "dev": true, 17 + "license": "MIT OR Apache-2.0", 18 + "engines": { 19 + "node": ">=18.0.0" 20 + } 21 + }, 22 + "node_modules/@cloudflare/unenv-preset": { 23 + "version": "2.16.0", 24 + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.0.tgz", 25 + "integrity": "sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==", 26 + "dev": true, 27 + "license": "MIT OR Apache-2.0", 28 + "peerDependencies": { 29 + "unenv": "2.0.0-rc.24", 30 + "workerd": "1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0" 31 + }, 32 + "peerDependenciesMeta": { 33 + "workerd": { 34 + "optional": true 35 + } 36 + } 37 + }, 38 + "node_modules/@cloudflare/workerd-darwin-64": { 39 + "version": "1.20260317.1", 40 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260317.1.tgz", 41 + "integrity": "sha512-8hjh3sPMwY8M/zedq3/sXoA2Q4BedlGufn3KOOleIG+5a4ReQKLlUah140D7J6zlKmYZAFMJ4tWC7hCuI/s79g==", 42 + "cpu": [ 43 + "x64" 44 + ], 45 + "dev": true, 46 + "license": "Apache-2.0", 47 + "optional": true, 48 + "os": [ 49 + "darwin" 50 + ], 51 + "engines": { 52 + "node": ">=16" 53 + } 54 + }, 55 + "node_modules/@cloudflare/workerd-darwin-arm64": { 56 + "version": "1.20260317.1", 57 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260317.1.tgz", 58 + "integrity": "sha512-M/MnNyvO5HMgoIdr3QHjdCj2T1ki9gt0vIUnxYxBu9ISXS/jgtMl6chUVPJ7zHYBn9MyYr8ByeN6frjYxj0MGg==", 59 + "cpu": [ 60 + "arm64" 61 + ], 62 + "dev": true, 63 + "license": "Apache-2.0", 64 + "optional": true, 65 + "os": [ 66 + "darwin" 67 + ], 68 + "engines": { 69 + "node": ">=16" 70 + } 71 + }, 72 + "node_modules/@cloudflare/workerd-linux-64": { 73 + "version": "1.20260317.1", 74 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260317.1.tgz", 75 + "integrity": "sha512-1ltuEjkRcS3fsVF7CxsKlWiRmzq2ZqMfqDN0qUOgbUwkpXsLVJsXmoblaLf5OP00ELlcgF0QsN0p2xPEua4Uug==", 76 + "cpu": [ 77 + "x64" 78 + ], 79 + "dev": true, 80 + "license": "Apache-2.0", 81 + "optional": true, 82 + "os": [ 83 + "linux" 84 + ], 85 + "engines": { 86 + "node": ">=16" 87 + } 88 + }, 89 + "node_modules/@cloudflare/workerd-linux-arm64": { 90 + "version": "1.20260317.1", 91 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260317.1.tgz", 92 + "integrity": "sha512-3QrNnPF1xlaNwkHpasvRvAMidOvQs2NhXQmALJrEfpIJ/IDL2la8g499yXp3eqhG3hVMCB07XVY149GTs42Xtw==", 93 + "cpu": [ 94 + "arm64" 95 + ], 96 + "dev": true, 97 + "license": "Apache-2.0", 98 + "optional": true, 99 + "os": [ 100 + "linux" 101 + ], 102 + "engines": { 103 + "node": ">=16" 104 + } 105 + }, 106 + "node_modules/@cloudflare/workerd-windows-64": { 107 + "version": "1.20260317.1", 108 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260317.1.tgz", 109 + "integrity": "sha512-MfZTz+7LfuIpMGTa3RLXHX8Z/pnycZLItn94WRdHr8LPVet+C5/1Nzei399w/jr3+kzT4pDKk26JF/tlI5elpQ==", 110 + "cpu": [ 111 + "x64" 112 + ], 113 + "dev": true, 114 + "license": "Apache-2.0", 115 + "optional": true, 116 + "os": [ 117 + "win32" 118 + ], 119 + "engines": { 120 + "node": ">=16" 121 + } 122 + }, 123 + "node_modules/@cspotcode/source-map-support": { 124 + "version": "0.8.1", 125 + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 126 + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 127 + "dev": true, 128 + "license": "MIT", 129 + "dependencies": { 130 + "@jridgewell/trace-mapping": "0.3.9" 131 + }, 132 + "engines": { 133 + "node": ">=12" 134 + } 135 + }, 136 + "node_modules/@emnapi/runtime": { 137 + "version": "1.9.1", 138 + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", 139 + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", 140 + "dev": true, 141 + "license": "MIT", 142 + "optional": true, 143 + "dependencies": { 144 + "tslib": "^2.4.0" 145 + } 146 + }, 147 + "node_modules/@esbuild/aix-ppc64": { 148 + "version": "0.27.3", 149 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", 150 + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", 151 + "cpu": [ 152 + "ppc64" 153 + ], 154 + "dev": true, 155 + "license": "MIT", 156 + "optional": true, 157 + "os": [ 158 + "aix" 159 + ], 160 + "engines": { 161 + "node": ">=18" 162 + } 163 + }, 164 + "node_modules/@esbuild/android-arm": { 165 + "version": "0.27.3", 166 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", 167 + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", 168 + "cpu": [ 169 + "arm" 170 + ], 171 + "dev": true, 172 + "license": "MIT", 173 + "optional": true, 174 + "os": [ 175 + "android" 176 + ], 177 + "engines": { 178 + "node": ">=18" 179 + } 180 + }, 181 + "node_modules/@esbuild/android-arm64": { 182 + "version": "0.27.3", 183 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", 184 + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", 185 + "cpu": [ 186 + "arm64" 187 + ], 188 + "dev": true, 189 + "license": "MIT", 190 + "optional": true, 191 + "os": [ 192 + "android" 193 + ], 194 + "engines": { 195 + "node": ">=18" 196 + } 197 + }, 198 + "node_modules/@esbuild/android-x64": { 199 + "version": "0.27.3", 200 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", 201 + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", 202 + "cpu": [ 203 + "x64" 204 + ], 205 + "dev": true, 206 + "license": "MIT", 207 + "optional": true, 208 + "os": [ 209 + "android" 210 + ], 211 + "engines": { 212 + "node": ">=18" 213 + } 214 + }, 215 + "node_modules/@esbuild/darwin-arm64": { 216 + "version": "0.27.3", 217 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", 218 + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", 219 + "cpu": [ 220 + "arm64" 221 + ], 222 + "dev": true, 223 + "license": "MIT", 224 + "optional": true, 225 + "os": [ 226 + "darwin" 227 + ], 228 + "engines": { 229 + "node": ">=18" 230 + } 231 + }, 232 + "node_modules/@esbuild/darwin-x64": { 233 + "version": "0.27.3", 234 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", 235 + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", 236 + "cpu": [ 237 + "x64" 238 + ], 239 + "dev": true, 240 + "license": "MIT", 241 + "optional": true, 242 + "os": [ 243 + "darwin" 244 + ], 245 + "engines": { 246 + "node": ">=18" 247 + } 248 + }, 249 + "node_modules/@esbuild/freebsd-arm64": { 250 + "version": "0.27.3", 251 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", 252 + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", 253 + "cpu": [ 254 + "arm64" 255 + ], 256 + "dev": true, 257 + "license": "MIT", 258 + "optional": true, 259 + "os": [ 260 + "freebsd" 261 + ], 262 + "engines": { 263 + "node": ">=18" 264 + } 265 + }, 266 + "node_modules/@esbuild/freebsd-x64": { 267 + "version": "0.27.3", 268 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", 269 + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", 270 + "cpu": [ 271 + "x64" 272 + ], 273 + "dev": true, 274 + "license": "MIT", 275 + "optional": true, 276 + "os": [ 277 + "freebsd" 278 + ], 279 + "engines": { 280 + "node": ">=18" 281 + } 282 + }, 283 + "node_modules/@esbuild/linux-arm": { 284 + "version": "0.27.3", 285 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", 286 + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", 287 + "cpu": [ 288 + "arm" 289 + ], 290 + "dev": true, 291 + "license": "MIT", 292 + "optional": true, 293 + "os": [ 294 + "linux" 295 + ], 296 + "engines": { 297 + "node": ">=18" 298 + } 299 + }, 300 + "node_modules/@esbuild/linux-arm64": { 301 + "version": "0.27.3", 302 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", 303 + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", 304 + "cpu": [ 305 + "arm64" 306 + ], 307 + "dev": true, 308 + "license": "MIT", 309 + "optional": true, 310 + "os": [ 311 + "linux" 312 + ], 313 + "engines": { 314 + "node": ">=18" 315 + } 316 + }, 317 + "node_modules/@esbuild/linux-ia32": { 318 + "version": "0.27.3", 319 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", 320 + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", 321 + "cpu": [ 322 + "ia32" 323 + ], 324 + "dev": true, 325 + "license": "MIT", 326 + "optional": true, 327 + "os": [ 328 + "linux" 329 + ], 330 + "engines": { 331 + "node": ">=18" 332 + } 333 + }, 334 + "node_modules/@esbuild/linux-loong64": { 335 + "version": "0.27.3", 336 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", 337 + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", 338 + "cpu": [ 339 + "loong64" 340 + ], 341 + "dev": true, 342 + "license": "MIT", 343 + "optional": true, 344 + "os": [ 345 + "linux" 346 + ], 347 + "engines": { 348 + "node": ">=18" 349 + } 350 + }, 351 + "node_modules/@esbuild/linux-mips64el": { 352 + "version": "0.27.3", 353 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", 354 + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", 355 + "cpu": [ 356 + "mips64el" 357 + ], 358 + "dev": true, 359 + "license": "MIT", 360 + "optional": true, 361 + "os": [ 362 + "linux" 363 + ], 364 + "engines": { 365 + "node": ">=18" 366 + } 367 + }, 368 + "node_modules/@esbuild/linux-ppc64": { 369 + "version": "0.27.3", 370 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", 371 + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", 372 + "cpu": [ 373 + "ppc64" 374 + ], 375 + "dev": true, 376 + "license": "MIT", 377 + "optional": true, 378 + "os": [ 379 + "linux" 380 + ], 381 + "engines": { 382 + "node": ">=18" 383 + } 384 + }, 385 + "node_modules/@esbuild/linux-riscv64": { 386 + "version": "0.27.3", 387 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", 388 + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", 389 + "cpu": [ 390 + "riscv64" 391 + ], 392 + "dev": true, 393 + "license": "MIT", 394 + "optional": true, 395 + "os": [ 396 + "linux" 397 + ], 398 + "engines": { 399 + "node": ">=18" 400 + } 401 + }, 402 + "node_modules/@esbuild/linux-s390x": { 403 + "version": "0.27.3", 404 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", 405 + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", 406 + "cpu": [ 407 + "s390x" 408 + ], 409 + "dev": true, 410 + "license": "MIT", 411 + "optional": true, 412 + "os": [ 413 + "linux" 414 + ], 415 + "engines": { 416 + "node": ">=18" 417 + } 418 + }, 419 + "node_modules/@esbuild/linux-x64": { 420 + "version": "0.27.3", 421 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", 422 + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", 423 + "cpu": [ 424 + "x64" 425 + ], 426 + "dev": true, 427 + "license": "MIT", 428 + "optional": true, 429 + "os": [ 430 + "linux" 431 + ], 432 + "engines": { 433 + "node": ">=18" 434 + } 435 + }, 436 + "node_modules/@esbuild/netbsd-arm64": { 437 + "version": "0.27.3", 438 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", 439 + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", 440 + "cpu": [ 441 + "arm64" 442 + ], 443 + "dev": true, 444 + "license": "MIT", 445 + "optional": true, 446 + "os": [ 447 + "netbsd" 448 + ], 449 + "engines": { 450 + "node": ">=18" 451 + } 452 + }, 453 + "node_modules/@esbuild/netbsd-x64": { 454 + "version": "0.27.3", 455 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", 456 + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", 457 + "cpu": [ 458 + "x64" 459 + ], 460 + "dev": true, 461 + "license": "MIT", 462 + "optional": true, 463 + "os": [ 464 + "netbsd" 465 + ], 466 + "engines": { 467 + "node": ">=18" 468 + } 469 + }, 470 + "node_modules/@esbuild/openbsd-arm64": { 471 + "version": "0.27.3", 472 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", 473 + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", 474 + "cpu": [ 475 + "arm64" 476 + ], 477 + "dev": true, 478 + "license": "MIT", 479 + "optional": true, 480 + "os": [ 481 + "openbsd" 482 + ], 483 + "engines": { 484 + "node": ">=18" 485 + } 486 + }, 487 + "node_modules/@esbuild/openbsd-x64": { 488 + "version": "0.27.3", 489 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", 490 + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", 491 + "cpu": [ 492 + "x64" 493 + ], 494 + "dev": true, 495 + "license": "MIT", 496 + "optional": true, 497 + "os": [ 498 + "openbsd" 499 + ], 500 + "engines": { 501 + "node": ">=18" 502 + } 503 + }, 504 + "node_modules/@esbuild/openharmony-arm64": { 505 + "version": "0.27.3", 506 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", 507 + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", 508 + "cpu": [ 509 + "arm64" 510 + ], 511 + "dev": true, 512 + "license": "MIT", 513 + "optional": true, 514 + "os": [ 515 + "openharmony" 516 + ], 517 + "engines": { 518 + "node": ">=18" 519 + } 520 + }, 521 + "node_modules/@esbuild/sunos-x64": { 522 + "version": "0.27.3", 523 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", 524 + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", 525 + "cpu": [ 526 + "x64" 527 + ], 528 + "dev": true, 529 + "license": "MIT", 530 + "optional": true, 531 + "os": [ 532 + "sunos" 533 + ], 534 + "engines": { 535 + "node": ">=18" 536 + } 537 + }, 538 + "node_modules/@esbuild/win32-arm64": { 539 + "version": "0.27.3", 540 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", 541 + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", 542 + "cpu": [ 543 + "arm64" 544 + ], 545 + "dev": true, 546 + "license": "MIT", 547 + "optional": true, 548 + "os": [ 549 + "win32" 550 + ], 551 + "engines": { 552 + "node": ">=18" 553 + } 554 + }, 555 + "node_modules/@esbuild/win32-ia32": { 556 + "version": "0.27.3", 557 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", 558 + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", 559 + "cpu": [ 560 + "ia32" 561 + ], 562 + "dev": true, 563 + "license": "MIT", 564 + "optional": true, 565 + "os": [ 566 + "win32" 567 + ], 568 + "engines": { 569 + "node": ">=18" 570 + } 571 + }, 572 + "node_modules/@esbuild/win32-x64": { 573 + "version": "0.27.3", 574 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", 575 + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", 576 + "cpu": [ 577 + "x64" 578 + ], 579 + "dev": true, 580 + "license": "MIT", 581 + "optional": true, 582 + "os": [ 583 + "win32" 584 + ], 585 + "engines": { 586 + "node": ">=18" 587 + } 588 + }, 589 + "node_modules/@img/colour": { 590 + "version": "1.1.0", 591 + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", 592 + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", 593 + "dev": true, 594 + "license": "MIT", 595 + "engines": { 596 + "node": ">=18" 597 + } 598 + }, 599 + "node_modules/@img/sharp-darwin-arm64": { 600 + "version": "0.34.5", 601 + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", 602 + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", 603 + "cpu": [ 604 + "arm64" 605 + ], 606 + "dev": true, 607 + "license": "Apache-2.0", 608 + "optional": true, 609 + "os": [ 610 + "darwin" 611 + ], 612 + "engines": { 613 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 614 + }, 615 + "funding": { 616 + "url": "https://opencollective.com/libvips" 617 + }, 618 + "optionalDependencies": { 619 + "@img/sharp-libvips-darwin-arm64": "1.2.4" 620 + } 621 + }, 622 + "node_modules/@img/sharp-darwin-x64": { 623 + "version": "0.34.5", 624 + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", 625 + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", 626 + "cpu": [ 627 + "x64" 628 + ], 629 + "dev": true, 630 + "license": "Apache-2.0", 631 + "optional": true, 632 + "os": [ 633 + "darwin" 634 + ], 635 + "engines": { 636 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 637 + }, 638 + "funding": { 639 + "url": "https://opencollective.com/libvips" 640 + }, 641 + "optionalDependencies": { 642 + "@img/sharp-libvips-darwin-x64": "1.2.4" 643 + } 644 + }, 645 + "node_modules/@img/sharp-libvips-darwin-arm64": { 646 + "version": "1.2.4", 647 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", 648 + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", 649 + "cpu": [ 650 + "arm64" 651 + ], 652 + "dev": true, 653 + "license": "LGPL-3.0-or-later", 654 + "optional": true, 655 + "os": [ 656 + "darwin" 657 + ], 658 + "funding": { 659 + "url": "https://opencollective.com/libvips" 660 + } 661 + }, 662 + "node_modules/@img/sharp-libvips-darwin-x64": { 663 + "version": "1.2.4", 664 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", 665 + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", 666 + "cpu": [ 667 + "x64" 668 + ], 669 + "dev": true, 670 + "license": "LGPL-3.0-or-later", 671 + "optional": true, 672 + "os": [ 673 + "darwin" 674 + ], 675 + "funding": { 676 + "url": "https://opencollective.com/libvips" 677 + } 678 + }, 679 + "node_modules/@img/sharp-libvips-linux-arm": { 680 + "version": "1.2.4", 681 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", 682 + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", 683 + "cpu": [ 684 + "arm" 685 + ], 686 + "dev": true, 687 + "license": "LGPL-3.0-or-later", 688 + "optional": true, 689 + "os": [ 690 + "linux" 691 + ], 692 + "funding": { 693 + "url": "https://opencollective.com/libvips" 694 + } 695 + }, 696 + "node_modules/@img/sharp-libvips-linux-arm64": { 697 + "version": "1.2.4", 698 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", 699 + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", 700 + "cpu": [ 701 + "arm64" 702 + ], 703 + "dev": true, 704 + "license": "LGPL-3.0-or-later", 705 + "optional": true, 706 + "os": [ 707 + "linux" 708 + ], 709 + "funding": { 710 + "url": "https://opencollective.com/libvips" 711 + } 712 + }, 713 + "node_modules/@img/sharp-libvips-linux-ppc64": { 714 + "version": "1.2.4", 715 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", 716 + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", 717 + "cpu": [ 718 + "ppc64" 719 + ], 720 + "dev": true, 721 + "license": "LGPL-3.0-or-later", 722 + "optional": true, 723 + "os": [ 724 + "linux" 725 + ], 726 + "funding": { 727 + "url": "https://opencollective.com/libvips" 728 + } 729 + }, 730 + "node_modules/@img/sharp-libvips-linux-riscv64": { 731 + "version": "1.2.4", 732 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", 733 + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", 734 + "cpu": [ 735 + "riscv64" 736 + ], 737 + "dev": true, 738 + "license": "LGPL-3.0-or-later", 739 + "optional": true, 740 + "os": [ 741 + "linux" 742 + ], 743 + "funding": { 744 + "url": "https://opencollective.com/libvips" 745 + } 746 + }, 747 + "node_modules/@img/sharp-libvips-linux-s390x": { 748 + "version": "1.2.4", 749 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", 750 + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", 751 + "cpu": [ 752 + "s390x" 753 + ], 754 + "dev": true, 755 + "license": "LGPL-3.0-or-later", 756 + "optional": true, 757 + "os": [ 758 + "linux" 759 + ], 760 + "funding": { 761 + "url": "https://opencollective.com/libvips" 762 + } 763 + }, 764 + "node_modules/@img/sharp-libvips-linux-x64": { 765 + "version": "1.2.4", 766 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", 767 + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", 768 + "cpu": [ 769 + "x64" 770 + ], 771 + "dev": true, 772 + "license": "LGPL-3.0-or-later", 773 + "optional": true, 774 + "os": [ 775 + "linux" 776 + ], 777 + "funding": { 778 + "url": "https://opencollective.com/libvips" 779 + } 780 + }, 781 + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { 782 + "version": "1.2.4", 783 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", 784 + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", 785 + "cpu": [ 786 + "arm64" 787 + ], 788 + "dev": true, 789 + "license": "LGPL-3.0-or-later", 790 + "optional": true, 791 + "os": [ 792 + "linux" 793 + ], 794 + "funding": { 795 + "url": "https://opencollective.com/libvips" 796 + } 797 + }, 798 + "node_modules/@img/sharp-libvips-linuxmusl-x64": { 799 + "version": "1.2.4", 800 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", 801 + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", 802 + "cpu": [ 803 + "x64" 804 + ], 805 + "dev": true, 806 + "license": "LGPL-3.0-or-later", 807 + "optional": true, 808 + "os": [ 809 + "linux" 810 + ], 811 + "funding": { 812 + "url": "https://opencollective.com/libvips" 813 + } 814 + }, 815 + "node_modules/@img/sharp-linux-arm": { 816 + "version": "0.34.5", 817 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", 818 + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", 819 + "cpu": [ 820 + "arm" 821 + ], 822 + "dev": true, 823 + "license": "Apache-2.0", 824 + "optional": true, 825 + "os": [ 826 + "linux" 827 + ], 828 + "engines": { 829 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 830 + }, 831 + "funding": { 832 + "url": "https://opencollective.com/libvips" 833 + }, 834 + "optionalDependencies": { 835 + "@img/sharp-libvips-linux-arm": "1.2.4" 836 + } 837 + }, 838 + "node_modules/@img/sharp-linux-arm64": { 839 + "version": "0.34.5", 840 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", 841 + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", 842 + "cpu": [ 843 + "arm64" 844 + ], 845 + "dev": true, 846 + "license": "Apache-2.0", 847 + "optional": true, 848 + "os": [ 849 + "linux" 850 + ], 851 + "engines": { 852 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 853 + }, 854 + "funding": { 855 + "url": "https://opencollective.com/libvips" 856 + }, 857 + "optionalDependencies": { 858 + "@img/sharp-libvips-linux-arm64": "1.2.4" 859 + } 860 + }, 861 + "node_modules/@img/sharp-linux-ppc64": { 862 + "version": "0.34.5", 863 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", 864 + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", 865 + "cpu": [ 866 + "ppc64" 867 + ], 868 + "dev": true, 869 + "license": "Apache-2.0", 870 + "optional": true, 871 + "os": [ 872 + "linux" 873 + ], 874 + "engines": { 875 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 876 + }, 877 + "funding": { 878 + "url": "https://opencollective.com/libvips" 879 + }, 880 + "optionalDependencies": { 881 + "@img/sharp-libvips-linux-ppc64": "1.2.4" 882 + } 883 + }, 884 + "node_modules/@img/sharp-linux-riscv64": { 885 + "version": "0.34.5", 886 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", 887 + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", 888 + "cpu": [ 889 + "riscv64" 890 + ], 891 + "dev": true, 892 + "license": "Apache-2.0", 893 + "optional": true, 894 + "os": [ 895 + "linux" 896 + ], 897 + "engines": { 898 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 899 + }, 900 + "funding": { 901 + "url": "https://opencollective.com/libvips" 902 + }, 903 + "optionalDependencies": { 904 + "@img/sharp-libvips-linux-riscv64": "1.2.4" 905 + } 906 + }, 907 + "node_modules/@img/sharp-linux-s390x": { 908 + "version": "0.34.5", 909 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", 910 + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", 911 + "cpu": [ 912 + "s390x" 913 + ], 914 + "dev": true, 915 + "license": "Apache-2.0", 916 + "optional": true, 917 + "os": [ 918 + "linux" 919 + ], 920 + "engines": { 921 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 922 + }, 923 + "funding": { 924 + "url": "https://opencollective.com/libvips" 925 + }, 926 + "optionalDependencies": { 927 + "@img/sharp-libvips-linux-s390x": "1.2.4" 928 + } 929 + }, 930 + "node_modules/@img/sharp-linux-x64": { 931 + "version": "0.34.5", 932 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", 933 + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", 934 + "cpu": [ 935 + "x64" 936 + ], 937 + "dev": true, 938 + "license": "Apache-2.0", 939 + "optional": true, 940 + "os": [ 941 + "linux" 942 + ], 943 + "engines": { 944 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 945 + }, 946 + "funding": { 947 + "url": "https://opencollective.com/libvips" 948 + }, 949 + "optionalDependencies": { 950 + "@img/sharp-libvips-linux-x64": "1.2.4" 951 + } 952 + }, 953 + "node_modules/@img/sharp-linuxmusl-arm64": { 954 + "version": "0.34.5", 955 + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", 956 + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", 957 + "cpu": [ 958 + "arm64" 959 + ], 960 + "dev": true, 961 + "license": "Apache-2.0", 962 + "optional": true, 963 + "os": [ 964 + "linux" 965 + ], 966 + "engines": { 967 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 968 + }, 969 + "funding": { 970 + "url": "https://opencollective.com/libvips" 971 + }, 972 + "optionalDependencies": { 973 + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" 974 + } 975 + }, 976 + "node_modules/@img/sharp-linuxmusl-x64": { 977 + "version": "0.34.5", 978 + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", 979 + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", 980 + "cpu": [ 981 + "x64" 982 + ], 983 + "dev": true, 984 + "license": "Apache-2.0", 985 + "optional": true, 986 + "os": [ 987 + "linux" 988 + ], 989 + "engines": { 990 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 991 + }, 992 + "funding": { 993 + "url": "https://opencollective.com/libvips" 994 + }, 995 + "optionalDependencies": { 996 + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" 997 + } 998 + }, 999 + "node_modules/@img/sharp-wasm32": { 1000 + "version": "0.34.5", 1001 + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", 1002 + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", 1003 + "cpu": [ 1004 + "wasm32" 1005 + ], 1006 + "dev": true, 1007 + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", 1008 + "optional": true, 1009 + "dependencies": { 1010 + "@emnapi/runtime": "^1.7.0" 1011 + }, 1012 + "engines": { 1013 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 1014 + }, 1015 + "funding": { 1016 + "url": "https://opencollective.com/libvips" 1017 + } 1018 + }, 1019 + "node_modules/@img/sharp-win32-arm64": { 1020 + "version": "0.34.5", 1021 + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", 1022 + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", 1023 + "cpu": [ 1024 + "arm64" 1025 + ], 1026 + "dev": true, 1027 + "license": "Apache-2.0 AND LGPL-3.0-or-later", 1028 + "optional": true, 1029 + "os": [ 1030 + "win32" 1031 + ], 1032 + "engines": { 1033 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 1034 + }, 1035 + "funding": { 1036 + "url": "https://opencollective.com/libvips" 1037 + } 1038 + }, 1039 + "node_modules/@img/sharp-win32-ia32": { 1040 + "version": "0.34.5", 1041 + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", 1042 + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", 1043 + "cpu": [ 1044 + "ia32" 1045 + ], 1046 + "dev": true, 1047 + "license": "Apache-2.0 AND LGPL-3.0-or-later", 1048 + "optional": true, 1049 + "os": [ 1050 + "win32" 1051 + ], 1052 + "engines": { 1053 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 1054 + }, 1055 + "funding": { 1056 + "url": "https://opencollective.com/libvips" 1057 + } 1058 + }, 1059 + "node_modules/@img/sharp-win32-x64": { 1060 + "version": "0.34.5", 1061 + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", 1062 + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", 1063 + "cpu": [ 1064 + "x64" 1065 + ], 1066 + "dev": true, 1067 + "license": "Apache-2.0 AND LGPL-3.0-or-later", 1068 + "optional": true, 1069 + "os": [ 1070 + "win32" 1071 + ], 1072 + "engines": { 1073 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 1074 + }, 1075 + "funding": { 1076 + "url": "https://opencollective.com/libvips" 1077 + } 1078 + }, 1079 + "node_modules/@jridgewell/resolve-uri": { 1080 + "version": "3.1.2", 1081 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 1082 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 1083 + "dev": true, 1084 + "license": "MIT", 1085 + "engines": { 1086 + "node": ">=6.0.0" 1087 + } 1088 + }, 1089 + "node_modules/@jridgewell/sourcemap-codec": { 1090 + "version": "1.5.5", 1091 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 1092 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 1093 + "dev": true, 1094 + "license": "MIT" 1095 + }, 1096 + "node_modules/@jridgewell/trace-mapping": { 1097 + "version": "0.3.9", 1098 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 1099 + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 1100 + "dev": true, 1101 + "license": "MIT", 1102 + "dependencies": { 1103 + "@jridgewell/resolve-uri": "^3.0.3", 1104 + "@jridgewell/sourcemap-codec": "^1.4.10" 1105 + } 1106 + }, 1107 + "node_modules/@poppinss/colors": { 1108 + "version": "4.1.6", 1109 + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", 1110 + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", 1111 + "dev": true, 1112 + "license": "MIT", 1113 + "dependencies": { 1114 + "kleur": "^4.1.5" 1115 + } 1116 + }, 1117 + "node_modules/@poppinss/dumper": { 1118 + "version": "0.6.5", 1119 + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", 1120 + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", 1121 + "dev": true, 1122 + "license": "MIT", 1123 + "dependencies": { 1124 + "@poppinss/colors": "^4.1.5", 1125 + "@sindresorhus/is": "^7.0.2", 1126 + "supports-color": "^10.0.0" 1127 + } 1128 + }, 1129 + "node_modules/@poppinss/exception": { 1130 + "version": "1.2.3", 1131 + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", 1132 + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", 1133 + "dev": true, 1134 + "license": "MIT" 1135 + }, 1136 + "node_modules/@sindresorhus/is": { 1137 + "version": "7.2.0", 1138 + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", 1139 + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", 1140 + "dev": true, 1141 + "license": "MIT", 1142 + "engines": { 1143 + "node": ">=18" 1144 + }, 1145 + "funding": { 1146 + "url": "https://github.com/sindresorhus/is?sponsor=1" 1147 + } 1148 + }, 1149 + "node_modules/@speed-highlight/core": { 1150 + "version": "1.2.15", 1151 + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.15.tgz", 1152 + "integrity": "sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==", 1153 + "dev": true, 1154 + "license": "CC0-1.0" 1155 + }, 1156 + "node_modules/blake3-wasm": { 1157 + "version": "2.1.5", 1158 + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", 1159 + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", 1160 + "dev": true, 1161 + "license": "MIT" 1162 + }, 1163 + "node_modules/cookie": { 1164 + "version": "1.1.1", 1165 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", 1166 + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", 1167 + "dev": true, 1168 + "license": "MIT", 1169 + "engines": { 1170 + "node": ">=18" 1171 + }, 1172 + "funding": { 1173 + "type": "opencollective", 1174 + "url": "https://opencollective.com/express" 1175 + } 1176 + }, 1177 + "node_modules/detect-libc": { 1178 + "version": "2.1.2", 1179 + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 1180 + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 1181 + "dev": true, 1182 + "license": "Apache-2.0", 1183 + "engines": { 1184 + "node": ">=8" 1185 + } 1186 + }, 1187 + "node_modules/error-stack-parser-es": { 1188 + "version": "1.0.5", 1189 + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", 1190 + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", 1191 + "dev": true, 1192 + "license": "MIT", 1193 + "funding": { 1194 + "url": "https://github.com/sponsors/antfu" 1195 + } 1196 + }, 1197 + "node_modules/esbuild": { 1198 + "version": "0.27.3", 1199 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 1200 + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 1201 + "dev": true, 1202 + "hasInstallScript": true, 1203 + "license": "MIT", 1204 + "bin": { 1205 + "esbuild": "bin/esbuild" 1206 + }, 1207 + "engines": { 1208 + "node": ">=18" 1209 + }, 1210 + "optionalDependencies": { 1211 + "@esbuild/aix-ppc64": "0.27.3", 1212 + "@esbuild/android-arm": "0.27.3", 1213 + "@esbuild/android-arm64": "0.27.3", 1214 + "@esbuild/android-x64": "0.27.3", 1215 + "@esbuild/darwin-arm64": "0.27.3", 1216 + "@esbuild/darwin-x64": "0.27.3", 1217 + "@esbuild/freebsd-arm64": "0.27.3", 1218 + "@esbuild/freebsd-x64": "0.27.3", 1219 + "@esbuild/linux-arm": "0.27.3", 1220 + "@esbuild/linux-arm64": "0.27.3", 1221 + "@esbuild/linux-ia32": "0.27.3", 1222 + "@esbuild/linux-loong64": "0.27.3", 1223 + "@esbuild/linux-mips64el": "0.27.3", 1224 + "@esbuild/linux-ppc64": "0.27.3", 1225 + "@esbuild/linux-riscv64": "0.27.3", 1226 + "@esbuild/linux-s390x": "0.27.3", 1227 + "@esbuild/linux-x64": "0.27.3", 1228 + "@esbuild/netbsd-arm64": "0.27.3", 1229 + "@esbuild/netbsd-x64": "0.27.3", 1230 + "@esbuild/openbsd-arm64": "0.27.3", 1231 + "@esbuild/openbsd-x64": "0.27.3", 1232 + "@esbuild/openharmony-arm64": "0.27.3", 1233 + "@esbuild/sunos-x64": "0.27.3", 1234 + "@esbuild/win32-arm64": "0.27.3", 1235 + "@esbuild/win32-ia32": "0.27.3", 1236 + "@esbuild/win32-x64": "0.27.3" 1237 + } 1238 + }, 1239 + "node_modules/fsevents": { 1240 + "version": "2.3.3", 1241 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1242 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1243 + "dev": true, 1244 + "hasInstallScript": true, 1245 + "license": "MIT", 1246 + "optional": true, 1247 + "os": [ 1248 + "darwin" 1249 + ], 1250 + "engines": { 1251 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1252 + } 1253 + }, 1254 + "node_modules/kleur": { 1255 + "version": "4.1.5", 1256 + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1257 + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1258 + "dev": true, 1259 + "license": "MIT", 1260 + "engines": { 1261 + "node": ">=6" 1262 + } 1263 + }, 1264 + "node_modules/miniflare": { 1265 + "version": "4.20260317.1", 1266 + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260317.1.tgz", 1267 + "integrity": "sha512-A3csI1HXEIfqe3oscgpoRMHdYlkReQKPH/g5JE53vFSjoM6YIAOGAzyDNeYffwd9oQkPWDj9xER8+vpxei8klA==", 1268 + "dev": true, 1269 + "license": "MIT", 1270 + "dependencies": { 1271 + "@cspotcode/source-map-support": "0.8.1", 1272 + "sharp": "^0.34.5", 1273 + "undici": "7.24.4", 1274 + "workerd": "1.20260317.1", 1275 + "ws": "8.18.0", 1276 + "youch": "4.1.0-beta.10" 1277 + }, 1278 + "bin": { 1279 + "miniflare": "bootstrap.js" 1280 + }, 1281 + "engines": { 1282 + "node": ">=18.0.0" 1283 + } 1284 + }, 1285 + "node_modules/path-to-regexp": { 1286 + "version": "6.3.0", 1287 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", 1288 + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", 1289 + "dev": true, 1290 + "license": "MIT" 1291 + }, 1292 + "node_modules/pathe": { 1293 + "version": "2.0.3", 1294 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 1295 + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 1296 + "dev": true, 1297 + "license": "MIT" 1298 + }, 1299 + "node_modules/semver": { 1300 + "version": "7.7.4", 1301 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", 1302 + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", 1303 + "dev": true, 1304 + "license": "ISC", 1305 + "bin": { 1306 + "semver": "bin/semver.js" 1307 + }, 1308 + "engines": { 1309 + "node": ">=10" 1310 + } 1311 + }, 1312 + "node_modules/sharp": { 1313 + "version": "0.34.5", 1314 + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", 1315 + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", 1316 + "dev": true, 1317 + "hasInstallScript": true, 1318 + "license": "Apache-2.0", 1319 + "dependencies": { 1320 + "@img/colour": "^1.0.0", 1321 + "detect-libc": "^2.1.2", 1322 + "semver": "^7.7.3" 1323 + }, 1324 + "engines": { 1325 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 1326 + }, 1327 + "funding": { 1328 + "url": "https://opencollective.com/libvips" 1329 + }, 1330 + "optionalDependencies": { 1331 + "@img/sharp-darwin-arm64": "0.34.5", 1332 + "@img/sharp-darwin-x64": "0.34.5", 1333 + "@img/sharp-libvips-darwin-arm64": "1.2.4", 1334 + "@img/sharp-libvips-darwin-x64": "1.2.4", 1335 + "@img/sharp-libvips-linux-arm": "1.2.4", 1336 + "@img/sharp-libvips-linux-arm64": "1.2.4", 1337 + "@img/sharp-libvips-linux-ppc64": "1.2.4", 1338 + "@img/sharp-libvips-linux-riscv64": "1.2.4", 1339 + "@img/sharp-libvips-linux-s390x": "1.2.4", 1340 + "@img/sharp-libvips-linux-x64": "1.2.4", 1341 + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", 1342 + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", 1343 + "@img/sharp-linux-arm": "0.34.5", 1344 + "@img/sharp-linux-arm64": "0.34.5", 1345 + "@img/sharp-linux-ppc64": "0.34.5", 1346 + "@img/sharp-linux-riscv64": "0.34.5", 1347 + "@img/sharp-linux-s390x": "0.34.5", 1348 + "@img/sharp-linux-x64": "0.34.5", 1349 + "@img/sharp-linuxmusl-arm64": "0.34.5", 1350 + "@img/sharp-linuxmusl-x64": "0.34.5", 1351 + "@img/sharp-wasm32": "0.34.5", 1352 + "@img/sharp-win32-arm64": "0.34.5", 1353 + "@img/sharp-win32-ia32": "0.34.5", 1354 + "@img/sharp-win32-x64": "0.34.5" 1355 + } 1356 + }, 1357 + "node_modules/supports-color": { 1358 + "version": "10.2.2", 1359 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", 1360 + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", 1361 + "dev": true, 1362 + "license": "MIT", 1363 + "engines": { 1364 + "node": ">=18" 1365 + }, 1366 + "funding": { 1367 + "url": "https://github.com/chalk/supports-color?sponsor=1" 1368 + } 1369 + }, 1370 + "node_modules/tslib": { 1371 + "version": "2.8.1", 1372 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 1373 + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 1374 + "dev": true, 1375 + "license": "0BSD", 1376 + "optional": true 1377 + }, 1378 + "node_modules/undici": { 1379 + "version": "7.24.4", 1380 + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.4.tgz", 1381 + "integrity": "sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==", 1382 + "dev": true, 1383 + "license": "MIT", 1384 + "engines": { 1385 + "node": ">=20.18.1" 1386 + } 1387 + }, 1388 + "node_modules/unenv": { 1389 + "version": "2.0.0-rc.24", 1390 + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", 1391 + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", 1392 + "dev": true, 1393 + "license": "MIT", 1394 + "dependencies": { 1395 + "pathe": "^2.0.3" 1396 + } 1397 + }, 1398 + "node_modules/workerd": { 1399 + "version": "1.20260317.1", 1400 + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260317.1.tgz", 1401 + "integrity": "sha512-ZuEq1OdrJBS+NV+L5HMYPCzVn49a2O60slQiiLpG44jqtlOo+S167fWC76kEXteXLLLydeuRrluRel7WdOUa4g==", 1402 + "dev": true, 1403 + "hasInstallScript": true, 1404 + "license": "Apache-2.0", 1405 + "bin": { 1406 + "workerd": "bin/workerd" 1407 + }, 1408 + "engines": { 1409 + "node": ">=16" 1410 + }, 1411 + "optionalDependencies": { 1412 + "@cloudflare/workerd-darwin-64": "1.20260317.1", 1413 + "@cloudflare/workerd-darwin-arm64": "1.20260317.1", 1414 + "@cloudflare/workerd-linux-64": "1.20260317.1", 1415 + "@cloudflare/workerd-linux-arm64": "1.20260317.1", 1416 + "@cloudflare/workerd-windows-64": "1.20260317.1" 1417 + } 1418 + }, 1419 + "node_modules/wrangler": { 1420 + "version": "4.76.0", 1421 + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.76.0.tgz", 1422 + "integrity": "sha512-Wan+CU5a0tu4HIxGOrzjNbkmxCT27HUmzrMj6kc7aoAnjSLv50Ggcn2Ant7wNQrD6xW3g31phKupZJgTZ8wZfQ==", 1423 + "dev": true, 1424 + "license": "MIT OR Apache-2.0", 1425 + "dependencies": { 1426 + "@cloudflare/kv-asset-handler": "0.4.2", 1427 + "@cloudflare/unenv-preset": "2.16.0", 1428 + "blake3-wasm": "2.1.5", 1429 + "esbuild": "0.27.3", 1430 + "miniflare": "4.20260317.1", 1431 + "path-to-regexp": "6.3.0", 1432 + "unenv": "2.0.0-rc.24", 1433 + "workerd": "1.20260317.1" 1434 + }, 1435 + "bin": { 1436 + "wrangler": "bin/wrangler.js", 1437 + "wrangler2": "bin/wrangler.js" 1438 + }, 1439 + "engines": { 1440 + "node": ">=20.0.0" 1441 + }, 1442 + "optionalDependencies": { 1443 + "fsevents": "~2.3.2" 1444 + }, 1445 + "peerDependencies": { 1446 + "@cloudflare/workers-types": "^4.20260317.1" 1447 + }, 1448 + "peerDependenciesMeta": { 1449 + "@cloudflare/workers-types": { 1450 + "optional": true 1451 + } 1452 + } 1453 + }, 1454 + "node_modules/ws": { 1455 + "version": "8.18.0", 1456 + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 1457 + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 1458 + "dev": true, 1459 + "license": "MIT", 1460 + "engines": { 1461 + "node": ">=10.0.0" 1462 + }, 1463 + "peerDependencies": { 1464 + "bufferutil": "^4.0.1", 1465 + "utf-8-validate": ">=5.0.2" 1466 + }, 1467 + "peerDependenciesMeta": { 1468 + "bufferutil": { 1469 + "optional": true 1470 + }, 1471 + "utf-8-validate": { 1472 + "optional": true 1473 + } 1474 + } 1475 + }, 1476 + "node_modules/youch": { 1477 + "version": "4.1.0-beta.10", 1478 + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", 1479 + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", 1480 + "dev": true, 1481 + "license": "MIT", 1482 + "dependencies": { 1483 + "@poppinss/colors": "^4.1.5", 1484 + "@poppinss/dumper": "^0.6.4", 1485 + "@speed-highlight/core": "^1.2.7", 1486 + "cookie": "^1.0.2", 1487 + "youch-core": "^0.3.3" 1488 + } 1489 + }, 1490 + "node_modules/youch-core": { 1491 + "version": "0.3.3", 1492 + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", 1493 + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", 1494 + "dev": true, 1495 + "license": "MIT", 1496 + "dependencies": { 1497 + "@poppinss/exception": "^1.2.2", 1498 + "error-stack-parser-es": "^1.0.5" 1499 + } 1500 + } 1501 + } 1502 + }
+12
package.json
··· 1 + { 2 + "name": "favicon-blueat", 3 + "private": true, 4 + "description": "Cloudflare Worker that resolves and caches site favicons by domain", 5 + "scripts": { 6 + "dev": "wrangler dev", 7 + "deploy": "wrangler deploy" 8 + }, 9 + "devDependencies": { 10 + "wrangler": "^4.0.0" 11 + } 12 + }
+9
wrangler.toml
··· 1 + # Cloudflare Workers config — change `name` to match your Worker in the dashboard. 2 + name = "favicon-blueat" 3 + main = "worker.js" 4 + compatibility_date = "2025-01-01" 5 + 6 + # Optional: bind a custom domain after deploy (Workers & Pages → your worker → Triggers). 7 + # [[routes]] 8 + # pattern = "favicon.example.com/*" 9 + # zone_name = "example.com"