A calm place to write long-form, and publish it to the open social web. skypress.blog/
0

Configure Feed

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

Add SP7 Cloudflare deploy config (deploy-ready)

Deploy to Cloudflare Workers (Static Assets) via @astrojs/cloudflare v13 — the
modern Astro Cloudflare target (Pages is folding into Workers; same account +
custom domain). The read-through renderer (SP4) runs as the Worker; landing,
editor shell, fonts, and client-metadata.json are static edge assets.

- Swap @astrojs/node -> @astrojs/cloudflare; site = https://skypress.blog.
- wrangler.toml: nodejs_compat (so sanitize-html runs on workerd) + no KV/D1.
- Disable Astro's default session store (in-memory driver) so no Cloudflare KV
is required — keeps the no-database goal.
- `npm run deploy` = astro build && wrangler deploy.

Edge-verified locally under workerd (astro preview): landing 200; article SSR +
sanitize-html + the handle->DID->PDS reader chain 200 with both site.standard
link tags; /@127.0.0.1/x -> 404 (SSRF guard holds, and Cloudflare fetch can't
reach private IPs, closing the DNS-rebinding residual). Runbook in
docs/specs/sp7-deploy.md; decision in docs/decisions/0009.

+1002 -192
+1
.gitignore
··· 4 4 # build output 5 5 dist/ 6 6 .astro/ 7 + .wrangler/ 7 8 8 9 # generated types 9 10 *.tsbuildinfo
+16 -1
README.md
··· 64 64 | SP4 | Public renderer (`/@<handle>/<rkey>`, link tags, edge SSR, sanitisation) | ✅ Complete | 65 65 | SP5 | Edit flow (the "puppy problem") + unpublish | ✅ Complete | 66 66 | SP6 | Brand identity | ✅ Complete | 67 - | SP7 | Deploy to a free host | Next | 67 + | SP7 | Deploy to Cloudflare | ✅ Deploy-ready (edge-verified; `npm run deploy`) | 68 + 69 + ## Deploy (Cloudflare) 70 + 71 + SkyPress deploys to **Cloudflare Workers (Static Assets)** via `@astrojs/cloudflare` 72 + (Decision 0009). The read-through renderer runs as the Worker; everything else is static. 73 + No database/KV — `nodejs_compat` (in `wrangler.toml`) lets the reader's sanitiser run on 74 + the edge. 75 + 76 + ```sh 77 + npx wrangler login # one-time, owner's Cloudflare account 78 + npm run deploy # astro build && wrangler deploy 79 + ``` 80 + 81 + Then attach `skypress.blog` as a custom domain in the Cloudflare dashboard. Full runbook + 82 + verification: [`docs/specs/sp7-deploy.md`](./docs/specs/sp7-deploy.md). 68 83 69 84 ## License 70 85
+10 -4
astro.config.mjs
··· 2 2 import { defineConfig } from 'astro/config'; 3 3 import { fileURLToPath } from 'node:url'; 4 4 import react from '@astrojs/react'; 5 - import node from '@astrojs/node'; 5 + import cloudflare from '@astrojs/cloudflare'; 6 6 7 7 const nodeModules = fileURLToPath( new URL( './node_modules', import.meta.url ) ); 8 8 9 - // Static by default; the article route is rendered on demand (read-through renderer, 10 - // SP4) and needs an adapter. Node for now — SP7 swaps in the chosen edge host. 9 + // Static by default; the article/homepage routes render on demand (read-through 10 + // renderer, SP4). Deployed to Cloudflare Pages (SP7). `nodejs_compat` (set in 11 + // wrangler.toml) lets sanitize-html's Node-style deps run on the edge. 11 12 export default defineConfig( { 12 - adapter: node( { mode: 'standalone' } ), 13 + site: 'https://skypress.blog', 14 + adapter: cloudflare(), 15 + // SkyPress doesn't use Astro server sessions (auth is a browser OAuth client). 16 + // A no-binding in-memory driver stops the adapter requiring a Cloudflare KV 17 + // namespace, keeping the no-database goal (brief §2). Never used at runtime. 18 + session: { driver: 'memory' }, 13 19 integrations: [ react() ], 14 20 vite: { 15 21 // React 18 is required by the bundled @wordpress/* packages (Decision 0001).
+44
docs/decisions/0009-deploy-cloudflare-workers.md
··· 1 + # 0009 — Hosting: Cloudflare Workers (Static Assets) 2 + 3 + - **Status:** Accepted (edge-verified locally; production deploy on the owner's account) 4 + - **Date:** 2026-06-08 5 + - **Scope:** SP7 — deployment 6 + 7 + ## Context 8 + 9 + The brief (§8) wants free hosting on Vercel or Cloudflare. The owner chose Cloudflare and 10 + has the account + `skypress.blog` domain already on Cloudflare. SkyPress's read-through 11 + renderer (SP4) is the only server-side piece; everything else is static. 12 + 13 + ## Decision 14 + 15 + Deploy to **Cloudflare Workers with Static Assets** via `@astrojs/cloudflare` v13. 16 + 17 + Although the owner said "Pages", the modern Astro Cloudflare adapter targets **Workers** 18 + (Cloudflare is converging Pages into Workers + Static Assets, and the adapter no longer 19 + emits a Pages `_worker.js`). It's the same Cloudflare account and custom domain — the 20 + read-through renderer runs as the Worker; the landing, editor shell, fonts, and 21 + `client-metadata.json` are served as static assets from the edge. 22 + 23 + - **`nodejs_compat`** compatibility flag (in `wrangler.toml`) so `sanitize-html` runs on 24 + `workerd`. Verified locally. 25 + - **No KV / D1 / queues.** The architecture needs no datastore; Astro's default session 26 + store (which would have required a KV) is disabled via an in-memory `session.driver`. 27 + - Build → `npm run deploy` (`astro build && wrangler deploy`); custom domain attached in 28 + the dashboard. 29 + 30 + ## Why (vs. alternatives) 31 + 32 + - **Vercel** — also viable, but the owner's domain + account are on Cloudflare, and 33 + Cloudflare's edge fits the zero-JS read-through renderer well. 34 + - **Force Pages output** — would mean pinning an older adapter; fighting the supported 35 + path for no benefit. 36 + 37 + ## Consequences 38 + 39 + - Cloudflare's `fetch` cannot reach private/loopback addresses, which **closes the 40 + DNS-rebinding SSRF residual** flagged in Decision 0007. SSRF is fully contained. 41 + - `sanitize-html` depends on `nodejs_compat`; if a future Workers change drops a needed 42 + Node shim, swap to an edge-native sanitiser. Tracked. 43 + - The editor's ~1.5 MB-gz island ships only on `/editor`; reading pages remain zero-JS. 44 + - Runbook + verification steps: `docs/specs/sp7-deploy.md`.
+58
docs/specs/sp7-deploy.md
··· 1 + # SP7 — Deploy (Cloudflare) 2 + 3 + - **Date:** 2026-06-08 4 + - **Status:** Deploy-ready + edge-verified locally. The final `wrangler deploy` runs on the 5 + owner's Cloudflare account. 6 + - **Goal (brief §8, §9.8):** Deploy to a free host. Cloudflare. 7 + 8 + ## Decision (0009) 9 + 10 + Deploy to **Cloudflare Workers (Static Assets)** via `@astrojs/cloudflare` v13 — the 11 + modern Astro Cloudflare target (Cloudflare is folding Pages into Workers + Static Assets; 12 + the adapter no longer emits a Pages `_worker.js`). Same Cloudflare account + custom domain 13 + as "Pages"; the read-through renderer (SP4) runs as the Worker, static assets (landing, 14 + editor shell, fonts, `client-metadata.json`) served from the edge cache. 15 + 16 + - `nodejs_compat` (in `wrangler.toml`) lets `sanitize-html` run on `workerd`. 17 + - **No database / KV / queues** — the read-through design needs none. Astro's default 18 + session store (which would add a KV) is disabled with an in-memory driver. 19 + - Cloudflare's `fetch` cannot reach private/loopback IPs, which also closes the 20 + DNS-rebinding residual noted in Decision 0007 — SSRF is fully contained at the edge. 21 + 22 + ## Edge verification (local `workerd` via `astro preview`) 23 + 24 + - Landing (static asset) → 200. 25 + - Article `/@jeherve.com/<rkey>` (SSR + `sanitize-html` + reader fetch chain) → 200, renders 26 + with both `site.standard` link tags. **`sanitize-html` works under `nodejs_compat`.** 27 + - `/@127.0.0.1/x` → 404 (SSRF guard holds on the edge). 28 + - Generated `dist/server/wrangler.json`: `main: entry.mjs`, `assets: ../client`, 29 + `compatibility_flags: [nodejs_compat]`, `kv_namespaces: []`. 30 + 31 + ## Deploy runbook (owner's Cloudflare account) 32 + 33 + 1. **One-time:** `npx wrangler login` (authorise the Cloudflare account). 34 + 2. **Deploy:** `npm run deploy` (= `astro build && wrangler deploy`). `astro build` writes 35 + `.wrangler/deploy/config.json` redirecting `wrangler deploy` to the built worker config. 36 + 3. **Custom domain:** in the dashboard (Workers & Pages → `skypress` → Settings → Domains), 37 + attach **`skypress.blog`** (the domain is already on Cloudflare). This routes the apex to 38 + the Worker. 39 + 4. **Verify production:** 40 + - `https://skypress.blog/` (landing), `/preview` (sample article). 41 + - `https://skypress.blog/client-metadata.json` returns the OAuth client metadata 42 + (`client_id` must equal that URL — it does). 43 + - `https://skypress.blog/editor` → sign in (prod OAuth uses the hosted `client_id`; 44 + `redirect_uris` is `https://skypress.blog/editor`), publish, then open 45 + `https://skypress.blog/@<handle>/<rkey>`. 46 + 47 + Git-connected builds (Workers Builds) are an alternative: build `npm run build`, deploy 48 + `npx wrangler deploy`, set `nodejs_compat` — but the local `npm run deploy` is the simplest 49 + first cut. 50 + 51 + ## Notes / follow-ups 52 + 53 + - The dev OAuth client is loopback (`127.0.0.1`); production uses the hosted 54 + `client-metadata.json` automatically (Decision 0004 / `getClientMode`). 55 + - The editor island is heavy (~1.5 MB gz) but loads only on `/editor`; reading pages stay 56 + zero-JS at the edge. 57 + - A caching layer / `Cache-Control` tuning for the read-through renderer is a perf 58 + follow-up (content is immutable per rkey until edited).
+862 -184
package-lock.json
··· 9 9 "version": "0.0.0", 10 10 "license": "GPL-2.0-only", 11 11 "dependencies": { 12 - "@astrojs/node": "^10.1.3", 12 + "@astrojs/cloudflare": "^13.6.1", 13 13 "@astrojs/react": "5.0.7", 14 14 "@atproto/api": "^0.20.9", 15 15 "@atproto/common-web": "^0.5.0", ··· 361 361 "node": ">=12" 362 362 } 363 363 }, 364 + "node_modules/@astrojs/cloudflare": { 365 + "version": "13.6.1", 366 + "resolved": "https://registry.npmjs.org/@astrojs/cloudflare/-/cloudflare-13.6.1.tgz", 367 + "integrity": "sha512-/ghjke33zKmSd2U0IJsmWzZG2ikzwxPm7WAzNjzlIj91oL3rC8GFGcivynVLs6EbcuMct5rY98LuN4uonEKOdw==", 368 + "license": "MIT", 369 + "dependencies": { 370 + "@astrojs/internal-helpers": "0.10.0", 371 + "@astrojs/underscore-redirects": "1.0.3", 372 + "@cloudflare/vite-plugin": "^1.39.0", 373 + "piccolore": "^0.1.3", 374 + "tinyglobby": "^0.2.15", 375 + "vite": "^7.3.2" 376 + }, 377 + "peerDependencies": { 378 + "astro": "^6.3.0", 379 + "wrangler": "^4.83.0" 380 + } 381 + }, 364 382 "node_modules/@astrojs/compiler": { 365 383 "version": "4.0.0", 366 384 "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-4.0.0.tgz", ··· 457 475 "vfile": "^6.0.3" 458 476 } 459 477 }, 460 - "node_modules/@astrojs/node": { 461 - "version": "10.1.3", 462 - "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-10.1.3.tgz", 463 - "integrity": "sha512-NybvdqXFwUbTkaJ8OhDmkrXK+cdpXR+KhyiaBduVVqzAopT70J9QVah8Iz2vt24+wF6PqH1oxElnQlU4OwcBLA==", 464 - "license": "MIT", 465 - "dependencies": { 466 - "@astrojs/internal-helpers": "0.10.0", 467 - "send": "^1.2.1", 468 - "server-destroy": "^1.0.1" 469 - }, 470 - "peerDependencies": { 471 - "astro": "^6.3.0" 472 - } 473 - }, 474 478 "node_modules/@astrojs/prism": { 475 479 "version": "4.0.2", 476 480 "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", ··· 520 524 "engines": { 521 525 "node": "18.20.8 || ^20.3.0 || >=22.0.0" 522 526 } 527 + }, 528 + "node_modules/@astrojs/underscore-redirects": { 529 + "version": "1.0.3", 530 + "resolved": "https://registry.npmjs.org/@astrojs/underscore-redirects/-/underscore-redirects-1.0.3.tgz", 531 + "integrity": "sha512-cxnGSw+sJigBLdX4TMSZKkzV6C3gMLJMucDk2W+n281Xhie68T2/9f1+1NMNDCZsc5i0FED7Qt5I10g2O9wtZg==", 532 + "license": "MIT" 523 533 }, 524 534 "node_modules/@astrojs/yaml2ts": { 525 535 "version": "0.2.4", ··· 1321 1331 "node": ">= 20.12.0" 1322 1332 } 1323 1333 }, 1334 + "node_modules/@cloudflare/kv-asset-handler": { 1335 + "version": "0.5.0", 1336 + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.5.0.tgz", 1337 + "integrity": "sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==", 1338 + "license": "MIT OR Apache-2.0", 1339 + "engines": { 1340 + "node": ">=22.0.0" 1341 + } 1342 + }, 1343 + "node_modules/@cloudflare/unenv-preset": { 1344 + "version": "2.16.1", 1345 + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.1.tgz", 1346 + "integrity": "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==", 1347 + "license": "MIT OR Apache-2.0", 1348 + "peerDependencies": { 1349 + "unenv": "2.0.0-rc.24", 1350 + "workerd": ">1.20260305.0 <2.0.0-0" 1351 + }, 1352 + "peerDependenciesMeta": { 1353 + "workerd": { 1354 + "optional": true 1355 + } 1356 + } 1357 + }, 1358 + "node_modules/@cloudflare/vite-plugin": { 1359 + "version": "1.40.0", 1360 + "resolved": "https://registry.npmjs.org/@cloudflare/vite-plugin/-/vite-plugin-1.40.0.tgz", 1361 + "integrity": "sha512-v77QQ2AdyBB+XW6uzKpWanbQy7ckYqSXFwJgQN871XITqLdJTdYOAWxt/jLPw9tNnHkKS6HTwV9+9bfQcLWz/w==", 1362 + "license": "MIT", 1363 + "dependencies": { 1364 + "@cloudflare/unenv-preset": "2.16.1", 1365 + "miniflare": "4.20260603.0", 1366 + "unenv": "2.0.0-rc.24", 1367 + "wrangler": "4.98.0", 1368 + "ws": "8.20.1" 1369 + }, 1370 + "bin": { 1371 + "cf-vite": "bin/cf-vite" 1372 + }, 1373 + "peerDependencies": { 1374 + "vite": "^6.1.0 || ^7.0.0 || ^8.0.0", 1375 + "wrangler": "^4.98.0" 1376 + } 1377 + }, 1378 + "node_modules/@cloudflare/vite-plugin/node_modules/ws": { 1379 + "version": "8.20.1", 1380 + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", 1381 + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", 1382 + "license": "MIT", 1383 + "engines": { 1384 + "node": ">=10.0.0" 1385 + }, 1386 + "peerDependencies": { 1387 + "bufferutil": "^4.0.1", 1388 + "utf-8-validate": ">=5.0.2" 1389 + }, 1390 + "peerDependenciesMeta": { 1391 + "bufferutil": { 1392 + "optional": true 1393 + }, 1394 + "utf-8-validate": { 1395 + "optional": true 1396 + } 1397 + } 1398 + }, 1399 + "node_modules/@cloudflare/workerd-darwin-64": { 1400 + "version": "1.20260603.1", 1401 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260603.1.tgz", 1402 + "integrity": "sha512-cEXDWu6V3ZrpmwWkM4OJE9AeXjdAgOY5rh8EHhcBVCuP5rxnzUbPzLtrVOHx0UUUAcCrFq0Xsa6mZKL1VUZsKQ==", 1403 + "cpu": [ 1404 + "x64" 1405 + ], 1406 + "license": "Apache-2.0", 1407 + "optional": true, 1408 + "os": [ 1409 + "darwin" 1410 + ], 1411 + "engines": { 1412 + "node": ">=16" 1413 + } 1414 + }, 1415 + "node_modules/@cloudflare/workerd-darwin-arm64": { 1416 + "version": "1.20260603.1", 1417 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260603.1.tgz", 1418 + "integrity": "sha512-uBPK4LaWJNbbCYwPnUAehlHbbVulhVZPZsdcAhBPfZhHb3QAuAEPAQepO/P67R3V6Cni4YGx1fLbL8A5wwoaNA==", 1419 + "cpu": [ 1420 + "arm64" 1421 + ], 1422 + "license": "Apache-2.0", 1423 + "optional": true, 1424 + "os": [ 1425 + "darwin" 1426 + ], 1427 + "engines": { 1428 + "node": ">=16" 1429 + } 1430 + }, 1431 + "node_modules/@cloudflare/workerd-linux-64": { 1432 + "version": "1.20260603.1", 1433 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260603.1.tgz", 1434 + "integrity": "sha512-ht9l6/8Tk7Rp6kA4S9oFZ4X8u0VjnnFdmU/6B3fnABYKREYTKh2RdOqXqXxcp5eNJseireKnWik/hQOPK1CutQ==", 1435 + "cpu": [ 1436 + "x64" 1437 + ], 1438 + "license": "Apache-2.0", 1439 + "optional": true, 1440 + "os": [ 1441 + "linux" 1442 + ], 1443 + "engines": { 1444 + "node": ">=16" 1445 + } 1446 + }, 1447 + "node_modules/@cloudflare/workerd-linux-arm64": { 1448 + "version": "1.20260603.1", 1449 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260603.1.tgz", 1450 + "integrity": "sha512-LJZ6x00rAjSrobV4m0ZW0TpH5ilBbKcWBzlH+y+KOUsIE/CpTuhAzKV43TbSnFLRX5+jrWKiz2v0hO91lPXy6A==", 1451 + "cpu": [ 1452 + "arm64" 1453 + ], 1454 + "license": "Apache-2.0", 1455 + "optional": true, 1456 + "os": [ 1457 + "linux" 1458 + ], 1459 + "engines": { 1460 + "node": ">=16" 1461 + } 1462 + }, 1463 + "node_modules/@cloudflare/workerd-windows-64": { 1464 + "version": "1.20260603.1", 1465 + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260603.1.tgz", 1466 + "integrity": "sha512-DvwqkXMAJRPoDN4PxapAwhlz/6ouD+6R1ttbAEK3cWD/QBvFF5STx7Ds/9Irf+rBly3np3uHWkeX+wZnNFEuzA==", 1467 + "cpu": [ 1468 + "x64" 1469 + ], 1470 + "license": "Apache-2.0", 1471 + "optional": true, 1472 + "os": [ 1473 + "win32" 1474 + ], 1475 + "engines": { 1476 + "node": ">=16" 1477 + } 1478 + }, 1479 + "node_modules/@cspotcode/source-map-support": { 1480 + "version": "0.8.1", 1481 + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 1482 + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 1483 + "license": "MIT", 1484 + "dependencies": { 1485 + "@jridgewell/trace-mapping": "0.3.9" 1486 + }, 1487 + "engines": { 1488 + "node": ">=12" 1489 + } 1490 + }, 1491 + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { 1492 + "version": "0.3.9", 1493 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 1494 + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 1495 + "license": "MIT", 1496 + "dependencies": { 1497 + "@jridgewell/resolve-uri": "^3.0.3", 1498 + "@jridgewell/sourcemap-codec": "^1.4.10" 1499 + } 1500 + }, 1324 1501 "node_modules/@csstools/color-helpers": { 1325 1502 "version": "5.1.0", 1326 1503 "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", ··· 2159 2336 "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", 2160 2337 "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", 2161 2338 "license": "MIT", 2162 - "optional": true, 2163 2339 "engines": { 2164 2340 "node": ">=18" 2165 2341 } ··· 3033 3209 "url": "https://opencollective.com/parcel" 3034 3210 } 3035 3211 }, 3212 + "node_modules/@poppinss/colors": { 3213 + "version": "4.1.6", 3214 + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", 3215 + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", 3216 + "license": "MIT", 3217 + "dependencies": { 3218 + "kleur": "^4.1.5" 3219 + } 3220 + }, 3221 + "node_modules/@poppinss/dumper": { 3222 + "version": "0.6.5", 3223 + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", 3224 + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", 3225 + "license": "MIT", 3226 + "dependencies": { 3227 + "@poppinss/colors": "^4.1.5", 3228 + "@sindresorhus/is": "^7.0.2", 3229 + "supports-color": "^10.0.0" 3230 + } 3231 + }, 3232 + "node_modules/@poppinss/exception": { 3233 + "version": "1.2.3", 3234 + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", 3235 + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", 3236 + "license": "MIT" 3237 + }, 3036 3238 "node_modules/@preact/signals": { 3037 3239 "version": "1.3.4", 3038 3240 "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-1.3.4.tgz", ··· 3952 4154 "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", 3953 4155 "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", 3954 4156 "license": "MIT" 4157 + }, 4158 + "node_modules/@sindresorhus/is": { 4159 + "version": "7.2.0", 4160 + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", 4161 + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", 4162 + "license": "MIT", 4163 + "engines": { 4164 + "node": ">=18" 4165 + }, 4166 + "funding": { 4167 + "url": "https://github.com/sindresorhus/is?sponsor=1" 4168 + } 4169 + }, 4170 + "node_modules/@speed-highlight/core": { 4171 + "version": "1.2.15", 4172 + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.15.tgz", 4173 + "integrity": "sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==", 4174 + "license": "CC0-1.0" 3955 4175 }, 3956 4176 "node_modules/@tannin/compile": { 3957 4177 "version": "1.1.0", ··· 6334 6554 "node": ">=6.0.0" 6335 6555 } 6336 6556 }, 6557 + "node_modules/blake3-wasm": { 6558 + "version": "2.1.5", 6559 + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", 6560 + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", 6561 + "license": "MIT" 6562 + }, 6337 6563 "node_modules/boolbase": { 6338 6564 "version": "1.0.0", 6339 6565 "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", ··· 7022 7248 "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", 7023 7249 "license": "MIT" 7024 7250 }, 7025 - "node_modules/depd": { 7026 - "version": "2.0.0", 7027 - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 7028 - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 7029 - "license": "MIT", 7030 - "engines": { 7031 - "node": ">= 0.8" 7032 - } 7033 - }, 7034 7251 "node_modules/dequal": { 7035 7252 "version": "2.0.3", 7036 7253 "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", ··· 7051 7268 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 7052 7269 "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 7053 7270 "license": "Apache-2.0", 7054 - "optional": true, 7055 7271 "engines": { 7056 7272 "node": ">=8" 7057 7273 } ··· 7191 7407 "node": ">= 0.4" 7192 7408 } 7193 7409 }, 7194 - "node_modules/ee-first": { 7195 - "version": "1.1.1", 7196 - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 7197 - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 7198 - "license": "MIT" 7199 - }, 7200 7410 "node_modules/electron-to-chromium": { 7201 7411 "version": "1.5.368", 7202 7412 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.368.tgz", ··· 7226 7436 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 7227 7437 "license": "MIT" 7228 7438 }, 7229 - "node_modules/encodeurl": { 7230 - "version": "2.0.0", 7231 - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 7232 - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 7233 - "license": "MIT", 7234 - "engines": { 7235 - "node": ">= 0.8" 7236 - } 7237 - }, 7238 7439 "node_modules/encoding": { 7239 7440 "version": "0.1.13", 7240 7441 "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", ··· 7275 7476 "license": "MIT", 7276 7477 "dependencies": { 7277 7478 "is-arrayish": "^0.2.1" 7479 + } 7480 + }, 7481 + "node_modules/error-stack-parser-es": { 7482 + "version": "1.0.5", 7483 + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", 7484 + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", 7485 + "license": "MIT", 7486 + "funding": { 7487 + "url": "https://github.com/sponsors/antfu" 7278 7488 } 7279 7489 }, 7280 7490 "node_modules/es-define-property": { ··· 7405 7615 "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 7406 7616 "license": "MIT" 7407 7617 }, 7408 - "node_modules/etag": { 7409 - "version": "1.8.1", 7410 - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 7411 - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 7412 - "license": "MIT", 7413 - "engines": { 7414 - "node": ">= 0.6" 7415 - } 7416 - }, 7417 7618 "node_modules/eventemitter3": { 7418 7619 "version": "5.0.4", 7419 7620 "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", ··· 7599 7800 "react-dom": { 7600 7801 "optional": true 7601 7802 } 7602 - } 7603 - }, 7604 - "node_modules/fresh": { 7605 - "version": "2.0.0", 7606 - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", 7607 - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", 7608 - "license": "MIT", 7609 - "engines": { 7610 - "node": ">= 0.8" 7611 7803 } 7612 7804 }, 7613 7805 "node_modules/fsevents": { ··· 8113 8305 "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", 8114 8306 "license": "BSD-2-Clause" 8115 8307 }, 8116 - "node_modules/http-errors": { 8117 - "version": "2.0.1", 8118 - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", 8119 - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", 8120 - "license": "MIT", 8121 - "dependencies": { 8122 - "depd": "~2.0.0", 8123 - "inherits": "~2.0.4", 8124 - "setprototypeof": "~1.2.0", 8125 - "statuses": "~2.0.2", 8126 - "toidentifier": "~1.0.1" 8127 - }, 8128 - "engines": { 8129 - "node": ">= 0.8" 8130 - }, 8131 - "funding": { 8132 - "type": "opencollective", 8133 - "url": "https://opencollective.com/express" 8134 - } 8135 - }, 8136 8308 "node_modules/http-proxy-agent": { 8137 8309 "version": "7.0.2", 8138 8310 "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", ··· 8528 8700 "version": "4.1.5", 8529 8701 "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 8530 8702 "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 8531 - "dev": true, 8532 8703 "license": "MIT", 8533 8704 "engines": { 8534 8705 "node": ">=6" ··· 9523 9694 "node": ">= 0.6" 9524 9695 } 9525 9696 }, 9697 + "node_modules/miniflare": { 9698 + "version": "4.20260603.0", 9699 + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260603.0.tgz", 9700 + "integrity": "sha512-+kMQYB82gC8MPOuojHur3icQsUeZUEJ+Sphuo5rVC3Ri9txBLAW/mH33b9OVrpmkogQeaaqPS4tPtugJZhk5Kw==", 9701 + "license": "MIT", 9702 + "dependencies": { 9703 + "@cspotcode/source-map-support": "0.8.1", 9704 + "sharp": "0.34.5", 9705 + "undici": "7.24.8", 9706 + "workerd": "1.20260603.1", 9707 + "ws": "8.20.1", 9708 + "youch": "4.1.0-beta.10" 9709 + }, 9710 + "bin": { 9711 + "miniflare": "bootstrap.js" 9712 + }, 9713 + "engines": { 9714 + "node": ">=22.0.0" 9715 + } 9716 + }, 9717 + "node_modules/miniflare/node_modules/ws": { 9718 + "version": "8.20.1", 9719 + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", 9720 + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", 9721 + "license": "MIT", 9722 + "engines": { 9723 + "node": ">=10.0.0" 9724 + }, 9725 + "peerDependencies": { 9726 + "bufferutil": "^4.0.1", 9727 + "utf-8-validate": ">=5.0.2" 9728 + }, 9729 + "peerDependenciesMeta": { 9730 + "bufferutil": { 9731 + "optional": true 9732 + }, 9733 + "utf-8-validate": { 9734 + "optional": true 9735 + } 9736 + } 9737 + }, 9526 9738 "node_modules/moment": { 9527 9739 "version": "2.30.1", 9528 9740 "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", ··· 9743 9955 "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", 9744 9956 "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", 9745 9957 "license": "MIT" 9746 - }, 9747 - "node_modules/on-finished": { 9748 - "version": "2.4.1", 9749 - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 9750 - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 9751 - "license": "MIT", 9752 - "dependencies": { 9753 - "ee-first": "1.1.1" 9754 - }, 9755 - "engines": { 9756 - "node": ">= 0.8" 9757 - } 9758 9958 }, 9759 9959 "node_modules/oniguruma-parser": { 9760 9960 "version": "0.12.2", ··· 10229 10429 "license": "MIT", 10230 10430 "dependencies": { 10231 10431 "safe-buffer": "^5.1.0" 10232 - } 10233 - }, 10234 - "node_modules/range-parser": { 10235 - "version": "1.2.1", 10236 - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 10237 - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 10238 - "license": "MIT", 10239 - "engines": { 10240 - "node": ">= 0.6" 10241 10432 } 10242 10433 }, 10243 10434 "node_modules/re-resizable": { ··· 10930 11121 "semver": "bin/semver.js" 10931 11122 } 10932 11123 }, 10933 - "node_modules/send": { 10934 - "version": "1.2.1", 10935 - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", 10936 - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", 10937 - "license": "MIT", 10938 - "dependencies": { 10939 - "debug": "^4.4.3", 10940 - "encodeurl": "^2.0.0", 10941 - "escape-html": "^1.0.3", 10942 - "etag": "^1.8.1", 10943 - "fresh": "^2.0.0", 10944 - "http-errors": "^2.0.1", 10945 - "mime-types": "^3.0.2", 10946 - "ms": "^2.1.3", 10947 - "on-finished": "^2.4.1", 10948 - "range-parser": "^1.2.1", 10949 - "statuses": "^2.0.2" 10950 - }, 10951 - "engines": { 10952 - "node": ">= 18" 10953 - }, 10954 - "funding": { 10955 - "type": "opencollective", 10956 - "url": "https://opencollective.com/express" 10957 - } 10958 - }, 10959 - "node_modules/send/node_modules/mime-db": { 10960 - "version": "1.54.0", 10961 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 10962 - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 10963 - "license": "MIT", 10964 - "engines": { 10965 - "node": ">= 0.6" 10966 - } 10967 - }, 10968 - "node_modules/send/node_modules/mime-types": { 10969 - "version": "3.0.2", 10970 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", 10971 - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", 10972 - "license": "MIT", 10973 - "dependencies": { 10974 - "mime-db": "^1.54.0" 10975 - }, 10976 - "engines": { 10977 - "node": ">=18" 10978 - }, 10979 - "funding": { 10980 - "type": "opencollective", 10981 - "url": "https://opencollective.com/express" 10982 - } 10983 - }, 10984 11124 "node_modules/sentence-case": { 10985 11125 "version": "3.0.4", 10986 11126 "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", ··· 10992 11132 "upper-case-first": "^2.0.2" 10993 11133 } 10994 11134 }, 10995 - "node_modules/server-destroy": { 10996 - "version": "1.0.1", 10997 - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", 10998 - "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", 10999 - "license": "ISC" 11000 - }, 11001 11135 "node_modules/set-blocking": { 11002 11136 "version": "2.0.0", 11003 11137 "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 11004 11138 "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", 11005 11139 "license": "ISC" 11006 11140 }, 11007 - "node_modules/setprototypeof": { 11008 - "version": "1.2.0", 11009 - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 11010 - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 11011 - "license": "ISC" 11012 - }, 11013 11141 "node_modules/sharp": { 11014 11142 "version": "0.34.5", 11015 11143 "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", 11016 11144 "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", 11017 11145 "hasInstallScript": true, 11018 11146 "license": "Apache-2.0", 11019 - "optional": true, 11020 11147 "dependencies": { 11021 11148 "@img/colour": "^1.0.0", 11022 11149 "detect-libc": "^2.1.2", ··· 11060 11187 "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz", 11061 11188 "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==", 11062 11189 "license": "ISC", 11063 - "optional": true, 11064 11190 "bin": { 11065 11191 "semver": "bin/semver.js" 11066 11192 }, ··· 11210 11336 "dev": true, 11211 11337 "license": "MIT" 11212 11338 }, 11213 - "node_modules/statuses": { 11214 - "version": "2.0.2", 11215 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", 11216 - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", 11217 - "license": "MIT", 11218 - "engines": { 11219 - "node": ">= 0.8" 11220 - } 11221 - }, 11222 11339 "node_modules/std-env": { 11223 11340 "version": "3.10.0", 11224 11341 "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", ··· 11281 11398 "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", 11282 11399 "license": "MIT" 11283 11400 }, 11401 + "node_modules/supports-color": { 11402 + "version": "10.2.2", 11403 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", 11404 + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", 11405 + "license": "MIT", 11406 + "engines": { 11407 + "node": ">=18" 11408 + }, 11409 + "funding": { 11410 + "url": "https://github.com/chalk/supports-color?sponsor=1" 11411 + } 11412 + }, 11284 11413 "node_modules/supports-preserve-symlinks-flag": { 11285 11414 "version": "1.0.0", 11286 11415 "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", ··· 11446 11575 "dev": true, 11447 11576 "license": "MIT" 11448 11577 }, 11449 - "node_modules/toidentifier": { 11450 - "version": "1.0.1", 11451 - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 11452 - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 11453 - "license": "MIT", 11454 - "engines": { 11455 - "node": ">=0.6" 11456 - } 11457 - }, 11458 11578 "node_modules/tough-cookie": { 11459 11579 "version": "5.1.2", 11460 11580 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", ··· 11578 11698 "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", 11579 11699 "license": "MIT" 11580 11700 }, 11701 + "node_modules/undici": { 11702 + "version": "7.24.8", 11703 + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.8.tgz", 11704 + "integrity": "sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==", 11705 + "license": "MIT", 11706 + "engines": { 11707 + "node": ">=20.18.1" 11708 + } 11709 + }, 11581 11710 "node_modules/undici-types": { 11582 11711 "version": "7.24.6", 11583 11712 "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", 11584 11713 "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", 11714 + "license": "MIT" 11715 + }, 11716 + "node_modules/unenv": { 11717 + "version": "2.0.0-rc.24", 11718 + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", 11719 + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", 11720 + "license": "MIT", 11721 + "dependencies": { 11722 + "pathe": "^2.0.3" 11723 + } 11724 + }, 11725 + "node_modules/unenv/node_modules/pathe": { 11726 + "version": "2.0.3", 11727 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 11728 + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 11585 11729 "license": "MIT" 11586 11730 }, 11587 11731 "node_modules/unicode-segmenter": { ··· 13535 13679 "node": ">=8" 13536 13680 } 13537 13681 }, 13682 + "node_modules/workerd": { 13683 + "version": "1.20260603.1", 13684 + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260603.1.tgz", 13685 + "integrity": "sha512-NPcbhI1++CS+fnELyXtsIR52en+5kwr/OrKeiQeYXGy10HxmPdsQBv9N+DU7hJIOOmBHhOGAAsoGDjyiQ2YCaA==", 13686 + "hasInstallScript": true, 13687 + "license": "Apache-2.0", 13688 + "bin": { 13689 + "workerd": "bin/workerd" 13690 + }, 13691 + "engines": { 13692 + "node": ">=16" 13693 + }, 13694 + "optionalDependencies": { 13695 + "@cloudflare/workerd-darwin-64": "1.20260603.1", 13696 + "@cloudflare/workerd-darwin-arm64": "1.20260603.1", 13697 + "@cloudflare/workerd-linux-64": "1.20260603.1", 13698 + "@cloudflare/workerd-linux-arm64": "1.20260603.1", 13699 + "@cloudflare/workerd-windows-64": "1.20260603.1" 13700 + } 13701 + }, 13702 + "node_modules/wrangler": { 13703 + "version": "4.98.0", 13704 + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.98.0.tgz", 13705 + "integrity": "sha512-cXfFUuF4rMIvE0hiMnXjEAB27ERryaCgquBJdUoPIjFzYYE1rbRdMUkEdQ18qDPUtsPvhJdqxLntixT9OfSzQw==", 13706 + "license": "MIT OR Apache-2.0", 13707 + "dependencies": { 13708 + "@cloudflare/kv-asset-handler": "0.5.0", 13709 + "@cloudflare/unenv-preset": "2.16.1", 13710 + "blake3-wasm": "2.1.5", 13711 + "esbuild": "0.27.3", 13712 + "miniflare": "4.20260603.0", 13713 + "path-to-regexp": "6.3.0", 13714 + "unenv": "2.0.0-rc.24", 13715 + "workerd": "1.20260603.1" 13716 + }, 13717 + "bin": { 13718 + "wrangler": "bin/wrangler.js", 13719 + "wrangler2": "bin/wrangler.js" 13720 + }, 13721 + "engines": { 13722 + "node": ">=22.0.0" 13723 + }, 13724 + "optionalDependencies": { 13725 + "fsevents": "2.3.3" 13726 + }, 13727 + "peerDependencies": { 13728 + "@cloudflare/workers-types": "^4.20260603.1" 13729 + }, 13730 + "peerDependenciesMeta": { 13731 + "@cloudflare/workers-types": { 13732 + "optional": true 13733 + } 13734 + } 13735 + }, 13736 + "node_modules/wrangler/node_modules/@esbuild/aix-ppc64": { 13737 + "version": "0.27.3", 13738 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", 13739 + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", 13740 + "cpu": [ 13741 + "ppc64" 13742 + ], 13743 + "license": "MIT", 13744 + "optional": true, 13745 + "os": [ 13746 + "aix" 13747 + ], 13748 + "engines": { 13749 + "node": ">=18" 13750 + } 13751 + }, 13752 + "node_modules/wrangler/node_modules/@esbuild/android-arm": { 13753 + "version": "0.27.3", 13754 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", 13755 + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", 13756 + "cpu": [ 13757 + "arm" 13758 + ], 13759 + "license": "MIT", 13760 + "optional": true, 13761 + "os": [ 13762 + "android" 13763 + ], 13764 + "engines": { 13765 + "node": ">=18" 13766 + } 13767 + }, 13768 + "node_modules/wrangler/node_modules/@esbuild/android-arm64": { 13769 + "version": "0.27.3", 13770 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", 13771 + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", 13772 + "cpu": [ 13773 + "arm64" 13774 + ], 13775 + "license": "MIT", 13776 + "optional": true, 13777 + "os": [ 13778 + "android" 13779 + ], 13780 + "engines": { 13781 + "node": ">=18" 13782 + } 13783 + }, 13784 + "node_modules/wrangler/node_modules/@esbuild/android-x64": { 13785 + "version": "0.27.3", 13786 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", 13787 + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", 13788 + "cpu": [ 13789 + "x64" 13790 + ], 13791 + "license": "MIT", 13792 + "optional": true, 13793 + "os": [ 13794 + "android" 13795 + ], 13796 + "engines": { 13797 + "node": ">=18" 13798 + } 13799 + }, 13800 + "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { 13801 + "version": "0.27.3", 13802 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", 13803 + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", 13804 + "cpu": [ 13805 + "arm64" 13806 + ], 13807 + "license": "MIT", 13808 + "optional": true, 13809 + "os": [ 13810 + "darwin" 13811 + ], 13812 + "engines": { 13813 + "node": ">=18" 13814 + } 13815 + }, 13816 + "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { 13817 + "version": "0.27.3", 13818 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", 13819 + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", 13820 + "cpu": [ 13821 + "x64" 13822 + ], 13823 + "license": "MIT", 13824 + "optional": true, 13825 + "os": [ 13826 + "darwin" 13827 + ], 13828 + "engines": { 13829 + "node": ">=18" 13830 + } 13831 + }, 13832 + "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { 13833 + "version": "0.27.3", 13834 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", 13835 + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", 13836 + "cpu": [ 13837 + "arm64" 13838 + ], 13839 + "license": "MIT", 13840 + "optional": true, 13841 + "os": [ 13842 + "freebsd" 13843 + ], 13844 + "engines": { 13845 + "node": ">=18" 13846 + } 13847 + }, 13848 + "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { 13849 + "version": "0.27.3", 13850 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", 13851 + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", 13852 + "cpu": [ 13853 + "x64" 13854 + ], 13855 + "license": "MIT", 13856 + "optional": true, 13857 + "os": [ 13858 + "freebsd" 13859 + ], 13860 + "engines": { 13861 + "node": ">=18" 13862 + } 13863 + }, 13864 + "node_modules/wrangler/node_modules/@esbuild/linux-arm": { 13865 + "version": "0.27.3", 13866 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", 13867 + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", 13868 + "cpu": [ 13869 + "arm" 13870 + ], 13871 + "license": "MIT", 13872 + "optional": true, 13873 + "os": [ 13874 + "linux" 13875 + ], 13876 + "engines": { 13877 + "node": ">=18" 13878 + } 13879 + }, 13880 + "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { 13881 + "version": "0.27.3", 13882 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", 13883 + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", 13884 + "cpu": [ 13885 + "arm64" 13886 + ], 13887 + "license": "MIT", 13888 + "optional": true, 13889 + "os": [ 13890 + "linux" 13891 + ], 13892 + "engines": { 13893 + "node": ">=18" 13894 + } 13895 + }, 13896 + "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { 13897 + "version": "0.27.3", 13898 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", 13899 + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", 13900 + "cpu": [ 13901 + "ia32" 13902 + ], 13903 + "license": "MIT", 13904 + "optional": true, 13905 + "os": [ 13906 + "linux" 13907 + ], 13908 + "engines": { 13909 + "node": ">=18" 13910 + } 13911 + }, 13912 + "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { 13913 + "version": "0.27.3", 13914 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", 13915 + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", 13916 + "cpu": [ 13917 + "loong64" 13918 + ], 13919 + "license": "MIT", 13920 + "optional": true, 13921 + "os": [ 13922 + "linux" 13923 + ], 13924 + "engines": { 13925 + "node": ">=18" 13926 + } 13927 + }, 13928 + "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { 13929 + "version": "0.27.3", 13930 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", 13931 + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", 13932 + "cpu": [ 13933 + "mips64el" 13934 + ], 13935 + "license": "MIT", 13936 + "optional": true, 13937 + "os": [ 13938 + "linux" 13939 + ], 13940 + "engines": { 13941 + "node": ">=18" 13942 + } 13943 + }, 13944 + "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { 13945 + "version": "0.27.3", 13946 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", 13947 + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", 13948 + "cpu": [ 13949 + "ppc64" 13950 + ], 13951 + "license": "MIT", 13952 + "optional": true, 13953 + "os": [ 13954 + "linux" 13955 + ], 13956 + "engines": { 13957 + "node": ">=18" 13958 + } 13959 + }, 13960 + "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { 13961 + "version": "0.27.3", 13962 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", 13963 + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", 13964 + "cpu": [ 13965 + "riscv64" 13966 + ], 13967 + "license": "MIT", 13968 + "optional": true, 13969 + "os": [ 13970 + "linux" 13971 + ], 13972 + "engines": { 13973 + "node": ">=18" 13974 + } 13975 + }, 13976 + "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { 13977 + "version": "0.27.3", 13978 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", 13979 + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", 13980 + "cpu": [ 13981 + "s390x" 13982 + ], 13983 + "license": "MIT", 13984 + "optional": true, 13985 + "os": [ 13986 + "linux" 13987 + ], 13988 + "engines": { 13989 + "node": ">=18" 13990 + } 13991 + }, 13992 + "node_modules/wrangler/node_modules/@esbuild/linux-x64": { 13993 + "version": "0.27.3", 13994 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", 13995 + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", 13996 + "cpu": [ 13997 + "x64" 13998 + ], 13999 + "license": "MIT", 14000 + "optional": true, 14001 + "os": [ 14002 + "linux" 14003 + ], 14004 + "engines": { 14005 + "node": ">=18" 14006 + } 14007 + }, 14008 + "node_modules/wrangler/node_modules/@esbuild/netbsd-arm64": { 14009 + "version": "0.27.3", 14010 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", 14011 + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", 14012 + "cpu": [ 14013 + "arm64" 14014 + ], 14015 + "license": "MIT", 14016 + "optional": true, 14017 + "os": [ 14018 + "netbsd" 14019 + ], 14020 + "engines": { 14021 + "node": ">=18" 14022 + } 14023 + }, 14024 + "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { 14025 + "version": "0.27.3", 14026 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", 14027 + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", 14028 + "cpu": [ 14029 + "x64" 14030 + ], 14031 + "license": "MIT", 14032 + "optional": true, 14033 + "os": [ 14034 + "netbsd" 14035 + ], 14036 + "engines": { 14037 + "node": ">=18" 14038 + } 14039 + }, 14040 + "node_modules/wrangler/node_modules/@esbuild/openbsd-arm64": { 14041 + "version": "0.27.3", 14042 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", 14043 + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", 14044 + "cpu": [ 14045 + "arm64" 14046 + ], 14047 + "license": "MIT", 14048 + "optional": true, 14049 + "os": [ 14050 + "openbsd" 14051 + ], 14052 + "engines": { 14053 + "node": ">=18" 14054 + } 14055 + }, 14056 + "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { 14057 + "version": "0.27.3", 14058 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", 14059 + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", 14060 + "cpu": [ 14061 + "x64" 14062 + ], 14063 + "license": "MIT", 14064 + "optional": true, 14065 + "os": [ 14066 + "openbsd" 14067 + ], 14068 + "engines": { 14069 + "node": ">=18" 14070 + } 14071 + }, 14072 + "node_modules/wrangler/node_modules/@esbuild/openharmony-arm64": { 14073 + "version": "0.27.3", 14074 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", 14075 + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", 14076 + "cpu": [ 14077 + "arm64" 14078 + ], 14079 + "license": "MIT", 14080 + "optional": true, 14081 + "os": [ 14082 + "openharmony" 14083 + ], 14084 + "engines": { 14085 + "node": ">=18" 14086 + } 14087 + }, 14088 + "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { 14089 + "version": "0.27.3", 14090 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", 14091 + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", 14092 + "cpu": [ 14093 + "x64" 14094 + ], 14095 + "license": "MIT", 14096 + "optional": true, 14097 + "os": [ 14098 + "sunos" 14099 + ], 14100 + "engines": { 14101 + "node": ">=18" 14102 + } 14103 + }, 14104 + "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { 14105 + "version": "0.27.3", 14106 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", 14107 + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", 14108 + "cpu": [ 14109 + "arm64" 14110 + ], 14111 + "license": "MIT", 14112 + "optional": true, 14113 + "os": [ 14114 + "win32" 14115 + ], 14116 + "engines": { 14117 + "node": ">=18" 14118 + } 14119 + }, 14120 + "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { 14121 + "version": "0.27.3", 14122 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", 14123 + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", 14124 + "cpu": [ 14125 + "ia32" 14126 + ], 14127 + "license": "MIT", 14128 + "optional": true, 14129 + "os": [ 14130 + "win32" 14131 + ], 14132 + "engines": { 14133 + "node": ">=18" 14134 + } 14135 + }, 14136 + "node_modules/wrangler/node_modules/@esbuild/win32-x64": { 14137 + "version": "0.27.3", 14138 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", 14139 + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", 14140 + "cpu": [ 14141 + "x64" 14142 + ], 14143 + "license": "MIT", 14144 + "optional": true, 14145 + "os": [ 14146 + "win32" 14147 + ], 14148 + "engines": { 14149 + "node": ">=18" 14150 + } 14151 + }, 14152 + "node_modules/wrangler/node_modules/esbuild": { 14153 + "version": "0.27.3", 14154 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 14155 + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 14156 + "hasInstallScript": true, 14157 + "license": "MIT", 14158 + "bin": { 14159 + "esbuild": "bin/esbuild" 14160 + }, 14161 + "engines": { 14162 + "node": ">=18" 14163 + }, 14164 + "optionalDependencies": { 14165 + "@esbuild/aix-ppc64": "0.27.3", 14166 + "@esbuild/android-arm": "0.27.3", 14167 + "@esbuild/android-arm64": "0.27.3", 14168 + "@esbuild/android-x64": "0.27.3", 14169 + "@esbuild/darwin-arm64": "0.27.3", 14170 + "@esbuild/darwin-x64": "0.27.3", 14171 + "@esbuild/freebsd-arm64": "0.27.3", 14172 + "@esbuild/freebsd-x64": "0.27.3", 14173 + "@esbuild/linux-arm": "0.27.3", 14174 + "@esbuild/linux-arm64": "0.27.3", 14175 + "@esbuild/linux-ia32": "0.27.3", 14176 + "@esbuild/linux-loong64": "0.27.3", 14177 + "@esbuild/linux-mips64el": "0.27.3", 14178 + "@esbuild/linux-ppc64": "0.27.3", 14179 + "@esbuild/linux-riscv64": "0.27.3", 14180 + "@esbuild/linux-s390x": "0.27.3", 14181 + "@esbuild/linux-x64": "0.27.3", 14182 + "@esbuild/netbsd-arm64": "0.27.3", 14183 + "@esbuild/netbsd-x64": "0.27.3", 14184 + "@esbuild/openbsd-arm64": "0.27.3", 14185 + "@esbuild/openbsd-x64": "0.27.3", 14186 + "@esbuild/openharmony-arm64": "0.27.3", 14187 + "@esbuild/sunos-x64": "0.27.3", 14188 + "@esbuild/win32-arm64": "0.27.3", 14189 + "@esbuild/win32-ia32": "0.27.3", 14190 + "@esbuild/win32-x64": "0.27.3" 14191 + } 14192 + }, 13538 14193 "node_modules/wrap-ansi": { 13539 14194 "version": "5.1.0", 13540 14195 "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", ··· 13797 14452 }, 13798 14453 "funding": { 13799 14454 "url": "https://github.com/sponsors/sindresorhus" 14455 + } 14456 + }, 14457 + "node_modules/youch": { 14458 + "version": "4.1.0-beta.10", 14459 + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", 14460 + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", 14461 + "license": "MIT", 14462 + "dependencies": { 14463 + "@poppinss/colors": "^4.1.5", 14464 + "@poppinss/dumper": "^0.6.4", 14465 + "@speed-highlight/core": "^1.2.7", 14466 + "cookie": "^1.0.2", 14467 + "youch-core": "^0.3.3" 14468 + } 14469 + }, 14470 + "node_modules/youch-core": { 14471 + "version": "0.3.3", 14472 + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", 14473 + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", 14474 + "license": "MIT", 14475 + "dependencies": { 14476 + "@poppinss/exception": "^1.2.2", 14477 + "error-stack-parser-es": "^1.0.5" 13800 14478 } 13801 14479 }, 13802 14480 "node_modules/zod": {
+3 -2
package.json
··· 14 14 "preview": "astro preview", 15 15 "check": "astro check", 16 16 "test": "vitest run", 17 - "test:watch": "vitest" 17 + "test:watch": "vitest", 18 + "deploy": "astro build && wrangler deploy" 18 19 }, 19 20 "dependencies": { 20 - "@astrojs/node": "^10.1.3", 21 + "@astrojs/cloudflare": "^13.6.1", 21 22 "@astrojs/react": "5.0.7", 22 23 "@atproto/api": "^0.20.9", 23 24 "@atproto/common-web": "^0.5.0",
+1 -1
src/styles/global.css
··· 1 1 /** 2 - * SkyPress design system (SP6, Decision 0009). 2 + * SkyPress design system (SP6 — see docs/brand/brand-identity.md). 3 3 * "The open sky meets the typesetter's bench" — editorial letterpress + open air. 4 4 * Self-hosted, freely-licensed fonts; light + dark first-class. 5 5 */
+7
wrangler.toml
··· 1 + # Cloudflare Workers (Static Assets) config for SkyPress (SP7). 2 + # @astrojs/cloudflare merges this with the built worker (main = dist/server/entry.mjs, 3 + # assets = dist/client) into dist/server/wrangler.json at build time. 4 + name = "skypress" 5 + compatibility_date = "2025-09-23" 6 + # nodejs_compat lets sanitize-html's Node-style deps run on the edge (SP4 reader path). 7 + compatibility_flags = ["nodejs_compat"]