├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── partykit.json ├── pnpm-lock.yaml ├── public ├── favicon.ico ├── index.html └── normalize.css ├── src ├── client.ts ├── machine.ts ├── server.ts └── styles.css └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | 3 | logs 4 | _.log 5 | npm-debug.log_ 6 | yarn-debug.log* 7 | yarn-error.log* 8 | lerna-debug.log* 9 | .pnpm-debug.log* 10 | 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | 13 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 14 | 15 | # Runtime data 16 | 17 | pids 18 | _.pid 19 | _.seed 20 | \*.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | 28 | coverage 29 | \*.lcov 30 | 31 | # nyc test coverage 32 | 33 | .nyc_output 34 | 35 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 36 | 37 | .grunt 38 | 39 | # Bower dependency directory (https://bower.io/) 40 | 41 | bower_components 42 | 43 | # node-waf configuration 44 | 45 | .lock-wscript 46 | 47 | # Compiled binary addons (https://nodejs.org/api/addons.html) 48 | 49 | build/Release 50 | 51 | # Dependency directories 52 | 53 | node_modules/ 54 | jspm_packages/ 55 | 56 | # Snowpack dependency directory (https://snowpack.dev/) 57 | 58 | web_modules/ 59 | 60 | # TypeScript cache 61 | 62 | \*.tsbuildinfo 63 | 64 | # Optional npm cache directory 65 | 66 | .npm 67 | 68 | # Optional eslint cache 69 | 70 | .eslintcache 71 | 72 | # Optional stylelint cache 73 | 74 | .stylelintcache 75 | 76 | # Microbundle cache 77 | 78 | .rpt2_cache/ 79 | .rts2_cache_cjs/ 80 | .rts2_cache_es/ 81 | .rts2_cache_umd/ 82 | 83 | # Optional REPL history 84 | 85 | .node_repl_history 86 | 87 | # Output of 'npm pack' 88 | 89 | \*.tgz 90 | 91 | # Yarn Integrity file 92 | 93 | .yarn-integrity 94 | 95 | # dotenv environment variable files 96 | 97 | .env 98 | .env.development.local 99 | .env.test.local 100 | .env.production.local 101 | .env.local 102 | 103 | # parcel-bundler cache (https://parceljs.org/) 104 | 105 | .cache 106 | .parcel-cache 107 | 108 | # Next.js build output 109 | 110 | .next 111 | out 112 | 113 | # Nuxt.js build / generate output 114 | 115 | .nuxt 116 | dist 117 | 118 | # Gatsby files 119 | 120 | .cache/ 121 | 122 | # Comment in the public line in if your project uses Gatsby and not Next.js 123 | 124 | # https://nextjs.org/blog/next-9-1#public-directory-support 125 | 126 | # public 127 | 128 | # vuepress build output 129 | 130 | .vuepress/dist 131 | 132 | # vuepress v2.x temp and cache directory 133 | 134 | .temp 135 | .cache 136 | 137 | # Docusaurus cache and generated files 138 | 139 | .docusaurus 140 | 141 | # Serverless directories 142 | 143 | .serverless/ 144 | 145 | # FuseBox cache 146 | 147 | .fusebox/ 148 | 149 | # DynamoDB Local files 150 | 151 | .dynamodb/ 152 | 153 | # TernJS port file 154 | 155 | .tern-port 156 | 157 | # Stores VSCode versions used for testing VSCode extensions 158 | 159 | .vscode-test 160 | 161 | # yarn v2 162 | 163 | .yarn/cache 164 | .yarn/unplugged 165 | .yarn/build-state.yml 166 | .yarn/install-state.gz 167 | .pnp.\* 168 | 169 | .partykit 170 | .DS_Store 171 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 🌦 Weatherboard 2 | 3 | You're coming to this party, weather you like it or not! 4 | 5 | ## [leaderboard.davidkpiano.partykit.dev](https://leaderboard.davidkpiano.partykit.dev) 6 | 7 | --- 8 | 9 | This is a [Partykit](https://partykit.io) project, which lets you create real-time collaborative applications with minimal coding effort. 10 | 11 | [`server.ts`](./src/server.ts) is the server-side code, which is responsible for handling WebSocket events and HTTP requests. [`client.ts`](./src/client.ts) is the client-side code, which connects to the server and listens for events. 12 | 13 | You can start developing by running `npm run dev` and opening [http://localhost:1999](http://localhost:1999) in your browser. When you're ready, you can deploy your application on to the PartyKit cloud with `npm run deploy`. 14 | 15 | Refer to our docs for more information: https://github.com/partykit/partykit/blob/main/README.md. For more help, reach out to us on [Discord](https://discord.gg/g5uqHQJc3z), [GitHub](https://github.com/partykit/partykit), or [Twitter](https://twitter.com/partykit_io). 16 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaderboard", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "leaderboard", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "partysocket": "0.0.9" 12 | }, 13 | "devDependencies": { 14 | "partykit": "0.0.29", 15 | "typescript": "^5.2.2" 16 | } 17 | }, 18 | "node_modules/@cloudflare/workerd-darwin-64": { 19 | "version": "1.20231002.0", 20 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231002.0.tgz", 21 | "integrity": "sha512-sgtjzVO/wtI/6S7O0bk4zQAv2xlvqOxB18AXzlit6uXgbYFGeQedRHjhKVMOacGmWEnM4C3ir/fxJGsc3Pyxng==", 22 | "cpu": [ 23 | "x64" 24 | ], 25 | "dev": true, 26 | "optional": true, 27 | "os": [ 28 | "darwin" 29 | ], 30 | "engines": { 31 | "node": ">=16" 32 | } 33 | }, 34 | "node_modules/@cloudflare/workerd-darwin-arm64": { 35 | "version": "1.20231002.0", 36 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231002.0.tgz", 37 | "integrity": "sha512-dv8nztYFaTYYgBpyy80vc4hdMYv9mhyNbvBsZywm8S7ivcIpzogi0UKkGU4E/G0lYK6W3WtwTBqwRe+pXJ1+Ww==", 38 | "cpu": [ 39 | "arm64" 40 | ], 41 | "dev": true, 42 | "optional": true, 43 | "os": [ 44 | "darwin" 45 | ], 46 | "engines": { 47 | "node": ">=16" 48 | } 49 | }, 50 | "node_modules/@cloudflare/workerd-linux-64": { 51 | "version": "1.20231002.0", 52 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231002.0.tgz", 53 | "integrity": "sha512-UG8SlLcGzaQDSSw6FR4+Zf408925wkLOCAi8w5qEoFYu3g4Ef7ZenstesCOsyWL7qBDKx0/iwk6+a76W5IHI0Q==", 54 | "cpu": [ 55 | "x64" 56 | ], 57 | "dev": true, 58 | "optional": true, 59 | "os": [ 60 | "linux" 61 | ], 62 | "engines": { 63 | "node": ">=16" 64 | } 65 | }, 66 | "node_modules/@cloudflare/workerd-linux-arm64": { 67 | "version": "1.20231002.0", 68 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231002.0.tgz", 69 | "integrity": "sha512-GPaa66ZSq1gK09r87c5CJbHIApcIU//LVHz3rnUxK0//00YCwUuGUUK1dn/ylg+fVqDQxIDmH+ABnobBanvcDA==", 70 | "cpu": [ 71 | "arm64" 72 | ], 73 | "dev": true, 74 | "optional": true, 75 | "os": [ 76 | "linux" 77 | ], 78 | "engines": { 79 | "node": ">=16" 80 | } 81 | }, 82 | "node_modules/@cloudflare/workerd-windows-64": { 83 | "version": "1.20231002.0", 84 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231002.0.tgz", 85 | "integrity": "sha512-ybIy+sCme0VO0RscndXvqWNBaRMUOc8vhi+1N2h/KDsKfNLsfEQph+XWecfKzJseUy1yE2rV1xei3BaNmaa6vg==", 86 | "cpu": [ 87 | "x64" 88 | ], 89 | "dev": true, 90 | "optional": true, 91 | "os": [ 92 | "win32" 93 | ], 94 | "engines": { 95 | "node": ">=16" 96 | } 97 | }, 98 | "node_modules/@cloudflare/workers-types": { 99 | "version": "4.20231002.0", 100 | "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20231002.0.tgz", 101 | "integrity": "sha512-gQMKf3THqAFWH426OXXfVx0gFLXiSiL2fo6mKjQYx4PU74MgmVDFh25NvpAIBK+XN+xXlrImClfYeqErXIT7jA==", 102 | "dev": true 103 | }, 104 | "node_modules/@esbuild/android-arm": { 105 | "version": "0.19.4", 106 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.4.tgz", 107 | "integrity": "sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==", 108 | "cpu": [ 109 | "arm" 110 | ], 111 | "dev": true, 112 | "optional": true, 113 | "os": [ 114 | "android" 115 | ], 116 | "engines": { 117 | "node": ">=12" 118 | } 119 | }, 120 | "node_modules/@esbuild/android-arm64": { 121 | "version": "0.19.4", 122 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz", 123 | "integrity": "sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==", 124 | "cpu": [ 125 | "arm64" 126 | ], 127 | "dev": true, 128 | "optional": true, 129 | "os": [ 130 | "android" 131 | ], 132 | "engines": { 133 | "node": ">=12" 134 | } 135 | }, 136 | "node_modules/@esbuild/android-x64": { 137 | "version": "0.19.4", 138 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.4.tgz", 139 | "integrity": "sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==", 140 | "cpu": [ 141 | "x64" 142 | ], 143 | "dev": true, 144 | "optional": true, 145 | "os": [ 146 | "android" 147 | ], 148 | "engines": { 149 | "node": ">=12" 150 | } 151 | }, 152 | "node_modules/@esbuild/darwin-arm64": { 153 | "version": "0.19.4", 154 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz", 155 | "integrity": "sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==", 156 | "cpu": [ 157 | "arm64" 158 | ], 159 | "dev": true, 160 | "optional": true, 161 | "os": [ 162 | "darwin" 163 | ], 164 | "engines": { 165 | "node": ">=12" 166 | } 167 | }, 168 | "node_modules/@esbuild/darwin-x64": { 169 | "version": "0.19.4", 170 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz", 171 | "integrity": "sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==", 172 | "cpu": [ 173 | "x64" 174 | ], 175 | "dev": true, 176 | "optional": true, 177 | "os": [ 178 | "darwin" 179 | ], 180 | "engines": { 181 | "node": ">=12" 182 | } 183 | }, 184 | "node_modules/@esbuild/freebsd-arm64": { 185 | "version": "0.19.4", 186 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz", 187 | "integrity": "sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==", 188 | "cpu": [ 189 | "arm64" 190 | ], 191 | "dev": true, 192 | "optional": true, 193 | "os": [ 194 | "freebsd" 195 | ], 196 | "engines": { 197 | "node": ">=12" 198 | } 199 | }, 200 | "node_modules/@esbuild/freebsd-x64": { 201 | "version": "0.19.4", 202 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz", 203 | "integrity": "sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==", 204 | "cpu": [ 205 | "x64" 206 | ], 207 | "dev": true, 208 | "optional": true, 209 | "os": [ 210 | "freebsd" 211 | ], 212 | "engines": { 213 | "node": ">=12" 214 | } 215 | }, 216 | "node_modules/@esbuild/linux-arm": { 217 | "version": "0.19.4", 218 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz", 219 | "integrity": "sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==", 220 | "cpu": [ 221 | "arm" 222 | ], 223 | "dev": true, 224 | "optional": true, 225 | "os": [ 226 | "linux" 227 | ], 228 | "engines": { 229 | "node": ">=12" 230 | } 231 | }, 232 | "node_modules/@esbuild/linux-arm64": { 233 | "version": "0.19.4", 234 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz", 235 | "integrity": "sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==", 236 | "cpu": [ 237 | "arm64" 238 | ], 239 | "dev": true, 240 | "optional": true, 241 | "os": [ 242 | "linux" 243 | ], 244 | "engines": { 245 | "node": ">=12" 246 | } 247 | }, 248 | "node_modules/@esbuild/linux-ia32": { 249 | "version": "0.19.4", 250 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz", 251 | "integrity": "sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==", 252 | "cpu": [ 253 | "ia32" 254 | ], 255 | "dev": true, 256 | "optional": true, 257 | "os": [ 258 | "linux" 259 | ], 260 | "engines": { 261 | "node": ">=12" 262 | } 263 | }, 264 | "node_modules/@esbuild/linux-loong64": { 265 | "version": "0.19.4", 266 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz", 267 | "integrity": "sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==", 268 | "cpu": [ 269 | "loong64" 270 | ], 271 | "dev": true, 272 | "optional": true, 273 | "os": [ 274 | "linux" 275 | ], 276 | "engines": { 277 | "node": ">=12" 278 | } 279 | }, 280 | "node_modules/@esbuild/linux-mips64el": { 281 | "version": "0.19.4", 282 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz", 283 | "integrity": "sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==", 284 | "cpu": [ 285 | "mips64el" 286 | ], 287 | "dev": true, 288 | "optional": true, 289 | "os": [ 290 | "linux" 291 | ], 292 | "engines": { 293 | "node": ">=12" 294 | } 295 | }, 296 | "node_modules/@esbuild/linux-ppc64": { 297 | "version": "0.19.4", 298 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz", 299 | "integrity": "sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==", 300 | "cpu": [ 301 | "ppc64" 302 | ], 303 | "dev": true, 304 | "optional": true, 305 | "os": [ 306 | "linux" 307 | ], 308 | "engines": { 309 | "node": ">=12" 310 | } 311 | }, 312 | "node_modules/@esbuild/linux-riscv64": { 313 | "version": "0.19.4", 314 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz", 315 | "integrity": "sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==", 316 | "cpu": [ 317 | "riscv64" 318 | ], 319 | "dev": true, 320 | "optional": true, 321 | "os": [ 322 | "linux" 323 | ], 324 | "engines": { 325 | "node": ">=12" 326 | } 327 | }, 328 | "node_modules/@esbuild/linux-s390x": { 329 | "version": "0.19.4", 330 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz", 331 | "integrity": "sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==", 332 | "cpu": [ 333 | "s390x" 334 | ], 335 | "dev": true, 336 | "optional": true, 337 | "os": [ 338 | "linux" 339 | ], 340 | "engines": { 341 | "node": ">=12" 342 | } 343 | }, 344 | "node_modules/@esbuild/linux-x64": { 345 | "version": "0.19.4", 346 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz", 347 | "integrity": "sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==", 348 | "cpu": [ 349 | "x64" 350 | ], 351 | "dev": true, 352 | "optional": true, 353 | "os": [ 354 | "linux" 355 | ], 356 | "engines": { 357 | "node": ">=12" 358 | } 359 | }, 360 | "node_modules/@esbuild/netbsd-x64": { 361 | "version": "0.19.4", 362 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz", 363 | "integrity": "sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==", 364 | "cpu": [ 365 | "x64" 366 | ], 367 | "dev": true, 368 | "optional": true, 369 | "os": [ 370 | "netbsd" 371 | ], 372 | "engines": { 373 | "node": ">=12" 374 | } 375 | }, 376 | "node_modules/@esbuild/openbsd-x64": { 377 | "version": "0.19.4", 378 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz", 379 | "integrity": "sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==", 380 | "cpu": [ 381 | "x64" 382 | ], 383 | "dev": true, 384 | "optional": true, 385 | "os": [ 386 | "openbsd" 387 | ], 388 | "engines": { 389 | "node": ">=12" 390 | } 391 | }, 392 | "node_modules/@esbuild/sunos-x64": { 393 | "version": "0.19.4", 394 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz", 395 | "integrity": "sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==", 396 | "cpu": [ 397 | "x64" 398 | ], 399 | "dev": true, 400 | "optional": true, 401 | "os": [ 402 | "sunos" 403 | ], 404 | "engines": { 405 | "node": ">=12" 406 | } 407 | }, 408 | "node_modules/@esbuild/win32-arm64": { 409 | "version": "0.19.4", 410 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz", 411 | "integrity": "sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==", 412 | "cpu": [ 413 | "arm64" 414 | ], 415 | "dev": true, 416 | "optional": true, 417 | "os": [ 418 | "win32" 419 | ], 420 | "engines": { 421 | "node": ">=12" 422 | } 423 | }, 424 | "node_modules/@esbuild/win32-ia32": { 425 | "version": "0.19.4", 426 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz", 427 | "integrity": "sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==", 428 | "cpu": [ 429 | "ia32" 430 | ], 431 | "dev": true, 432 | "optional": true, 433 | "os": [ 434 | "win32" 435 | ], 436 | "engines": { 437 | "node": ">=12" 438 | } 439 | }, 440 | "node_modules/@esbuild/win32-x64": { 441 | "version": "0.19.4", 442 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz", 443 | "integrity": "sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==", 444 | "cpu": [ 445 | "x64" 446 | ], 447 | "dev": true, 448 | "optional": true, 449 | "os": [ 450 | "win32" 451 | ], 452 | "engines": { 453 | "node": ">=12" 454 | } 455 | }, 456 | "node_modules/@fastify/busboy": { 457 | "version": "2.0.0", 458 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", 459 | "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", 460 | "dev": true, 461 | "engines": { 462 | "node": ">=14" 463 | } 464 | }, 465 | "node_modules/acorn": { 466 | "version": "8.10.0", 467 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 468 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 469 | "dev": true, 470 | "bin": { 471 | "acorn": "bin/acorn" 472 | }, 473 | "engines": { 474 | "node": ">=0.4.0" 475 | } 476 | }, 477 | "node_modules/acorn-walk": { 478 | "version": "8.2.0", 479 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 480 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 481 | "dev": true, 482 | "engines": { 483 | "node": ">=0.4.0" 484 | } 485 | }, 486 | "node_modules/arch": { 487 | "version": "2.2.0", 488 | "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", 489 | "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", 490 | "dev": true, 491 | "funding": [ 492 | { 493 | "type": "github", 494 | "url": "https://github.com/sponsors/feross" 495 | }, 496 | { 497 | "type": "patreon", 498 | "url": "https://www.patreon.com/feross" 499 | }, 500 | { 501 | "type": "consulting", 502 | "url": "https://feross.org/support" 503 | } 504 | ] 505 | }, 506 | "node_modules/as-table": { 507 | "version": "1.0.55", 508 | "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", 509 | "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", 510 | "dev": true, 511 | "dependencies": { 512 | "printable-characters": "^1.0.42" 513 | } 514 | }, 515 | "node_modules/buffer-from": { 516 | "version": "1.1.2", 517 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 518 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 519 | "dev": true 520 | }, 521 | "node_modules/capnp-ts": { 522 | "version": "0.7.0", 523 | "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", 524 | "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", 525 | "dev": true, 526 | "dependencies": { 527 | "debug": "^4.3.1", 528 | "tslib": "^2.2.0" 529 | } 530 | }, 531 | "node_modules/clipboardy": { 532 | "version": "3.0.0", 533 | "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", 534 | "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", 535 | "dev": true, 536 | "dependencies": { 537 | "arch": "^2.2.0", 538 | "execa": "^5.1.1", 539 | "is-wsl": "^2.2.0" 540 | }, 541 | "engines": { 542 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 543 | }, 544 | "funding": { 545 | "url": "https://github.com/sponsors/sindresorhus" 546 | } 547 | }, 548 | "node_modules/cookie": { 549 | "version": "0.5.0", 550 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 551 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 552 | "dev": true, 553 | "engines": { 554 | "node": ">= 0.6" 555 | } 556 | }, 557 | "node_modules/cross-spawn": { 558 | "version": "7.0.3", 559 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 560 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 561 | "dev": true, 562 | "dependencies": { 563 | "path-key": "^3.1.0", 564 | "shebang-command": "^2.0.0", 565 | "which": "^2.0.1" 566 | }, 567 | "engines": { 568 | "node": ">= 8" 569 | } 570 | }, 571 | "node_modules/data-uri-to-buffer": { 572 | "version": "2.0.2", 573 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", 574 | "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", 575 | "dev": true 576 | }, 577 | "node_modules/debug": { 578 | "version": "4.3.4", 579 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 580 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 581 | "dev": true, 582 | "dependencies": { 583 | "ms": "2.1.2" 584 | }, 585 | "engines": { 586 | "node": ">=6.0" 587 | }, 588 | "peerDependenciesMeta": { 589 | "supports-color": { 590 | "optional": true 591 | } 592 | } 593 | }, 594 | "node_modules/esbuild": { 595 | "version": "0.19.4", 596 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.4.tgz", 597 | "integrity": "sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==", 598 | "dev": true, 599 | "hasInstallScript": true, 600 | "bin": { 601 | "esbuild": "bin/esbuild" 602 | }, 603 | "engines": { 604 | "node": ">=12" 605 | }, 606 | "optionalDependencies": { 607 | "@esbuild/android-arm": "0.19.4", 608 | "@esbuild/android-arm64": "0.19.4", 609 | "@esbuild/android-x64": "0.19.4", 610 | "@esbuild/darwin-arm64": "0.19.4", 611 | "@esbuild/darwin-x64": "0.19.4", 612 | "@esbuild/freebsd-arm64": "0.19.4", 613 | "@esbuild/freebsd-x64": "0.19.4", 614 | "@esbuild/linux-arm": "0.19.4", 615 | "@esbuild/linux-arm64": "0.19.4", 616 | "@esbuild/linux-ia32": "0.19.4", 617 | "@esbuild/linux-loong64": "0.19.4", 618 | "@esbuild/linux-mips64el": "0.19.4", 619 | "@esbuild/linux-ppc64": "0.19.4", 620 | "@esbuild/linux-riscv64": "0.19.4", 621 | "@esbuild/linux-s390x": "0.19.4", 622 | "@esbuild/linux-x64": "0.19.4", 623 | "@esbuild/netbsd-x64": "0.19.4", 624 | "@esbuild/openbsd-x64": "0.19.4", 625 | "@esbuild/sunos-x64": "0.19.4", 626 | "@esbuild/win32-arm64": "0.19.4", 627 | "@esbuild/win32-ia32": "0.19.4", 628 | "@esbuild/win32-x64": "0.19.4" 629 | } 630 | }, 631 | "node_modules/execa": { 632 | "version": "5.1.1", 633 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 634 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 635 | "dev": true, 636 | "dependencies": { 637 | "cross-spawn": "^7.0.3", 638 | "get-stream": "^6.0.0", 639 | "human-signals": "^2.1.0", 640 | "is-stream": "^2.0.0", 641 | "merge-stream": "^2.0.0", 642 | "npm-run-path": "^4.0.1", 643 | "onetime": "^5.1.2", 644 | "signal-exit": "^3.0.3", 645 | "strip-final-newline": "^2.0.0" 646 | }, 647 | "engines": { 648 | "node": ">=10" 649 | }, 650 | "funding": { 651 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 652 | } 653 | }, 654 | "node_modules/exit-hook": { 655 | "version": "2.2.1", 656 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", 657 | "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", 658 | "dev": true, 659 | "engines": { 660 | "node": ">=6" 661 | }, 662 | "funding": { 663 | "url": "https://github.com/sponsors/sindresorhus" 664 | } 665 | }, 666 | "node_modules/fsevents": { 667 | "version": "2.3.3", 668 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 669 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 670 | "dev": true, 671 | "hasInstallScript": true, 672 | "optional": true, 673 | "os": [ 674 | "darwin" 675 | ], 676 | "engines": { 677 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 678 | } 679 | }, 680 | "node_modules/get-source": { 681 | "version": "2.0.12", 682 | "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", 683 | "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", 684 | "dev": true, 685 | "dependencies": { 686 | "data-uri-to-buffer": "^2.0.0", 687 | "source-map": "^0.6.1" 688 | } 689 | }, 690 | "node_modules/get-stream": { 691 | "version": "6.0.1", 692 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 693 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 694 | "dev": true, 695 | "engines": { 696 | "node": ">=10" 697 | }, 698 | "funding": { 699 | "url": "https://github.com/sponsors/sindresorhus" 700 | } 701 | }, 702 | "node_modules/glob-to-regexp": { 703 | "version": "0.4.1", 704 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 705 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 706 | "dev": true 707 | }, 708 | "node_modules/human-signals": { 709 | "version": "2.1.0", 710 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 711 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 712 | "dev": true, 713 | "engines": { 714 | "node": ">=10.17.0" 715 | } 716 | }, 717 | "node_modules/is-docker": { 718 | "version": "2.2.1", 719 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 720 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 721 | "dev": true, 722 | "bin": { 723 | "is-docker": "cli.js" 724 | }, 725 | "engines": { 726 | "node": ">=8" 727 | }, 728 | "funding": { 729 | "url": "https://github.com/sponsors/sindresorhus" 730 | } 731 | }, 732 | "node_modules/is-stream": { 733 | "version": "2.0.1", 734 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 735 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 736 | "dev": true, 737 | "engines": { 738 | "node": ">=8" 739 | }, 740 | "funding": { 741 | "url": "https://github.com/sponsors/sindresorhus" 742 | } 743 | }, 744 | "node_modules/is-wsl": { 745 | "version": "2.2.0", 746 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 747 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 748 | "dev": true, 749 | "dependencies": { 750 | "is-docker": "^2.0.0" 751 | }, 752 | "engines": { 753 | "node": ">=8" 754 | } 755 | }, 756 | "node_modules/isexe": { 757 | "version": "2.0.0", 758 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 759 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 760 | "dev": true 761 | }, 762 | "node_modules/js-tokens": { 763 | "version": "4.0.0", 764 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 765 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 766 | }, 767 | "node_modules/loose-envify": { 768 | "version": "1.4.0", 769 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 770 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 771 | "dependencies": { 772 | "js-tokens": "^3.0.0 || ^4.0.0" 773 | }, 774 | "bin": { 775 | "loose-envify": "cli.js" 776 | } 777 | }, 778 | "node_modules/merge-stream": { 779 | "version": "2.0.0", 780 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 781 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 782 | "dev": true 783 | }, 784 | "node_modules/mimic-fn": { 785 | "version": "2.1.0", 786 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 787 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 788 | "dev": true, 789 | "engines": { 790 | "node": ">=6" 791 | } 792 | }, 793 | "node_modules/miniflare": { 794 | "version": "3.20231002.0", 795 | "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231002.0.tgz", 796 | "integrity": "sha512-Qw1JfGwx1ZuaoumE9DpzPm78b9RD+qP/k+iAPaCIay9iQfcf7ri7rX6Zper2rReawuL+DdNxXJmhB4cfwn5Glw==", 797 | "dev": true, 798 | "dependencies": { 799 | "acorn": "^8.8.0", 800 | "acorn-walk": "^8.2.0", 801 | "capnp-ts": "^0.7.0", 802 | "exit-hook": "^2.2.1", 803 | "glob-to-regexp": "^0.4.1", 804 | "source-map-support": "0.5.21", 805 | "stoppable": "^1.1.0", 806 | "undici": "^5.22.1", 807 | "workerd": "1.20231002.0", 808 | "ws": "^8.11.0", 809 | "youch": "^3.2.2", 810 | "zod": "^3.20.6" 811 | }, 812 | "engines": { 813 | "node": ">=16.13" 814 | } 815 | }, 816 | "node_modules/ms": { 817 | "version": "2.1.2", 818 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 819 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 820 | "dev": true 821 | }, 822 | "node_modules/mustache": { 823 | "version": "4.2.0", 824 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", 825 | "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", 826 | "dev": true, 827 | "bin": { 828 | "mustache": "bin/mustache" 829 | } 830 | }, 831 | "node_modules/npm-run-path": { 832 | "version": "4.0.1", 833 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 834 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 835 | "dev": true, 836 | "dependencies": { 837 | "path-key": "^3.0.0" 838 | }, 839 | "engines": { 840 | "node": ">=8" 841 | } 842 | }, 843 | "node_modules/onetime": { 844 | "version": "5.1.2", 845 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 846 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 847 | "dev": true, 848 | "dependencies": { 849 | "mimic-fn": "^2.1.0" 850 | }, 851 | "engines": { 852 | "node": ">=6" 853 | }, 854 | "funding": { 855 | "url": "https://github.com/sponsors/sindresorhus" 856 | } 857 | }, 858 | "node_modules/partykit": { 859 | "version": "0.0.29", 860 | "resolved": "https://registry.npmjs.org/partykit/-/partykit-0.0.29.tgz", 861 | "integrity": "sha512-BwVJls90it+QrYzNoa2d3MysBQI6r+lcH4zJQ5aUGzB/BIxt8Oy2UIyMDdfpvz3kPGBYXDJSk35Lj6Z9ryja1g==", 862 | "dev": true, 863 | "dependencies": { 864 | "@cloudflare/workers-types": "4.20231002.0", 865 | "clipboardy": "3.0.0", 866 | "esbuild": "0.19.4", 867 | "miniflare": "3.20231002.0", 868 | "yoga-wasm-web": "0.3.3" 869 | }, 870 | "bin": { 871 | "partykit": "dist/bin.mjs" 872 | }, 873 | "optionalDependencies": { 874 | "fsevents": "2.3.3" 875 | } 876 | }, 877 | "node_modules/partysocket": { 878 | "version": "0.0.9", 879 | "resolved": "https://registry.npmjs.org/partysocket/-/partysocket-0.0.9.tgz", 880 | "integrity": "sha512-SVFtPseMU9DC7fd7MdMx/y9MgWFMteWBgL0wVDQ90nCRBzt/pD1x8ovIqsCFK7uo1KXOXvqJuf9vjTIGPw77Wg==", 881 | "dependencies": { 882 | "react": "^18.2.0" 883 | } 884 | }, 885 | "node_modules/path-key": { 886 | "version": "3.1.1", 887 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 888 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 889 | "dev": true, 890 | "engines": { 891 | "node": ">=8" 892 | } 893 | }, 894 | "node_modules/printable-characters": { 895 | "version": "1.0.42", 896 | "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", 897 | "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", 898 | "dev": true 899 | }, 900 | "node_modules/react": { 901 | "version": "18.2.0", 902 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 903 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 904 | "dependencies": { 905 | "loose-envify": "^1.1.0" 906 | }, 907 | "engines": { 908 | "node": ">=0.10.0" 909 | } 910 | }, 911 | "node_modules/shebang-command": { 912 | "version": "2.0.0", 913 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 914 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 915 | "dev": true, 916 | "dependencies": { 917 | "shebang-regex": "^3.0.0" 918 | }, 919 | "engines": { 920 | "node": ">=8" 921 | } 922 | }, 923 | "node_modules/shebang-regex": { 924 | "version": "3.0.0", 925 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 926 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 927 | "dev": true, 928 | "engines": { 929 | "node": ">=8" 930 | } 931 | }, 932 | "node_modules/signal-exit": { 933 | "version": "3.0.7", 934 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 935 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 936 | "dev": true 937 | }, 938 | "node_modules/source-map": { 939 | "version": "0.6.1", 940 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 941 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 942 | "dev": true, 943 | "engines": { 944 | "node": ">=0.10.0" 945 | } 946 | }, 947 | "node_modules/source-map-support": { 948 | "version": "0.5.21", 949 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 950 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 951 | "dev": true, 952 | "dependencies": { 953 | "buffer-from": "^1.0.0", 954 | "source-map": "^0.6.0" 955 | } 956 | }, 957 | "node_modules/stacktracey": { 958 | "version": "2.1.8", 959 | "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", 960 | "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", 961 | "dev": true, 962 | "dependencies": { 963 | "as-table": "^1.0.36", 964 | "get-source": "^2.0.12" 965 | } 966 | }, 967 | "node_modules/stoppable": { 968 | "version": "1.1.0", 969 | "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", 970 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", 971 | "dev": true, 972 | "engines": { 973 | "node": ">=4", 974 | "npm": ">=6" 975 | } 976 | }, 977 | "node_modules/strip-final-newline": { 978 | "version": "2.0.0", 979 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 980 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 981 | "dev": true, 982 | "engines": { 983 | "node": ">=6" 984 | } 985 | }, 986 | "node_modules/tslib": { 987 | "version": "2.6.2", 988 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 989 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 990 | "dev": true 991 | }, 992 | "node_modules/typescript": { 993 | "version": "5.2.2", 994 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 995 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 996 | "dev": true, 997 | "bin": { 998 | "tsc": "bin/tsc", 999 | "tsserver": "bin/tsserver" 1000 | }, 1001 | "engines": { 1002 | "node": ">=14.17" 1003 | } 1004 | }, 1005 | "node_modules/undici": { 1006 | "version": "5.25.4", 1007 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.25.4.tgz", 1008 | "integrity": "sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==", 1009 | "dev": true, 1010 | "dependencies": { 1011 | "@fastify/busboy": "^2.0.0" 1012 | }, 1013 | "engines": { 1014 | "node": ">=14.0" 1015 | } 1016 | }, 1017 | "node_modules/which": { 1018 | "version": "2.0.2", 1019 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1020 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1021 | "dev": true, 1022 | "dependencies": { 1023 | "isexe": "^2.0.0" 1024 | }, 1025 | "bin": { 1026 | "node-which": "bin/node-which" 1027 | }, 1028 | "engines": { 1029 | "node": ">= 8" 1030 | } 1031 | }, 1032 | "node_modules/workerd": { 1033 | "version": "1.20231002.0", 1034 | "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231002.0.tgz", 1035 | "integrity": "sha512-NFuUQBj30ZguDoPZ6bL40hINiu8aP2Pvxr/3xAdhWOwVFLuObPOiSdQ8qm4JYZ7jovxWjWE4Z7VR2avjIzEksQ==", 1036 | "dev": true, 1037 | "hasInstallScript": true, 1038 | "bin": { 1039 | "workerd": "bin/workerd" 1040 | }, 1041 | "engines": { 1042 | "node": ">=16" 1043 | }, 1044 | "optionalDependencies": { 1045 | "@cloudflare/workerd-darwin-64": "1.20231002.0", 1046 | "@cloudflare/workerd-darwin-arm64": "1.20231002.0", 1047 | "@cloudflare/workerd-linux-64": "1.20231002.0", 1048 | "@cloudflare/workerd-linux-arm64": "1.20231002.0", 1049 | "@cloudflare/workerd-windows-64": "1.20231002.0" 1050 | } 1051 | }, 1052 | "node_modules/ws": { 1053 | "version": "8.14.2", 1054 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", 1055 | "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", 1056 | "dev": true, 1057 | "engines": { 1058 | "node": ">=10.0.0" 1059 | }, 1060 | "peerDependencies": { 1061 | "bufferutil": "^4.0.1", 1062 | "utf-8-validate": ">=5.0.2" 1063 | }, 1064 | "peerDependenciesMeta": { 1065 | "bufferutil": { 1066 | "optional": true 1067 | }, 1068 | "utf-8-validate": { 1069 | "optional": true 1070 | } 1071 | } 1072 | }, 1073 | "node_modules/yoga-wasm-web": { 1074 | "version": "0.3.3", 1075 | "resolved": "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz", 1076 | "integrity": "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==", 1077 | "dev": true 1078 | }, 1079 | "node_modules/youch": { 1080 | "version": "3.3.2", 1081 | "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.2.tgz", 1082 | "integrity": "sha512-9cwz/z7abtcHOIuH45nzmUFCZbyJA1nLqlirKvyNRx4wDMhqsBaifAJzBej7L4fsVPjFxYq3NK3GAcfvZsydFw==", 1083 | "dev": true, 1084 | "dependencies": { 1085 | "cookie": "^0.5.0", 1086 | "mustache": "^4.2.0", 1087 | "stacktracey": "^2.1.8" 1088 | } 1089 | }, 1090 | "node_modules/zod": { 1091 | "version": "3.22.4", 1092 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", 1093 | "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", 1094 | "dev": true, 1095 | "funding": { 1096 | "url": "https://github.com/sponsors/colinhacks" 1097 | } 1098 | } 1099 | } 1100 | } 1101 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaderboard", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "partykit dev", 7 | "deploy": "partykit deploy" 8 | }, 9 | "dependencies": { 10 | "@clerk/clerk-js": "^4.60.1", 11 | "@clerk/themes": "^1.7.7", 12 | "lit-html": "^2.8.0", 13 | "partysocket": "0.0.9", 14 | "xstate": "5.0.0-beta.33" 15 | }, 16 | "devDependencies": { 17 | "partykit": "0.0.29", 18 | "typescript": "^5.2.2" 19 | } 20 | } -------------------------------------------------------------------------------- /partykit.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaderboard", 3 | "main": "src/server.ts", 4 | "compatibilityDate": "2023-10-08", 5 | "serve": { 6 | "path": "public", 7 | "build": "src/client.ts" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | dependencies: 4 | '@clerk/clerk-js': 5 | specifier: ^4.60.1 6 | version: 4.60.1(react-dom@18.2.0)(react@18.2.0) 7 | '@clerk/themes': 8 | specifier: ^1.7.7 9 | version: 1.7.7(react@18.2.0) 10 | lit-html: 11 | specifier: ^2.8.0 12 | version: 2.8.0 13 | partysocket: 14 | specifier: 0.0.9 15 | version: 0.0.9 16 | xstate: 17 | specifier: 5.0.0-beta.33 18 | version: 5.0.0-beta.33 19 | 20 | devDependencies: 21 | partykit: 22 | specifier: 0.0.29 23 | version: 0.0.29 24 | typescript: 25 | specifier: ^5.2.2 26 | version: 5.2.2 27 | 28 | packages: 29 | 30 | /@babel/code-frame@7.22.13: 31 | resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} 32 | engines: {node: '>=6.9.0'} 33 | dependencies: 34 | '@babel/highlight': 7.22.20 35 | chalk: 2.4.2 36 | dev: false 37 | 38 | /@babel/helper-module-imports@7.22.15: 39 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 40 | engines: {node: '>=6.9.0'} 41 | dependencies: 42 | '@babel/types': 7.23.0 43 | dev: false 44 | 45 | /@babel/helper-string-parser@7.22.5: 46 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 47 | engines: {node: '>=6.9.0'} 48 | dev: false 49 | 50 | /@babel/helper-validator-identifier@7.22.20: 51 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 52 | engines: {node: '>=6.9.0'} 53 | dev: false 54 | 55 | /@babel/highlight@7.22.20: 56 | resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} 57 | engines: {node: '>=6.9.0'} 58 | dependencies: 59 | '@babel/helper-validator-identifier': 7.22.20 60 | chalk: 2.4.2 61 | js-tokens: 4.0.0 62 | dev: false 63 | 64 | /@babel/runtime@7.23.1: 65 | resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} 66 | engines: {node: '>=6.9.0'} 67 | dependencies: 68 | regenerator-runtime: 0.14.0 69 | dev: false 70 | 71 | /@babel/types@7.23.0: 72 | resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} 73 | engines: {node: '>=6.9.0'} 74 | dependencies: 75 | '@babel/helper-string-parser': 7.22.5 76 | '@babel/helper-validator-identifier': 7.22.20 77 | to-fast-properties: 2.0.0 78 | dev: false 79 | 80 | /@clerk/clerk-js@4.60.1(react-dom@18.2.0)(react@18.2.0): 81 | resolution: {integrity: sha512-9UIuBB/kzjSTCDg0RTjcnplDhqSyoHW4ImECPuUHATkDj7O9lZhuv4P0VvAH5rpS71Bl8erJr/wUvPy7sm0c0Q==} 82 | peerDependencies: 83 | react: '>=18' 84 | dependencies: 85 | '@clerk/localizations': 1.26.3(react@18.2.0) 86 | '@clerk/shared': 0.24.3(react@18.2.0) 87 | '@clerk/types': 3.54.0 88 | '@emotion/cache': 11.10.5 89 | '@emotion/react': 11.10.5(react@18.2.0) 90 | '@floating-ui/react': 0.25.4(react-dom@18.2.0)(react@18.2.0) 91 | '@zxcvbn-ts/core': 2.2.1 92 | '@zxcvbn-ts/language-common': 3.0.2 93 | browser-tabs-lock: 1.2.15 94 | copy-to-clipboard: 3.3.3 95 | core-js: 3.26.1 96 | dequal: 2.0.3 97 | qrcode.react: 3.1.0(react@18.2.0) 98 | qs: 6.11.0 99 | react: 18.2.0 100 | regenerator-runtime: 0.13.11 101 | transitivePeerDependencies: 102 | - '@babel/core' 103 | - '@types/react' 104 | - react-dom 105 | dev: false 106 | 107 | /@clerk/localizations@1.26.3(react@18.2.0): 108 | resolution: {integrity: sha512-/wbPDWBKhvJ9hPbxx1v5uLJuc29lPTJV6HvowuRaZi3u7Ep8hDi9QtaqYG5na3hk9xlTdgqn0+9Lh57K1vvjqg==} 109 | engines: {node: '>=14'} 110 | peerDependencies: 111 | react: '>=16' 112 | dependencies: 113 | '@clerk/types': 3.54.0 114 | react: 18.2.0 115 | dev: false 116 | 117 | /@clerk/shared@0.24.3(react@18.2.0): 118 | resolution: {integrity: sha512-fZ0inqzP7hSDW8BUtIutqAt3YrOw/7ZDXxc3vRDMqY0shR8V6KXM7xdGS1dPV2qGxCBhBVbXRA/oFdKhO7PhJg==} 119 | peerDependencies: 120 | react: '>=16' 121 | dependencies: 122 | glob-to-regexp: 0.4.1 123 | js-cookie: 3.0.1 124 | react: 18.2.0 125 | swr: 2.2.0(react@18.2.0) 126 | dev: false 127 | 128 | /@clerk/themes@1.7.7(react@18.2.0): 129 | resolution: {integrity: sha512-nQqqaGVwfUK7A4y/STuYBj1Bdxk2PG48ChwxXz/ldC7+VRK3mtY5K7VLe76UGWpqrehrWL/vV6GAYu51K9UFeQ==} 130 | engines: {node: '>=14'} 131 | peerDependencies: 132 | react: '>=16' 133 | dependencies: 134 | react: 18.2.0 135 | dev: false 136 | 137 | /@clerk/types@3.54.0: 138 | resolution: {integrity: sha512-ZFS8Vz2elyxzupuTd7VO++TrzMmbhsgszriDSQKGCf69KeegZqGJ8QhzUWMcB7Ro/991bUKbZ56QF3x49j8Lbg==} 139 | engines: {node: '>=14'} 140 | dependencies: 141 | csstype: 3.1.1 142 | dev: false 143 | 144 | /@cloudflare/workerd-darwin-64@1.20231002.0: 145 | resolution: {integrity: sha512-sgtjzVO/wtI/6S7O0bk4zQAv2xlvqOxB18AXzlit6uXgbYFGeQedRHjhKVMOacGmWEnM4C3ir/fxJGsc3Pyxng==} 146 | engines: {node: '>=16'} 147 | cpu: [x64] 148 | os: [darwin] 149 | requiresBuild: true 150 | dev: true 151 | optional: true 152 | 153 | /@cloudflare/workerd-darwin-arm64@1.20231002.0: 154 | resolution: {integrity: sha512-dv8nztYFaTYYgBpyy80vc4hdMYv9mhyNbvBsZywm8S7ivcIpzogi0UKkGU4E/G0lYK6W3WtwTBqwRe+pXJ1+Ww==} 155 | engines: {node: '>=16'} 156 | cpu: [arm64] 157 | os: [darwin] 158 | requiresBuild: true 159 | dev: true 160 | optional: true 161 | 162 | /@cloudflare/workerd-linux-64@1.20231002.0: 163 | resolution: {integrity: sha512-UG8SlLcGzaQDSSw6FR4+Zf408925wkLOCAi8w5qEoFYu3g4Ef7ZenstesCOsyWL7qBDKx0/iwk6+a76W5IHI0Q==} 164 | engines: {node: '>=16'} 165 | cpu: [x64] 166 | os: [linux] 167 | requiresBuild: true 168 | dev: true 169 | optional: true 170 | 171 | /@cloudflare/workerd-linux-arm64@1.20231002.0: 172 | resolution: {integrity: sha512-GPaa66ZSq1gK09r87c5CJbHIApcIU//LVHz3rnUxK0//00YCwUuGUUK1dn/ylg+fVqDQxIDmH+ABnobBanvcDA==} 173 | engines: {node: '>=16'} 174 | cpu: [arm64] 175 | os: [linux] 176 | requiresBuild: true 177 | dev: true 178 | optional: true 179 | 180 | /@cloudflare/workerd-windows-64@1.20231002.0: 181 | resolution: {integrity: sha512-ybIy+sCme0VO0RscndXvqWNBaRMUOc8vhi+1N2h/KDsKfNLsfEQph+XWecfKzJseUy1yE2rV1xei3BaNmaa6vg==} 182 | engines: {node: '>=16'} 183 | cpu: [x64] 184 | os: [win32] 185 | requiresBuild: true 186 | dev: true 187 | optional: true 188 | 189 | /@cloudflare/workers-types@4.20231002.0: 190 | resolution: {integrity: sha512-gQMKf3THqAFWH426OXXfVx0gFLXiSiL2fo6mKjQYx4PU74MgmVDFh25NvpAIBK+XN+xXlrImClfYeqErXIT7jA==} 191 | dev: true 192 | 193 | /@emotion/babel-plugin@11.11.0: 194 | resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} 195 | dependencies: 196 | '@babel/helper-module-imports': 7.22.15 197 | '@babel/runtime': 7.23.1 198 | '@emotion/hash': 0.9.1 199 | '@emotion/memoize': 0.8.1 200 | '@emotion/serialize': 1.1.2 201 | babel-plugin-macros: 3.1.0 202 | convert-source-map: 1.9.0 203 | escape-string-regexp: 4.0.0 204 | find-root: 1.1.0 205 | source-map: 0.5.7 206 | stylis: 4.2.0 207 | dev: false 208 | 209 | /@emotion/cache@11.10.5: 210 | resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==} 211 | dependencies: 212 | '@emotion/memoize': 0.8.1 213 | '@emotion/sheet': 1.2.2 214 | '@emotion/utils': 1.2.1 215 | '@emotion/weak-memoize': 0.3.1 216 | stylis: 4.1.3 217 | dev: false 218 | 219 | /@emotion/hash@0.9.1: 220 | resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} 221 | dev: false 222 | 223 | /@emotion/memoize@0.8.1: 224 | resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} 225 | dev: false 226 | 227 | /@emotion/react@11.10.5(react@18.2.0): 228 | resolution: {integrity: sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==} 229 | peerDependencies: 230 | '@babel/core': ^7.0.0 231 | '@types/react': '*' 232 | react: '>=16.8.0' 233 | peerDependenciesMeta: 234 | '@babel/core': 235 | optional: true 236 | '@types/react': 237 | optional: true 238 | dependencies: 239 | '@babel/runtime': 7.23.1 240 | '@emotion/babel-plugin': 11.11.0 241 | '@emotion/cache': 11.10.5 242 | '@emotion/serialize': 1.1.2 243 | '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) 244 | '@emotion/utils': 1.2.1 245 | '@emotion/weak-memoize': 0.3.1 246 | hoist-non-react-statics: 3.3.2 247 | react: 18.2.0 248 | dev: false 249 | 250 | /@emotion/serialize@1.1.2: 251 | resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} 252 | dependencies: 253 | '@emotion/hash': 0.9.1 254 | '@emotion/memoize': 0.8.1 255 | '@emotion/unitless': 0.8.1 256 | '@emotion/utils': 1.2.1 257 | csstype: 3.1.2 258 | dev: false 259 | 260 | /@emotion/sheet@1.2.2: 261 | resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} 262 | dev: false 263 | 264 | /@emotion/unitless@0.8.1: 265 | resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} 266 | dev: false 267 | 268 | /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): 269 | resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} 270 | peerDependencies: 271 | react: '>=16.8.0' 272 | dependencies: 273 | react: 18.2.0 274 | dev: false 275 | 276 | /@emotion/utils@1.2.1: 277 | resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} 278 | dev: false 279 | 280 | /@emotion/weak-memoize@0.3.1: 281 | resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} 282 | dev: false 283 | 284 | /@esbuild/android-arm64@0.19.4: 285 | resolution: {integrity: sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==} 286 | engines: {node: '>=12'} 287 | cpu: [arm64] 288 | os: [android] 289 | requiresBuild: true 290 | dev: true 291 | optional: true 292 | 293 | /@esbuild/android-arm@0.19.4: 294 | resolution: {integrity: sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==} 295 | engines: {node: '>=12'} 296 | cpu: [arm] 297 | os: [android] 298 | requiresBuild: true 299 | dev: true 300 | optional: true 301 | 302 | /@esbuild/android-x64@0.19.4: 303 | resolution: {integrity: sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==} 304 | engines: {node: '>=12'} 305 | cpu: [x64] 306 | os: [android] 307 | requiresBuild: true 308 | dev: true 309 | optional: true 310 | 311 | /@esbuild/darwin-arm64@0.19.4: 312 | resolution: {integrity: sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==} 313 | engines: {node: '>=12'} 314 | cpu: [arm64] 315 | os: [darwin] 316 | requiresBuild: true 317 | dev: true 318 | optional: true 319 | 320 | /@esbuild/darwin-x64@0.19.4: 321 | resolution: {integrity: sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==} 322 | engines: {node: '>=12'} 323 | cpu: [x64] 324 | os: [darwin] 325 | requiresBuild: true 326 | dev: true 327 | optional: true 328 | 329 | /@esbuild/freebsd-arm64@0.19.4: 330 | resolution: {integrity: sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==} 331 | engines: {node: '>=12'} 332 | cpu: [arm64] 333 | os: [freebsd] 334 | requiresBuild: true 335 | dev: true 336 | optional: true 337 | 338 | /@esbuild/freebsd-x64@0.19.4: 339 | resolution: {integrity: sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==} 340 | engines: {node: '>=12'} 341 | cpu: [x64] 342 | os: [freebsd] 343 | requiresBuild: true 344 | dev: true 345 | optional: true 346 | 347 | /@esbuild/linux-arm64@0.19.4: 348 | resolution: {integrity: sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==} 349 | engines: {node: '>=12'} 350 | cpu: [arm64] 351 | os: [linux] 352 | requiresBuild: true 353 | dev: true 354 | optional: true 355 | 356 | /@esbuild/linux-arm@0.19.4: 357 | resolution: {integrity: sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==} 358 | engines: {node: '>=12'} 359 | cpu: [arm] 360 | os: [linux] 361 | requiresBuild: true 362 | dev: true 363 | optional: true 364 | 365 | /@esbuild/linux-ia32@0.19.4: 366 | resolution: {integrity: sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==} 367 | engines: {node: '>=12'} 368 | cpu: [ia32] 369 | os: [linux] 370 | requiresBuild: true 371 | dev: true 372 | optional: true 373 | 374 | /@esbuild/linux-loong64@0.19.4: 375 | resolution: {integrity: sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==} 376 | engines: {node: '>=12'} 377 | cpu: [loong64] 378 | os: [linux] 379 | requiresBuild: true 380 | dev: true 381 | optional: true 382 | 383 | /@esbuild/linux-mips64el@0.19.4: 384 | resolution: {integrity: sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==} 385 | engines: {node: '>=12'} 386 | cpu: [mips64el] 387 | os: [linux] 388 | requiresBuild: true 389 | dev: true 390 | optional: true 391 | 392 | /@esbuild/linux-ppc64@0.19.4: 393 | resolution: {integrity: sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==} 394 | engines: {node: '>=12'} 395 | cpu: [ppc64] 396 | os: [linux] 397 | requiresBuild: true 398 | dev: true 399 | optional: true 400 | 401 | /@esbuild/linux-riscv64@0.19.4: 402 | resolution: {integrity: sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==} 403 | engines: {node: '>=12'} 404 | cpu: [riscv64] 405 | os: [linux] 406 | requiresBuild: true 407 | dev: true 408 | optional: true 409 | 410 | /@esbuild/linux-s390x@0.19.4: 411 | resolution: {integrity: sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==} 412 | engines: {node: '>=12'} 413 | cpu: [s390x] 414 | os: [linux] 415 | requiresBuild: true 416 | dev: true 417 | optional: true 418 | 419 | /@esbuild/linux-x64@0.19.4: 420 | resolution: {integrity: sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==} 421 | engines: {node: '>=12'} 422 | cpu: [x64] 423 | os: [linux] 424 | requiresBuild: true 425 | dev: true 426 | optional: true 427 | 428 | /@esbuild/netbsd-x64@0.19.4: 429 | resolution: {integrity: sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==} 430 | engines: {node: '>=12'} 431 | cpu: [x64] 432 | os: [netbsd] 433 | requiresBuild: true 434 | dev: true 435 | optional: true 436 | 437 | /@esbuild/openbsd-x64@0.19.4: 438 | resolution: {integrity: sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==} 439 | engines: {node: '>=12'} 440 | cpu: [x64] 441 | os: [openbsd] 442 | requiresBuild: true 443 | dev: true 444 | optional: true 445 | 446 | /@esbuild/sunos-x64@0.19.4: 447 | resolution: {integrity: sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==} 448 | engines: {node: '>=12'} 449 | cpu: [x64] 450 | os: [sunos] 451 | requiresBuild: true 452 | dev: true 453 | optional: true 454 | 455 | /@esbuild/win32-arm64@0.19.4: 456 | resolution: {integrity: sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==} 457 | engines: {node: '>=12'} 458 | cpu: [arm64] 459 | os: [win32] 460 | requiresBuild: true 461 | dev: true 462 | optional: true 463 | 464 | /@esbuild/win32-ia32@0.19.4: 465 | resolution: {integrity: sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==} 466 | engines: {node: '>=12'} 467 | cpu: [ia32] 468 | os: [win32] 469 | requiresBuild: true 470 | dev: true 471 | optional: true 472 | 473 | /@esbuild/win32-x64@0.19.4: 474 | resolution: {integrity: sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==} 475 | engines: {node: '>=12'} 476 | cpu: [x64] 477 | os: [win32] 478 | requiresBuild: true 479 | dev: true 480 | optional: true 481 | 482 | /@fastify/busboy@2.0.0: 483 | resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} 484 | engines: {node: '>=14'} 485 | dev: true 486 | 487 | /@floating-ui/core@1.5.0: 488 | resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} 489 | dependencies: 490 | '@floating-ui/utils': 0.1.6 491 | dev: false 492 | 493 | /@floating-ui/dom@1.5.3: 494 | resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} 495 | dependencies: 496 | '@floating-ui/core': 1.5.0 497 | '@floating-ui/utils': 0.1.6 498 | dev: false 499 | 500 | /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0): 501 | resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} 502 | peerDependencies: 503 | react: '>=16.8.0' 504 | react-dom: '>=16.8.0' 505 | dependencies: 506 | '@floating-ui/dom': 1.5.3 507 | react: 18.2.0 508 | react-dom: 18.2.0(react@18.2.0) 509 | dev: false 510 | 511 | /@floating-ui/react@0.25.4(react-dom@18.2.0)(react@18.2.0): 512 | resolution: {integrity: sha512-lWRQ/UiTvSIBxohn0/2HFHEmnmOVRjl7j6XcRJuLH0ls6f/9AyHMWVzkAJFuwx0n9gaEeCmg9VccCSCJzbEJig==} 513 | peerDependencies: 514 | react: '>=16.8.0' 515 | react-dom: '>=16.8.0' 516 | dependencies: 517 | '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) 518 | '@floating-ui/utils': 0.1.6 519 | react: 18.2.0 520 | react-dom: 18.2.0(react@18.2.0) 521 | tabbable: 6.2.0 522 | dev: false 523 | 524 | /@floating-ui/utils@0.1.6: 525 | resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} 526 | dev: false 527 | 528 | /@types/parse-json@4.0.0: 529 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 530 | dev: false 531 | 532 | /@types/trusted-types@2.0.4: 533 | resolution: {integrity: sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==} 534 | dev: false 535 | 536 | /@zxcvbn-ts/core@2.2.1: 537 | resolution: {integrity: sha512-Cg1JyRpCDIF+Dh3nauqygmmCYxogNVZDxSn+9PgkPD1HZ2QiJe4elruVJrGmYRS7muGmZ1hNJq8ySQdPv6GHaw==} 538 | dependencies: 539 | fastest-levenshtein: 1.0.16 540 | dev: false 541 | 542 | /@zxcvbn-ts/language-common@3.0.2: 543 | resolution: {integrity: sha512-GPnf4cuSUZXhx3spjRQLtUoI6/+00f9198gcG8hJDBFR4KYfMvLorAk97MU7qeTkyhzhYLR7yLr/E66vH7ZOaw==} 544 | dev: false 545 | 546 | /acorn-walk@8.2.0: 547 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 548 | engines: {node: '>=0.4.0'} 549 | dev: true 550 | 551 | /acorn@8.10.0: 552 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 553 | engines: {node: '>=0.4.0'} 554 | hasBin: true 555 | dev: true 556 | 557 | /ansi-styles@3.2.1: 558 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 559 | engines: {node: '>=4'} 560 | dependencies: 561 | color-convert: 1.9.3 562 | dev: false 563 | 564 | /arch@2.2.0: 565 | resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} 566 | dev: true 567 | 568 | /as-table@1.0.55: 569 | resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} 570 | dependencies: 571 | printable-characters: 1.0.42 572 | dev: true 573 | 574 | /babel-plugin-macros@3.1.0: 575 | resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} 576 | engines: {node: '>=10', npm: '>=6'} 577 | dependencies: 578 | '@babel/runtime': 7.23.1 579 | cosmiconfig: 7.1.0 580 | resolve: 1.22.6 581 | dev: false 582 | 583 | /browser-tabs-lock@1.2.15: 584 | resolution: {integrity: sha512-J8K9vdivK0Di+b8SBdE7EZxDr88TnATing7XoLw6+nFkXMQ6sVBh92K3NQvZlZU91AIkFRi0w3sztk5Z+vsswA==} 585 | requiresBuild: true 586 | dependencies: 587 | lodash: 4.17.21 588 | dev: false 589 | 590 | /buffer-from@1.1.2: 591 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 592 | dev: true 593 | 594 | /call-bind@1.0.2: 595 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 596 | dependencies: 597 | function-bind: 1.1.1 598 | get-intrinsic: 1.2.1 599 | dev: false 600 | 601 | /callsites@3.1.0: 602 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 603 | engines: {node: '>=6'} 604 | dev: false 605 | 606 | /capnp-ts@0.7.0: 607 | resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} 608 | dependencies: 609 | debug: 4.3.4 610 | tslib: 2.6.2 611 | transitivePeerDependencies: 612 | - supports-color 613 | dev: true 614 | 615 | /chalk@2.4.2: 616 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 617 | engines: {node: '>=4'} 618 | dependencies: 619 | ansi-styles: 3.2.1 620 | escape-string-regexp: 1.0.5 621 | supports-color: 5.5.0 622 | dev: false 623 | 624 | /clipboardy@3.0.0: 625 | resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} 626 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 627 | dependencies: 628 | arch: 2.2.0 629 | execa: 5.1.1 630 | is-wsl: 2.2.0 631 | dev: true 632 | 633 | /color-convert@1.9.3: 634 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 635 | dependencies: 636 | color-name: 1.1.3 637 | dev: false 638 | 639 | /color-name@1.1.3: 640 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 641 | dev: false 642 | 643 | /convert-source-map@1.9.0: 644 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 645 | dev: false 646 | 647 | /cookie@0.5.0: 648 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 649 | engines: {node: '>= 0.6'} 650 | dev: true 651 | 652 | /copy-to-clipboard@3.3.3: 653 | resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} 654 | dependencies: 655 | toggle-selection: 1.0.6 656 | dev: false 657 | 658 | /core-js@3.26.1: 659 | resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==} 660 | requiresBuild: true 661 | dev: false 662 | 663 | /cosmiconfig@7.1.0: 664 | resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 665 | engines: {node: '>=10'} 666 | dependencies: 667 | '@types/parse-json': 4.0.0 668 | import-fresh: 3.3.0 669 | parse-json: 5.2.0 670 | path-type: 4.0.0 671 | yaml: 1.10.2 672 | dev: false 673 | 674 | /cross-spawn@7.0.3: 675 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 676 | engines: {node: '>= 8'} 677 | dependencies: 678 | path-key: 3.1.1 679 | shebang-command: 2.0.0 680 | which: 2.0.2 681 | dev: true 682 | 683 | /csstype@3.1.1: 684 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} 685 | dev: false 686 | 687 | /csstype@3.1.2: 688 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 689 | dev: false 690 | 691 | /data-uri-to-buffer@2.0.2: 692 | resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} 693 | dev: true 694 | 695 | /debug@4.3.4: 696 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 697 | engines: {node: '>=6.0'} 698 | peerDependencies: 699 | supports-color: '*' 700 | peerDependenciesMeta: 701 | supports-color: 702 | optional: true 703 | dependencies: 704 | ms: 2.1.2 705 | dev: true 706 | 707 | /dequal@2.0.3: 708 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 709 | engines: {node: '>=6'} 710 | dev: false 711 | 712 | /error-ex@1.3.2: 713 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 714 | dependencies: 715 | is-arrayish: 0.2.1 716 | dev: false 717 | 718 | /esbuild@0.19.4: 719 | resolution: {integrity: sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==} 720 | engines: {node: '>=12'} 721 | hasBin: true 722 | requiresBuild: true 723 | optionalDependencies: 724 | '@esbuild/android-arm': 0.19.4 725 | '@esbuild/android-arm64': 0.19.4 726 | '@esbuild/android-x64': 0.19.4 727 | '@esbuild/darwin-arm64': 0.19.4 728 | '@esbuild/darwin-x64': 0.19.4 729 | '@esbuild/freebsd-arm64': 0.19.4 730 | '@esbuild/freebsd-x64': 0.19.4 731 | '@esbuild/linux-arm': 0.19.4 732 | '@esbuild/linux-arm64': 0.19.4 733 | '@esbuild/linux-ia32': 0.19.4 734 | '@esbuild/linux-loong64': 0.19.4 735 | '@esbuild/linux-mips64el': 0.19.4 736 | '@esbuild/linux-ppc64': 0.19.4 737 | '@esbuild/linux-riscv64': 0.19.4 738 | '@esbuild/linux-s390x': 0.19.4 739 | '@esbuild/linux-x64': 0.19.4 740 | '@esbuild/netbsd-x64': 0.19.4 741 | '@esbuild/openbsd-x64': 0.19.4 742 | '@esbuild/sunos-x64': 0.19.4 743 | '@esbuild/win32-arm64': 0.19.4 744 | '@esbuild/win32-ia32': 0.19.4 745 | '@esbuild/win32-x64': 0.19.4 746 | dev: true 747 | 748 | /escape-string-regexp@1.0.5: 749 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 750 | engines: {node: '>=0.8.0'} 751 | dev: false 752 | 753 | /escape-string-regexp@4.0.0: 754 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 755 | engines: {node: '>=10'} 756 | dev: false 757 | 758 | /execa@5.1.1: 759 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 760 | engines: {node: '>=10'} 761 | dependencies: 762 | cross-spawn: 7.0.3 763 | get-stream: 6.0.1 764 | human-signals: 2.1.0 765 | is-stream: 2.0.1 766 | merge-stream: 2.0.0 767 | npm-run-path: 4.0.1 768 | onetime: 5.1.2 769 | signal-exit: 3.0.7 770 | strip-final-newline: 2.0.0 771 | dev: true 772 | 773 | /exit-hook@2.2.1: 774 | resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} 775 | engines: {node: '>=6'} 776 | dev: true 777 | 778 | /fastest-levenshtein@1.0.16: 779 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 780 | engines: {node: '>= 4.9.1'} 781 | dev: false 782 | 783 | /find-root@1.1.0: 784 | resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} 785 | dev: false 786 | 787 | /fsevents@2.3.3: 788 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 789 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 790 | os: [darwin] 791 | requiresBuild: true 792 | dev: true 793 | optional: true 794 | 795 | /function-bind@1.1.1: 796 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 797 | dev: false 798 | 799 | /get-intrinsic@1.2.1: 800 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 801 | dependencies: 802 | function-bind: 1.1.1 803 | has: 1.0.4 804 | has-proto: 1.0.1 805 | has-symbols: 1.0.3 806 | dev: false 807 | 808 | /get-source@2.0.12: 809 | resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} 810 | dependencies: 811 | data-uri-to-buffer: 2.0.2 812 | source-map: 0.6.1 813 | dev: true 814 | 815 | /get-stream@6.0.1: 816 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 817 | engines: {node: '>=10'} 818 | dev: true 819 | 820 | /glob-to-regexp@0.4.1: 821 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 822 | 823 | /has-flag@3.0.0: 824 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 825 | engines: {node: '>=4'} 826 | dev: false 827 | 828 | /has-proto@1.0.1: 829 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 830 | engines: {node: '>= 0.4'} 831 | dev: false 832 | 833 | /has-symbols@1.0.3: 834 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 835 | engines: {node: '>= 0.4'} 836 | dev: false 837 | 838 | /has@1.0.4: 839 | resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} 840 | engines: {node: '>= 0.4.0'} 841 | dev: false 842 | 843 | /hoist-non-react-statics@3.3.2: 844 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} 845 | dependencies: 846 | react-is: 16.13.1 847 | dev: false 848 | 849 | /human-signals@2.1.0: 850 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 851 | engines: {node: '>=10.17.0'} 852 | dev: true 853 | 854 | /import-fresh@3.3.0: 855 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 856 | engines: {node: '>=6'} 857 | dependencies: 858 | parent-module: 1.0.1 859 | resolve-from: 4.0.0 860 | dev: false 861 | 862 | /is-arrayish@0.2.1: 863 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 864 | dev: false 865 | 866 | /is-core-module@2.13.0: 867 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} 868 | dependencies: 869 | has: 1.0.4 870 | dev: false 871 | 872 | /is-docker@2.2.1: 873 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 874 | engines: {node: '>=8'} 875 | hasBin: true 876 | dev: true 877 | 878 | /is-stream@2.0.1: 879 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 880 | engines: {node: '>=8'} 881 | dev: true 882 | 883 | /is-wsl@2.2.0: 884 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 885 | engines: {node: '>=8'} 886 | dependencies: 887 | is-docker: 2.2.1 888 | dev: true 889 | 890 | /isexe@2.0.0: 891 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 892 | dev: true 893 | 894 | /js-cookie@3.0.1: 895 | resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==} 896 | engines: {node: '>=12'} 897 | dev: false 898 | 899 | /js-tokens@4.0.0: 900 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 901 | dev: false 902 | 903 | /json-parse-even-better-errors@2.3.1: 904 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 905 | dev: false 906 | 907 | /lines-and-columns@1.2.4: 908 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 909 | dev: false 910 | 911 | /lit-html@2.8.0: 912 | resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} 913 | dependencies: 914 | '@types/trusted-types': 2.0.4 915 | dev: false 916 | 917 | /lodash@4.17.21: 918 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 919 | dev: false 920 | 921 | /loose-envify@1.4.0: 922 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 923 | hasBin: true 924 | dependencies: 925 | js-tokens: 4.0.0 926 | dev: false 927 | 928 | /merge-stream@2.0.0: 929 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 930 | dev: true 931 | 932 | /mimic-fn@2.1.0: 933 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 934 | engines: {node: '>=6'} 935 | dev: true 936 | 937 | /miniflare@3.20231002.0: 938 | resolution: {integrity: sha512-Qw1JfGwx1ZuaoumE9DpzPm78b9RD+qP/k+iAPaCIay9iQfcf7ri7rX6Zper2rReawuL+DdNxXJmhB4cfwn5Glw==} 939 | engines: {node: '>=16.13'} 940 | dependencies: 941 | acorn: 8.10.0 942 | acorn-walk: 8.2.0 943 | capnp-ts: 0.7.0 944 | exit-hook: 2.2.1 945 | glob-to-regexp: 0.4.1 946 | source-map-support: 0.5.21 947 | stoppable: 1.1.0 948 | undici: 5.25.4 949 | workerd: 1.20231002.0 950 | ws: 8.14.2 951 | youch: 3.3.2 952 | zod: 3.22.4 953 | transitivePeerDependencies: 954 | - bufferutil 955 | - supports-color 956 | - utf-8-validate 957 | dev: true 958 | 959 | /ms@2.1.2: 960 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 961 | dev: true 962 | 963 | /mustache@4.2.0: 964 | resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} 965 | hasBin: true 966 | dev: true 967 | 968 | /npm-run-path@4.0.1: 969 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 970 | engines: {node: '>=8'} 971 | dependencies: 972 | path-key: 3.1.1 973 | dev: true 974 | 975 | /object-inspect@1.12.3: 976 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 977 | dev: false 978 | 979 | /onetime@5.1.2: 980 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 981 | engines: {node: '>=6'} 982 | dependencies: 983 | mimic-fn: 2.1.0 984 | dev: true 985 | 986 | /parent-module@1.0.1: 987 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 988 | engines: {node: '>=6'} 989 | dependencies: 990 | callsites: 3.1.0 991 | dev: false 992 | 993 | /parse-json@5.2.0: 994 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 995 | engines: {node: '>=8'} 996 | dependencies: 997 | '@babel/code-frame': 7.22.13 998 | error-ex: 1.3.2 999 | json-parse-even-better-errors: 2.3.1 1000 | lines-and-columns: 1.2.4 1001 | dev: false 1002 | 1003 | /partykit@0.0.29: 1004 | resolution: {integrity: sha512-BwVJls90it+QrYzNoa2d3MysBQI6r+lcH4zJQ5aUGzB/BIxt8Oy2UIyMDdfpvz3kPGBYXDJSk35Lj6Z9ryja1g==} 1005 | hasBin: true 1006 | dependencies: 1007 | '@cloudflare/workers-types': 4.20231002.0 1008 | clipboardy: 3.0.0 1009 | esbuild: 0.19.4 1010 | miniflare: 3.20231002.0 1011 | yoga-wasm-web: 0.3.3 1012 | optionalDependencies: 1013 | fsevents: 2.3.3 1014 | transitivePeerDependencies: 1015 | - bufferutil 1016 | - supports-color 1017 | - utf-8-validate 1018 | dev: true 1019 | 1020 | /partysocket@0.0.9: 1021 | resolution: {integrity: sha512-SVFtPseMU9DC7fd7MdMx/y9MgWFMteWBgL0wVDQ90nCRBzt/pD1x8ovIqsCFK7uo1KXOXvqJuf9vjTIGPw77Wg==} 1022 | dependencies: 1023 | react: 18.2.0 1024 | dev: false 1025 | 1026 | /path-key@3.1.1: 1027 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1028 | engines: {node: '>=8'} 1029 | dev: true 1030 | 1031 | /path-parse@1.0.7: 1032 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1033 | dev: false 1034 | 1035 | /path-type@4.0.0: 1036 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1037 | engines: {node: '>=8'} 1038 | dev: false 1039 | 1040 | /printable-characters@1.0.42: 1041 | resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} 1042 | dev: true 1043 | 1044 | /qrcode.react@3.1.0(react@18.2.0): 1045 | resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} 1046 | peerDependencies: 1047 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1048 | dependencies: 1049 | react: 18.2.0 1050 | dev: false 1051 | 1052 | /qs@6.11.0: 1053 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} 1054 | engines: {node: '>=0.6'} 1055 | dependencies: 1056 | side-channel: 1.0.4 1057 | dev: false 1058 | 1059 | /react-dom@18.2.0(react@18.2.0): 1060 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 1061 | peerDependencies: 1062 | react: ^18.2.0 1063 | dependencies: 1064 | loose-envify: 1.4.0 1065 | react: 18.2.0 1066 | scheduler: 0.23.0 1067 | dev: false 1068 | 1069 | /react-is@16.13.1: 1070 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1071 | dev: false 1072 | 1073 | /react@18.2.0: 1074 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1075 | engines: {node: '>=0.10.0'} 1076 | dependencies: 1077 | loose-envify: 1.4.0 1078 | dev: false 1079 | 1080 | /regenerator-runtime@0.13.11: 1081 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 1082 | dev: false 1083 | 1084 | /regenerator-runtime@0.14.0: 1085 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} 1086 | dev: false 1087 | 1088 | /resolve-from@4.0.0: 1089 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1090 | engines: {node: '>=4'} 1091 | dev: false 1092 | 1093 | /resolve@1.22.6: 1094 | resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} 1095 | hasBin: true 1096 | dependencies: 1097 | is-core-module: 2.13.0 1098 | path-parse: 1.0.7 1099 | supports-preserve-symlinks-flag: 1.0.0 1100 | dev: false 1101 | 1102 | /scheduler@0.23.0: 1103 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 1104 | dependencies: 1105 | loose-envify: 1.4.0 1106 | dev: false 1107 | 1108 | /shebang-command@2.0.0: 1109 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1110 | engines: {node: '>=8'} 1111 | dependencies: 1112 | shebang-regex: 3.0.0 1113 | dev: true 1114 | 1115 | /shebang-regex@3.0.0: 1116 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1117 | engines: {node: '>=8'} 1118 | dev: true 1119 | 1120 | /side-channel@1.0.4: 1121 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1122 | dependencies: 1123 | call-bind: 1.0.2 1124 | get-intrinsic: 1.2.1 1125 | object-inspect: 1.12.3 1126 | dev: false 1127 | 1128 | /signal-exit@3.0.7: 1129 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1130 | dev: true 1131 | 1132 | /source-map-support@0.5.21: 1133 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1134 | dependencies: 1135 | buffer-from: 1.1.2 1136 | source-map: 0.6.1 1137 | dev: true 1138 | 1139 | /source-map@0.5.7: 1140 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} 1141 | engines: {node: '>=0.10.0'} 1142 | dev: false 1143 | 1144 | /source-map@0.6.1: 1145 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1146 | engines: {node: '>=0.10.0'} 1147 | dev: true 1148 | 1149 | /stacktracey@2.1.8: 1150 | resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} 1151 | dependencies: 1152 | as-table: 1.0.55 1153 | get-source: 2.0.12 1154 | dev: true 1155 | 1156 | /stoppable@1.1.0: 1157 | resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} 1158 | engines: {node: '>=4', npm: '>=6'} 1159 | dev: true 1160 | 1161 | /strip-final-newline@2.0.0: 1162 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1163 | engines: {node: '>=6'} 1164 | dev: true 1165 | 1166 | /stylis@4.1.3: 1167 | resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} 1168 | dev: false 1169 | 1170 | /stylis@4.2.0: 1171 | resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} 1172 | dev: false 1173 | 1174 | /supports-color@5.5.0: 1175 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1176 | engines: {node: '>=4'} 1177 | dependencies: 1178 | has-flag: 3.0.0 1179 | dev: false 1180 | 1181 | /supports-preserve-symlinks-flag@1.0.0: 1182 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1183 | engines: {node: '>= 0.4'} 1184 | dev: false 1185 | 1186 | /swr@2.2.0(react@18.2.0): 1187 | resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} 1188 | peerDependencies: 1189 | react: ^16.11.0 || ^17.0.0 || ^18.0.0 1190 | dependencies: 1191 | react: 18.2.0 1192 | use-sync-external-store: 1.2.0(react@18.2.0) 1193 | dev: false 1194 | 1195 | /tabbable@6.2.0: 1196 | resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} 1197 | dev: false 1198 | 1199 | /to-fast-properties@2.0.0: 1200 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1201 | engines: {node: '>=4'} 1202 | dev: false 1203 | 1204 | /toggle-selection@1.0.6: 1205 | resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} 1206 | dev: false 1207 | 1208 | /tslib@2.6.2: 1209 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1210 | dev: true 1211 | 1212 | /typescript@5.2.2: 1213 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} 1214 | engines: {node: '>=14.17'} 1215 | hasBin: true 1216 | dev: true 1217 | 1218 | /undici@5.25.4: 1219 | resolution: {integrity: sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==} 1220 | engines: {node: '>=14.0'} 1221 | dependencies: 1222 | '@fastify/busboy': 2.0.0 1223 | dev: true 1224 | 1225 | /use-sync-external-store@1.2.0(react@18.2.0): 1226 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 1227 | peerDependencies: 1228 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1229 | dependencies: 1230 | react: 18.2.0 1231 | dev: false 1232 | 1233 | /which@2.0.2: 1234 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1235 | engines: {node: '>= 8'} 1236 | hasBin: true 1237 | dependencies: 1238 | isexe: 2.0.0 1239 | dev: true 1240 | 1241 | /workerd@1.20231002.0: 1242 | resolution: {integrity: sha512-NFuUQBj30ZguDoPZ6bL40hINiu8aP2Pvxr/3xAdhWOwVFLuObPOiSdQ8qm4JYZ7jovxWjWE4Z7VR2avjIzEksQ==} 1243 | engines: {node: '>=16'} 1244 | hasBin: true 1245 | requiresBuild: true 1246 | optionalDependencies: 1247 | '@cloudflare/workerd-darwin-64': 1.20231002.0 1248 | '@cloudflare/workerd-darwin-arm64': 1.20231002.0 1249 | '@cloudflare/workerd-linux-64': 1.20231002.0 1250 | '@cloudflare/workerd-linux-arm64': 1.20231002.0 1251 | '@cloudflare/workerd-windows-64': 1.20231002.0 1252 | dev: true 1253 | 1254 | /ws@8.14.2: 1255 | resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} 1256 | engines: {node: '>=10.0.0'} 1257 | peerDependencies: 1258 | bufferutil: ^4.0.1 1259 | utf-8-validate: '>=5.0.2' 1260 | peerDependenciesMeta: 1261 | bufferutil: 1262 | optional: true 1263 | utf-8-validate: 1264 | optional: true 1265 | dev: true 1266 | 1267 | /xstate@5.0.0-beta.33: 1268 | resolution: {integrity: sha512-zHwbY2d2GGrsIySUCybrlq6YAPGM20yKpvliroDqfSbwa255Z1d7RYLkbbxiLx8SnEwDpWVple7JTXkjOw3JLA==} 1269 | dev: false 1270 | 1271 | /yaml@1.10.2: 1272 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1273 | engines: {node: '>= 6'} 1274 | dev: false 1275 | 1276 | /yoga-wasm-web@0.3.3: 1277 | resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} 1278 | dev: true 1279 | 1280 | /youch@3.3.2: 1281 | resolution: {integrity: sha512-9cwz/z7abtcHOIuH45nzmUFCZbyJA1nLqlirKvyNRx4wDMhqsBaifAJzBej7L4fsVPjFxYq3NK3GAcfvZsydFw==} 1282 | dependencies: 1283 | cookie: 0.5.0 1284 | mustache: 4.2.0 1285 | stacktracey: 2.1.8 1286 | dev: true 1287 | 1288 | /zod@3.22.4: 1289 | resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} 1290 | dev: true 1291 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidkpiano/weatherboard/173bef3b79772065191a350ba9ee3b687709cc2a/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | Weatherboard 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 |
29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /* Document 4 | ========================================================================== */ 5 | 6 | /** 7 | * 1. Correct the line height in all browsers. 8 | * 2. Prevent adjustments of font size after orientation changes in iOS. 9 | */ 10 | 11 | html { 12 | line-height: 1.15; /* 1 */ 13 | -webkit-text-size-adjust: 100%; /* 2 */ 14 | } 15 | 16 | /* Sections 17 | ========================================================================== */ 18 | 19 | /** 20 | * Remove the margin in all browsers. 21 | */ 22 | 23 | body { 24 | margin: 0; 25 | } 26 | 27 | /** 28 | * Render the `main` element consistently in IE. 29 | */ 30 | 31 | main { 32 | display: block; 33 | } 34 | 35 | /** 36 | * Correct the font size and margin on `h1` elements within `section` and 37 | * `article` contexts in Chrome, Firefox, and Safari. 38 | */ 39 | 40 | h1 { 41 | font-size: 2em; 42 | margin: 0.67em 0; 43 | } 44 | 45 | /* Grouping content 46 | ========================================================================== */ 47 | 48 | /** 49 | * 1. Add the correct box sizing in Firefox. 50 | * 2. Show the overflow in Edge and IE. 51 | */ 52 | 53 | hr { 54 | box-sizing: content-box; /* 1 */ 55 | height: 0; /* 1 */ 56 | overflow: visible; /* 2 */ 57 | } 58 | 59 | /** 60 | * 1. Correct the inheritance and scaling of font size in all browsers. 61 | * 2. Correct the odd `em` font sizing in all browsers. 62 | */ 63 | 64 | pre { 65 | font-family: monospace, monospace; /* 1 */ 66 | font-size: 1em; /* 2 */ 67 | } 68 | 69 | /* Text-level semantics 70 | ========================================================================== */ 71 | 72 | /** 73 | * Remove the gray background on active links in IE 10. 74 | */ 75 | 76 | a { 77 | background-color: transparent; 78 | } 79 | 80 | /** 81 | * 1. Remove the bottom border in Chrome 57- 82 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 83 | */ 84 | 85 | abbr[title] { 86 | border-bottom: none; /* 1 */ 87 | text-decoration: underline; /* 2 */ 88 | text-decoration: underline dotted; /* 2 */ 89 | } 90 | 91 | /** 92 | * Add the correct font weight in Chrome, Edge, and Safari. 93 | */ 94 | 95 | b, 96 | strong { 97 | font-weight: bolder; 98 | } 99 | 100 | /** 101 | * 1. Correct the inheritance and scaling of font size in all browsers. 102 | * 2. Correct the odd `em` font sizing in all browsers. 103 | */ 104 | 105 | code, 106 | kbd, 107 | samp { 108 | font-family: monospace, monospace; /* 1 */ 109 | font-size: 1em; /* 2 */ 110 | } 111 | 112 | /** 113 | * Add the correct font size in all browsers. 114 | */ 115 | 116 | small { 117 | font-size: 80%; 118 | } 119 | 120 | /** 121 | * Prevent `sub` and `sup` elements from affecting the line height in 122 | * all browsers. 123 | */ 124 | 125 | sub, 126 | sup { 127 | font-size: 75%; 128 | line-height: 0; 129 | position: relative; 130 | vertical-align: baseline; 131 | } 132 | 133 | sub { 134 | bottom: -0.25em; 135 | } 136 | 137 | sup { 138 | top: -0.5em; 139 | } 140 | 141 | /* Embedded content 142 | ========================================================================== */ 143 | 144 | /** 145 | * Remove the border on images inside links in IE 10. 146 | */ 147 | 148 | img { 149 | border-style: none; 150 | } 151 | 152 | /* Forms 153 | ========================================================================== */ 154 | 155 | /** 156 | * 1. Change the font styles in all browsers. 157 | * 2. Remove the margin in Firefox and Safari. 158 | */ 159 | 160 | button, 161 | input, 162 | optgroup, 163 | select, 164 | textarea { 165 | font-family: inherit; /* 1 */ 166 | font-size: 100%; /* 1 */ 167 | line-height: 1.15; /* 1 */ 168 | margin: 0; /* 2 */ 169 | } 170 | 171 | /** 172 | * Show the overflow in IE. 173 | * 1. Show the overflow in Edge. 174 | */ 175 | 176 | button, 177 | input { 178 | /* 1 */ 179 | overflow: visible; 180 | } 181 | 182 | /** 183 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 184 | * 1. Remove the inheritance of text transform in Firefox. 185 | */ 186 | 187 | button, 188 | select { 189 | /* 1 */ 190 | text-transform: none; 191 | } 192 | 193 | /** 194 | * Correct the inability to style clickable types in iOS and Safari. 195 | */ 196 | 197 | button, 198 | [type="button"], 199 | [type="reset"], 200 | [type="submit"] { 201 | -webkit-appearance: button; 202 | } 203 | 204 | /** 205 | * Remove the inner border and padding in Firefox. 206 | */ 207 | 208 | button::-moz-focus-inner, 209 | [type="button"]::-moz-focus-inner, 210 | [type="reset"]::-moz-focus-inner, 211 | [type="submit"]::-moz-focus-inner { 212 | border-style: none; 213 | padding: 0; 214 | } 215 | 216 | /** 217 | * Restore the focus styles unset by the previous rule. 218 | */ 219 | 220 | button:-moz-focusring, 221 | [type="button"]:-moz-focusring, 222 | [type="reset"]:-moz-focusring, 223 | [type="submit"]:-moz-focusring { 224 | outline: 1px dotted ButtonText; 225 | } 226 | 227 | /** 228 | * Correct the padding in Firefox. 229 | */ 230 | 231 | fieldset { 232 | padding: 0.35em 0.75em 0.625em; 233 | } 234 | 235 | /** 236 | * 1. Correct the text wrapping in Edge and IE. 237 | * 2. Correct the color inheritance from `fieldset` elements in IE. 238 | * 3. Remove the padding so developers are not caught out when they zero out 239 | * `fieldset` elements in all browsers. 240 | */ 241 | 242 | legend { 243 | box-sizing: border-box; /* 1 */ 244 | color: inherit; /* 2 */ 245 | display: table; /* 1 */ 246 | max-width: 100%; /* 1 */ 247 | padding: 0; /* 3 */ 248 | white-space: normal; /* 1 */ 249 | } 250 | 251 | /** 252 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 253 | */ 254 | 255 | progress { 256 | vertical-align: baseline; 257 | } 258 | 259 | /** 260 | * Remove the default vertical scrollbar in IE 10+. 261 | */ 262 | 263 | textarea { 264 | overflow: auto; 265 | } 266 | 267 | /** 268 | * 1. Add the correct box sizing in IE 10. 269 | * 2. Remove the padding in IE 10. 270 | */ 271 | 272 | [type="checkbox"], 273 | [type="radio"] { 274 | box-sizing: border-box; /* 1 */ 275 | padding: 0; /* 2 */ 276 | } 277 | 278 | /** 279 | * Correct the cursor style of increment and decrement buttons in Chrome. 280 | */ 281 | 282 | [type="number"]::-webkit-inner-spin-button, 283 | [type="number"]::-webkit-outer-spin-button { 284 | height: auto; 285 | } 286 | 287 | /** 288 | * 1. Correct the odd appearance in Chrome and Safari. 289 | * 2. Correct the outline style in Safari. 290 | */ 291 | 292 | [type="search"] { 293 | -webkit-appearance: textfield; /* 1 */ 294 | outline-offset: -2px; /* 2 */ 295 | } 296 | 297 | /** 298 | * Remove the inner padding in Chrome and Safari on macOS. 299 | */ 300 | 301 | [type="search"]::-webkit-search-decoration { 302 | -webkit-appearance: none; 303 | } 304 | 305 | /** 306 | * 1. Correct the inability to style clickable types in iOS and Safari. 307 | * 2. Change font properties to `inherit` in Safari. 308 | */ 309 | 310 | ::-webkit-file-upload-button { 311 | -webkit-appearance: button; /* 1 */ 312 | font: inherit; /* 2 */ 313 | } 314 | 315 | /* Interactive 316 | ========================================================================== */ 317 | 318 | /* 319 | * Add the correct display in Edge, IE 10+, and Firefox. 320 | */ 321 | 322 | details { 323 | display: block; 324 | } 325 | 326 | /* 327 | * Add the correct display in all browsers. 328 | */ 329 | 330 | summary { 331 | display: list-item; 332 | } 333 | 334 | /* Misc 335 | ========================================================================== */ 336 | 337 | /** 338 | * Add the correct display in IE 10+. 339 | */ 340 | 341 | template { 342 | display: none; 343 | } 344 | 345 | /** 346 | * Add the correct display in IE 10. 347 | */ 348 | 349 | [hidden] { 350 | display: none; 351 | } 352 | -------------------------------------------------------------------------------- /src/client.ts: -------------------------------------------------------------------------------- 1 | import './styles.css'; 2 | 3 | import PartySocket from 'partysocket'; 4 | import { html, render } from 'lit-html'; 5 | 6 | import { createActor, type EventFrom, type SnapshotFrom } from 'xstate'; 7 | import { weatherMachine } from './machine'; 8 | 9 | declare const PARTYKIT_HOST: string; 10 | 11 | const view = ( 12 | state: SnapshotFrom, 13 | send: (event: EventFrom) => void 14 | ) => { 15 | const { leaderboard } = state.context; 16 | return html` 17 |
18 | ${state.hasTag('noPermission') 19 | ? html`

y u no permission

` 20 | : html`

Weatherboard

`} 21 | ${state.hasTag('getName') 22 | ? html`
{ 24 | ev.preventDefault(); 25 | 26 | const formData = new FormData(ev.target as HTMLFormElement); 27 | 28 | const name = formData.get('name') as string; 29 | 30 | send({ 31 | type: 'nameGiven', 32 | name, 33 | }); 34 | }} 35 | > 36 | 37 |
` 38 | : ''} 39 |
40 | 41 |
42 | ${state.context.name && !leaderboard[state.context.id] 43 | ? html` 44 |
48 |
49 |
50 |
?? °
51 |
52 |
53 | ${state.context.name} 54 |
55 |
Finding a thermometer…
56 |
57 | ` 58 | : ''} 59 | ${Object.entries(leaderboard) 60 | .sort( 61 | ([, itemA], [, itemB]) => itemB.current.temp_c - itemA.current.temp_c 62 | ) 63 | .map( 64 | ([id, { name, location, current }], i) => html` 65 |
70 |
71 | 72 |
${current.temp_c}°
73 |
74 |
${name}
75 |
76 | ${location.name}, ${location.country} 77 |
78 |
79 | ` 80 | )} 81 |
82 | `; 83 | }; 84 | 85 | const elApp = document.getElementById('app') as HTMLDivElement; 86 | 87 | // get room from query params or default to 'thunderdome' 88 | const room = 89 | new URLSearchParams(window.location.search).get('room') ?? 'thunderdome'; 90 | 91 | export const partySocket = new PartySocket({ 92 | host: PARTYKIT_HOST, 93 | room, 94 | }); 95 | 96 | const actor = createActor(weatherMachine, { 97 | input: { 98 | id: partySocket.id, 99 | }, 100 | }); 101 | 102 | actor.subscribe((s) => { 103 | if ('startViewTransition' in document) { 104 | (document as any).startViewTransition(() => { 105 | render(view(actor.getSnapshot(), actor.send), elApp); 106 | }); 107 | } else { 108 | render(view(actor.getSnapshot(), actor.send), elApp); 109 | } 110 | }); 111 | 112 | actor.start(); 113 | -------------------------------------------------------------------------------- /src/machine.ts: -------------------------------------------------------------------------------- 1 | import type { Leaderboard } from './server'; 2 | import { 3 | assign, 4 | createMachine, 5 | fromPromise, 6 | fromCallback, 7 | sendTo, 8 | } from 'xstate'; 9 | import { partySocket } from './client'; 10 | 11 | export const weatherMachine = createMachine( 12 | { 13 | initial: 'connecting', 14 | types: { 15 | context: {} as { 16 | name: string | null; 17 | location: string | null; 18 | leaderboard: Leaderboard; 19 | id: string; 20 | }, 21 | input: {} as { 22 | id: string; 23 | }, 24 | }, 25 | context: ({ input }) => { 26 | return { 27 | name: null, 28 | location: null, 29 | leaderboard: {}, 30 | id: input.id, 31 | }; 32 | }, 33 | invoke: { 34 | id: 'party', 35 | src: fromCallback(({ sendBack, receive }) => { 36 | partySocket.addEventListener('message', (event) => { 37 | const eventObject = JSON.parse(event.data); 38 | console.log(eventObject); 39 | sendBack(eventObject); 40 | }); 41 | 42 | partySocket.addEventListener('open', () => { 43 | sendBack({ type: 'partySocket.open' }); 44 | }); 45 | 46 | receive((event) => { 47 | partySocket.send(JSON.stringify(event)); 48 | }); 49 | }), 50 | }, 51 | states: { 52 | connecting: { 53 | on: { 54 | 'partySocket.open': 'connected', 55 | }, 56 | }, 57 | connected: { 58 | initial: 'checkIfRegistered', 59 | 60 | states: { 61 | checkIfRegistered: { 62 | always: [ 63 | { 64 | guard: 'hasRegistered', 65 | target: 'leaderboard', 66 | }, 67 | { target: 'getName' }, 68 | ], 69 | }, 70 | getName: { 71 | tags: 'getName', 72 | on: { 73 | nameGiven: { 74 | target: 'getLocation', 75 | guard: ({ event }) => event.name.length, 76 | actions: assign({ 77 | name: ({ event }) => event.name, 78 | }), 79 | }, 80 | }, 81 | }, 82 | getLocation: { 83 | invoke: { 84 | src: 'getLocation', 85 | onError: { 86 | target: 'noPermission', 87 | }, 88 | onDone: [ 89 | { 90 | guard: ({ event }) => event.output, 91 | actions: [ 92 | assign({ 93 | location: ({ event }) => event.output, 94 | }), 95 | sendTo('party', ({ context }) => ({ 96 | type: 'register', 97 | name: context.name, 98 | location: context.location, 99 | })), 100 | ], 101 | target: 'leaderboard', 102 | }, 103 | { target: 'noPermission' }, 104 | ], 105 | }, 106 | }, 107 | noPermission: { 108 | tags: 'noPermission', 109 | }, 110 | leaderboard: { 111 | entry: () => { 112 | localStorage.setItem('registered', 'true'); 113 | }, 114 | }, 115 | }, 116 | }, 117 | }, 118 | on: { 119 | 'leaderboard.updated': { 120 | actions: assign({ 121 | leaderboard: ({ event }) => event.leaderboard, 122 | }), 123 | }, 124 | }, 125 | }, 126 | { 127 | guards: { 128 | hasRegistered: () => { 129 | return localStorage.getItem('registered') === 'true'; 130 | }, 131 | }, 132 | actors: { 133 | getLocation: fromPromise(async () => { 134 | if (!navigator.geolocation) { 135 | return Promise.reject('no permission'); 136 | } 137 | 138 | // get location from browser 139 | const location = await new Promise((res, rej) => 140 | navigator.geolocation.getCurrentPosition( 141 | (pos) => { 142 | res(`${pos.coords.latitude},${pos.coords.longitude}`); 143 | }, 144 | (err) => { 145 | rej(err); 146 | } 147 | ) 148 | ); 149 | 150 | const res = Promise.resolve(location); 151 | 152 | return res; 153 | }), 154 | }, 155 | } 156 | ); 157 | -------------------------------------------------------------------------------- /src/server.ts: -------------------------------------------------------------------------------- 1 | import type * as Party from 'partykit/server'; 2 | 3 | const WEATHER_API_KEY = '36dd02d5282f473caec170818230810'; 4 | 5 | const createUrl = (location: string) => 6 | `http://api.weatherapi.com/v1/current.json?key=${WEATHER_API_KEY}&q=${location}&aqi=no`; 7 | 8 | export type Leaderboard = Record< 9 | string, 10 | { 11 | name: string; 12 | location: Location; 13 | current: Current; 14 | } 15 | >; 16 | 17 | interface Location { 18 | name: string; 19 | region: string; 20 | country: string; 21 | lat: number; 22 | lon: number; 23 | tz_id: string; 24 | localtime_epoch: number; 25 | localtime: string; 26 | } 27 | 28 | interface Condition { 29 | text: string; 30 | icon: string; 31 | code: number; 32 | } 33 | 34 | interface Current { 35 | last_updated_epoch: number; 36 | last_updated: string; 37 | temp_c: number; 38 | temp_f: number; 39 | is_day: number; 40 | condition: Condition; 41 | wind_mph: number; 42 | wind_kph: number; 43 | wind_degree: number; 44 | wind_dir: string; 45 | pressure_mb: number; 46 | pressure_in: number; 47 | precip_mm: number; 48 | precip_in: number; 49 | humidity: number; 50 | cloud: number; 51 | feelslike_c: number; 52 | feelslike_f: number; 53 | vis_km: number; 54 | vis_miles: number; 55 | uv: number; 56 | gust_mph: number; 57 | gust_kph: number; 58 | } 59 | 60 | interface WeatherResponse { 61 | location: Location; 62 | current: Current; 63 | } 64 | 65 | async function refetch(leaderboard: Leaderboard) { 66 | const promises = Object.values(leaderboard).map(({ location }) => 67 | fetch(createUrl(location.name)) 68 | ); 69 | const responses = await Promise.all(promises); 70 | const jsons = await Promise.all(responses.map((r) => r.json())); 71 | const newLeaderboard = Object.fromEntries( 72 | Object.entries(leaderboard).map(([id, user], i) => [ 73 | id, 74 | { 75 | ...user, 76 | current: jsons[i].current, 77 | }, 78 | ]) 79 | ); 80 | 81 | return newLeaderboard; 82 | } 83 | 84 | export default class Server implements Party.Server { 85 | constructor(readonly party: Party.Party) {} 86 | 87 | async onConnect(conn: Party.Connection, ctx: Party.ConnectionContext) { 88 | // A websocket just connected! 89 | console.log( 90 | `Connected: 91 | id: ${conn.id} 92 | room: ${this.party.id} 93 | url: ${new URL(ctx.request.url).pathname}` 94 | ); 95 | 96 | const leaderboard = 97 | (await this.party.storage.get>( 98 | `leaderboard:${this.party.id}` 99 | )) ?? {}; 100 | 101 | await this.party.storage.put(`leaderboard:${this.party.id}`, leaderboard); 102 | 103 | console.log('ROOM:', this.party.id); 104 | 105 | conn.send( 106 | JSON.stringify({ 107 | type: 'leaderboard.updated', 108 | leaderboard: leaderboard, 109 | }) 110 | ); 111 | } 112 | 113 | async onStart(): Promise { 114 | const leaderboard = 115 | (await this.party.storage.get( 116 | `leaderboard:${this.party.id}` 117 | )) ?? {}; 118 | setInterval(async () => { 119 | const newLeaderboard = await refetch(leaderboard); 120 | 121 | await this.party.storage.put( 122 | `leaderboard:${this.party.id}`, 123 | newLeaderboard 124 | ); 125 | 126 | this.party.broadcast( 127 | JSON.stringify({ 128 | type: 'leaderboard.updated', 129 | leaderboard: newLeaderboard, 130 | }) 131 | ); 132 | }, 1000 * 60 * 10); 133 | } 134 | 135 | async onMessage(message: string, sender: Party.Connection) { 136 | const leaderboard = 137 | (await this.party.storage.get( 138 | `leaderboard:${this.party.id}` 139 | )) ?? {}; 140 | const eventObject = JSON.parse(message); 141 | 142 | console.log( 143 | `connection ${sender.id} sent message with type: ${eventObject.type}` 144 | ); 145 | 146 | if (eventObject.type === 'register') { 147 | this.party.broadcast( 148 | JSON.stringify({ 149 | type: 'leaderboard.registered', 150 | name: eventObject.name, 151 | senderId: sender.id, 152 | }) 153 | ); 154 | fetch(createUrl(eventObject.location)) 155 | .then((response) => response.json()) 156 | .then(async (data: WeatherResponse) => { 157 | leaderboard[sender.id] = { 158 | name: eventObject.name, 159 | location: data.location, 160 | current: data.current, 161 | }; 162 | 163 | await this.party.storage.put( 164 | `leaderboard:${this.party.id}`, 165 | leaderboard 166 | ); 167 | 168 | this.party.broadcast( 169 | JSON.stringify({ 170 | type: 'leaderboard.updated', 171 | leaderboard: leaderboard, 172 | }) 173 | ); 174 | }) 175 | .catch((error) => { 176 | console.log(error); 177 | }); 178 | } 179 | } 180 | 181 | async onRequest(req: Party.Request) { 182 | if (req.method === 'GET') { 183 | const stuff = await this.party.storage.list(); 184 | 185 | const leaderboards: Record = {}; 186 | for (const [key, value] of stuff) { 187 | if (key.startsWith('leaderboard:')) { 188 | leaderboards[key] = value as any; 189 | } 190 | } 191 | 192 | return new Response(JSON.stringify(leaderboards), { 193 | headers: { 194 | 'Content-Type': 'application/json', 195 | }, 196 | }); 197 | } 198 | 199 | return new Response('Method not allowed', { status: 405 }); 200 | } 201 | } 202 | 203 | Server satisfies Party.Worker; 204 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | *, 2 | *::before, 3 | *::after { 4 | box-sizing: border-box; 5 | position: relative; 6 | } 7 | 8 | html, 9 | body { 10 | height: 100%; 11 | width: 100%; 12 | } 13 | 14 | body { 15 | font-family: sans-serif; 16 | font-size: 16px; 17 | line-height: 1.5; 18 | color: #fff; 19 | background: radial-gradient(circle at top left, #c52017, #c5201722), 20 | radial-gradient(circle at bottom right, #044096, #044096); 21 | /* top left */ 22 | background-position: 0 0; 23 | display: flex; 24 | justify-content: center; 25 | } 26 | 27 | h1, 28 | h2, 29 | h3, 30 | h4, 31 | h5, 32 | h6 { 33 | font-family: sans-serif; 34 | font-weight: 600; 35 | line-height: 1.25; 36 | margin-top: 0; 37 | margin-bottom: 0.5rem; 38 | } 39 | 40 | #app { 41 | height: 100%; 42 | display: grid; 43 | grid-template-rows: auto 1fr; 44 | overflow: hidden; 45 | width: 100%; 46 | max-width: 40rem; 47 | } 48 | 49 | header { 50 | padding: 2rem; 51 | } 52 | 53 | .items { 54 | display: grid; 55 | grid-template-columns: auto 1fr; 56 | grid-auto-rows: min-content; 57 | overflow: auto; 58 | padding-inline: 1rem; 59 | } 60 | 61 | .item { 62 | display: grid; 63 | grid-column: 1 / -1; 64 | grid-template-columns: subgrid; 65 | grid-template-rows: 1fr 1fr; 66 | grid-column-gap: 2rem; 67 | padding: 1rem 2rem; 68 | animation: fade-in 0.5s ease-in-out both; 69 | animation-delay: calc(var(--i, 0) * 0.1s); 70 | border: 0.5rem solid transparent; 71 | border-radius: 1rem; 72 | } 73 | 74 | .item.-loading { 75 | animation: pulse 1s ease-in-out infinite alternate; 76 | } 77 | 78 | @keyframes pulse { 79 | from { 80 | opacity: 0.5; 81 | } 82 | 83 | to { 84 | opacity: 1; 85 | } 86 | } 87 | 88 | ::view-transition { 89 | animation-duration: 2s; 90 | transition-duration: 2s; 91 | } 92 | 93 | .item[data-index='0'] { 94 | border-color: #fff3; 95 | } 96 | 97 | .user-name { 98 | grid-column: 2 / 3; 99 | grid-row: 1 / 2; 100 | font-size: 1.25rem; 101 | white-space: nowrap; 102 | text-overflow: ellipsis; 103 | } 104 | 105 | .user-location { 106 | grid-column: 2 / 3; 107 | grid-row: 2 / 3; 108 | opacity: 0.7; 109 | } 110 | 111 | .user-weather { 112 | grid-column: 1 / 2; 113 | grid-row: 1 / -1; 114 | font-size: 2.5rem; 115 | display: grid; 116 | grid-template-columns: 1fr 1fr; 117 | align-items: center; 118 | gap: 0.5rem; 119 | } 120 | 121 | @keyframes fade-in { 122 | from { 123 | opacity: 0; 124 | transform: translateY(1rem); 125 | } 126 | to { 127 | opacity: 1; 128 | transform: translateY(0); 129 | } 130 | } 131 | 132 | /* mobile devices */ 133 | @media (max-width: 40rem) { 134 | .item { 135 | padding: 1rem; 136 | grid-column-gap: 1rem; 137 | } 138 | .user-name { 139 | align-self: self-end; 140 | font-size: 1.5rem; 141 | } 142 | .user-weather { 143 | font-size: 1.5rem; 144 | } 145 | } 146 | 147 | input[type='text'] { 148 | appearance: none; 149 | padding: 1rem; 150 | width: 100%; 151 | background: #fff3; 152 | border: 1px solid #fff6; 153 | border-radius: 1rem; 154 | font-size: 2rem; 155 | color: white; 156 | } 157 | /* make the placeholder white-ish */ 158 | input[type='text']::placeholder { 159 | color: #fff9; 160 | } 161 | 162 | input[type='text']:focus { 163 | outline: none; 164 | /* subtle glow */ 165 | box-shadow: 0 0 0 0.25rem #fff6; 166 | } 167 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "ES2020" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "Node" /* Specify how TypeScript looks up a file from a given module specifier. */, 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | "resolveJsonModule": true /* Enable importing .json files. */, 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | "noEmit": true /* Disable emitting files from a compilation. */, 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | "verbatimModuleSyntax": true /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */, 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 83 | 84 | /* Type Checking */ 85 | "strict": true /* Enable all strict type-checking options. */, 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | } 109 | } 110 | --------------------------------------------------------------------------------