diff --git a/.wrangler b/.wrangler
new file mode 120000
index 0000000..ae406fb
--- /dev/null
+++ b/.wrangler
@@ -0,0 +1 @@
+/home/ddalex/.config/.wrangler/
\ No newline at end of file
diff --git a/GEMINI.md b/GEMINI.md
new file mode 100644
index 0000000..46b1f6c
--- /dev/null
+++ b/GEMINI.md
@@ -0,0 +1,15 @@
+# Project Context
+
+This app has been modified to be on the skeleton of a cloudflare app so it can be deployed on cloudflare.
+
+## Status
+- Fixed `wrangler deploy` error: "Worker written as a service-worker".
+- Removed Durable Objects and Workers logic to convert to a **Static Cloudflare Pages** site.
+- Restructured project:
+ - `src/apps/`: Contains all sub-applications (hexarow, german-trainer, snapmark).
+ - `src/landing/`: Contains the main landing page.
+ - `dist/`: Generated build output served by Cloudflare.
+- Created `scripts/build.js` to manage builds, inject a standard Navigation Bar, and generate static redirects.
+- Updated `wrangler.jsonc` and `package.json` for Cloudflare Pages deployment.
+- Successfully deployed to `https://cffyin.pages.dev` (and alias `master.cffyin.pages.dev`).
+
diff --git a/PLAN.md b/PLAN.md
new file mode 100644
index 0000000..4ae4781
--- /dev/null
+++ b/PLAN.md
@@ -0,0 +1,4 @@
+# Plan
+
+- [x] Analyze Logs and Create Documentation
+- [x] Fix Deployment Issues
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..8c5c92d
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1552 @@
+{
+ "name": "muddy-frost-c06d",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "muddy-frost-c06d",
+ "version": "0.0.0",
+ "devDependencies": {
+ "typescript": "^5.5.2",
+ "wrangler": "^4.54.0"
+ }
+ },
+ "node_modules/@cloudflare/kv-asset-handler": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.1.tgz",
+ "integrity": "sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==",
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "dependencies": {
+ "mime": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@cloudflare/unenv-preset": {
+ "version": "2.7.13",
+ "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.13.tgz",
+ "integrity": "sha512-NulO1H8R/DzsJguLC0ndMuk4Ufv0KSlN+E54ay9rn9ZCQo0kpAPwwh3LhgpZ96a3Dr6L9LqW57M4CqC34iLOvw==",
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "peerDependencies": {
+ "unenv": "2.0.0-rc.24",
+ "workerd": "^1.20251202.0"
+ },
+ "peerDependenciesMeta": {
+ "workerd": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@cloudflare/workerd-darwin-64": {
+ "version": "1.20251210.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20251210.0.tgz",
+ "integrity": "sha512-Nn9X1moUDERA9xtFdCQ2XpQXgAS9pOjiCxvOT8sVx9UJLAiBLkfSCGbpsYdarODGybXCpjRlc77Yppuolvt7oQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-darwin-arm64": {
+ "version": "1.20251210.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20251210.0.tgz",
+ "integrity": "sha512-Mg8iYIZQFnbevq/ls9eW/eneWTk/EE13Pej1MwfkY5et0jVpdHnvOLywy/o+QtMJFef1AjsqXGULwAneYyBfHw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-linux-64": {
+ "version": "1.20251210.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20251210.0.tgz",
+ "integrity": "sha512-kjC2fCZhZ2Gkm1biwk2qByAYpGguK5Gf5ic8owzSCUw0FOUfQxTZUT9Lp3gApxsfTLbbnLBrX/xzWjywH9QR4g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-linux-arm64": {
+ "version": "1.20251210.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20251210.0.tgz",
+ "integrity": "sha512-2IB37nXi7PZVQLa1OCuO7/6pNxqisRSO8DmCQ5x/3sezI5op1vwOxAcb1osAnuVsVN9bbvpw70HJvhKruFJTuA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-windows-64": {
+ "version": "1.20251210.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20251210.0.tgz",
+ "integrity": "sha512-Uaz6/9XE+D6E7pCY4OvkCuJHu7HcSDzeGcCGY1HLhojXhHd7yL52c3yfiyJdS8hPatiAa0nn5qSI/42+aTdDSw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz",
+ "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz",
+ "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz",
+ "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz",
+ "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz",
+ "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz",
+ "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz",
+ "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz",
+ "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz",
+ "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz",
+ "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz",
+ "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz",
+ "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz",
+ "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz",
+ "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz",
+ "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz",
+ "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz",
+ "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz",
+ "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz",
+ "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz",
+ "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz",
+ "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz",
+ "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz",
+ "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz",
+ "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz",
+ "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz",
+ "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz",
+ "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.5"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@poppinss/colors": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz",
+ "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^4.1.5"
+ }
+ },
+ "node_modules/@poppinss/dumper": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz",
+ "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@poppinss/colors": "^4.1.5",
+ "@sindresorhus/is": "^7.0.2",
+ "supports-color": "^10.0.0"
+ }
+ },
+ "node_modules/@poppinss/exception": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz",
+ "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.1.1.tgz",
+ "integrity": "sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
+ }
+ },
+ "node_modules/@speed-highlight/core": {
+ "version": "1.2.12",
+ "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.12.tgz",
+ "integrity": "sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/acorn": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/blake3-wasm": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz",
+ "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
+ "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/error-stack-parser-es": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
+ "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz",
+ "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.0",
+ "@esbuild/android-arm": "0.27.0",
+ "@esbuild/android-arm64": "0.27.0",
+ "@esbuild/android-x64": "0.27.0",
+ "@esbuild/darwin-arm64": "0.27.0",
+ "@esbuild/darwin-x64": "0.27.0",
+ "@esbuild/freebsd-arm64": "0.27.0",
+ "@esbuild/freebsd-x64": "0.27.0",
+ "@esbuild/linux-arm": "0.27.0",
+ "@esbuild/linux-arm64": "0.27.0",
+ "@esbuild/linux-ia32": "0.27.0",
+ "@esbuild/linux-loong64": "0.27.0",
+ "@esbuild/linux-mips64el": "0.27.0",
+ "@esbuild/linux-ppc64": "0.27.0",
+ "@esbuild/linux-riscv64": "0.27.0",
+ "@esbuild/linux-s390x": "0.27.0",
+ "@esbuild/linux-x64": "0.27.0",
+ "@esbuild/netbsd-arm64": "0.27.0",
+ "@esbuild/netbsd-x64": "0.27.0",
+ "@esbuild/openbsd-arm64": "0.27.0",
+ "@esbuild/openbsd-x64": "0.27.0",
+ "@esbuild/openharmony-arm64": "0.27.0",
+ "@esbuild/sunos-x64": "0.27.0",
+ "@esbuild/win32-arm64": "0.27.0",
+ "@esbuild/win32-ia32": "0.27.0",
+ "@esbuild/win32-x64": "0.27.0"
+ }
+ },
+ "node_modules/exit-hook": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
+ "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
+ "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/miniflare": {
+ "version": "4.20251210.0",
+ "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20251210.0.tgz",
+ "integrity": "sha512-k6kIoXwGVqlPZb0hcn+X7BmnK+8BjIIkusQPY22kCo2RaQJ/LzAjtxHQdGXerlHSnJyQivDQsL6BJHMpQfUFyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cspotcode/source-map-support": "0.8.1",
+ "acorn": "8.14.0",
+ "acorn-walk": "8.3.2",
+ "exit-hook": "2.2.1",
+ "glob-to-regexp": "0.4.1",
+ "sharp": "^0.33.5",
+ "stoppable": "1.1.0",
+ "undici": "7.14.0",
+ "workerd": "1.20251210.0",
+ "ws": "8.18.0",
+ "youch": "4.1.0-beta.10",
+ "zod": "3.22.3"
+ },
+ "bin": {
+ "miniflare": "bootstrap.js"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
+ "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
+ "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/stoppable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
+ "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz",
+ "integrity": "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
+ "node_modules/unenv": {
+ "version": "2.0.0-rc.24",
+ "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz",
+ "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3"
+ }
+ },
+ "node_modules/workerd": {
+ "version": "1.20251210.0",
+ "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20251210.0.tgz",
+ "integrity": "sha512-9MUUneP1BnRE9XAYi94FXxHmiLGbO75EHQZsgWqSiOXjoXSqJCw8aQbIEPxCy19TclEl/kHUFYce8ST2W+Qpjw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "workerd": "bin/workerd"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "optionalDependencies": {
+ "@cloudflare/workerd-darwin-64": "1.20251210.0",
+ "@cloudflare/workerd-darwin-arm64": "1.20251210.0",
+ "@cloudflare/workerd-linux-64": "1.20251210.0",
+ "@cloudflare/workerd-linux-arm64": "1.20251210.0",
+ "@cloudflare/workerd-windows-64": "1.20251210.0"
+ }
+ },
+ "node_modules/wrangler": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.54.0.tgz",
+ "integrity": "sha512-bANFsjDwJLbprYoBK+hUDZsVbUv2SqJd8QvArLIcZk+fPq4h/Ohtj5vkKXD3k0s2bD1DXLk08D+hYmeNH+xC6A==",
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "dependencies": {
+ "@cloudflare/kv-asset-handler": "0.4.1",
+ "@cloudflare/unenv-preset": "2.7.13",
+ "blake3-wasm": "2.1.5",
+ "esbuild": "0.27.0",
+ "miniflare": "4.20251210.0",
+ "path-to-regexp": "6.3.0",
+ "unenv": "2.0.0-rc.24",
+ "workerd": "1.20251210.0"
+ },
+ "bin": {
+ "wrangler": "bin/wrangler.js",
+ "wrangler2": "bin/wrangler.js"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@cloudflare/workers-types": "^4.20251210.0"
+ },
+ "peerDependenciesMeta": {
+ "@cloudflare/workers-types": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/youch": {
+ "version": "4.1.0-beta.10",
+ "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz",
+ "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@poppinss/colors": "^4.1.5",
+ "@poppinss/dumper": "^0.6.4",
+ "@speed-highlight/core": "^1.2.7",
+ "cookie": "^1.0.2",
+ "youch-core": "^0.3.3"
+ }
+ },
+ "node_modules/youch-core": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz",
+ "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@poppinss/exception": "^1.2.2",
+ "error-stack-parser-es": "^1.0.5"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.22.3",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz",
+ "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 6a89065..371914c 100644
--- a/package.json
+++ b/package.json
@@ -1,15 +1,16 @@
{
- "name": "muddy-frost-c06d",
- "version": "0.0.0",
+ "name": "cffy.in",
+ "version": "0.0.1",
"private": true,
"scripts": {
- "deploy": "wrangler deploy",
- "dev": "wrangler dev",
- "start": "wrangler dev",
- "cf-typegen": "wrangler types"
+ "deploy": "wrangler pages deploy dist --project-name cffyin",
+ "dev": "wrangler pages dev dist",
+ "start": "wrangler pages dev dist",
+ "cf-typegen": "wrangler types",
+ "build": "node scripts/build.js"
},
"devDependencies": {
"typescript": "^5.5.2",
"wrangler": "^4.54.0"
}
-}
\ No newline at end of file
+}
diff --git a/public/game.html b/public/game.html
deleted file mode 100644
index 6ff3925..0000000
--- a/public/game.html
+++ /dev/null
@@ -1 +0,0 @@
-
HEX-A-ROW! 5-in-line madness! ๐พ | cffy.in
๐ฒ
๐พ
๐ฎ
๐คฏ
๐พ HEX-A-ROW! ๐พ The classic 5-in-line game, but twisty! ๐
GAME OVER! Player 1 Wins! ๐๐๐
PLAY AGAIN?
\ No newline at end of file
diff --git a/public/german.html b/public/german.html
deleted file mode 100644
index 9464351..0000000
--- a/public/german.html
+++ /dev/null
@@ -1,11 +0,0 @@
-German Word Trainer | cffy.in Correct Choice! Now, type the word to confirm the spelling and earn 3 points.
Confirm Spelling Incorrect spelling will cost 1 point.
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
deleted file mode 100644
index 0187e7f..0000000
--- a/public/index.html
+++ /dev/null
@@ -1 +0,0 @@
-cffyin | cffy.in
โ
โจ
๐จ
Welcome to the Playground
A collection of small, delightful web experiments where education meets fun meets art.No ads. No tracking. Just vibes.
โ THE SITES โ Pick your adventure!
โ โค๏ธ โจ
Remember when the internet was fun? We do. No tracking, no ads, no BS. Just pure, caffeinated creativity.
ยฉ 2025 cffy.in โข Best viewed with coffee in hand โ
\ No newline at end of file
diff --git a/public/snapmark/.gitignore b/public/snapmark/.gitignore
deleted file mode 100644
index a547bf3..0000000
--- a/public/snapmark/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/scripts/build.js b/scripts/build.js
new file mode 100644
index 0000000..8a74170
--- /dev/null
+++ b/scripts/build.js
@@ -0,0 +1,149 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const { execSync } = require('node:child_process');
+
+const SRC_DIR = path.join(__dirname, '../src');
+const DIST_DIR = path.join(__dirname, '../dist');
+const APPS_DIR = path.join(SRC_DIR, 'apps');
+
+// Standard Navigation Template
+// Note: We use absolute paths (/) so they work from any depth, assuming Cloudflare Pages root.
+const NAV_TEMPLATE = `
+
+
+
+`;
+
+function cleanDist() {
+ if (fs.existsSync(DIST_DIR)) {
+ fs.rmSync(DIST_DIR, { recursive: true, force: true });
+ }
+ fs.mkdirSync(DIST_DIR);
+}
+
+function processHtml(filePath, outPath) {
+ let content = fs.readFileSync(filePath, 'utf-8');
+
+ // Simple regex-based injection.
+ // 1. Remove existing ... (if any) to avoid duplication.
+ // 2. Inject new NAV_TEMPLATE at the start of .
+
+ // Remove existing nav
+ content = content.replace(//i, '');
+
+ // Inject new nav
+ if (content.includes(']*)>/i, `
+${NAV_TEMPLATE}`);
+ } else {
+ // Fallback if no body tag found (unlikely for valid HTML)
+ content = NAV_TEMPLATE + content;
+ }
+
+ fs.writeFileSync(outPath, content);
+ console.log(`Processed ${filePath} -> ${outPath}`);
+}
+
+function buildLanding() {
+ const landingSrc = path.join(__dirname, '..', 'src', 'landing', 'index.html');
+ const landingDist = path.join(DIST_DIR, 'index.html');
+ if (fs.existsSync(landingSrc)) {
+ processHtml(landingSrc, landingDist);
+ } else {
+ console.error("Landing page not found!");
+ }
+}
+
+function buildApps() {
+ if (!fs.existsSync(APPS_DIR)) return;
+
+ const apps = fs.readdirSync(APPS_DIR);
+
+ apps.forEach(app => {
+ const appSrc = path.join(APPS_DIR, app);
+ const appDist = path.join(DIST_DIR, app);
+
+ if (!fs.statSync(appSrc).isDirectory()) return;
+
+ fs.mkdirSync(appDist, { recursive: true });
+
+ // Check if it's a Vite app (has package.json and vite.config.ts)
+ if (fs.existsSync(path.join(appSrc, 'package.json')) && fs.existsSync(path.join(appSrc, 'vite.config.ts'))) {
+ console.log(`Building Vite app: ${app}...`);
+ try {
+ // Install dependencies if needed
+ if (!fs.existsSync(path.join(appSrc, 'node_modules'))) {
+ console.log(`Installing dependencies for ${app}...`);
+ execSync('npm install', { cwd: appSrc, stdio: 'inherit' });
+ }
+
+ // Build
+ execSync('npm run build', { cwd: appSrc, stdio: 'inherit' });
+
+ // Copy dist contents
+ const viteDist = path.join(appSrc, 'dist');
+ if (fs.existsSync(viteDist)) {
+ fs.cpSync(viteDist, appDist, { recursive: true });
+ } else {
+ console.error(`Vite build failed to produce 'dist' for ${app}`);
+ }
+ } catch (e) {
+ console.error(`Failed to build ${app}:`, e);
+ }
+ } else {
+ // Standard HTML app
+ console.log(`Processing HTML app: ${app}...`);
+ const files = fs.readdirSync(appSrc);
+ files.forEach(file => {
+ const srcFile = path.join(appSrc, file);
+ const distFile = path.join(appDist, file);
+
+ if (file.endsWith('.html')) {
+ processHtml(srcFile, distFile);
+ } else {
+ fs.cpSync(srcFile, distFile, { recursive: true });
+ }
+ });
+ }
+ });
+}
+
+function createRedirect(filename, target) {
+ const content = `
+
+
+
+
+Redirecting...
+
+
+If you are not redirected automatically, follow this link .
+
+`;
+ const filePath = path.join(DIST_DIR, filename);
+ fs.writeFileSync(filePath, content);
+ console.log(`Created static redirect: ${filename} -> ${target}`);
+}
+
+function main() {
+ console.log("Starting Build...");
+ cleanDist();
+ buildLanding();
+ buildApps();
+
+ // Create static redirects for legacy paths
+ createRedirect('game.html', '/hexarow/');
+ createRedirect('german.html', '/german-trainer/');
+
+ console.log("Build Complete!");
+}
+
+main();
diff --git a/src/apps/german-trainer/index.html b/src/apps/german-trainer/index.html
new file mode 100644
index 0000000..4f5e965
--- /dev/null
+++ b/src/apps/german-trainer/index.html
@@ -0,0 +1,11 @@
+German Word Trainer | cffy.in Correct Choice! Now, type the word to confirm the spelling and earn 3 points.
Confirm Spelling Incorrect spelling will cost 1 point.
\ No newline at end of file
diff --git a/src/apps/hexarow/index.html b/src/apps/hexarow/index.html
new file mode 100644
index 0000000..938c452
--- /dev/null
+++ b/src/apps/hexarow/index.html
@@ -0,0 +1 @@
+HEX-A-ROW! 5-in-line madness! ๐พ | cffy.in
๐ฒ
๐พ
๐ฎ
๐คฏ
๐พ HEX-A-ROW! ๐พ The classic 5-in-line game, but twisty! ๐
GAME OVER! Player 1 Wins! ๐๐๐
PLAY AGAIN?
\ No newline at end of file
diff --git a/public/snapmark/App.tsx b/src/apps/snapmark/App.tsx
similarity index 100%
rename from public/snapmark/App.tsx
rename to src/apps/snapmark/App.tsx
diff --git a/public/snapmark/README.md b/src/apps/snapmark/README.md
similarity index 100%
rename from public/snapmark/README.md
rename to src/apps/snapmark/README.md
diff --git a/public/snapmark/components/EditorCanvas.tsx b/src/apps/snapmark/components/EditorCanvas.tsx
similarity index 100%
rename from public/snapmark/components/EditorCanvas.tsx
rename to src/apps/snapmark/components/EditorCanvas.tsx
diff --git a/public/snapmark/components/PropertiesPanel.tsx b/src/apps/snapmark/components/PropertiesPanel.tsx
similarity index 100%
rename from public/snapmark/components/PropertiesPanel.tsx
rename to src/apps/snapmark/components/PropertiesPanel.tsx
diff --git a/public/snapmark/components/Toolbar.tsx b/src/apps/snapmark/components/Toolbar.tsx
similarity index 100%
rename from public/snapmark/components/Toolbar.tsx
rename to src/apps/snapmark/components/Toolbar.tsx
diff --git a/public/snapmark/index.html b/src/apps/snapmark/index.html
similarity index 100%
rename from public/snapmark/index.html
rename to src/apps/snapmark/index.html
diff --git a/public/snapmark/index.tsx b/src/apps/snapmark/index.tsx
similarity index 100%
rename from public/snapmark/index.tsx
rename to src/apps/snapmark/index.tsx
diff --git a/public/snapmark/metadata.json b/src/apps/snapmark/metadata.json
similarity index 100%
rename from public/snapmark/metadata.json
rename to src/apps/snapmark/metadata.json
diff --git a/public/snapmark/package-lock.json b/src/apps/snapmark/package-lock.json
similarity index 100%
rename from public/snapmark/package-lock.json
rename to src/apps/snapmark/package-lock.json
diff --git a/public/snapmark/package.json b/src/apps/snapmark/package.json
similarity index 100%
rename from public/snapmark/package.json
rename to src/apps/snapmark/package.json
diff --git a/public/snapmark/tsconfig.json b/src/apps/snapmark/tsconfig.json
similarity index 100%
rename from public/snapmark/tsconfig.json
rename to src/apps/snapmark/tsconfig.json
diff --git a/public/snapmark/types.ts b/src/apps/snapmark/types.ts
similarity index 100%
rename from public/snapmark/types.ts
rename to src/apps/snapmark/types.ts
diff --git a/public/snapmark/utils.ts b/src/apps/snapmark/utils.ts
similarity index 100%
rename from public/snapmark/utils.ts
rename to src/apps/snapmark/utils.ts
diff --git a/public/snapmark/vite.config.ts b/src/apps/snapmark/vite.config.ts
similarity index 100%
rename from public/snapmark/vite.config.ts
rename to src/apps/snapmark/vite.config.ts
diff --git a/src/landing/index.html b/src/landing/index.html
new file mode 100644
index 0000000..4070260
--- /dev/null
+++ b/src/landing/index.html
@@ -0,0 +1 @@
+cffyin | cffy.in
โ
โจ
๐จ
Welcome to the Playground
A collection of small, delightful web experiments where education meets fun meets art.No ads. No tracking. Just vibes.
โ THE SITES โ Pick your adventure!
โ โค๏ธ โจ
Remember when the internet was fun? We do. No tracking, no ads, no BS. Just pure, caffeinated creativity.
ยฉ 2025 cffy.in โข Best viewed with coffee in hand โ
\ No newline at end of file
diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts
deleted file mode 100644
index 47d5b47..0000000
--- a/worker-configuration.d.ts
+++ /dev/null
@@ -1,10850 +0,0 @@
-/* eslint-disable */
-// Generated by Wrangler by running `wrangler types` (hash: 543f992083f7639592591242de0b7088)
-// Runtime types generated with workerd@1.20251210.0 2025-12-13
-declare namespace Cloudflare {
- interface GlobalProps {
- mainModule: typeof import("./src/index");
- durableNamespaces: "MyDurableObject";
- }
- interface Env {
- MY_DURABLE_OBJECT: DurableObjectNamespace;
- }
-}
-interface Env extends Cloudflare.Env {}
-
-// Begin runtime types
-/*! *****************************************************************************
-Copyright (c) Cloudflare. All rights reserved.
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License"); you may not use
-this file except in compliance with the License. You may obtain a copy of the
-License at http://www.apache.org/licenses/LICENSE-2.0
-THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
-WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
-MERCHANTABLITY OR NON-INFRINGEMENT.
-See the Apache Version 2.0 License for specific language governing permissions
-and limitations under the License.
-***************************************************************************** */
-/* eslint-disable */
-// noinspection JSUnusedGlobalSymbols
-declare var onmessage: never;
-/**
- * The **`DOMException`** interface represents an abnormal event (called an **exception**) that occurs as a result of calling a method or accessing a property of a web API.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException)
- */
-declare class DOMException extends Error {
- constructor(message?: string, name?: string);
- /**
- * The **`message`** read-only property of the a message or description associated with the given error name.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/message)
- */
- readonly message: string;
- /**
- * The **`name`** read-only property of the one of the strings associated with an error name.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/name)
- */
- readonly name: string;
- /**
- * The **`code`** read-only property of the DOMException interface returns one of the legacy error code constants, or `0` if none match.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/code)
- */
- readonly code: number;
- static readonly INDEX_SIZE_ERR: number;
- static readonly DOMSTRING_SIZE_ERR: number;
- static readonly HIERARCHY_REQUEST_ERR: number;
- static readonly WRONG_DOCUMENT_ERR: number;
- static readonly INVALID_CHARACTER_ERR: number;
- static readonly NO_DATA_ALLOWED_ERR: number;
- static readonly NO_MODIFICATION_ALLOWED_ERR: number;
- static readonly NOT_FOUND_ERR: number;
- static readonly NOT_SUPPORTED_ERR: number;
- static readonly INUSE_ATTRIBUTE_ERR: number;
- static readonly INVALID_STATE_ERR: number;
- static readonly SYNTAX_ERR: number;
- static readonly INVALID_MODIFICATION_ERR: number;
- static readonly NAMESPACE_ERR: number;
- static readonly INVALID_ACCESS_ERR: number;
- static readonly VALIDATION_ERR: number;
- static readonly TYPE_MISMATCH_ERR: number;
- static readonly SECURITY_ERR: number;
- static readonly NETWORK_ERR: number;
- static readonly ABORT_ERR: number;
- static readonly URL_MISMATCH_ERR: number;
- static readonly QUOTA_EXCEEDED_ERR: number;
- static readonly TIMEOUT_ERR: number;
- static readonly INVALID_NODE_TYPE_ERR: number;
- static readonly DATA_CLONE_ERR: number;
- get stack(): any;
- set stack(value: any);
-}
-type WorkerGlobalScopeEventMap = {
- fetch: FetchEvent;
- scheduled: ScheduledEvent;
- queue: QueueEvent;
- unhandledrejection: PromiseRejectionEvent;
- rejectionhandled: PromiseRejectionEvent;
-};
-declare abstract class WorkerGlobalScope extends EventTarget {
- EventTarget: typeof EventTarget;
-}
-/* The **`console`** object provides access to the debugging console (e.g., the Web console in Firefox). *
- * The **`console`** object provides access to the debugging console (e.g., the Web console in Firefox).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console)
- */
-interface Console {
- "assert"(condition?: boolean, ...data: any[]): void;
- /**
- * The **`console.clear()`** static method clears the console if possible.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/clear_static)
- */
- clear(): void;
- /**
- * The **`console.count()`** static method logs the number of times that this particular call to `count()` has been called.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/count_static)
- */
- count(label?: string): void;
- /**
- * The **`console.countReset()`** static method resets counter used with console/count_static.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countReset_static)
- */
- countReset(label?: string): void;
- /**
- * The **`console.debug()`** static method outputs a message to the console at the 'debug' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/debug_static)
- */
- debug(...data: any[]): void;
- /**
- * The **`console.dir()`** static method displays a list of the properties of the specified JavaScript object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dir_static)
- */
- dir(item?: any, options?: any): void;
- /**
- * The **`console.dirxml()`** static method displays an interactive tree of the descendant elements of the specified XML/HTML element.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dirxml_static)
- */
- dirxml(...data: any[]): void;
- /**
- * The **`console.error()`** static method outputs a message to the console at the 'error' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/error_static)
- */
- error(...data: any[]): void;
- /**
- * The **`console.group()`** static method creates a new inline group in the Web console log, causing any subsequent console messages to be indented by an additional level, until console/groupEnd_static is called.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/group_static)
- */
- group(...data: any[]): void;
- /**
- * The **`console.groupCollapsed()`** static method creates a new inline group in the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupCollapsed_static)
- */
- groupCollapsed(...data: any[]): void;
- /**
- * The **`console.groupEnd()`** static method exits the current inline group in the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupEnd_static)
- */
- groupEnd(): void;
- /**
- * The **`console.info()`** static method outputs a message to the console at the 'info' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/info_static)
- */
- info(...data: any[]): void;
- /**
- * The **`console.log()`** static method outputs a message to the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/log_static)
- */
- log(...data: any[]): void;
- /**
- * The **`console.table()`** static method displays tabular data as a table.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/table_static)
- */
- table(tabularData?: any, properties?: string[]): void;
- /**
- * The **`console.time()`** static method starts a timer you can use to track how long an operation takes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/time_static)
- */
- time(label?: string): void;
- /**
- * The **`console.timeEnd()`** static method stops a timer that was previously started by calling console/time_static.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeEnd_static)
- */
- timeEnd(label?: string): void;
- /**
- * The **`console.timeLog()`** static method logs the current value of a timer that was previously started by calling console/time_static.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeLog_static)
- */
- timeLog(label?: string, ...data: any[]): void;
- timeStamp(label?: string): void;
- /**
- * The **`console.trace()`** static method outputs a stack trace to the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/trace_static)
- */
- trace(...data: any[]): void;
- /**
- * The **`console.warn()`** static method outputs a warning message to the console at the 'warning' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/warn_static)
- */
- warn(...data: any[]): void;
-}
-declare const console: Console;
-type BufferSource = ArrayBufferView | ArrayBuffer;
-type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;
-declare namespace WebAssembly {
- class CompileError extends Error {
- constructor(message?: string);
- }
- class RuntimeError extends Error {
- constructor(message?: string);
- }
- type ValueType = "anyfunc" | "externref" | "f32" | "f64" | "i32" | "i64" | "v128";
- interface GlobalDescriptor {
- value: ValueType;
- mutable?: boolean;
- }
- class Global {
- constructor(descriptor: GlobalDescriptor, value?: any);
- value: any;
- valueOf(): any;
- }
- type ImportValue = ExportValue | number;
- type ModuleImports = Record;
- type Imports = Record;
- type ExportValue = Function | Global | Memory | Table;
- type Exports = Record;
- class Instance {
- constructor(module: Module, imports?: Imports);
- readonly exports: Exports;
- }
- interface MemoryDescriptor {
- initial: number;
- maximum?: number;
- shared?: boolean;
- }
- class Memory {
- constructor(descriptor: MemoryDescriptor);
- readonly buffer: ArrayBuffer;
- grow(delta: number): number;
- }
- type ImportExportKind = "function" | "global" | "memory" | "table";
- interface ModuleExportDescriptor {
- kind: ImportExportKind;
- name: string;
- }
- interface ModuleImportDescriptor {
- kind: ImportExportKind;
- module: string;
- name: string;
- }
- abstract class Module {
- static customSections(module: Module, sectionName: string): ArrayBuffer[];
- static exports(module: Module): ModuleExportDescriptor[];
- static imports(module: Module): ModuleImportDescriptor[];
- }
- type TableKind = "anyfunc" | "externref";
- interface TableDescriptor {
- element: TableKind;
- initial: number;
- maximum?: number;
- }
- class Table {
- constructor(descriptor: TableDescriptor, value?: any);
- readonly length: number;
- get(index: number): any;
- grow(delta: number, value?: any): number;
- set(index: number, value?: any): void;
- }
- function instantiate(module: Module, imports?: Imports): Promise;
- function validate(bytes: BufferSource): boolean;
-}
-/**
- * The **`ServiceWorkerGlobalScope`** interface of the Service Worker API represents the global execution context of a service worker.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope)
- */
-interface ServiceWorkerGlobalScope extends WorkerGlobalScope {
- DOMException: typeof DOMException;
- WorkerGlobalScope: typeof WorkerGlobalScope;
- btoa(data: string): string;
- atob(data: string): string;
- setTimeout(callback: (...args: any[]) => void, msDelay?: number): number;
- setTimeout(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
- clearTimeout(timeoutId: number | null): void;
- setInterval(callback: (...args: any[]) => void, msDelay?: number): number;
- setInterval(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
- clearInterval(timeoutId: number | null): void;
- queueMicrotask(task: Function): void;
- structuredClone(value: T, options?: StructuredSerializeOptions): T;
- reportError(error: any): void;
- fetch(input: RequestInfo | URL, init?: RequestInit): Promise;
- self: ServiceWorkerGlobalScope;
- crypto: Crypto;
- caches: CacheStorage;
- scheduler: Scheduler;
- performance: Performance;
- Cloudflare: Cloudflare;
- readonly origin: string;
- Event: typeof Event;
- ExtendableEvent: typeof ExtendableEvent;
- CustomEvent: typeof CustomEvent;
- PromiseRejectionEvent: typeof PromiseRejectionEvent;
- FetchEvent: typeof FetchEvent;
- TailEvent: typeof TailEvent;
- TraceEvent: typeof TailEvent;
- ScheduledEvent: typeof ScheduledEvent;
- MessageEvent: typeof MessageEvent;
- CloseEvent: typeof CloseEvent;
- ReadableStreamDefaultReader: typeof ReadableStreamDefaultReader;
- ReadableStreamBYOBReader: typeof ReadableStreamBYOBReader;
- ReadableStream: typeof ReadableStream;
- WritableStream: typeof WritableStream;
- WritableStreamDefaultWriter: typeof WritableStreamDefaultWriter;
- TransformStream: typeof TransformStream;
- ByteLengthQueuingStrategy: typeof ByteLengthQueuingStrategy;
- CountQueuingStrategy: typeof CountQueuingStrategy;
- ErrorEvent: typeof ErrorEvent;
- MessageChannel: typeof MessageChannel;
- MessagePort: typeof MessagePort;
- EventSource: typeof EventSource;
- ReadableStreamBYOBRequest: typeof ReadableStreamBYOBRequest;
- ReadableStreamDefaultController: typeof ReadableStreamDefaultController;
- ReadableByteStreamController: typeof ReadableByteStreamController;
- WritableStreamDefaultController: typeof WritableStreamDefaultController;
- TransformStreamDefaultController: typeof TransformStreamDefaultController;
- CompressionStream: typeof CompressionStream;
- DecompressionStream: typeof DecompressionStream;
- TextEncoderStream: typeof TextEncoderStream;
- TextDecoderStream: typeof TextDecoderStream;
- Headers: typeof Headers;
- Body: typeof Body;
- Request: typeof Request;
- Response: typeof Response;
- WebSocket: typeof WebSocket;
- WebSocketPair: typeof WebSocketPair;
- WebSocketRequestResponsePair: typeof WebSocketRequestResponsePair;
- AbortController: typeof AbortController;
- AbortSignal: typeof AbortSignal;
- TextDecoder: typeof TextDecoder;
- TextEncoder: typeof TextEncoder;
- navigator: Navigator;
- Navigator: typeof Navigator;
- URL: typeof URL;
- URLSearchParams: typeof URLSearchParams;
- URLPattern: typeof URLPattern;
- Blob: typeof Blob;
- File: typeof File;
- FormData: typeof FormData;
- Crypto: typeof Crypto;
- SubtleCrypto: typeof SubtleCrypto;
- CryptoKey: typeof CryptoKey;
- CacheStorage: typeof CacheStorage;
- Cache: typeof Cache;
- FixedLengthStream: typeof FixedLengthStream;
- IdentityTransformStream: typeof IdentityTransformStream;
- HTMLRewriter: typeof HTMLRewriter;
-}
-declare function addEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetAddEventListenerOptions | boolean): void;
-declare function removeEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetEventListenerOptions | boolean): void;
-/**
- * The **`dispatchEvent()`** method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
- */
-declare function dispatchEvent(event: WorkerGlobalScopeEventMap[keyof WorkerGlobalScopeEventMap]): boolean;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */
-declare function btoa(data: string): string;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */
-declare function atob(data: string): string;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */
-declare function setTimeout(callback: (...args: any[]) => void, msDelay?: number): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */
-declare function setTimeout(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearTimeout) */
-declare function clearTimeout(timeoutId: number | null): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */
-declare function setInterval(callback: (...args: any[]) => void, msDelay?: number): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */
-declare function setInterval(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearInterval) */
-declare function clearInterval(timeoutId: number | null): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/queueMicrotask) */
-declare function queueMicrotask(task: Function): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/structuredClone) */
-declare function structuredClone(value: T, options?: StructuredSerializeOptions): T;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/reportError) */
-declare function reportError(error: any): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch) */
-declare function fetch(input: RequestInfo | URL, init?: RequestInit): Promise;
-declare const self: ServiceWorkerGlobalScope;
-/**
-* The Web Crypto API provides a set of low-level functions for common cryptographic tasks.
-* The Workers runtime implements the full surface of this API, but with some differences in
-* the [supported algorithms](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/#supported-algorithms)
-* compared to those implemented in most browsers.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/)
-*/
-declare const crypto: Crypto;
-/**
-* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)
-*/
-declare const caches: CacheStorage;
-declare const scheduler: Scheduler;
-/**
-* The Workers runtime supports a subset of the Performance API, used to measure timing and performance,
-* as well as timing of subrequests and other operations.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/performance/)
-*/
-declare const performance: Performance;
-declare const Cloudflare: Cloudflare;
-declare const origin: string;
-declare const navigator: Navigator;
-interface TestController {
-}
-interface ExecutionContext {
- waitUntil(promise: Promise): void;
- passThroughOnException(): void;
- readonly exports: Cloudflare.Exports;
- readonly props: Props;
-}
-type ExportedHandlerFetchHandler = (request: Request>, env: Env, ctx: ExecutionContext) => Response | Promise;
-type ExportedHandlerTailHandler = (events: TraceItem[], env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerTraceHandler = (traces: TraceItem[], env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerTailStreamHandler = (event: TailStream.TailEvent, env: Env, ctx: ExecutionContext) => TailStream.TailEventHandlerType | Promise;
-type ExportedHandlerScheduledHandler = (controller: ScheduledController, env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerQueueHandler = (batch: MessageBatch, env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerTestHandler = (controller: TestController, env: Env, ctx: ExecutionContext) => void | Promise;
-interface ExportedHandler {
- fetch?: ExportedHandlerFetchHandler;
- tail?: ExportedHandlerTailHandler;
- trace?: ExportedHandlerTraceHandler;
- tailStream?: ExportedHandlerTailStreamHandler;
- scheduled?: ExportedHandlerScheduledHandler;
- test?: ExportedHandlerTestHandler;
- email?: EmailExportedHandler;
- queue?: ExportedHandlerQueueHandler;
-}
-interface StructuredSerializeOptions {
- transfer?: any[];
-}
-declare abstract class Navigator {
- sendBeacon(url: string, body?: BodyInit): boolean;
- readonly userAgent: string;
- readonly hardwareConcurrency: number;
- readonly language: string;
- readonly languages: string[];
-}
-interface AlarmInvocationInfo {
- readonly isRetry: boolean;
- readonly retryCount: number;
-}
-interface Cloudflare {
- readonly compatibilityFlags: Record;
-}
-interface DurableObject {
- fetch(request: Request): Response | Promise;
- alarm?(alarmInfo?: AlarmInvocationInfo): void | Promise;
- webSocketMessage?(ws: WebSocket, message: string | ArrayBuffer): void | Promise;
- webSocketClose?(ws: WebSocket, code: number, reason: string, wasClean: boolean): void | Promise;
- webSocketError?(ws: WebSocket, error: unknown): void | Promise;
-}
-type DurableObjectStub = Fetcher & {
- readonly id: DurableObjectId;
- readonly name?: string;
-};
-interface DurableObjectId {
- toString(): string;
- equals(other: DurableObjectId): boolean;
- readonly name?: string;
-}
-declare abstract class DurableObjectNamespace {
- newUniqueId(options?: DurableObjectNamespaceNewUniqueIdOptions): DurableObjectId;
- idFromName(name: string): DurableObjectId;
- idFromString(id: string): DurableObjectId;
- get(id: DurableObjectId, options?: DurableObjectNamespaceGetDurableObjectOptions): DurableObjectStub;
- getByName(name: string, options?: DurableObjectNamespaceGetDurableObjectOptions): DurableObjectStub;
- jurisdiction(jurisdiction: DurableObjectJurisdiction): DurableObjectNamespace;
-}
-type DurableObjectJurisdiction = "eu" | "fedramp" | "fedramp-high";
-interface DurableObjectNamespaceNewUniqueIdOptions {
- jurisdiction?: DurableObjectJurisdiction;
-}
-type DurableObjectLocationHint = "wnam" | "enam" | "sam" | "weur" | "eeur" | "apac" | "oc" | "afr" | "me";
-interface DurableObjectNamespaceGetDurableObjectOptions {
- locationHint?: DurableObjectLocationHint;
-}
-interface DurableObjectClass<_T extends Rpc.DurableObjectBranded | undefined = undefined> {
-}
-interface DurableObjectState {
- waitUntil(promise: Promise): void;
- readonly exports: Cloudflare.Exports;
- readonly props: Props;
- readonly id: DurableObjectId;
- readonly storage: DurableObjectStorage;
- container?: Container;
- blockConcurrencyWhile(callback: () => Promise): Promise;
- acceptWebSocket(ws: WebSocket, tags?: string[]): void;
- getWebSockets(tag?: string): WebSocket[];
- setWebSocketAutoResponse(maybeReqResp?: WebSocketRequestResponsePair): void;
- getWebSocketAutoResponse(): WebSocketRequestResponsePair | null;
- getWebSocketAutoResponseTimestamp(ws: WebSocket): Date | null;
- setHibernatableWebSocketEventTimeout(timeoutMs?: number): void;
- getHibernatableWebSocketEventTimeout(): number | null;
- getTags(ws: WebSocket): string[];
- abort(reason?: string): void;
-}
-interface DurableObjectTransaction {
- get(key: string, options?: DurableObjectGetOptions): Promise;
- get(keys: string[], options?: DurableObjectGetOptions): Promise>;
- list(options?: DurableObjectListOptions): Promise>;
- put(key: string, value: T, options?: DurableObjectPutOptions): Promise;
- put(entries: Record, options?: DurableObjectPutOptions): Promise;
- delete(key: string, options?: DurableObjectPutOptions): Promise;
- delete(keys: string[], options?: DurableObjectPutOptions): Promise;
- rollback(): void;
- getAlarm(options?: DurableObjectGetAlarmOptions): Promise;
- setAlarm(scheduledTime: number | Date, options?: DurableObjectSetAlarmOptions): Promise;
- deleteAlarm(options?: DurableObjectSetAlarmOptions): Promise;
-}
-interface DurableObjectStorage {
- get(key: string, options?: DurableObjectGetOptions): Promise;
- get(keys: string[], options?: DurableObjectGetOptions): Promise>;
- list(options?: DurableObjectListOptions): Promise>;
- put(key: string, value: T, options?: DurableObjectPutOptions): Promise;
- put(entries: Record, options?: DurableObjectPutOptions): Promise;
- delete(key: string, options?: DurableObjectPutOptions): Promise;
- delete(keys: string[], options?: DurableObjectPutOptions): Promise;
- deleteAll(options?: DurableObjectPutOptions): Promise;
- transaction(closure: (txn: DurableObjectTransaction) => Promise): Promise;
- getAlarm(options?: DurableObjectGetAlarmOptions): Promise;
- setAlarm(scheduledTime: number | Date, options?: DurableObjectSetAlarmOptions): Promise;
- deleteAlarm(options?: DurableObjectSetAlarmOptions): Promise;
- sync(): Promise;
- sql: SqlStorage;
- kv: SyncKvStorage;
- transactionSync(closure: () => T): T;
- getCurrentBookmark(): Promise;
- getBookmarkForTime(timestamp: number | Date): Promise;
- onNextSessionRestoreBookmark(bookmark: string): Promise;
-}
-interface DurableObjectListOptions {
- start?: string;
- startAfter?: string;
- end?: string;
- prefix?: string;
- reverse?: boolean;
- limit?: number;
- allowConcurrency?: boolean;
- noCache?: boolean;
-}
-interface DurableObjectGetOptions {
- allowConcurrency?: boolean;
- noCache?: boolean;
-}
-interface DurableObjectGetAlarmOptions {
- allowConcurrency?: boolean;
-}
-interface DurableObjectPutOptions {
- allowConcurrency?: boolean;
- allowUnconfirmed?: boolean;
- noCache?: boolean;
-}
-interface DurableObjectSetAlarmOptions {
- allowConcurrency?: boolean;
- allowUnconfirmed?: boolean;
-}
-declare class WebSocketRequestResponsePair {
- constructor(request: string, response: string);
- get request(): string;
- get response(): string;
-}
-interface AnalyticsEngineDataset {
- writeDataPoint(event?: AnalyticsEngineDataPoint): void;
-}
-interface AnalyticsEngineDataPoint {
- indexes?: ((ArrayBuffer | string) | null)[];
- doubles?: number[];
- blobs?: ((ArrayBuffer | string) | null)[];
-}
-/**
- * The **`Event`** interface represents an event which takes place on an `EventTarget`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event)
- */
-declare class Event {
- constructor(type: string, init?: EventInit);
- /**
- * The **`type`** read-only property of the Event interface returns a string containing the event's type.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/type)
- */
- get type(): string;
- /**
- * The **`eventPhase`** read-only property of the being evaluated.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/eventPhase)
- */
- get eventPhase(): number;
- /**
- * The read-only **`composed`** property of the or not the event will propagate across the shadow DOM boundary into the standard DOM.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composed)
- */
- get composed(): boolean;
- /**
- * The **`bubbles`** read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/bubbles)
- */
- get bubbles(): boolean;
- /**
- * The **`cancelable`** read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelable)
- */
- get cancelable(): boolean;
- /**
- * The **`defaultPrevented`** read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/defaultPrevented)
- */
- get defaultPrevented(): boolean;
- /**
- * The Event property **`returnValue`** indicates whether the default action for this event has been prevented or not.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/returnValue)
- */
- get returnValue(): boolean;
- /**
- * The **`currentTarget`** read-only property of the Event interface identifies the element to which the event handler has been attached.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/currentTarget)
- */
- get currentTarget(): EventTarget | undefined;
- /**
- * The read-only **`target`** property of the dispatched.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/target)
- */
- get target(): EventTarget | undefined;
- /**
- * The deprecated **`Event.srcElement`** is an alias for the Event.target property.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/srcElement)
- */
- get srcElement(): EventTarget | undefined;
- /**
- * The **`timeStamp`** read-only property of the Event interface returns the time (in milliseconds) at which the event was created.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/timeStamp)
- */
- get timeStamp(): number;
- /**
- * The **`isTrusted`** read-only property of the when the event was generated by the user agent (including via user actions and programmatic methods such as HTMLElement.focus()), and `false` when the event was dispatched via The only exception is the `click` event, which initializes the `isTrusted` property to `false` in user agents.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/isTrusted)
- */
- get isTrusted(): boolean;
- /**
- * The **`cancelBubble`** property of the Event interface is deprecated.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)
- */
- get cancelBubble(): boolean;
- /**
- * The **`cancelBubble`** property of the Event interface is deprecated.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)
- */
- set cancelBubble(value: boolean);
- /**
- * The **`stopImmediatePropagation()`** method of the If several listeners are attached to the same element for the same event type, they are called in the order in which they were added.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopImmediatePropagation)
- */
- stopImmediatePropagation(): void;
- /**
- * The **`preventDefault()`** method of the Event interface tells the user agent that if the event does not get explicitly handled, its default action should not be taken as it normally would be.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/preventDefault)
- */
- preventDefault(): void;
- /**
- * The **`stopPropagation()`** method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopPropagation)
- */
- stopPropagation(): void;
- /**
- * The **`composedPath()`** method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composedPath)
- */
- composedPath(): EventTarget[];
- static readonly NONE: number;
- static readonly CAPTURING_PHASE: number;
- static readonly AT_TARGET: number;
- static readonly BUBBLING_PHASE: number;
-}
-interface EventInit {
- bubbles?: boolean;
- cancelable?: boolean;
- composed?: boolean;
-}
-type EventListener = (event: EventType) => void;
-interface EventListenerObject {
- handleEvent(event: EventType): void;
-}
-type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
-/**
- * The **`EventTarget`** interface is implemented by objects that can receive events and may have listeners for them.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget)
- */
-declare class EventTarget = Record> {
- constructor();
- /**
- * The **`addEventListener()`** method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
- */
- addEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetAddEventListenerOptions | boolean): void;
- /**
- * The **`removeEventListener()`** method of the EventTarget interface removes an event listener previously registered with EventTarget.addEventListener() from the target.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
- */
- removeEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetEventListenerOptions | boolean): void;
- /**
- * The **`dispatchEvent()`** method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
- */
- dispatchEvent(event: EventMap[keyof EventMap]): boolean;
-}
-interface EventTargetEventListenerOptions {
- capture?: boolean;
-}
-interface EventTargetAddEventListenerOptions {
- capture?: boolean;
- passive?: boolean;
- once?: boolean;
- signal?: AbortSignal;
-}
-interface EventTargetHandlerObject {
- handleEvent: (event: Event) => any | undefined;
-}
-/**
- * The **`AbortController`** interface represents a controller object that allows you to abort one or more Web requests as and when desired.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController)
- */
-declare class AbortController {
- constructor();
- /**
- * The **`signal`** read-only property of the AbortController interface returns an AbortSignal object instance, which can be used to communicate with/abort an asynchronous operation as desired.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/signal)
- */
- get signal(): AbortSignal;
- /**
- * The **`abort()`** method of the AbortController interface aborts an asynchronous operation before it has completed.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/abort)
- */
- abort(reason?: any): void;
-}
-/**
- * The **`AbortSignal`** interface represents a signal object that allows you to communicate with an asynchronous operation (such as a fetch request) and abort it if required via an AbortController object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal)
- */
-declare abstract class AbortSignal extends EventTarget {
- /**
- * The **`AbortSignal.abort()`** static method returns an AbortSignal that is already set as aborted (and which does not trigger an AbortSignal/abort_event event).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_static)
- */
- static abort(reason?: any): AbortSignal;
- /**
- * The **`AbortSignal.timeout()`** static method returns an AbortSignal that will automatically abort after a specified time.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/timeout_static)
- */
- static timeout(delay: number): AbortSignal;
- /**
- * The **`AbortSignal.any()`** static method takes an iterable of abort signals and returns an AbortSignal.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/any_static)
- */
- static any(signals: AbortSignal[]): AbortSignal;
- /**
- * The **`aborted`** read-only property returns a value that indicates whether the asynchronous operations the signal is communicating with are aborted (`true`) or not (`false`).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted)
- */
- get aborted(): boolean;
- /**
- * The **`reason`** read-only property returns a JavaScript value that indicates the abort reason.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/reason)
- */
- get reason(): any;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event) */
- get onabort(): any | null;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event) */
- set onabort(value: any | null);
- /**
- * The **`throwIfAborted()`** method throws the signal's abort AbortSignal.reason if the signal has been aborted; otherwise it does nothing.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/throwIfAborted)
- */
- throwIfAborted(): void;
-}
-interface Scheduler {
- wait(delay: number, maybeOptions?: SchedulerWaitOptions): Promise;
-}
-interface SchedulerWaitOptions {
- signal?: AbortSignal;
-}
-/**
- * The **`ExtendableEvent`** interface extends the lifetime of the `install` and `activate` events dispatched on the global scope as part of the service worker lifecycle.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ExtendableEvent)
- */
-declare abstract class ExtendableEvent extends Event {
- /**
- * The **`ExtendableEvent.waitUntil()`** method tells the event dispatcher that work is ongoing.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ExtendableEvent/waitUntil)
- */
- waitUntil(promise: Promise): void;
-}
-/**
- * The **`CustomEvent`** interface represents events initialized by an application for any purpose.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent)
- */
-declare class CustomEvent extends Event {
- constructor(type: string, init?: CustomEventCustomEventInit);
- /**
- * The read-only **`detail`** property of the CustomEvent interface returns any data passed when initializing the event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent/detail)
- */
- get detail(): T;
-}
-interface CustomEventCustomEventInit {
- bubbles?: boolean;
- cancelable?: boolean;
- composed?: boolean;
- detail?: any;
-}
-/**
- * The **`Blob`** interface represents a blob, which is a file-like object of immutable, raw data; they can be read as text or binary data, or converted into a ReadableStream so its methods can be used for processing the data.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob)
- */
-declare class Blob {
- constructor(type?: ((ArrayBuffer | ArrayBufferView) | string | Blob)[], options?: BlobOptions);
- /**
- * The **`size`** read-only property of the Blob interface returns the size of the Blob or File in bytes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size)
- */
- get size(): number;
- /**
- * The **`type`** read-only property of the Blob interface returns the MIME type of the file.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type)
- */
- get type(): string;
- /**
- * The **`slice()`** method of the Blob interface creates and returns a new `Blob` object which contains data from a subset of the blob on which it's called.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice)
- */
- slice(start?: number, end?: number, type?: string): Blob;
- /**
- * The **`arrayBuffer()`** method of the Blob interface returns a Promise that resolves with the contents of the blob as binary data contained in an ArrayBuffer.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/arrayBuffer)
- */
- arrayBuffer(): Promise;
- /**
- * The **`bytes()`** method of the Blob interface returns a Promise that resolves with a Uint8Array containing the contents of the blob as an array of bytes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/bytes)
- */
- bytes(): Promise;
- /**
- * The **`text()`** method of the string containing the contents of the blob, interpreted as UTF-8.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text)
- */
- text(): Promise;
- /**
- * The **`stream()`** method of the Blob interface returns a ReadableStream which upon reading returns the data contained within the `Blob`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/stream)
- */
- stream(): ReadableStream;
-}
-interface BlobOptions {
- type?: string;
-}
-/**
- * The **`File`** interface provides information about files and allows JavaScript in a web page to access their content.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File)
- */
-declare class File extends Blob {
- constructor(bits: ((ArrayBuffer | ArrayBufferView) | string | Blob)[] | undefined, name: string, options?: FileOptions);
- /**
- * The **`name`** read-only property of the File interface returns the name of the file represented by a File object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name)
- */
- get name(): string;
- /**
- * The **`lastModified`** read-only property of the File interface provides the last modified date of the file as the number of milliseconds since the Unix epoch (January 1, 1970 at midnight).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified)
- */
- get lastModified(): number;
-}
-interface FileOptions {
- type?: string;
- lastModified?: number;
-}
-/**
-* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)
-*/
-declare abstract class CacheStorage {
- /**
- * The **`open()`** method of the the Cache object matching the `cacheName`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/open)
- */
- open(cacheName: string): Promise;
- readonly default: Cache;
-}
-/**
-* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)
-*/
-declare abstract class Cache {
- /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#delete) */
- delete(request: RequestInfo | URL, options?: CacheQueryOptions): Promise;
- /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#match) */
- match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise;
- /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#put) */
- put(request: RequestInfo | URL, response: Response): Promise;
-}
-interface CacheQueryOptions {
- ignoreMethod?: boolean;
-}
-/**
-* The Web Crypto API provides a set of low-level functions for common cryptographic tasks.
-* The Workers runtime implements the full surface of this API, but with some differences in
-* the [supported algorithms](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/#supported-algorithms)
-* compared to those implemented in most browsers.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/)
-*/
-declare abstract class Crypto {
- /**
- * The **`Crypto.subtle`** read-only property returns a cryptographic operations.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/subtle)
- */
- get subtle(): SubtleCrypto;
- /**
- * The **`Crypto.getRandomValues()`** method lets you get cryptographically strong random values.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/getRandomValues)
- */
- getRandomValues(buffer: T): T;
- /**
- * The **`randomUUID()`** method of the Crypto interface is used to generate a v4 UUID using a cryptographically secure random number generator.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/randomUUID)
- */
- randomUUID(): string;
- DigestStream: typeof DigestStream;
-}
-/**
- * The **`SubtleCrypto`** interface of the Web Crypto API provides a number of low-level cryptographic functions.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto)
- */
-declare abstract class SubtleCrypto {
- /**
- * The **`encrypt()`** method of the SubtleCrypto interface encrypts data.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/encrypt)
- */
- encrypt(algorithm: string | SubtleCryptoEncryptAlgorithm, key: CryptoKey, plainText: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`decrypt()`** method of the SubtleCrypto interface decrypts some encrypted data.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/decrypt)
- */
- decrypt(algorithm: string | SubtleCryptoEncryptAlgorithm, key: CryptoKey, cipherText: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`sign()`** method of the SubtleCrypto interface generates a digital signature.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/sign)
- */
- sign(algorithm: string | SubtleCryptoSignAlgorithm, key: CryptoKey, data: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`verify()`** method of the SubtleCrypto interface verifies a digital signature.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/verify)
- */
- verify(algorithm: string | SubtleCryptoSignAlgorithm, key: CryptoKey, signature: ArrayBuffer | ArrayBufferView, data: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`digest()`** method of the SubtleCrypto interface generates a _digest_ of the given data, using the specified hash function.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/digest)
- */
- digest(algorithm: string | SubtleCryptoHashAlgorithm, data: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`generateKey()`** method of the SubtleCrypto interface is used to generate a new key (for symmetric algorithms) or key pair (for public-key algorithms).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey)
- */
- generateKey(algorithm: string | SubtleCryptoGenerateKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- /**
- * The **`deriveKey()`** method of the SubtleCrypto interface can be used to derive a secret key from a master key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveKey)
- */
- deriveKey(algorithm: string | SubtleCryptoDeriveKeyAlgorithm, baseKey: CryptoKey, derivedKeyAlgorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- /**
- * The **`deriveBits()`** method of the key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveBits)
- */
- deriveBits(algorithm: string | SubtleCryptoDeriveKeyAlgorithm, baseKey: CryptoKey, length?: number | null): Promise;
- /**
- * The **`importKey()`** method of the SubtleCrypto interface imports a key: that is, it takes as input a key in an external, portable format and gives you a CryptoKey object that you can use in the Web Crypto API.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/importKey)
- */
- importKey(format: string, keyData: (ArrayBuffer | ArrayBufferView) | JsonWebKey, algorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- /**
- * The **`exportKey()`** method of the SubtleCrypto interface exports a key: that is, it takes as input a CryptoKey object and gives you the key in an external, portable format.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey)
- */
- exportKey(format: string, key: CryptoKey): Promise;
- /**
- * The **`wrapKey()`** method of the SubtleCrypto interface 'wraps' a key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/wrapKey)
- */
- wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string | SubtleCryptoEncryptAlgorithm): Promise;
- /**
- * The **`unwrapKey()`** method of the SubtleCrypto interface 'unwraps' a key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/unwrapKey)
- */
- unwrapKey(format: string, wrappedKey: ArrayBuffer | ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | SubtleCryptoEncryptAlgorithm, unwrappedKeyAlgorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- timingSafeEqual(a: ArrayBuffer | ArrayBufferView, b: ArrayBuffer | ArrayBufferView): boolean;
-}
-/**
- * The **`CryptoKey`** interface of the Web Crypto API represents a cryptographic key obtained from one of the SubtleCrypto methods SubtleCrypto.generateKey, SubtleCrypto.deriveKey, SubtleCrypto.importKey, or SubtleCrypto.unwrapKey.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey)
- */
-declare abstract class CryptoKey {
- /**
- * The read-only **`type`** property of the CryptoKey interface indicates which kind of key is represented by the object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/type)
- */
- readonly type: string;
- /**
- * The read-only **`extractable`** property of the CryptoKey interface indicates whether or not the key may be extracted using `SubtleCrypto.exportKey()` or `SubtleCrypto.wrapKey()`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/extractable)
- */
- readonly extractable: boolean;
- /**
- * The read-only **`algorithm`** property of the CryptoKey interface returns an object describing the algorithm for which this key can be used, and any associated extra parameters.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/algorithm)
- */
- readonly algorithm: CryptoKeyKeyAlgorithm | CryptoKeyAesKeyAlgorithm | CryptoKeyHmacKeyAlgorithm | CryptoKeyRsaKeyAlgorithm | CryptoKeyEllipticKeyAlgorithm | CryptoKeyArbitraryKeyAlgorithm;
- /**
- * The read-only **`usages`** property of the CryptoKey interface indicates what can be done with the key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/usages)
- */
- readonly usages: string[];
-}
-interface CryptoKeyPair {
- publicKey: CryptoKey;
- privateKey: CryptoKey;
-}
-interface JsonWebKey {
- kty: string;
- use?: string;
- key_ops?: string[];
- alg?: string;
- ext?: boolean;
- crv?: string;
- x?: string;
- y?: string;
- d?: string;
- n?: string;
- e?: string;
- p?: string;
- q?: string;
- dp?: string;
- dq?: string;
- qi?: string;
- oth?: RsaOtherPrimesInfo[];
- k?: string;
-}
-interface RsaOtherPrimesInfo {
- r?: string;
- d?: string;
- t?: string;
-}
-interface SubtleCryptoDeriveKeyAlgorithm {
- name: string;
- salt?: (ArrayBuffer | ArrayBufferView);
- iterations?: number;
- hash?: (string | SubtleCryptoHashAlgorithm);
- $public?: CryptoKey;
- info?: (ArrayBuffer | ArrayBufferView);
-}
-interface SubtleCryptoEncryptAlgorithm {
- name: string;
- iv?: (ArrayBuffer | ArrayBufferView);
- additionalData?: (ArrayBuffer | ArrayBufferView);
- tagLength?: number;
- counter?: (ArrayBuffer | ArrayBufferView);
- length?: number;
- label?: (ArrayBuffer | ArrayBufferView);
-}
-interface SubtleCryptoGenerateKeyAlgorithm {
- name: string;
- hash?: (string | SubtleCryptoHashAlgorithm);
- modulusLength?: number;
- publicExponent?: (ArrayBuffer | ArrayBufferView);
- length?: number;
- namedCurve?: string;
-}
-interface SubtleCryptoHashAlgorithm {
- name: string;
-}
-interface SubtleCryptoImportKeyAlgorithm {
- name: string;
- hash?: (string | SubtleCryptoHashAlgorithm);
- length?: number;
- namedCurve?: string;
- compressed?: boolean;
-}
-interface SubtleCryptoSignAlgorithm {
- name: string;
- hash?: (string | SubtleCryptoHashAlgorithm);
- dataLength?: number;
- saltLength?: number;
-}
-interface CryptoKeyKeyAlgorithm {
- name: string;
-}
-interface CryptoKeyAesKeyAlgorithm {
- name: string;
- length: number;
-}
-interface CryptoKeyHmacKeyAlgorithm {
- name: string;
- hash: CryptoKeyKeyAlgorithm;
- length: number;
-}
-interface CryptoKeyRsaKeyAlgorithm {
- name: string;
- modulusLength: number;
- publicExponent: ArrayBuffer | ArrayBufferView;
- hash?: CryptoKeyKeyAlgorithm;
-}
-interface CryptoKeyEllipticKeyAlgorithm {
- name: string;
- namedCurve: string;
-}
-interface CryptoKeyArbitraryKeyAlgorithm {
- name: string;
- hash?: CryptoKeyKeyAlgorithm;
- namedCurve?: string;
- length?: number;
-}
-declare class DigestStream extends WritableStream {
- constructor(algorithm: string | SubtleCryptoHashAlgorithm);
- readonly digest: Promise;
- get bytesWritten(): number | bigint;
-}
-/**
- * The **`TextDecoder`** interface represents a decoder for a specific text encoding, such as `UTF-8`, `ISO-8859-2`, `KOI8-R`, `GBK`, etc.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder)
- */
-declare class TextDecoder {
- constructor(label?: string, options?: TextDecoderConstructorOptions);
- /**
- * The **`TextDecoder.decode()`** method returns a string containing text decoded from the buffer passed as a parameter.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder/decode)
- */
- decode(input?: (ArrayBuffer | ArrayBufferView), options?: TextDecoderDecodeOptions): string;
- get encoding(): string;
- get fatal(): boolean;
- get ignoreBOM(): boolean;
-}
-/**
- * The **`TextEncoder`** interface takes a stream of code points as input and emits a stream of UTF-8 bytes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder)
- */
-declare class TextEncoder {
- constructor();
- /**
- * The **`TextEncoder.encode()`** method takes a string as input, and returns a Global_Objects/Uint8Array containing the text given in parameters encoded with the specific method for that TextEncoder object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encode)
- */
- encode(input?: string): Uint8Array;
- /**
- * The **`TextEncoder.encodeInto()`** method takes a string to encode and a destination Uint8Array to put resulting UTF-8 encoded text into, and returns a dictionary object indicating the progress of the encoding.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encodeInto)
- */
- encodeInto(input: string, buffer: Uint8Array): TextEncoderEncodeIntoResult;
- get encoding(): string;
-}
-interface TextDecoderConstructorOptions {
- fatal: boolean;
- ignoreBOM: boolean;
-}
-interface TextDecoderDecodeOptions {
- stream: boolean;
-}
-interface TextEncoderEncodeIntoResult {
- read: number;
- written: number;
-}
-/**
- * The **`ErrorEvent`** interface represents events providing information related to errors in scripts or in files.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent)
- */
-declare class ErrorEvent extends Event {
- constructor(type: string, init?: ErrorEventErrorEventInit);
- /**
- * The **`filename`** read-only property of the ErrorEvent interface returns a string containing the name of the script file in which the error occurred.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/filename)
- */
- get filename(): string;
- /**
- * The **`message`** read-only property of the ErrorEvent interface returns a string containing a human-readable error message describing the problem.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/message)
- */
- get message(): string;
- /**
- * The **`lineno`** read-only property of the ErrorEvent interface returns an integer containing the line number of the script file on which the error occurred.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/lineno)
- */
- get lineno(): number;
- /**
- * The **`colno`** read-only property of the ErrorEvent interface returns an integer containing the column number of the script file on which the error occurred.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/colno)
- */
- get colno(): number;
- /**
- * The **`error`** read-only property of the ErrorEvent interface returns a JavaScript value, such as an Error or DOMException, representing the error associated with this event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/error)
- */
- get error(): any;
-}
-interface ErrorEventErrorEventInit {
- message?: string;
- filename?: string;
- lineno?: number;
- colno?: number;
- error?: any;
-}
-/**
- * The **`MessageEvent`** interface represents a message received by a target object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent)
- */
-declare class MessageEvent extends Event {
- constructor(type: string, initializer: MessageEventInit);
- /**
- * The **`data`** read-only property of the The data sent by the message emitter; this can be any data type, depending on what originated this event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/data)
- */
- readonly data: any;
- /**
- * The **`origin`** read-only property of the origin of the message emitter.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/origin)
- */
- readonly origin: string | null;
- /**
- * The **`lastEventId`** read-only property of the unique ID for the event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/lastEventId)
- */
- readonly lastEventId: string;
- /**
- * The **`source`** read-only property of the a WindowProxy, MessagePort, or a `MessageEventSource` (which can be a WindowProxy, message emitter.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/source)
- */
- readonly source: MessagePort | null;
- /**
- * The **`ports`** read-only property of the containing all MessagePort objects sent with the message, in order.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/ports)
- */
- readonly ports: MessagePort[];
-}
-interface MessageEventInit {
- data: ArrayBuffer | string;
-}
-/**
- * The **`PromiseRejectionEvent`** interface represents events which are sent to the global script context when JavaScript Promises are rejected.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent)
- */
-declare abstract class PromiseRejectionEvent extends Event {
- /**
- * The PromiseRejectionEvent interface's **`promise`** read-only property indicates the JavaScript rejected.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/promise)
- */
- readonly promise: Promise;
- /**
- * The PromiseRejectionEvent **`reason`** read-only property is any JavaScript value or Object which provides the reason passed into Promise.reject().
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/reason)
- */
- readonly reason: any;
-}
-/**
- * The **`FormData`** interface provides a way to construct a set of key/value pairs representing form fields and their values, which can be sent using the Window/fetch, XMLHttpRequest.send() or navigator.sendBeacon() methods.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData)
- */
-declare class FormData {
- constructor();
- /**
- * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append)
- */
- append(name: string, value: string): void;
- /**
- * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append)
- */
- append(name: string, value: Blob, filename?: string): void;
- /**
- * The **`delete()`** method of the FormData interface deletes a key and its value(s) from a `FormData` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/delete)
- */
- delete(name: string): void;
- /**
- * The **`get()`** method of the FormData interface returns the first value associated with a given key from within a `FormData` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/get)
- */
- get(name: string): (File | string) | null;
- /**
- * The **`getAll()`** method of the FormData interface returns all the values associated with a given key from within a `FormData` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/getAll)
- */
- getAll(name: string): (File | string)[];
- /**
- * The **`has()`** method of the FormData interface returns whether a `FormData` object contains a certain key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/has)
- */
- has(name: string): boolean;
- /**
- * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set)
- */
- set(name: string, value: string): void;
- /**
- * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set)
- */
- set(name: string, value: Blob, filename?: string): void;
- /* Returns an array of key, value pairs for every entry in the list. */
- entries(): IterableIterator<[
- key: string,
- value: File | string
- ]>;
- /* Returns a list of keys in the list. */
- keys(): IterableIterator;
- /* Returns a list of values in the list. */
- values(): IterableIterator<(File | string)>;
- forEach(callback: (this: This, value: File | string, key: string, parent: FormData) => void, thisArg?: This): void;
- [Symbol.iterator](): IterableIterator<[
- key: string,
- value: File | string
- ]>;
-}
-interface ContentOptions {
- html?: boolean;
-}
-declare class HTMLRewriter {
- constructor();
- on(selector: string, handlers: HTMLRewriterElementContentHandlers): HTMLRewriter;
- onDocument(handlers: HTMLRewriterDocumentContentHandlers): HTMLRewriter;
- transform(response: Response): Response;
-}
-interface HTMLRewriterElementContentHandlers {
- element?(element: Element): void | Promise;
- comments?(comment: Comment): void | Promise;
- text?(element: Text): void | Promise;
-}
-interface HTMLRewriterDocumentContentHandlers {
- doctype?(doctype: Doctype): void | Promise;
- comments?(comment: Comment): void | Promise;
- text?(text: Text): void | Promise;
- end?(end: DocumentEnd): void | Promise;
-}
-interface Doctype {
- readonly name: string | null;
- readonly publicId: string | null;
- readonly systemId: string | null;
-}
-interface Element {
- tagName: string;
- readonly attributes: IterableIterator;
- readonly removed: boolean;
- readonly namespaceURI: string;
- getAttribute(name: string): string | null;
- hasAttribute(name: string): boolean;
- setAttribute(name: string, value: string): Element;
- removeAttribute(name: string): Element;
- before(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- after(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- prepend(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- append(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- replace(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- remove(): Element;
- removeAndKeepContent(): Element;
- setInnerContent(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- onEndTag(handler: (tag: EndTag) => void | Promise): void;
-}
-interface EndTag {
- name: string;
- before(content: string | ReadableStream | Response, options?: ContentOptions): EndTag;
- after(content: string | ReadableStream | Response, options?: ContentOptions): EndTag;
- remove(): EndTag;
-}
-interface Comment {
- text: string;
- readonly removed: boolean;
- before(content: string, options?: ContentOptions): Comment;
- after(content: string, options?: ContentOptions): Comment;
- replace(content: string, options?: ContentOptions): Comment;
- remove(): Comment;
-}
-interface Text {
- readonly text: string;
- readonly lastInTextNode: boolean;
- readonly removed: boolean;
- before(content: string | ReadableStream | Response, options?: ContentOptions): Text;
- after(content: string | ReadableStream | Response, options?: ContentOptions): Text;
- replace(content: string | ReadableStream | Response, options?: ContentOptions): Text;
- remove(): Text;
-}
-interface DocumentEnd {
- append(content: string, options?: ContentOptions): DocumentEnd;
-}
-/**
- * This is the event type for `fetch` events dispatched on the ServiceWorkerGlobalScope.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent)
- */
-declare abstract class FetchEvent extends ExtendableEvent {
- /**
- * The **`request`** read-only property of the the event handler.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent/request)
- */
- readonly request: Request;
- /**
- * The **`respondWith()`** method of allows you to provide a promise for a Response yourself.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent/respondWith)
- */
- respondWith(promise: Response | Promise): void;
- passThroughOnException(): void;
-}
-type HeadersInit = Headers | Iterable> | Record;
-/**
- * The **`Headers`** interface of the Fetch API allows you to perform various actions on HTTP request and response headers.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers)
- */
-declare class Headers {
- constructor(init?: HeadersInit);
- /**
- * The **`get()`** method of the Headers interface returns a byte string of all the values of a header within a `Headers` object with a given name.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/get)
- */
- get(name: string): string | null;
- getAll(name: string): string[];
- /**
- * The **`getSetCookie()`** method of the Headers interface returns an array containing the values of all Set-Cookie headers associated with a response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/getSetCookie)
- */
- getSetCookie(): string[];
- /**
- * The **`has()`** method of the Headers interface returns a boolean stating whether a `Headers` object contains a certain header.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/has)
- */
- has(name: string): boolean;
- /**
- * The **`set()`** method of the Headers interface sets a new value for an existing header inside a `Headers` object, or adds the header if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/set)
- */
- set(name: string, value: string): void;
- /**
- * The **`append()`** method of the Headers interface appends a new value onto an existing header inside a `Headers` object, or adds the header if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/append)
- */
- append(name: string, value: string): void;
- /**
- * The **`delete()`** method of the Headers interface deletes a header from the current `Headers` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/delete)
- */
- delete(name: string): void;
- forEach(callback: (this: This, value: string, key: string, parent: Headers) => void, thisArg?: This): void;
- /* Returns an iterator allowing to go through all key/value pairs contained in this object. */
- entries(): IterableIterator<[
- key: string,
- value: string
- ]>;
- /* Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */
- keys(): IterableIterator;
- /* Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */
- values(): IterableIterator;
- [Symbol.iterator](): IterableIterator<[
- key: string,
- value: string
- ]>;
-}
-type BodyInit = ReadableStream | string | ArrayBuffer | ArrayBufferView | Blob | URLSearchParams | FormData;
-declare abstract class Body {
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/body) */
- get body(): ReadableStream | null;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bodyUsed) */
- get bodyUsed(): boolean;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) */
- arrayBuffer(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes) */
- bytes(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/text) */
- text(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/json) */
- json(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/formData) */
- formData(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/blob) */
- blob(): Promise;
-}
-/**
- * The **`Response`** interface of the Fetch API represents the response to a request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response)
- */
-declare var Response: {
- prototype: Response;
- new (body?: BodyInit | null, init?: ResponseInit): Response;
- error(): Response;
- redirect(url: string, status?: number): Response;
- json(any: any, maybeInit?: (ResponseInit | Response)): Response;
-};
-/**
- * The **`Response`** interface of the Fetch API represents the response to a request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response)
- */
-interface Response extends Body {
- /**
- * The **`clone()`** method of the Response interface creates a clone of a response object, identical in every way, but stored in a different variable.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/clone)
- */
- clone(): Response;
- /**
- * The **`status`** read-only property of the Response interface contains the HTTP status codes of the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/status)
- */
- status: number;
- /**
- * The **`statusText`** read-only property of the Response interface contains the status message corresponding to the HTTP status code in Response.status.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/statusText)
- */
- statusText: string;
- /**
- * The **`headers`** read-only property of the with the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/headers)
- */
- headers: Headers;
- /**
- * The **`ok`** read-only property of the Response interface contains a Boolean stating whether the response was successful (status in the range 200-299) or not.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/ok)
- */
- ok: boolean;
- /**
- * The **`redirected`** read-only property of the Response interface indicates whether or not the response is the result of a request you made which was redirected.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/redirected)
- */
- redirected: boolean;
- /**
- * The **`url`** read-only property of the Response interface contains the URL of the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/url)
- */
- url: string;
- webSocket: WebSocket | null;
- cf: any | undefined;
- /**
- * The **`type`** read-only property of the Response interface contains the type of the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/type)
- */
- type: "default" | "error";
-}
-interface ResponseInit {
- status?: number;
- statusText?: string;
- headers?: HeadersInit;
- cf?: any;
- webSocket?: (WebSocket | null);
- encodeBody?: "automatic" | "manual";
-}
-type RequestInfo> = Request | string;
-/**
- * The **`Request`** interface of the Fetch API represents a resource request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request)
- */
-declare var Request: {
- prototype: Request;
- new >(input: RequestInfo | URL, init?: RequestInit): Request;
-};
-/**
- * The **`Request`** interface of the Fetch API represents a resource request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request)
- */
-interface Request> extends Body {
- /**
- * The **`clone()`** method of the Request interface creates a copy of the current `Request` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/clone)
- */
- clone(): Request;
- /**
- * The **`method`** read-only property of the `POST`, etc.) A String indicating the method of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/method)
- */
- method: string;
- /**
- * The **`url`** read-only property of the Request interface contains the URL of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/url)
- */
- url: string;
- /**
- * The **`headers`** read-only property of the with the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/headers)
- */
- headers: Headers;
- /**
- * The **`redirect`** read-only property of the Request interface contains the mode for how redirects are handled.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/redirect)
- */
- redirect: string;
- fetcher: Fetcher | null;
- /**
- * The read-only **`signal`** property of the Request interface returns the AbortSignal associated with the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/signal)
- */
- signal: AbortSignal;
- cf: Cf | undefined;
- /**
- * The **`integrity`** read-only property of the Request interface contains the subresource integrity value of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/integrity)
- */
- integrity: string;
- /**
- * The **`keepalive`** read-only property of the Request interface contains the request's `keepalive` setting (`true` or `false`), which indicates whether the browser will keep the associated request alive if the page that initiated it is unloaded before the request is complete.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/keepalive)
- */
- keepalive: boolean;
- /**
- * The **`cache`** read-only property of the Request interface contains the cache mode of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/cache)
- */
- cache?: "no-store" | "no-cache";
-}
-interface RequestInit {
- /* A string to set request's method. */
- method?: string;
- /* A Headers object, an object literal, or an array of two-item arrays to set request's headers. */
- headers?: HeadersInit;
- /* A BodyInit object or null to set request's body. */
- body?: BodyInit | null;
- /* A string indicating whether request follows redirects, results in an error upon encountering a redirect, or returns the redirect (in an opaque fashion). Sets request's redirect. */
- redirect?: string;
- fetcher?: (Fetcher | null);
- cf?: Cf;
- /* A string indicating how the request will interact with the browser's cache to set request's cache. */
- cache?: "no-store" | "no-cache";
- /* A cryptographic hash of the resource to be fetched by request. Sets request's integrity. */
- integrity?: string;
- /* An AbortSignal to set request's signal. */
- signal?: (AbortSignal | null);
- encodeResponseBody?: "automatic" | "manual";
-}
-type Service Rpc.WorkerEntrypointBranded) | Rpc.WorkerEntrypointBranded | ExportedHandler | undefined = undefined> = T extends new (...args: any[]) => Rpc.WorkerEntrypointBranded ? Fetcher> : T extends Rpc.WorkerEntrypointBranded ? Fetcher : T extends Exclude ? never : Fetcher;
-type Fetcher = (T extends Rpc.EntrypointBranded ? Rpc.Provider : unknown) & {
- fetch(input: RequestInfo | URL, init?: RequestInit): Promise;
- connect(address: SocketAddress | string, options?: SocketOptions): Socket;
-};
-interface KVNamespaceListKey {
- name: Key;
- expiration?: number;
- metadata?: Metadata;
-}
-type KVNamespaceListResult = {
- list_complete: false;
- keys: KVNamespaceListKey[];
- cursor: string;
- cacheStatus: string | null;
-} | {
- list_complete: true;
- keys: KVNamespaceListKey[];
- cacheStatus: string | null;
-};
-interface KVNamespace {
- get(key: Key, options?: Partial>): Promise;
- get(key: Key, type: "text"): Promise;
- get(key: Key, type: "json"): Promise;
- get(key: Key, type: "arrayBuffer"): Promise;
- get(key: Key, type: "stream"): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"text">): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"json">): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"arrayBuffer">): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"stream">): Promise;
- get(key: Array, type: "text"): Promise>;
- get(key: Array, type: "json"): Promise>;
- get(key: Array, options?: Partial>): Promise>;
- get(key: Array, options?: KVNamespaceGetOptions<"text">): Promise>;
- get(key: Array, options?: KVNamespaceGetOptions<"json">): Promise>;
- list(options?: KVNamespaceListOptions): Promise>;
- put(key: Key, value: string | ArrayBuffer | ArrayBufferView | ReadableStream, options?: KVNamespacePutOptions): Promise;
- getWithMetadata(key: Key, options?: Partial>): Promise>;
- getWithMetadata(key: Key, type: "text"): Promise>;
- getWithMetadata(key: Key, type: "json"): Promise>;
- getWithMetadata(key: Key, type: "arrayBuffer"): Promise>;
- getWithMetadata(key: Key, type: "stream"): Promise>;
- getWithMetadata(key: Key, options: KVNamespaceGetOptions<"text">): Promise>;
- getWithMetadata(key: Key, options: KVNamespaceGetOptions<"json">): Promise>;
- getWithMetadata(key: Key, options: KVNamespaceGetOptions<"arrayBuffer">): Promise>;
- getWithMetadata(key: Key, options: KVNamespaceGetOptions<"stream">): Promise>;
- getWithMetadata(key: Array, type: "text"): Promise>>;
- getWithMetadata(key: Array, type: "json"): Promise>>;
- getWithMetadata(key: Array, options?: Partial>): Promise>>;
- getWithMetadata(key: Array, options?: KVNamespaceGetOptions<"text">): Promise>>;
- getWithMetadata(key: Array