├── .gitignore ├── API ├── Cargo.lock ├── Cargo.toml ├── Shuttle.toml ├── src │ └── main.rs └── static │ ├── assets │ ├── index-726b6ed3.js │ └── index-8cf6afb9.css │ ├── index.html │ └── vite.svg ├── README.md ├── Screenshot.png ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.cjs ├── public └── vite.svg ├── src ├── App.tsx ├── assets │ └── react.svg ├── components │ └── NamePrompt.tsx ├── index.css ├── main.tsx └── vite-env.d.ts ├── tailwind.config.cjs ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .env 17 | .vscode/* 18 | !.vscode/extensions.json 19 | .idea 20 | .DS_Store 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | 27 | 28 | # Added by cargo 29 | 30 | /target 31 | /Cargo.lock 32 | target 33 | 34 | # Added for project 35 | Secrets.toml 36 | -------------------------------------------------------------------------------- /API/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "android_system_properties" 7 | version = "0.1.5" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 10 | dependencies = [ 11 | "libc", 12 | ] 13 | 14 | [[package]] 15 | name = "anyhow" 16 | version = "1.0.68" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" 19 | 20 | [[package]] 21 | name = "async-trait" 22 | version = "0.1.61" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" 25 | dependencies = [ 26 | "proc-macro2", 27 | "quote", 28 | "syn", 29 | ] 30 | 31 | [[package]] 32 | name = "autocfg" 33 | version = "1.1.0" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 36 | 37 | [[package]] 38 | name = "axum" 39 | version = "0.6.4" 40 | source = "registry+https://github.com/rust-lang/crates.io-index" 41 | checksum = "e5694b64066a2459918d8074c2ce0d5a88f409431994c2356617c8ae0c4721fc" 42 | dependencies = [ 43 | "async-trait", 44 | "axum-core", 45 | "base64 0.20.0", 46 | "bitflags", 47 | "bytes", 48 | "futures-util", 49 | "http", 50 | "http-body", 51 | "hyper", 52 | "itoa", 53 | "matchit", 54 | "memchr", 55 | "mime", 56 | "percent-encoding", 57 | "pin-project-lite", 58 | "rustversion", 59 | "serde", 60 | "serde_json", 61 | "serde_path_to_error", 62 | "serde_urlencoded", 63 | "sha1", 64 | "sync_wrapper", 65 | "tokio", 66 | "tokio-tungstenite", 67 | "tower", 68 | "tower-http", 69 | "tower-layer", 70 | "tower-service", 71 | ] 72 | 73 | [[package]] 74 | name = "axum-core" 75 | version = "0.3.2" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "1cae3e661676ffbacb30f1a824089a8c9150e71017f7e1e38f2aa32009188d34" 78 | dependencies = [ 79 | "async-trait", 80 | "bytes", 81 | "futures-util", 82 | "http", 83 | "http-body", 84 | "mime", 85 | "rustversion", 86 | "tower-layer", 87 | "tower-service", 88 | ] 89 | 90 | [[package]] 91 | name = "axum-extra" 92 | version = "0.4.2" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "f9a320103719de37b7b4da4c8eb629d4573f6bcfd3dfe80d3208806895ccf81d" 95 | dependencies = [ 96 | "axum", 97 | "bytes", 98 | "futures-util", 99 | "http", 100 | "mime", 101 | "pin-project-lite", 102 | "tokio", 103 | "tower", 104 | "tower-http", 105 | "tower-layer", 106 | "tower-service", 107 | ] 108 | 109 | [[package]] 110 | name = "base64" 111 | version = "0.13.1" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 114 | 115 | [[package]] 116 | name = "base64" 117 | version = "0.20.0" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" 120 | 121 | [[package]] 122 | name = "bitflags" 123 | version = "1.3.2" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 126 | 127 | [[package]] 128 | name = "block-buffer" 129 | version = "0.10.3" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" 132 | dependencies = [ 133 | "generic-array", 134 | ] 135 | 136 | [[package]] 137 | name = "bumpalo" 138 | version = "3.11.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" 141 | 142 | [[package]] 143 | name = "byteorder" 144 | version = "1.4.3" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 147 | 148 | [[package]] 149 | name = "bytes" 150 | version = "1.3.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" 153 | 154 | [[package]] 155 | name = "camino" 156 | version = "1.1.2" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" 159 | dependencies = [ 160 | "serde", 161 | ] 162 | 163 | [[package]] 164 | name = "cargo-platform" 165 | version = "0.1.2" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" 168 | dependencies = [ 169 | "serde", 170 | ] 171 | 172 | [[package]] 173 | name = "cargo_metadata" 174 | version = "0.15.2" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "982a0cf6a99c350d7246035613882e376d58cebe571785abc5da4f648d53ac0a" 177 | dependencies = [ 178 | "camino", 179 | "cargo-platform", 180 | "semver", 181 | "serde", 182 | "serde_json", 183 | "thiserror", 184 | ] 185 | 186 | [[package]] 187 | name = "cc" 188 | version = "1.0.78" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" 191 | 192 | [[package]] 193 | name = "cfg-if" 194 | version = "1.0.0" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 197 | 198 | [[package]] 199 | name = "chrono" 200 | version = "0.4.23" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" 203 | dependencies = [ 204 | "iana-time-zone", 205 | "js-sys", 206 | "num-integer", 207 | "num-traits", 208 | "serde", 209 | "time", 210 | "wasm-bindgen", 211 | "winapi", 212 | ] 213 | 214 | [[package]] 215 | name = "codespan-reporting" 216 | version = "0.11.1" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 219 | dependencies = [ 220 | "termcolor", 221 | "unicode-width", 222 | ] 223 | 224 | [[package]] 225 | name = "core-foundation" 226 | version = "0.9.3" 227 | source = "registry+https://github.com/rust-lang/crates.io-index" 228 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 229 | dependencies = [ 230 | "core-foundation-sys", 231 | "libc", 232 | ] 233 | 234 | [[package]] 235 | name = "core-foundation-sys" 236 | version = "0.8.3" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 239 | 240 | [[package]] 241 | name = "cpufeatures" 242 | version = "0.2.5" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" 245 | dependencies = [ 246 | "libc", 247 | ] 248 | 249 | [[package]] 250 | name = "crossbeam-channel" 251 | version = "0.5.6" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" 254 | dependencies = [ 255 | "cfg-if", 256 | "crossbeam-utils", 257 | ] 258 | 259 | [[package]] 260 | name = "crossbeam-utils" 261 | version = "0.8.14" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" 264 | dependencies = [ 265 | "cfg-if", 266 | ] 267 | 268 | [[package]] 269 | name = "crypto-common" 270 | version = "0.1.6" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 273 | dependencies = [ 274 | "generic-array", 275 | "typenum", 276 | ] 277 | 278 | [[package]] 279 | name = "cxx" 280 | version = "1.0.86" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579" 283 | dependencies = [ 284 | "cc", 285 | "cxxbridge-flags", 286 | "cxxbridge-macro", 287 | "link-cplusplus", 288 | ] 289 | 290 | [[package]] 291 | name = "cxx-build" 292 | version = "1.0.86" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70" 295 | dependencies = [ 296 | "cc", 297 | "codespan-reporting", 298 | "once_cell", 299 | "proc-macro2", 300 | "quote", 301 | "scratch", 302 | "syn", 303 | ] 304 | 305 | [[package]] 306 | name = "cxxbridge-flags" 307 | version = "1.0.86" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c" 310 | 311 | [[package]] 312 | name = "cxxbridge-macro" 313 | version = "1.0.86" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" 316 | dependencies = [ 317 | "proc-macro2", 318 | "quote", 319 | "syn", 320 | ] 321 | 322 | [[package]] 323 | name = "digest" 324 | version = "0.10.6" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" 327 | dependencies = [ 328 | "block-buffer", 329 | "crypto-common", 330 | ] 331 | 332 | [[package]] 333 | name = "doc-comment" 334 | version = "0.3.3" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" 337 | 338 | [[package]] 339 | name = "either" 340 | version = "1.8.0" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" 343 | 344 | [[package]] 345 | name = "fastrand" 346 | version = "1.8.0" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" 349 | dependencies = [ 350 | "instant", 351 | ] 352 | 353 | [[package]] 354 | name = "finl_unicode" 355 | version = "1.2.0" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" 358 | 359 | [[package]] 360 | name = "fnv" 361 | version = "1.0.7" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 364 | 365 | [[package]] 366 | name = "foreign-types" 367 | version = "0.3.2" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 370 | dependencies = [ 371 | "foreign-types-shared", 372 | ] 373 | 374 | [[package]] 375 | name = "foreign-types-shared" 376 | version = "0.1.1" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 379 | 380 | [[package]] 381 | name = "form_urlencoded" 382 | version = "1.1.0" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" 385 | dependencies = [ 386 | "percent-encoding", 387 | ] 388 | 389 | [[package]] 390 | name = "futures" 391 | version = "0.3.25" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" 394 | dependencies = [ 395 | "futures-channel", 396 | "futures-core", 397 | "futures-executor", 398 | "futures-io", 399 | "futures-sink", 400 | "futures-task", 401 | "futures-util", 402 | ] 403 | 404 | [[package]] 405 | name = "futures-channel" 406 | version = "0.3.25" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" 409 | dependencies = [ 410 | "futures-core", 411 | "futures-sink", 412 | ] 413 | 414 | [[package]] 415 | name = "futures-core" 416 | version = "0.3.25" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" 419 | 420 | [[package]] 421 | name = "futures-executor" 422 | version = "0.3.25" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" 425 | dependencies = [ 426 | "futures-core", 427 | "futures-task", 428 | "futures-util", 429 | ] 430 | 431 | [[package]] 432 | name = "futures-io" 433 | version = "0.3.25" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" 436 | 437 | [[package]] 438 | name = "futures-macro" 439 | version = "0.3.25" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" 442 | dependencies = [ 443 | "proc-macro2", 444 | "quote", 445 | "syn", 446 | ] 447 | 448 | [[package]] 449 | name = "futures-sink" 450 | version = "0.3.25" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" 453 | 454 | [[package]] 455 | name = "futures-task" 456 | version = "0.3.25" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" 459 | 460 | [[package]] 461 | name = "futures-util" 462 | version = "0.3.25" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" 465 | dependencies = [ 466 | "futures-channel", 467 | "futures-core", 468 | "futures-io", 469 | "futures-macro", 470 | "futures-sink", 471 | "futures-task", 472 | "memchr", 473 | "pin-project-lite", 474 | "pin-utils", 475 | "slab", 476 | ] 477 | 478 | [[package]] 479 | name = "generic-array" 480 | version = "0.14.6" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 483 | dependencies = [ 484 | "typenum", 485 | "version_check", 486 | ] 487 | 488 | [[package]] 489 | name = "getrandom" 490 | version = "0.2.8" 491 | source = "registry+https://github.com/rust-lang/crates.io-index" 492 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" 493 | dependencies = [ 494 | "cfg-if", 495 | "libc", 496 | "wasi 0.11.0+wasi-snapshot-preview1", 497 | ] 498 | 499 | [[package]] 500 | name = "h2" 501 | version = "0.3.15" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" 504 | dependencies = [ 505 | "bytes", 506 | "fnv", 507 | "futures-core", 508 | "futures-sink", 509 | "futures-util", 510 | "http", 511 | "indexmap", 512 | "slab", 513 | "tokio", 514 | "tokio-util", 515 | "tracing", 516 | ] 517 | 518 | [[package]] 519 | name = "hashbrown" 520 | version = "0.12.3" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 523 | 524 | [[package]] 525 | name = "heck" 526 | version = "0.4.0" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 529 | 530 | [[package]] 531 | name = "hermit-abi" 532 | version = "0.2.6" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" 535 | dependencies = [ 536 | "libc", 537 | ] 538 | 539 | [[package]] 540 | name = "http" 541 | version = "0.2.8" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" 544 | dependencies = [ 545 | "bytes", 546 | "fnv", 547 | "itoa", 548 | ] 549 | 550 | [[package]] 551 | name = "http-body" 552 | version = "0.4.5" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" 555 | dependencies = [ 556 | "bytes", 557 | "http", 558 | "pin-project-lite", 559 | ] 560 | 561 | [[package]] 562 | name = "http-range-header" 563 | version = "0.3.0" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" 566 | 567 | [[package]] 568 | name = "httparse" 569 | version = "1.8.0" 570 | source = "registry+https://github.com/rust-lang/crates.io-index" 571 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 572 | 573 | [[package]] 574 | name = "httpdate" 575 | version = "1.0.2" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 578 | 579 | [[package]] 580 | name = "hyper" 581 | version = "0.14.23" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" 584 | dependencies = [ 585 | "bytes", 586 | "futures-channel", 587 | "futures-core", 588 | "futures-util", 589 | "h2", 590 | "http", 591 | "http-body", 592 | "httparse", 593 | "httpdate", 594 | "itoa", 595 | "pin-project-lite", 596 | "socket2", 597 | "tokio", 598 | "tower-service", 599 | "tracing", 600 | "want", 601 | ] 602 | 603 | [[package]] 604 | name = "hyper-tls" 605 | version = "0.5.0" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 608 | dependencies = [ 609 | "bytes", 610 | "hyper", 611 | "native-tls", 612 | "tokio", 613 | "tokio-native-tls", 614 | ] 615 | 616 | [[package]] 617 | name = "iana-time-zone" 618 | version = "0.1.53" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" 621 | dependencies = [ 622 | "android_system_properties", 623 | "core-foundation-sys", 624 | "iana-time-zone-haiku", 625 | "js-sys", 626 | "wasm-bindgen", 627 | "winapi", 628 | ] 629 | 630 | [[package]] 631 | name = "iana-time-zone-haiku" 632 | version = "0.1.1" 633 | source = "registry+https://github.com/rust-lang/crates.io-index" 634 | checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" 635 | dependencies = [ 636 | "cxx", 637 | "cxx-build", 638 | ] 639 | 640 | [[package]] 641 | name = "idna" 642 | version = "0.3.0" 643 | source = "registry+https://github.com/rust-lang/crates.io-index" 644 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 645 | dependencies = [ 646 | "unicode-bidi", 647 | "unicode-normalization", 648 | ] 649 | 650 | [[package]] 651 | name = "indexmap" 652 | version = "1.9.2" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" 655 | dependencies = [ 656 | "autocfg", 657 | "hashbrown", 658 | ] 659 | 660 | [[package]] 661 | name = "instant" 662 | version = "0.1.12" 663 | source = "registry+https://github.com/rust-lang/crates.io-index" 664 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 665 | dependencies = [ 666 | "cfg-if", 667 | ] 668 | 669 | [[package]] 670 | name = "itertools" 671 | version = "0.10.5" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 674 | dependencies = [ 675 | "either", 676 | ] 677 | 678 | [[package]] 679 | name = "itoa" 680 | version = "1.0.5" 681 | source = "registry+https://github.com/rust-lang/crates.io-index" 682 | checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" 683 | 684 | [[package]] 685 | name = "js-sys" 686 | version = "0.3.60" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" 689 | dependencies = [ 690 | "wasm-bindgen", 691 | ] 692 | 693 | [[package]] 694 | name = "lazy_static" 695 | version = "1.4.0" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 698 | 699 | [[package]] 700 | name = "libc" 701 | version = "0.2.139" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" 704 | 705 | [[package]] 706 | name = "link-cplusplus" 707 | version = "1.0.8" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" 710 | dependencies = [ 711 | "cc", 712 | ] 713 | 714 | [[package]] 715 | name = "lock_api" 716 | version = "0.4.9" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 719 | dependencies = [ 720 | "autocfg", 721 | "scopeguard", 722 | ] 723 | 724 | [[package]] 725 | name = "log" 726 | version = "0.4.17" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 729 | dependencies = [ 730 | "cfg-if", 731 | ] 732 | 733 | [[package]] 734 | name = "matchers" 735 | version = "0.1.0" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 738 | dependencies = [ 739 | "regex-automata", 740 | ] 741 | 742 | [[package]] 743 | name = "matchit" 744 | version = "0.7.0" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" 747 | 748 | [[package]] 749 | name = "memchr" 750 | version = "2.5.0" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 753 | 754 | [[package]] 755 | name = "mime" 756 | version = "0.3.16" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 759 | 760 | [[package]] 761 | name = "mime_guess" 762 | version = "2.0.4" 763 | source = "git+https://github.com/NathanSWard/mime_guess.git?branch=platform-path-separators#053d56adb207cb774080668c8f97193957efb87a" 764 | dependencies = [ 765 | "mime", 766 | "unicase", 767 | ] 768 | 769 | [[package]] 770 | name = "mio" 771 | version = "0.8.5" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" 774 | dependencies = [ 775 | "libc", 776 | "log", 777 | "wasi 0.11.0+wasi-snapshot-preview1", 778 | "windows-sys", 779 | ] 780 | 781 | [[package]] 782 | name = "native-tls" 783 | version = "0.2.11" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" 786 | dependencies = [ 787 | "lazy_static", 788 | "libc", 789 | "log", 790 | "openssl", 791 | "openssl-probe", 792 | "openssl-sys", 793 | "schannel", 794 | "security-framework", 795 | "security-framework-sys", 796 | "tempfile", 797 | ] 798 | 799 | [[package]] 800 | name = "nu-ansi-term" 801 | version = "0.46.0" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 804 | dependencies = [ 805 | "overload", 806 | "winapi", 807 | ] 808 | 809 | [[package]] 810 | name = "num-integer" 811 | version = "0.1.45" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 814 | dependencies = [ 815 | "autocfg", 816 | "num-traits", 817 | ] 818 | 819 | [[package]] 820 | name = "num-traits" 821 | version = "0.2.15" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 824 | dependencies = [ 825 | "autocfg", 826 | ] 827 | 828 | [[package]] 829 | name = "num_cpus" 830 | version = "1.15.0" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" 833 | dependencies = [ 834 | "hermit-abi", 835 | "libc", 836 | ] 837 | 838 | [[package]] 839 | name = "once_cell" 840 | version = "1.17.0" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" 843 | 844 | [[package]] 845 | name = "openssl" 846 | version = "0.10.45" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" 849 | dependencies = [ 850 | "bitflags", 851 | "cfg-if", 852 | "foreign-types", 853 | "libc", 854 | "once_cell", 855 | "openssl-macros", 856 | "openssl-sys", 857 | ] 858 | 859 | [[package]] 860 | name = "openssl-macros" 861 | version = "0.1.0" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" 864 | dependencies = [ 865 | "proc-macro2", 866 | "quote", 867 | "syn", 868 | ] 869 | 870 | [[package]] 871 | name = "openssl-probe" 872 | version = "0.1.5" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 875 | 876 | [[package]] 877 | name = "openssl-sys" 878 | version = "0.9.80" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" 881 | dependencies = [ 882 | "autocfg", 883 | "cc", 884 | "libc", 885 | "pkg-config", 886 | "vcpkg", 887 | ] 888 | 889 | [[package]] 890 | name = "overload" 891 | version = "0.1.1" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 894 | 895 | [[package]] 896 | name = "parking_lot" 897 | version = "0.12.1" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 900 | dependencies = [ 901 | "lock_api", 902 | "parking_lot_core", 903 | ] 904 | 905 | [[package]] 906 | name = "parking_lot_core" 907 | version = "0.9.5" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" 910 | dependencies = [ 911 | "cfg-if", 912 | "libc", 913 | "redox_syscall", 914 | "smallvec", 915 | "windows-sys", 916 | ] 917 | 918 | [[package]] 919 | name = "percent-encoding" 920 | version = "2.2.0" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 923 | 924 | [[package]] 925 | name = "pin-project" 926 | version = "1.0.12" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" 929 | dependencies = [ 930 | "pin-project-internal", 931 | ] 932 | 933 | [[package]] 934 | name = "pin-project-internal" 935 | version = "1.0.12" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" 938 | dependencies = [ 939 | "proc-macro2", 940 | "quote", 941 | "syn", 942 | ] 943 | 944 | [[package]] 945 | name = "pin-project-lite" 946 | version = "0.2.9" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 949 | 950 | [[package]] 951 | name = "pin-utils" 952 | version = "0.1.0" 953 | source = "registry+https://github.com/rust-lang/crates.io-index" 954 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 955 | 956 | [[package]] 957 | name = "pipe" 958 | version = "0.4.0" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "1c7b8f27da217eb966df4c58d4159ea939431950ca03cf782c22bd7c5c1d8d75" 961 | dependencies = [ 962 | "crossbeam-channel", 963 | ] 964 | 965 | [[package]] 966 | name = "pkg-config" 967 | version = "0.3.26" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" 970 | 971 | [[package]] 972 | name = "ppv-lite86" 973 | version = "0.2.17" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 976 | 977 | [[package]] 978 | name = "proc-macro-error" 979 | version = "1.0.4" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 982 | dependencies = [ 983 | "proc-macro-error-attr", 984 | "proc-macro2", 985 | "quote", 986 | "syn", 987 | "version_check", 988 | ] 989 | 990 | [[package]] 991 | name = "proc-macro-error-attr" 992 | version = "1.0.4" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 995 | dependencies = [ 996 | "proc-macro2", 997 | "quote", 998 | "version_check", 999 | ] 1000 | 1001 | [[package]] 1002 | name = "proc-macro2" 1003 | version = "1.0.49" 1004 | source = "registry+https://github.com/rust-lang/crates.io-index" 1005 | checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" 1006 | dependencies = [ 1007 | "unicode-ident", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "quote" 1012 | version = "1.0.23" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" 1015 | dependencies = [ 1016 | "proc-macro2", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "rand" 1021 | version = "0.8.5" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1024 | dependencies = [ 1025 | "libc", 1026 | "rand_chacha", 1027 | "rand_core", 1028 | ] 1029 | 1030 | [[package]] 1031 | name = "rand_chacha" 1032 | version = "0.3.1" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1035 | dependencies = [ 1036 | "ppv-lite86", 1037 | "rand_core", 1038 | ] 1039 | 1040 | [[package]] 1041 | name = "rand_core" 1042 | version = "0.6.4" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1045 | dependencies = [ 1046 | "getrandom", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "redox_syscall" 1051 | version = "0.2.16" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 1054 | dependencies = [ 1055 | "bitflags", 1056 | ] 1057 | 1058 | [[package]] 1059 | name = "regex" 1060 | version = "1.7.1" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" 1063 | dependencies = [ 1064 | "regex-syntax", 1065 | ] 1066 | 1067 | [[package]] 1068 | name = "regex-automata" 1069 | version = "0.1.10" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1072 | dependencies = [ 1073 | "regex-syntax", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "regex-syntax" 1078 | version = "0.6.28" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" 1081 | 1082 | [[package]] 1083 | name = "remove_dir_all" 1084 | version = "0.5.3" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 1087 | dependencies = [ 1088 | "winapi", 1089 | ] 1090 | 1091 | [[package]] 1092 | name = "rustc-hash" 1093 | version = "1.1.0" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1096 | 1097 | [[package]] 1098 | name = "rustrict" 1099 | version = "0.5.10" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "bfae409fc123d1e857745e4d7a1899460e0ddcb7c1c4a5a03d9b7745256efb3a" 1102 | dependencies = [ 1103 | "bitflags", 1104 | "doc-comment", 1105 | "finl_unicode", 1106 | "itertools", 1107 | "lazy_static", 1108 | "rustc-hash", 1109 | "strsim", 1110 | "unicode-normalization", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "rustversion" 1115 | version = "1.0.11" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" 1118 | 1119 | [[package]] 1120 | name = "ryu" 1121 | version = "1.0.12" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" 1124 | 1125 | [[package]] 1126 | name = "schannel" 1127 | version = "0.1.21" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" 1130 | dependencies = [ 1131 | "windows-sys", 1132 | ] 1133 | 1134 | [[package]] 1135 | name = "scopeguard" 1136 | version = "1.1.0" 1137 | source = "registry+https://github.com/rust-lang/crates.io-index" 1138 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1139 | 1140 | [[package]] 1141 | name = "scratch" 1142 | version = "1.0.3" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" 1145 | 1146 | [[package]] 1147 | name = "security-framework" 1148 | version = "2.7.0" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" 1151 | dependencies = [ 1152 | "bitflags", 1153 | "core-foundation", 1154 | "core-foundation-sys", 1155 | "libc", 1156 | "security-framework-sys", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "security-framework-sys" 1161 | version = "2.6.1" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" 1164 | dependencies = [ 1165 | "core-foundation-sys", 1166 | "libc", 1167 | ] 1168 | 1169 | [[package]] 1170 | name = "semver" 1171 | version = "1.0.16" 1172 | source = "registry+https://github.com/rust-lang/crates.io-index" 1173 | checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" 1174 | dependencies = [ 1175 | "serde", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "serde" 1180 | version = "1.0.152" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" 1183 | dependencies = [ 1184 | "serde_derive", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "serde_derive" 1189 | version = "1.0.152" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" 1192 | dependencies = [ 1193 | "proc-macro2", 1194 | "quote", 1195 | "syn", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "serde_json" 1200 | version = "1.0.91" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" 1203 | dependencies = [ 1204 | "itoa", 1205 | "ryu", 1206 | "serde", 1207 | ] 1208 | 1209 | [[package]] 1210 | name = "serde_path_to_error" 1211 | version = "0.1.9" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "26b04f22b563c91331a10074bda3dd5492e3cc39d56bd557e91c0af42b6c7341" 1214 | dependencies = [ 1215 | "serde", 1216 | ] 1217 | 1218 | [[package]] 1219 | name = "serde_urlencoded" 1220 | version = "0.7.1" 1221 | source = "registry+https://github.com/rust-lang/crates.io-index" 1222 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1223 | dependencies = [ 1224 | "form_urlencoded", 1225 | "itoa", 1226 | "ryu", 1227 | "serde", 1228 | ] 1229 | 1230 | [[package]] 1231 | name = "sha1" 1232 | version = "0.10.5" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" 1235 | dependencies = [ 1236 | "cfg-if", 1237 | "cpufeatures", 1238 | "digest", 1239 | ] 1240 | 1241 | [[package]] 1242 | name = "sharded-slab" 1243 | version = "0.1.4" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" 1246 | dependencies = [ 1247 | "lazy_static", 1248 | ] 1249 | 1250 | [[package]] 1251 | name = "shuttle-codegen" 1252 | version = "0.10.0" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | checksum = "503f3b6c11c193c593394dab348003e4c5813f186f13d9aa7a8172bd636b2458" 1255 | dependencies = [ 1256 | "proc-macro-error", 1257 | "proc-macro2", 1258 | "quote", 1259 | "syn", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "shuttle-common" 1264 | version = "0.10.0" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "37b613601be7fc96760dcc91aae0b3a02d4130ed54384674eb0370e0c46de55c" 1267 | dependencies = [ 1268 | "chrono", 1269 | "once_cell", 1270 | "rustrict", 1271 | "serde", 1272 | "strum", 1273 | "tracing", 1274 | "uuid", 1275 | ] 1276 | 1277 | [[package]] 1278 | name = "shuttle-secrets" 1279 | version = "0.10.0" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | checksum = "6d78194d634c98f98a689f3da0bf4b12bc96799a2a01a16347c06d6221950183" 1282 | dependencies = [ 1283 | "async-trait", 1284 | "shuttle-service", 1285 | "tokio", 1286 | ] 1287 | 1288 | [[package]] 1289 | name = "shuttle-service" 1290 | version = "0.10.0" 1291 | source = "registry+https://github.com/rust-lang/crates.io-index" 1292 | checksum = "8b71e368b655c6e4d2dba14f57f9a28cd1077a2a5182c773af0f3848c6a16629" 1293 | dependencies = [ 1294 | "anyhow", 1295 | "async-trait", 1296 | "axum", 1297 | "cargo_metadata", 1298 | "chrono", 1299 | "crossbeam-channel", 1300 | "futures", 1301 | "pipe", 1302 | "serde_json", 1303 | "shuttle-codegen", 1304 | "shuttle-common", 1305 | "strfmt", 1306 | "sync_wrapper", 1307 | "thiserror", 1308 | "tokio", 1309 | "tracing", 1310 | "tracing-subscriber", 1311 | "uuid", 1312 | ] 1313 | 1314 | [[package]] 1315 | name = "shuttle-static-folder" 1316 | version = "0.10.0" 1317 | source = "registry+https://github.com/rust-lang/crates.io-index" 1318 | checksum = "324c725102dd5d720d4e3c08bf2399092017ee58875f4aa0e9595815b73de91f" 1319 | dependencies = [ 1320 | "async-trait", 1321 | "shuttle-service", 1322 | "tokio", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "signal-hook-registry" 1327 | version = "1.4.0" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 1330 | dependencies = [ 1331 | "libc", 1332 | ] 1333 | 1334 | [[package]] 1335 | name = "slab" 1336 | version = "0.4.7" 1337 | source = "registry+https://github.com/rust-lang/crates.io-index" 1338 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" 1339 | dependencies = [ 1340 | "autocfg", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "smallvec" 1345 | version = "1.10.0" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 1348 | 1349 | [[package]] 1350 | name = "socket2" 1351 | version = "0.4.7" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" 1354 | dependencies = [ 1355 | "libc", 1356 | "winapi", 1357 | ] 1358 | 1359 | [[package]] 1360 | name = "strfmt" 1361 | version = "0.2.3" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "b73de159e5e71c4c7579ea3041d3e765f46790555790c24489195554210f1fb4" 1364 | 1365 | [[package]] 1366 | name = "strsim" 1367 | version = "0.10.0" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1370 | 1371 | [[package]] 1372 | name = "strum" 1373 | version = "0.24.1" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" 1376 | dependencies = [ 1377 | "strum_macros", 1378 | ] 1379 | 1380 | [[package]] 1381 | name = "strum_macros" 1382 | version = "0.24.3" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" 1385 | dependencies = [ 1386 | "heck", 1387 | "proc-macro2", 1388 | "quote", 1389 | "rustversion", 1390 | "syn", 1391 | ] 1392 | 1393 | [[package]] 1394 | name = "syn" 1395 | version = "1.0.107" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" 1398 | dependencies = [ 1399 | "proc-macro2", 1400 | "quote", 1401 | "unicode-ident", 1402 | ] 1403 | 1404 | [[package]] 1405 | name = "sync_wrapper" 1406 | version = "0.1.1" 1407 | source = "registry+https://github.com/rust-lang/crates.io-index" 1408 | checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" 1409 | 1410 | [[package]] 1411 | name = "tempfile" 1412 | version = "3.3.0" 1413 | source = "registry+https://github.com/rust-lang/crates.io-index" 1414 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 1415 | dependencies = [ 1416 | "cfg-if", 1417 | "fastrand", 1418 | "libc", 1419 | "redox_syscall", 1420 | "remove_dir_all", 1421 | "winapi", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "termcolor" 1426 | version = "1.1.3" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" 1429 | dependencies = [ 1430 | "winapi-util", 1431 | ] 1432 | 1433 | [[package]] 1434 | name = "thiserror" 1435 | version = "1.0.38" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" 1438 | dependencies = [ 1439 | "thiserror-impl", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "thiserror-impl" 1444 | version = "1.0.38" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" 1447 | dependencies = [ 1448 | "proc-macro2", 1449 | "quote", 1450 | "syn", 1451 | ] 1452 | 1453 | [[package]] 1454 | name = "thread_local" 1455 | version = "1.1.4" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" 1458 | dependencies = [ 1459 | "once_cell", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "time" 1464 | version = "0.1.45" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" 1467 | dependencies = [ 1468 | "libc", 1469 | "wasi 0.10.0+wasi-snapshot-preview1", 1470 | "winapi", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "tinyvec" 1475 | version = "1.6.0" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1478 | dependencies = [ 1479 | "tinyvec_macros", 1480 | ] 1481 | 1482 | [[package]] 1483 | name = "tinyvec_macros" 1484 | version = "0.1.0" 1485 | source = "registry+https://github.com/rust-lang/crates.io-index" 1486 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 1487 | 1488 | [[package]] 1489 | name = "tokio" 1490 | version = "1.22.0" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" 1493 | dependencies = [ 1494 | "autocfg", 1495 | "bytes", 1496 | "libc", 1497 | "memchr", 1498 | "mio", 1499 | "num_cpus", 1500 | "parking_lot", 1501 | "pin-project-lite", 1502 | "signal-hook-registry", 1503 | "socket2", 1504 | "tokio-macros", 1505 | "winapi", 1506 | ] 1507 | 1508 | [[package]] 1509 | name = "tokio-macros" 1510 | version = "1.8.2" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" 1513 | dependencies = [ 1514 | "proc-macro2", 1515 | "quote", 1516 | "syn", 1517 | ] 1518 | 1519 | [[package]] 1520 | name = "tokio-native-tls" 1521 | version = "0.3.0" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" 1524 | dependencies = [ 1525 | "native-tls", 1526 | "tokio", 1527 | ] 1528 | 1529 | [[package]] 1530 | name = "tokio-tungstenite" 1531 | version = "0.18.0" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" 1534 | dependencies = [ 1535 | "futures-util", 1536 | "log", 1537 | "tokio", 1538 | "tungstenite", 1539 | ] 1540 | 1541 | [[package]] 1542 | name = "tokio-util" 1543 | version = "0.7.4" 1544 | source = "registry+https://github.com/rust-lang/crates.io-index" 1545 | checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" 1546 | dependencies = [ 1547 | "bytes", 1548 | "futures-core", 1549 | "futures-sink", 1550 | "pin-project-lite", 1551 | "tokio", 1552 | "tracing", 1553 | ] 1554 | 1555 | [[package]] 1556 | name = "tower" 1557 | version = "0.4.13" 1558 | source = "registry+https://github.com/rust-lang/crates.io-index" 1559 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 1560 | dependencies = [ 1561 | "futures-core", 1562 | "futures-util", 1563 | "pin-project", 1564 | "pin-project-lite", 1565 | "tokio", 1566 | "tower-layer", 1567 | "tower-service", 1568 | "tracing", 1569 | ] 1570 | 1571 | [[package]] 1572 | name = "tower-http" 1573 | version = "0.3.5" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" 1576 | dependencies = [ 1577 | "base64 0.13.1", 1578 | "bitflags", 1579 | "bytes", 1580 | "futures-core", 1581 | "futures-util", 1582 | "http", 1583 | "http-body", 1584 | "http-range-header", 1585 | "httpdate", 1586 | "mime", 1587 | "mime_guess", 1588 | "percent-encoding", 1589 | "pin-project-lite", 1590 | "tokio", 1591 | "tokio-util", 1592 | "tower", 1593 | "tower-layer", 1594 | "tower-service", 1595 | ] 1596 | 1597 | [[package]] 1598 | name = "tower-layer" 1599 | version = "0.3.2" 1600 | source = "registry+https://github.com/rust-lang/crates.io-index" 1601 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 1602 | 1603 | [[package]] 1604 | name = "tower-service" 1605 | version = "0.3.2" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1608 | 1609 | [[package]] 1610 | name = "tracing" 1611 | version = "0.1.37" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" 1614 | dependencies = [ 1615 | "cfg-if", 1616 | "log", 1617 | "pin-project-lite", 1618 | "tracing-attributes", 1619 | "tracing-core", 1620 | ] 1621 | 1622 | [[package]] 1623 | name = "tracing-attributes" 1624 | version = "0.1.23" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" 1627 | dependencies = [ 1628 | "proc-macro2", 1629 | "quote", 1630 | "syn", 1631 | ] 1632 | 1633 | [[package]] 1634 | name = "tracing-core" 1635 | version = "0.1.30" 1636 | source = "registry+https://github.com/rust-lang/crates.io-index" 1637 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" 1638 | dependencies = [ 1639 | "once_cell", 1640 | "valuable", 1641 | ] 1642 | 1643 | [[package]] 1644 | name = "tracing-log" 1645 | version = "0.1.3" 1646 | source = "registry+https://github.com/rust-lang/crates.io-index" 1647 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" 1648 | dependencies = [ 1649 | "lazy_static", 1650 | "log", 1651 | "tracing-core", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "tracing-subscriber" 1656 | version = "0.3.16" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" 1659 | dependencies = [ 1660 | "matchers", 1661 | "nu-ansi-term", 1662 | "once_cell", 1663 | "regex", 1664 | "sharded-slab", 1665 | "smallvec", 1666 | "thread_local", 1667 | "tracing", 1668 | "tracing-core", 1669 | "tracing-log", 1670 | ] 1671 | 1672 | [[package]] 1673 | name = "try-lock" 1674 | version = "0.2.4" 1675 | source = "registry+https://github.com/rust-lang/crates.io-index" 1676 | checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" 1677 | 1678 | [[package]] 1679 | name = "tungstenite" 1680 | version = "0.18.0" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" 1683 | dependencies = [ 1684 | "base64 0.13.1", 1685 | "byteorder", 1686 | "bytes", 1687 | "http", 1688 | "httparse", 1689 | "log", 1690 | "rand", 1691 | "sha1", 1692 | "thiserror", 1693 | "url", 1694 | "utf-8", 1695 | ] 1696 | 1697 | [[package]] 1698 | name = "typenum" 1699 | version = "1.16.0" 1700 | source = "registry+https://github.com/rust-lang/crates.io-index" 1701 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" 1702 | 1703 | [[package]] 1704 | name = "unicase" 1705 | version = "2.6.0" 1706 | source = "registry+https://github.com/rust-lang/crates.io-index" 1707 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 1708 | dependencies = [ 1709 | "version_check", 1710 | ] 1711 | 1712 | [[package]] 1713 | name = "unicode-bidi" 1714 | version = "0.3.8" 1715 | source = "registry+https://github.com/rust-lang/crates.io-index" 1716 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 1717 | 1718 | [[package]] 1719 | name = "unicode-ident" 1720 | version = "1.0.6" 1721 | source = "registry+https://github.com/rust-lang/crates.io-index" 1722 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" 1723 | 1724 | [[package]] 1725 | name = "unicode-normalization" 1726 | version = "0.1.22" 1727 | source = "registry+https://github.com/rust-lang/crates.io-index" 1728 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 1729 | dependencies = [ 1730 | "tinyvec", 1731 | ] 1732 | 1733 | [[package]] 1734 | name = "unicode-width" 1735 | version = "0.1.10" 1736 | source = "registry+https://github.com/rust-lang/crates.io-index" 1737 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 1738 | 1739 | [[package]] 1740 | name = "url" 1741 | version = "2.3.1" 1742 | source = "registry+https://github.com/rust-lang/crates.io-index" 1743 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" 1744 | dependencies = [ 1745 | "form_urlencoded", 1746 | "idna", 1747 | "percent-encoding", 1748 | ] 1749 | 1750 | [[package]] 1751 | name = "utf-8" 1752 | version = "0.7.6" 1753 | source = "registry+https://github.com/rust-lang/crates.io-index" 1754 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 1755 | 1756 | [[package]] 1757 | name = "uuid" 1758 | version = "1.2.2" 1759 | source = "registry+https://github.com/rust-lang/crates.io-index" 1760 | checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" 1761 | dependencies = [ 1762 | "getrandom", 1763 | "serde", 1764 | ] 1765 | 1766 | [[package]] 1767 | name = "valuable" 1768 | version = "0.1.0" 1769 | source = "registry+https://github.com/rust-lang/crates.io-index" 1770 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 1771 | 1772 | [[package]] 1773 | name = "vcpkg" 1774 | version = "0.2.15" 1775 | source = "registry+https://github.com/rust-lang/crates.io-index" 1776 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1777 | 1778 | [[package]] 1779 | name = "version_check" 1780 | version = "0.9.4" 1781 | source = "registry+https://github.com/rust-lang/crates.io-index" 1782 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1783 | 1784 | [[package]] 1785 | name = "want" 1786 | version = "0.3.0" 1787 | source = "registry+https://github.com/rust-lang/crates.io-index" 1788 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 1789 | dependencies = [ 1790 | "log", 1791 | "try-lock", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "wasi" 1796 | version = "0.10.0+wasi-snapshot-preview1" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" 1799 | 1800 | [[package]] 1801 | name = "wasi" 1802 | version = "0.11.0+wasi-snapshot-preview1" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1805 | 1806 | [[package]] 1807 | name = "wasm-bindgen" 1808 | version = "0.2.83" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" 1811 | dependencies = [ 1812 | "cfg-if", 1813 | "wasm-bindgen-macro", 1814 | ] 1815 | 1816 | [[package]] 1817 | name = "wasm-bindgen-backend" 1818 | version = "0.2.83" 1819 | source = "registry+https://github.com/rust-lang/crates.io-index" 1820 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" 1821 | dependencies = [ 1822 | "bumpalo", 1823 | "log", 1824 | "once_cell", 1825 | "proc-macro2", 1826 | "quote", 1827 | "syn", 1828 | "wasm-bindgen-shared", 1829 | ] 1830 | 1831 | [[package]] 1832 | name = "wasm-bindgen-macro" 1833 | version = "0.2.83" 1834 | source = "registry+https://github.com/rust-lang/crates.io-index" 1835 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" 1836 | dependencies = [ 1837 | "quote", 1838 | "wasm-bindgen-macro-support", 1839 | ] 1840 | 1841 | [[package]] 1842 | name = "wasm-bindgen-macro-support" 1843 | version = "0.2.83" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" 1846 | dependencies = [ 1847 | "proc-macro2", 1848 | "quote", 1849 | "syn", 1850 | "wasm-bindgen-backend", 1851 | "wasm-bindgen-shared", 1852 | ] 1853 | 1854 | [[package]] 1855 | name = "wasm-bindgen-shared" 1856 | version = "0.2.83" 1857 | source = "registry+https://github.com/rust-lang/crates.io-index" 1858 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" 1859 | 1860 | [[package]] 1861 | name = "websocket-chat-react-rust-example" 1862 | version = "0.1.0" 1863 | dependencies = [ 1864 | "axum", 1865 | "axum-extra", 1866 | "chrono", 1867 | "futures", 1868 | "hyper", 1869 | "hyper-tls", 1870 | "serde", 1871 | "serde_json", 1872 | "shuttle-secrets", 1873 | "shuttle-service", 1874 | "shuttle-static-folder", 1875 | "sync_wrapper", 1876 | "tokio", 1877 | "tower-http", 1878 | ] 1879 | 1880 | [[package]] 1881 | name = "winapi" 1882 | version = "0.3.9" 1883 | source = "registry+https://github.com/rust-lang/crates.io-index" 1884 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1885 | dependencies = [ 1886 | "winapi-i686-pc-windows-gnu", 1887 | "winapi-x86_64-pc-windows-gnu", 1888 | ] 1889 | 1890 | [[package]] 1891 | name = "winapi-i686-pc-windows-gnu" 1892 | version = "0.4.0" 1893 | source = "registry+https://github.com/rust-lang/crates.io-index" 1894 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1895 | 1896 | [[package]] 1897 | name = "winapi-util" 1898 | version = "0.1.5" 1899 | source = "registry+https://github.com/rust-lang/crates.io-index" 1900 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1901 | dependencies = [ 1902 | "winapi", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "winapi-x86_64-pc-windows-gnu" 1907 | version = "0.4.0" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1910 | 1911 | [[package]] 1912 | name = "windows-sys" 1913 | version = "0.42.0" 1914 | source = "registry+https://github.com/rust-lang/crates.io-index" 1915 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 1916 | dependencies = [ 1917 | "windows_aarch64_gnullvm", 1918 | "windows_aarch64_msvc", 1919 | "windows_i686_gnu", 1920 | "windows_i686_msvc", 1921 | "windows_x86_64_gnu", 1922 | "windows_x86_64_gnullvm", 1923 | "windows_x86_64_msvc", 1924 | ] 1925 | 1926 | [[package]] 1927 | name = "windows_aarch64_gnullvm" 1928 | version = "0.42.0" 1929 | source = "registry+https://github.com/rust-lang/crates.io-index" 1930 | checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" 1931 | 1932 | [[package]] 1933 | name = "windows_aarch64_msvc" 1934 | version = "0.42.0" 1935 | source = "registry+https://github.com/rust-lang/crates.io-index" 1936 | checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" 1937 | 1938 | [[package]] 1939 | name = "windows_i686_gnu" 1940 | version = "0.42.0" 1941 | source = "registry+https://github.com/rust-lang/crates.io-index" 1942 | checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" 1943 | 1944 | [[package]] 1945 | name = "windows_i686_msvc" 1946 | version = "0.42.0" 1947 | source = "registry+https://github.com/rust-lang/crates.io-index" 1948 | checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" 1949 | 1950 | [[package]] 1951 | name = "windows_x86_64_gnu" 1952 | version = "0.42.0" 1953 | source = "registry+https://github.com/rust-lang/crates.io-index" 1954 | checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" 1955 | 1956 | [[package]] 1957 | name = "windows_x86_64_gnullvm" 1958 | version = "0.42.0" 1959 | source = "registry+https://github.com/rust-lang/crates.io-index" 1960 | checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" 1961 | 1962 | [[package]] 1963 | name = "windows_x86_64_msvc" 1964 | version = "0.42.0" 1965 | source = "registry+https://github.com/rust-lang/crates.io-index" 1966 | checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" 1967 | -------------------------------------------------------------------------------- /API/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "websocket-chat-react-rust-example" 3 | version = "0.1.0" 4 | edition = "2021" 5 | publish = false 6 | 7 | [lib] 8 | 9 | [dependencies] 10 | axum = { version = "0.6.4", features = ["ws"] } 11 | axum-extra = { version = "0.4.2", features = ["spa"] } 12 | chrono = { version = "0.4", features = ["serde"] } 13 | futures = "0.3" 14 | hyper = { version = "0.14", features = ["client", "http2"] } 15 | hyper-tls = "0.5" 16 | serde = { version = "1.0", features = ["derive"] } 17 | serde_json = "1.0" 18 | shuttle-secrets = "0.10.0" 19 | shuttle-service = { version = "0.10.0", features = ["web-axum"] } 20 | shuttle-static-folder = "0.10.0" 21 | sync_wrapper = "0.1" 22 | tokio = { version = "1", features = ["full"] } 23 | tower-http = { version = "0.3.5", features = ["fs", "auth"]} 24 | 25 | [patch.crates-io.mime_guess] 26 | git="https://github.com/NathanSWard/mime_guess.git" 27 | branch="platform-path-separators" 28 | -------------------------------------------------------------------------------- /API/Shuttle.toml: -------------------------------------------------------------------------------- 1 | name="websocket-chat-react-rust-example" -------------------------------------------------------------------------------- /API/src/main.rs: -------------------------------------------------------------------------------- 1 | // dependencies 2 | use axum::{ 3 | extract::{ 4 | ws::{Message, WebSocket}, 5 | Path, WebSocketUpgrade, 6 | }, 7 | http::StatusCode, 8 | response::IntoResponse, 9 | routing::get, 10 | Extension, Router, 11 | }; 12 | use std::{collections::HashMap, path::PathBuf, sync::Arc}; 13 | 14 | use axum_extra::routing::SpaRouter; 15 | use futures::{SinkExt, StreamExt}; 16 | use serde::{Deserialize, Serialize}; 17 | use shuttle_secrets::SecretStore; 18 | use tokio::sync::{ 19 | mpsc::{self, UnboundedReceiver, UnboundedSender}, 20 | RwLock, 21 | }; 22 | use tower_http::auth::RequireAuthorizationLayer; 23 | 24 | // The list of users needs to be a hashmap that can be shared safely across threads, hence an Arc with RwLock 25 | type Users = Arc>>>; 26 | static NEXT_USERID: std::sync::atomic::AtomicUsize = std::sync::atomic::AtomicUsize::new(1); 27 | 28 | #[derive(Serialize, Deserialize)] 29 | struct Msg { 30 | name: String, 31 | uid: Option, 32 | message: String, 33 | } 34 | 35 | #[shuttle_runtime::main] 36 | async fn axum( 37 | #[shuttle_secrets::Secrets] secrets: SecretStore, 38 | #[shuttle_static_folder::StaticFolder] static_folder: PathBuf, 39 | ) -> shuttle_axum::ShuttleAxum { 40 | // We use Secrets.toml to set the BEARER key, just like in a .env file and call it here 41 | let secret = secrets.get("BEARER").unwrap_or("Bear".to_string()); 42 | 43 | // set up router with Secrets & use syncwrapper to make the web service work 44 | let router = router(secret, static_folder); 45 | 46 | Ok(router.into()) 47 | } 48 | 49 | fn router(secret: String, static_folder: PathBuf) -> Router { 50 | // initialise the Users k/v store and allow the static files to be served 51 | let users = Users::default(); 52 | 53 | // make an admin route for kicking users 54 | let admin = Router::new() 55 | .route("/disconnect/:user_id", get(disconnect_user)) 56 | .layer(RequireAuthorizationLayer::bearer(&secret)); 57 | 58 | let static_assets = SpaRouter::new("/", static_folder).index_file("index.html"); 59 | // return a new router and nest the admin route into the websocket route 60 | Router::new() 61 | .route("/ws", get(ws_handler)) 62 | .nest("/admin", admin) 63 | .layer(Extension(users)) 64 | .merge(static_assets) 65 | } 66 | 67 | async fn ws_handler(ws: WebSocketUpgrade, Extension(state): Extension) -> impl IntoResponse { 68 | ws.on_upgrade(|socket| handle_socket(socket, state)) 69 | } 70 | 71 | async fn handle_socket(stream: WebSocket, state: Users) { 72 | // When a new user enters the chat (opens the websocket connection), assign them a user ID 73 | let my_id = NEXT_USERID.fetch_add(1, std::sync::atomic::Ordering::Relaxed); 74 | // By splitting the websocket into a receiver and sender, we can send and receive at the same time. 75 | let (mut sender, mut receiver) = stream.split(); 76 | 77 | // Create a new channel for async task management 78 | let (tx, mut rx): (UnboundedSender, UnboundedReceiver) = 79 | mpsc::unbounded_channel(); 80 | 81 | // If a message has been received, send the message (expect on error) 82 | tokio::spawn(async move { 83 | // If a message has been received, send a message 84 | while let Some(msg) = rx.recv().await { 85 | sender.send(msg).await.expect("Error while sending message"); 86 | } 87 | sender.close().await.unwrap(); 88 | }); 89 | 90 | // insert the message into the HashMap - locks the Arc value to allow writing 91 | state.write().await.insert(my_id, tx); 92 | 93 | // if there's a message and the message is OK, broadcast it along all available open websocket connections 94 | while let Some(Ok(result)) = receiver.next().await { 95 | println!("{:?}", result); 96 | if let Ok(result) = enrich_result(result, my_id) { 97 | broadcast_msg(result, &state).await; 98 | } 99 | } 100 | 101 | // This client disconnected 102 | disconnect(my_id, &state).await; 103 | } 104 | 105 | // If the message is a websocket message and no errors, return it - else, return Ok(result) 106 | // which is required by the server to be able to broadcast the message 107 | fn enrich_result(result: Message, id: usize) -> Result { 108 | match result { 109 | Message::Text(msg) => { 110 | let mut msg: Msg = serde_json::from_str(&msg)?; 111 | msg.uid = Some(id); 112 | let msg = serde_json::to_string(&msg)?; 113 | Ok(Message::Text(msg)) 114 | } 115 | _ => Ok(result), 116 | } 117 | } 118 | 119 | // Send received websocket message out to all open available WS connections 120 | async fn broadcast_msg(msg: Message, users: &Users) { 121 | if let Message::Text(msg) = msg { 122 | for (&_uid, tx) in users.read().await.iter() { 123 | tx.send(Message::Text(msg.clone())) 124 | .expect("Failed to send Message") 125 | } 126 | } 127 | } 128 | 129 | // Disconnect a user manually - this is for admin purposes, eg if someone is being offensive in the chat 130 | // you will want to be able to kick them out 131 | async fn disconnect_user( 132 | Path(user_id): Path, 133 | Extension(users): Extension, 134 | ) -> impl IntoResponse { 135 | disconnect(user_id, &users).await; 136 | "Done" 137 | } 138 | 139 | // triggered when any user disconnects 140 | async fn disconnect(my_id: usize, users: &Users) { 141 | println!("Good bye user {}", my_id); 142 | users.write().await.remove(&my_id); 143 | println!("Disconnected {my_id}"); 144 | } 145 | 146 | // handle internal server errors 147 | async fn handle_error(err: std::io::Error) -> impl IntoResponse { 148 | (StatusCode::INTERNAL_SERVER_ERROR, format!("{:?}", err)) 149 | } 150 | -------------------------------------------------------------------------------- /API/static/assets/index-8cf6afb9.css: -------------------------------------------------------------------------------- 1 | @import"https://fonts.googleapis.com/css2?family=Text+Me+One&display=swap";*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}input,button{box-shadow:5px 5px #00000080}input:active,button:active{box-shadow:3px 3px #00000080}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fixed{position:fixed}.absolute{position:absolute}.bottom-0{bottom:0px}.z-40{z-index:40}.z-50{z-index:50}.mx-8{margin-left:2rem;margin-right:2rem}.mb-5{margin-bottom:1.25rem}.inline-block{display:inline-block}.flex{display:flex}.hidden{display:none}.h-10{height:2.5rem}.h-screen{height:100vh}.h-3\/5{height:60%}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-fit{width:-moz-fit-content;width:fit-content}.w-screen{width:100vw}.w-4\/5{width:80%}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-4{gap:1rem}.break-all{word-break:break-all}.rounded-xl{border-radius:.75rem}.rounded-tl-xl{border-top-left-radius:.75rem}.rounded-bl-xl{border-bottom-left-radius:.75rem}.rounded-tr-xl{border-top-right-radius:.75rem}.rounded-br-xl{border-bottom-right-radius:.75rem}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity))}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-5{padding-bottom:1.25rem}.pb-20{padding-bottom:5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}body{font-family:Text Me One,"Sans Serif";padding:0;margin:0;background-color:#d6d3d1;box-sizing:box-border;overflow-x:hidden}.hover\:bg-slate-400:hover{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity))}.hover\:text-black:hover{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.focus\:outline-0:focus{outline-width:0px}.active\:translate-y-0\.5:active{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:translate-x-0\.5:active{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:translate-y-0:active{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:translate-x-0:active{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@media (min-width: 1024px){.lg\:h-2\/5{height:40%}.lg\:w-2\/5{width:40%}.lg\:text-2xl{font-size:1.5rem;line-height:2rem}} 2 | -------------------------------------------------------------------------------- /API/static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Rustcord 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /API/static/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Websocket Chat App Example - React + Rust 2 | This repo is intended to show an example of a websocket chat app created using React and Rust. 3 | 4 | ## Live Deployment 5 | Check out the live deployment [here](https://websocket-chat-react-rust-example.shuttleapp.rs). 6 | 7 | ![](./Screenshot.png) 8 | 9 | ## How To Use 10 | Run the following commands below: 11 | 12 | ``` 13 | npm i 14 | npm run dev 15 | ``` 16 | This installs all dependencies and runs both of the React and Rust programs. Bear in mind that for a first-time execution, you'll have to wait for Cargo to build. 17 | 18 | Now go to http://localhost:5173 and try entering a name, then typing in some messages. -------------------------------------------------------------------------------- /Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshua-mo-143/react-websocket-chat-rust/8c3a79969e5982177a5704c100dbaf86246d97ad/Screenshot.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Rustcord 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-websocket-chat-rust", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "react-websocket-chat-rust", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "framer-motion": "^8.4.0", 12 | "react": "^18.2.0", 13 | "react-dom": "^18.2.0", 14 | "react-use-websocket": "^4.2.0" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^18.11.18", 18 | "@types/react": "^18.0.26", 19 | "@types/react-dom": "^18.0.9", 20 | "@vitejs/plugin-react": "^3.0.0", 21 | "autoprefixer": "^10.4.13", 22 | "concurrently": "^7.6.0", 23 | "postcss": "^8.4.21", 24 | "tailwindcss": "^3.2.4", 25 | "typescript": "^4.9.3", 26 | "vite": "^4.0.0" 27 | } 28 | }, 29 | "node_modules/@ampproject/remapping": { 30 | "version": "2.2.0", 31 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", 32 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", 33 | "dev": true, 34 | "dependencies": { 35 | "@jridgewell/gen-mapping": "^0.1.0", 36 | "@jridgewell/trace-mapping": "^0.3.9" 37 | }, 38 | "engines": { 39 | "node": ">=6.0.0" 40 | } 41 | }, 42 | "node_modules/@babel/code-frame": { 43 | "version": "7.18.6", 44 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 45 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 46 | "dev": true, 47 | "dependencies": { 48 | "@babel/highlight": "^7.18.6" 49 | }, 50 | "engines": { 51 | "node": ">=6.9.0" 52 | } 53 | }, 54 | "node_modules/@babel/compat-data": { 55 | "version": "7.20.10", 56 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", 57 | "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", 58 | "dev": true, 59 | "engines": { 60 | "node": ">=6.9.0" 61 | } 62 | }, 63 | "node_modules/@babel/core": { 64 | "version": "7.20.12", 65 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", 66 | "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", 67 | "dev": true, 68 | "dependencies": { 69 | "@ampproject/remapping": "^2.1.0", 70 | "@babel/code-frame": "^7.18.6", 71 | "@babel/generator": "^7.20.7", 72 | "@babel/helper-compilation-targets": "^7.20.7", 73 | "@babel/helper-module-transforms": "^7.20.11", 74 | "@babel/helpers": "^7.20.7", 75 | "@babel/parser": "^7.20.7", 76 | "@babel/template": "^7.20.7", 77 | "@babel/traverse": "^7.20.12", 78 | "@babel/types": "^7.20.7", 79 | "convert-source-map": "^1.7.0", 80 | "debug": "^4.1.0", 81 | "gensync": "^1.0.0-beta.2", 82 | "json5": "^2.2.2", 83 | "semver": "^6.3.0" 84 | }, 85 | "engines": { 86 | "node": ">=6.9.0" 87 | }, 88 | "funding": { 89 | "type": "opencollective", 90 | "url": "https://opencollective.com/babel" 91 | } 92 | }, 93 | "node_modules/@babel/generator": { 94 | "version": "7.20.7", 95 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", 96 | "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", 97 | "dev": true, 98 | "dependencies": { 99 | "@babel/types": "^7.20.7", 100 | "@jridgewell/gen-mapping": "^0.3.2", 101 | "jsesc": "^2.5.1" 102 | }, 103 | "engines": { 104 | "node": ">=6.9.0" 105 | } 106 | }, 107 | "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { 108 | "version": "0.3.2", 109 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 110 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 111 | "dev": true, 112 | "dependencies": { 113 | "@jridgewell/set-array": "^1.0.1", 114 | "@jridgewell/sourcemap-codec": "^1.4.10", 115 | "@jridgewell/trace-mapping": "^0.3.9" 116 | }, 117 | "engines": { 118 | "node": ">=6.0.0" 119 | } 120 | }, 121 | "node_modules/@babel/helper-compilation-targets": { 122 | "version": "7.20.7", 123 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", 124 | "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", 125 | "dev": true, 126 | "dependencies": { 127 | "@babel/compat-data": "^7.20.5", 128 | "@babel/helper-validator-option": "^7.18.6", 129 | "browserslist": "^4.21.3", 130 | "lru-cache": "^5.1.1", 131 | "semver": "^6.3.0" 132 | }, 133 | "engines": { 134 | "node": ">=6.9.0" 135 | }, 136 | "peerDependencies": { 137 | "@babel/core": "^7.0.0" 138 | } 139 | }, 140 | "node_modules/@babel/helper-environment-visitor": { 141 | "version": "7.18.9", 142 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", 143 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", 144 | "dev": true, 145 | "engines": { 146 | "node": ">=6.9.0" 147 | } 148 | }, 149 | "node_modules/@babel/helper-function-name": { 150 | "version": "7.19.0", 151 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", 152 | "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", 153 | "dev": true, 154 | "dependencies": { 155 | "@babel/template": "^7.18.10", 156 | "@babel/types": "^7.19.0" 157 | }, 158 | "engines": { 159 | "node": ">=6.9.0" 160 | } 161 | }, 162 | "node_modules/@babel/helper-hoist-variables": { 163 | "version": "7.18.6", 164 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", 165 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", 166 | "dev": true, 167 | "dependencies": { 168 | "@babel/types": "^7.18.6" 169 | }, 170 | "engines": { 171 | "node": ">=6.9.0" 172 | } 173 | }, 174 | "node_modules/@babel/helper-module-imports": { 175 | "version": "7.18.6", 176 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", 177 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", 178 | "dev": true, 179 | "dependencies": { 180 | "@babel/types": "^7.18.6" 181 | }, 182 | "engines": { 183 | "node": ">=6.9.0" 184 | } 185 | }, 186 | "node_modules/@babel/helper-module-transforms": { 187 | "version": "7.20.11", 188 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", 189 | "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", 190 | "dev": true, 191 | "dependencies": { 192 | "@babel/helper-environment-visitor": "^7.18.9", 193 | "@babel/helper-module-imports": "^7.18.6", 194 | "@babel/helper-simple-access": "^7.20.2", 195 | "@babel/helper-split-export-declaration": "^7.18.6", 196 | "@babel/helper-validator-identifier": "^7.19.1", 197 | "@babel/template": "^7.20.7", 198 | "@babel/traverse": "^7.20.10", 199 | "@babel/types": "^7.20.7" 200 | }, 201 | "engines": { 202 | "node": ">=6.9.0" 203 | } 204 | }, 205 | "node_modules/@babel/helper-plugin-utils": { 206 | "version": "7.20.2", 207 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", 208 | "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", 209 | "dev": true, 210 | "engines": { 211 | "node": ">=6.9.0" 212 | } 213 | }, 214 | "node_modules/@babel/helper-simple-access": { 215 | "version": "7.20.2", 216 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", 217 | "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", 218 | "dev": true, 219 | "dependencies": { 220 | "@babel/types": "^7.20.2" 221 | }, 222 | "engines": { 223 | "node": ">=6.9.0" 224 | } 225 | }, 226 | "node_modules/@babel/helper-split-export-declaration": { 227 | "version": "7.18.6", 228 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", 229 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", 230 | "dev": true, 231 | "dependencies": { 232 | "@babel/types": "^7.18.6" 233 | }, 234 | "engines": { 235 | "node": ">=6.9.0" 236 | } 237 | }, 238 | "node_modules/@babel/helper-string-parser": { 239 | "version": "7.19.4", 240 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", 241 | "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", 242 | "dev": true, 243 | "engines": { 244 | "node": ">=6.9.0" 245 | } 246 | }, 247 | "node_modules/@babel/helper-validator-identifier": { 248 | "version": "7.19.1", 249 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 250 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 251 | "dev": true, 252 | "engines": { 253 | "node": ">=6.9.0" 254 | } 255 | }, 256 | "node_modules/@babel/helper-validator-option": { 257 | "version": "7.18.6", 258 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", 259 | "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", 260 | "dev": true, 261 | "engines": { 262 | "node": ">=6.9.0" 263 | } 264 | }, 265 | "node_modules/@babel/helpers": { 266 | "version": "7.20.7", 267 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", 268 | "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", 269 | "dev": true, 270 | "dependencies": { 271 | "@babel/template": "^7.20.7", 272 | "@babel/traverse": "^7.20.7", 273 | "@babel/types": "^7.20.7" 274 | }, 275 | "engines": { 276 | "node": ">=6.9.0" 277 | } 278 | }, 279 | "node_modules/@babel/highlight": { 280 | "version": "7.18.6", 281 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 282 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 283 | "dev": true, 284 | "dependencies": { 285 | "@babel/helper-validator-identifier": "^7.18.6", 286 | "chalk": "^2.0.0", 287 | "js-tokens": "^4.0.0" 288 | }, 289 | "engines": { 290 | "node": ">=6.9.0" 291 | } 292 | }, 293 | "node_modules/@babel/parser": { 294 | "version": "7.20.7", 295 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", 296 | "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", 297 | "dev": true, 298 | "bin": { 299 | "parser": "bin/babel-parser.js" 300 | }, 301 | "engines": { 302 | "node": ">=6.0.0" 303 | } 304 | }, 305 | "node_modules/@babel/plugin-transform-react-jsx-self": { 306 | "version": "7.18.6", 307 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", 308 | "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", 309 | "dev": true, 310 | "dependencies": { 311 | "@babel/helper-plugin-utils": "^7.18.6" 312 | }, 313 | "engines": { 314 | "node": ">=6.9.0" 315 | }, 316 | "peerDependencies": { 317 | "@babel/core": "^7.0.0-0" 318 | } 319 | }, 320 | "node_modules/@babel/plugin-transform-react-jsx-source": { 321 | "version": "7.19.6", 322 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", 323 | "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", 324 | "dev": true, 325 | "dependencies": { 326 | "@babel/helper-plugin-utils": "^7.19.0" 327 | }, 328 | "engines": { 329 | "node": ">=6.9.0" 330 | }, 331 | "peerDependencies": { 332 | "@babel/core": "^7.0.0-0" 333 | } 334 | }, 335 | "node_modules/@babel/template": { 336 | "version": "7.20.7", 337 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", 338 | "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", 339 | "dev": true, 340 | "dependencies": { 341 | "@babel/code-frame": "^7.18.6", 342 | "@babel/parser": "^7.20.7", 343 | "@babel/types": "^7.20.7" 344 | }, 345 | "engines": { 346 | "node": ">=6.9.0" 347 | } 348 | }, 349 | "node_modules/@babel/traverse": { 350 | "version": "7.20.12", 351 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", 352 | "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", 353 | "dev": true, 354 | "dependencies": { 355 | "@babel/code-frame": "^7.18.6", 356 | "@babel/generator": "^7.20.7", 357 | "@babel/helper-environment-visitor": "^7.18.9", 358 | "@babel/helper-function-name": "^7.19.0", 359 | "@babel/helper-hoist-variables": "^7.18.6", 360 | "@babel/helper-split-export-declaration": "^7.18.6", 361 | "@babel/parser": "^7.20.7", 362 | "@babel/types": "^7.20.7", 363 | "debug": "^4.1.0", 364 | "globals": "^11.1.0" 365 | }, 366 | "engines": { 367 | "node": ">=6.9.0" 368 | } 369 | }, 370 | "node_modules/@babel/types": { 371 | "version": "7.20.7", 372 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", 373 | "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", 374 | "dev": true, 375 | "dependencies": { 376 | "@babel/helper-string-parser": "^7.19.4", 377 | "@babel/helper-validator-identifier": "^7.19.1", 378 | "to-fast-properties": "^2.0.0" 379 | }, 380 | "engines": { 381 | "node": ">=6.9.0" 382 | } 383 | }, 384 | "node_modules/@emotion/is-prop-valid": { 385 | "version": "0.8.8", 386 | "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", 387 | "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", 388 | "optional": true, 389 | "dependencies": { 390 | "@emotion/memoize": "0.7.4" 391 | } 392 | }, 393 | "node_modules/@emotion/memoize": { 394 | "version": "0.7.4", 395 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", 396 | "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", 397 | "optional": true 398 | }, 399 | "node_modules/@esbuild/android-arm": { 400 | "version": "0.16.16", 401 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", 402 | "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", 403 | "cpu": [ 404 | "arm" 405 | ], 406 | "dev": true, 407 | "optional": true, 408 | "os": [ 409 | "android" 410 | ], 411 | "engines": { 412 | "node": ">=12" 413 | } 414 | }, 415 | "node_modules/@esbuild/android-arm64": { 416 | "version": "0.16.16", 417 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", 418 | "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", 419 | "cpu": [ 420 | "arm64" 421 | ], 422 | "dev": true, 423 | "optional": true, 424 | "os": [ 425 | "android" 426 | ], 427 | "engines": { 428 | "node": ">=12" 429 | } 430 | }, 431 | "node_modules/@esbuild/android-x64": { 432 | "version": "0.16.16", 433 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", 434 | "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", 435 | "cpu": [ 436 | "x64" 437 | ], 438 | "dev": true, 439 | "optional": true, 440 | "os": [ 441 | "android" 442 | ], 443 | "engines": { 444 | "node": ">=12" 445 | } 446 | }, 447 | "node_modules/@esbuild/darwin-arm64": { 448 | "version": "0.16.16", 449 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", 450 | "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", 451 | "cpu": [ 452 | "arm64" 453 | ], 454 | "dev": true, 455 | "optional": true, 456 | "os": [ 457 | "darwin" 458 | ], 459 | "engines": { 460 | "node": ">=12" 461 | } 462 | }, 463 | "node_modules/@esbuild/darwin-x64": { 464 | "version": "0.16.16", 465 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", 466 | "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", 467 | "cpu": [ 468 | "x64" 469 | ], 470 | "dev": true, 471 | "optional": true, 472 | "os": [ 473 | "darwin" 474 | ], 475 | "engines": { 476 | "node": ">=12" 477 | } 478 | }, 479 | "node_modules/@esbuild/freebsd-arm64": { 480 | "version": "0.16.16", 481 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", 482 | "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", 483 | "cpu": [ 484 | "arm64" 485 | ], 486 | "dev": true, 487 | "optional": true, 488 | "os": [ 489 | "freebsd" 490 | ], 491 | "engines": { 492 | "node": ">=12" 493 | } 494 | }, 495 | "node_modules/@esbuild/freebsd-x64": { 496 | "version": "0.16.16", 497 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", 498 | "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", 499 | "cpu": [ 500 | "x64" 501 | ], 502 | "dev": true, 503 | "optional": true, 504 | "os": [ 505 | "freebsd" 506 | ], 507 | "engines": { 508 | "node": ">=12" 509 | } 510 | }, 511 | "node_modules/@esbuild/linux-arm": { 512 | "version": "0.16.16", 513 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", 514 | "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", 515 | "cpu": [ 516 | "arm" 517 | ], 518 | "dev": true, 519 | "optional": true, 520 | "os": [ 521 | "linux" 522 | ], 523 | "engines": { 524 | "node": ">=12" 525 | } 526 | }, 527 | "node_modules/@esbuild/linux-arm64": { 528 | "version": "0.16.16", 529 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", 530 | "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", 531 | "cpu": [ 532 | "arm64" 533 | ], 534 | "dev": true, 535 | "optional": true, 536 | "os": [ 537 | "linux" 538 | ], 539 | "engines": { 540 | "node": ">=12" 541 | } 542 | }, 543 | "node_modules/@esbuild/linux-ia32": { 544 | "version": "0.16.16", 545 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", 546 | "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", 547 | "cpu": [ 548 | "ia32" 549 | ], 550 | "dev": true, 551 | "optional": true, 552 | "os": [ 553 | "linux" 554 | ], 555 | "engines": { 556 | "node": ">=12" 557 | } 558 | }, 559 | "node_modules/@esbuild/linux-loong64": { 560 | "version": "0.16.16", 561 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", 562 | "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", 563 | "cpu": [ 564 | "loong64" 565 | ], 566 | "dev": true, 567 | "optional": true, 568 | "os": [ 569 | "linux" 570 | ], 571 | "engines": { 572 | "node": ">=12" 573 | } 574 | }, 575 | "node_modules/@esbuild/linux-mips64el": { 576 | "version": "0.16.16", 577 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", 578 | "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", 579 | "cpu": [ 580 | "mips64el" 581 | ], 582 | "dev": true, 583 | "optional": true, 584 | "os": [ 585 | "linux" 586 | ], 587 | "engines": { 588 | "node": ">=12" 589 | } 590 | }, 591 | "node_modules/@esbuild/linux-ppc64": { 592 | "version": "0.16.16", 593 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", 594 | "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", 595 | "cpu": [ 596 | "ppc64" 597 | ], 598 | "dev": true, 599 | "optional": true, 600 | "os": [ 601 | "linux" 602 | ], 603 | "engines": { 604 | "node": ">=12" 605 | } 606 | }, 607 | "node_modules/@esbuild/linux-riscv64": { 608 | "version": "0.16.16", 609 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", 610 | "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", 611 | "cpu": [ 612 | "riscv64" 613 | ], 614 | "dev": true, 615 | "optional": true, 616 | "os": [ 617 | "linux" 618 | ], 619 | "engines": { 620 | "node": ">=12" 621 | } 622 | }, 623 | "node_modules/@esbuild/linux-s390x": { 624 | "version": "0.16.16", 625 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", 626 | "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", 627 | "cpu": [ 628 | "s390x" 629 | ], 630 | "dev": true, 631 | "optional": true, 632 | "os": [ 633 | "linux" 634 | ], 635 | "engines": { 636 | "node": ">=12" 637 | } 638 | }, 639 | "node_modules/@esbuild/linux-x64": { 640 | "version": "0.16.16", 641 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", 642 | "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", 643 | "cpu": [ 644 | "x64" 645 | ], 646 | "dev": true, 647 | "optional": true, 648 | "os": [ 649 | "linux" 650 | ], 651 | "engines": { 652 | "node": ">=12" 653 | } 654 | }, 655 | "node_modules/@esbuild/netbsd-x64": { 656 | "version": "0.16.16", 657 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", 658 | "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", 659 | "cpu": [ 660 | "x64" 661 | ], 662 | "dev": true, 663 | "optional": true, 664 | "os": [ 665 | "netbsd" 666 | ], 667 | "engines": { 668 | "node": ">=12" 669 | } 670 | }, 671 | "node_modules/@esbuild/openbsd-x64": { 672 | "version": "0.16.16", 673 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", 674 | "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", 675 | "cpu": [ 676 | "x64" 677 | ], 678 | "dev": true, 679 | "optional": true, 680 | "os": [ 681 | "openbsd" 682 | ], 683 | "engines": { 684 | "node": ">=12" 685 | } 686 | }, 687 | "node_modules/@esbuild/sunos-x64": { 688 | "version": "0.16.16", 689 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", 690 | "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", 691 | "cpu": [ 692 | "x64" 693 | ], 694 | "dev": true, 695 | "optional": true, 696 | "os": [ 697 | "sunos" 698 | ], 699 | "engines": { 700 | "node": ">=12" 701 | } 702 | }, 703 | "node_modules/@esbuild/win32-arm64": { 704 | "version": "0.16.16", 705 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", 706 | "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", 707 | "cpu": [ 708 | "arm64" 709 | ], 710 | "dev": true, 711 | "optional": true, 712 | "os": [ 713 | "win32" 714 | ], 715 | "engines": { 716 | "node": ">=12" 717 | } 718 | }, 719 | "node_modules/@esbuild/win32-ia32": { 720 | "version": "0.16.16", 721 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", 722 | "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", 723 | "cpu": [ 724 | "ia32" 725 | ], 726 | "dev": true, 727 | "optional": true, 728 | "os": [ 729 | "win32" 730 | ], 731 | "engines": { 732 | "node": ">=12" 733 | } 734 | }, 735 | "node_modules/@esbuild/win32-x64": { 736 | "version": "0.16.16", 737 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", 738 | "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", 739 | "cpu": [ 740 | "x64" 741 | ], 742 | "dev": true, 743 | "optional": true, 744 | "os": [ 745 | "win32" 746 | ], 747 | "engines": { 748 | "node": ">=12" 749 | } 750 | }, 751 | "node_modules/@jridgewell/gen-mapping": { 752 | "version": "0.1.1", 753 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", 754 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", 755 | "dev": true, 756 | "dependencies": { 757 | "@jridgewell/set-array": "^1.0.0", 758 | "@jridgewell/sourcemap-codec": "^1.4.10" 759 | }, 760 | "engines": { 761 | "node": ">=6.0.0" 762 | } 763 | }, 764 | "node_modules/@jridgewell/resolve-uri": { 765 | "version": "3.1.0", 766 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 767 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 768 | "dev": true, 769 | "engines": { 770 | "node": ">=6.0.0" 771 | } 772 | }, 773 | "node_modules/@jridgewell/set-array": { 774 | "version": "1.1.2", 775 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 776 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 777 | "dev": true, 778 | "engines": { 779 | "node": ">=6.0.0" 780 | } 781 | }, 782 | "node_modules/@jridgewell/sourcemap-codec": { 783 | "version": "1.4.14", 784 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 785 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 786 | "dev": true 787 | }, 788 | "node_modules/@jridgewell/trace-mapping": { 789 | "version": "0.3.17", 790 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 791 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 792 | "dev": true, 793 | "dependencies": { 794 | "@jridgewell/resolve-uri": "3.1.0", 795 | "@jridgewell/sourcemap-codec": "1.4.14" 796 | } 797 | }, 798 | "node_modules/@motionone/animation": { 799 | "version": "10.15.1", 800 | "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.15.1.tgz", 801 | "integrity": "sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==", 802 | "dependencies": { 803 | "@motionone/easing": "^10.15.1", 804 | "@motionone/types": "^10.15.1", 805 | "@motionone/utils": "^10.15.1", 806 | "tslib": "^2.3.1" 807 | } 808 | }, 809 | "node_modules/@motionone/dom": { 810 | "version": "10.15.3", 811 | "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.15.3.tgz", 812 | "integrity": "sha512-FQ7a2zMBXc1UeU8CG9G3yDpst55fbb0+C9A0VGfwOITitBCzigKZnXRgsRSWWR+FW57GSc13eGQxtYB0lKG0Ng==", 813 | "dependencies": { 814 | "@motionone/animation": "^10.15.1", 815 | "@motionone/generators": "^10.15.1", 816 | "@motionone/types": "^10.15.1", 817 | "@motionone/utils": "^10.15.1", 818 | "hey-listen": "^1.0.8", 819 | "tslib": "^2.3.1" 820 | } 821 | }, 822 | "node_modules/@motionone/easing": { 823 | "version": "10.15.1", 824 | "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.15.1.tgz", 825 | "integrity": "sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==", 826 | "dependencies": { 827 | "@motionone/utils": "^10.15.1", 828 | "tslib": "^2.3.1" 829 | } 830 | }, 831 | "node_modules/@motionone/generators": { 832 | "version": "10.15.1", 833 | "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.15.1.tgz", 834 | "integrity": "sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==", 835 | "dependencies": { 836 | "@motionone/types": "^10.15.1", 837 | "@motionone/utils": "^10.15.1", 838 | "tslib": "^2.3.1" 839 | } 840 | }, 841 | "node_modules/@motionone/types": { 842 | "version": "10.15.1", 843 | "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.15.1.tgz", 844 | "integrity": "sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==" 845 | }, 846 | "node_modules/@motionone/utils": { 847 | "version": "10.15.1", 848 | "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.15.1.tgz", 849 | "integrity": "sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==", 850 | "dependencies": { 851 | "@motionone/types": "^10.15.1", 852 | "hey-listen": "^1.0.8", 853 | "tslib": "^2.3.1" 854 | } 855 | }, 856 | "node_modules/@nodelib/fs.scandir": { 857 | "version": "2.1.5", 858 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 859 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 860 | "dev": true, 861 | "dependencies": { 862 | "@nodelib/fs.stat": "2.0.5", 863 | "run-parallel": "^1.1.9" 864 | }, 865 | "engines": { 866 | "node": ">= 8" 867 | } 868 | }, 869 | "node_modules/@nodelib/fs.stat": { 870 | "version": "2.0.5", 871 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 872 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 873 | "dev": true, 874 | "engines": { 875 | "node": ">= 8" 876 | } 877 | }, 878 | "node_modules/@nodelib/fs.walk": { 879 | "version": "1.2.8", 880 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 881 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 882 | "dev": true, 883 | "dependencies": { 884 | "@nodelib/fs.scandir": "2.1.5", 885 | "fastq": "^1.6.0" 886 | }, 887 | "engines": { 888 | "node": ">= 8" 889 | } 890 | }, 891 | "node_modules/@types/node": { 892 | "version": "18.11.18", 893 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", 894 | "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", 895 | "dev": true 896 | }, 897 | "node_modules/@types/prop-types": { 898 | "version": "15.7.5", 899 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 900 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 901 | "dev": true 902 | }, 903 | "node_modules/@types/react": { 904 | "version": "18.0.26", 905 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", 906 | "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", 907 | "dev": true, 908 | "dependencies": { 909 | "@types/prop-types": "*", 910 | "@types/scheduler": "*", 911 | "csstype": "^3.0.2" 912 | } 913 | }, 914 | "node_modules/@types/react-dom": { 915 | "version": "18.0.10", 916 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", 917 | "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", 918 | "dev": true, 919 | "dependencies": { 920 | "@types/react": "*" 921 | } 922 | }, 923 | "node_modules/@types/scheduler": { 924 | "version": "0.16.2", 925 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", 926 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", 927 | "dev": true 928 | }, 929 | "node_modules/@vitejs/plugin-react": { 930 | "version": "3.0.1", 931 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz", 932 | "integrity": "sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==", 933 | "dev": true, 934 | "dependencies": { 935 | "@babel/core": "^7.20.7", 936 | "@babel/plugin-transform-react-jsx-self": "^7.18.6", 937 | "@babel/plugin-transform-react-jsx-source": "^7.19.6", 938 | "magic-string": "^0.27.0", 939 | "react-refresh": "^0.14.0" 940 | }, 941 | "engines": { 942 | "node": "^14.18.0 || >=16.0.0" 943 | }, 944 | "peerDependencies": { 945 | "vite": "^4.0.0" 946 | } 947 | }, 948 | "node_modules/acorn": { 949 | "version": "7.4.1", 950 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 951 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 952 | "dev": true, 953 | "bin": { 954 | "acorn": "bin/acorn" 955 | }, 956 | "engines": { 957 | "node": ">=0.4.0" 958 | } 959 | }, 960 | "node_modules/acorn-node": { 961 | "version": "1.8.2", 962 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 963 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 964 | "dev": true, 965 | "dependencies": { 966 | "acorn": "^7.0.0", 967 | "acorn-walk": "^7.0.0", 968 | "xtend": "^4.0.2" 969 | } 970 | }, 971 | "node_modules/acorn-walk": { 972 | "version": "7.2.0", 973 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 974 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 975 | "dev": true, 976 | "engines": { 977 | "node": ">=0.4.0" 978 | } 979 | }, 980 | "node_modules/ansi-regex": { 981 | "version": "5.0.1", 982 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 983 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 984 | "dev": true, 985 | "engines": { 986 | "node": ">=8" 987 | } 988 | }, 989 | "node_modules/ansi-styles": { 990 | "version": "3.2.1", 991 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 992 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 993 | "dev": true, 994 | "dependencies": { 995 | "color-convert": "^1.9.0" 996 | }, 997 | "engines": { 998 | "node": ">=4" 999 | } 1000 | }, 1001 | "node_modules/anymatch": { 1002 | "version": "3.1.3", 1003 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1004 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1005 | "dev": true, 1006 | "dependencies": { 1007 | "normalize-path": "^3.0.0", 1008 | "picomatch": "^2.0.4" 1009 | }, 1010 | "engines": { 1011 | "node": ">= 8" 1012 | } 1013 | }, 1014 | "node_modules/arg": { 1015 | "version": "5.0.2", 1016 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1017 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 1018 | "dev": true 1019 | }, 1020 | "node_modules/autoprefixer": { 1021 | "version": "10.4.13", 1022 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", 1023 | "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", 1024 | "dev": true, 1025 | "funding": [ 1026 | { 1027 | "type": "opencollective", 1028 | "url": "https://opencollective.com/postcss/" 1029 | }, 1030 | { 1031 | "type": "tidelift", 1032 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1033 | } 1034 | ], 1035 | "dependencies": { 1036 | "browserslist": "^4.21.4", 1037 | "caniuse-lite": "^1.0.30001426", 1038 | "fraction.js": "^4.2.0", 1039 | "normalize-range": "^0.1.2", 1040 | "picocolors": "^1.0.0", 1041 | "postcss-value-parser": "^4.2.0" 1042 | }, 1043 | "bin": { 1044 | "autoprefixer": "bin/autoprefixer" 1045 | }, 1046 | "engines": { 1047 | "node": "^10 || ^12 || >=14" 1048 | }, 1049 | "peerDependencies": { 1050 | "postcss": "^8.1.0" 1051 | } 1052 | }, 1053 | "node_modules/binary-extensions": { 1054 | "version": "2.2.0", 1055 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1056 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1057 | "dev": true, 1058 | "engines": { 1059 | "node": ">=8" 1060 | } 1061 | }, 1062 | "node_modules/braces": { 1063 | "version": "3.0.2", 1064 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1065 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1066 | "dev": true, 1067 | "dependencies": { 1068 | "fill-range": "^7.0.1" 1069 | }, 1070 | "engines": { 1071 | "node": ">=8" 1072 | } 1073 | }, 1074 | "node_modules/browserslist": { 1075 | "version": "4.21.4", 1076 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", 1077 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", 1078 | "dev": true, 1079 | "funding": [ 1080 | { 1081 | "type": "opencollective", 1082 | "url": "https://opencollective.com/browserslist" 1083 | }, 1084 | { 1085 | "type": "tidelift", 1086 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1087 | } 1088 | ], 1089 | "dependencies": { 1090 | "caniuse-lite": "^1.0.30001400", 1091 | "electron-to-chromium": "^1.4.251", 1092 | "node-releases": "^2.0.6", 1093 | "update-browserslist-db": "^1.0.9" 1094 | }, 1095 | "bin": { 1096 | "browserslist": "cli.js" 1097 | }, 1098 | "engines": { 1099 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1100 | } 1101 | }, 1102 | "node_modules/camelcase-css": { 1103 | "version": "2.0.1", 1104 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1105 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1106 | "dev": true, 1107 | "engines": { 1108 | "node": ">= 6" 1109 | } 1110 | }, 1111 | "node_modules/caniuse-lite": { 1112 | "version": "1.0.30001442", 1113 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", 1114 | "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", 1115 | "dev": true, 1116 | "funding": [ 1117 | { 1118 | "type": "opencollective", 1119 | "url": "https://opencollective.com/browserslist" 1120 | }, 1121 | { 1122 | "type": "tidelift", 1123 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1124 | } 1125 | ] 1126 | }, 1127 | "node_modules/chalk": { 1128 | "version": "2.4.2", 1129 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1130 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1131 | "dev": true, 1132 | "dependencies": { 1133 | "ansi-styles": "^3.2.1", 1134 | "escape-string-regexp": "^1.0.5", 1135 | "supports-color": "^5.3.0" 1136 | }, 1137 | "engines": { 1138 | "node": ">=4" 1139 | } 1140 | }, 1141 | "node_modules/chokidar": { 1142 | "version": "3.5.3", 1143 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1144 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1145 | "dev": true, 1146 | "funding": [ 1147 | { 1148 | "type": "individual", 1149 | "url": "https://paulmillr.com/funding/" 1150 | } 1151 | ], 1152 | "dependencies": { 1153 | "anymatch": "~3.1.2", 1154 | "braces": "~3.0.2", 1155 | "glob-parent": "~5.1.2", 1156 | "is-binary-path": "~2.1.0", 1157 | "is-glob": "~4.0.1", 1158 | "normalize-path": "~3.0.0", 1159 | "readdirp": "~3.6.0" 1160 | }, 1161 | "engines": { 1162 | "node": ">= 8.10.0" 1163 | }, 1164 | "optionalDependencies": { 1165 | "fsevents": "~2.3.2" 1166 | } 1167 | }, 1168 | "node_modules/chokidar/node_modules/glob-parent": { 1169 | "version": "5.1.2", 1170 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1171 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1172 | "dev": true, 1173 | "dependencies": { 1174 | "is-glob": "^4.0.1" 1175 | }, 1176 | "engines": { 1177 | "node": ">= 6" 1178 | } 1179 | }, 1180 | "node_modules/cliui": { 1181 | "version": "8.0.1", 1182 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1183 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1184 | "dev": true, 1185 | "dependencies": { 1186 | "string-width": "^4.2.0", 1187 | "strip-ansi": "^6.0.1", 1188 | "wrap-ansi": "^7.0.0" 1189 | }, 1190 | "engines": { 1191 | "node": ">=12" 1192 | } 1193 | }, 1194 | "node_modules/color-convert": { 1195 | "version": "1.9.3", 1196 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1197 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1198 | "dev": true, 1199 | "dependencies": { 1200 | "color-name": "1.1.3" 1201 | } 1202 | }, 1203 | "node_modules/color-name": { 1204 | "version": "1.1.3", 1205 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1206 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 1207 | "dev": true 1208 | }, 1209 | "node_modules/concurrently": { 1210 | "version": "7.6.0", 1211 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", 1212 | "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", 1213 | "dev": true, 1214 | "dependencies": { 1215 | "chalk": "^4.1.0", 1216 | "date-fns": "^2.29.1", 1217 | "lodash": "^4.17.21", 1218 | "rxjs": "^7.0.0", 1219 | "shell-quote": "^1.7.3", 1220 | "spawn-command": "^0.0.2-1", 1221 | "supports-color": "^8.1.0", 1222 | "tree-kill": "^1.2.2", 1223 | "yargs": "^17.3.1" 1224 | }, 1225 | "bin": { 1226 | "conc": "dist/bin/concurrently.js", 1227 | "concurrently": "dist/bin/concurrently.js" 1228 | }, 1229 | "engines": { 1230 | "node": "^12.20.0 || ^14.13.0 || >=16.0.0" 1231 | }, 1232 | "funding": { 1233 | "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" 1234 | } 1235 | }, 1236 | "node_modules/concurrently/node_modules/ansi-styles": { 1237 | "version": "4.3.0", 1238 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1239 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1240 | "dev": true, 1241 | "dependencies": { 1242 | "color-convert": "^2.0.1" 1243 | }, 1244 | "engines": { 1245 | "node": ">=8" 1246 | }, 1247 | "funding": { 1248 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1249 | } 1250 | }, 1251 | "node_modules/concurrently/node_modules/chalk": { 1252 | "version": "4.1.2", 1253 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1254 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1255 | "dev": true, 1256 | "dependencies": { 1257 | "ansi-styles": "^4.1.0", 1258 | "supports-color": "^7.1.0" 1259 | }, 1260 | "engines": { 1261 | "node": ">=10" 1262 | }, 1263 | "funding": { 1264 | "url": "https://github.com/chalk/chalk?sponsor=1" 1265 | } 1266 | }, 1267 | "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { 1268 | "version": "7.2.0", 1269 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1270 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1271 | "dev": true, 1272 | "dependencies": { 1273 | "has-flag": "^4.0.0" 1274 | }, 1275 | "engines": { 1276 | "node": ">=8" 1277 | } 1278 | }, 1279 | "node_modules/concurrently/node_modules/color-convert": { 1280 | "version": "2.0.1", 1281 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1282 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1283 | "dev": true, 1284 | "dependencies": { 1285 | "color-name": "~1.1.4" 1286 | }, 1287 | "engines": { 1288 | "node": ">=7.0.0" 1289 | } 1290 | }, 1291 | "node_modules/concurrently/node_modules/color-name": { 1292 | "version": "1.1.4", 1293 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1294 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1295 | "dev": true 1296 | }, 1297 | "node_modules/concurrently/node_modules/has-flag": { 1298 | "version": "4.0.0", 1299 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1300 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1301 | "dev": true, 1302 | "engines": { 1303 | "node": ">=8" 1304 | } 1305 | }, 1306 | "node_modules/concurrently/node_modules/supports-color": { 1307 | "version": "8.1.1", 1308 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1309 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1310 | "dev": true, 1311 | "dependencies": { 1312 | "has-flag": "^4.0.0" 1313 | }, 1314 | "engines": { 1315 | "node": ">=10" 1316 | }, 1317 | "funding": { 1318 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1319 | } 1320 | }, 1321 | "node_modules/convert-source-map": { 1322 | "version": "1.9.0", 1323 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 1324 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 1325 | "dev": true 1326 | }, 1327 | "node_modules/cssesc": { 1328 | "version": "3.0.0", 1329 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1330 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1331 | "dev": true, 1332 | "bin": { 1333 | "cssesc": "bin/cssesc" 1334 | }, 1335 | "engines": { 1336 | "node": ">=4" 1337 | } 1338 | }, 1339 | "node_modules/csstype": { 1340 | "version": "3.1.1", 1341 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 1342 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", 1343 | "dev": true 1344 | }, 1345 | "node_modules/date-fns": { 1346 | "version": "2.29.3", 1347 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", 1348 | "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", 1349 | "dev": true, 1350 | "engines": { 1351 | "node": ">=0.11" 1352 | }, 1353 | "funding": { 1354 | "type": "opencollective", 1355 | "url": "https://opencollective.com/date-fns" 1356 | } 1357 | }, 1358 | "node_modules/debug": { 1359 | "version": "4.3.4", 1360 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1361 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1362 | "dev": true, 1363 | "dependencies": { 1364 | "ms": "2.1.2" 1365 | }, 1366 | "engines": { 1367 | "node": ">=6.0" 1368 | }, 1369 | "peerDependenciesMeta": { 1370 | "supports-color": { 1371 | "optional": true 1372 | } 1373 | } 1374 | }, 1375 | "node_modules/defined": { 1376 | "version": "1.0.1", 1377 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", 1378 | "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", 1379 | "dev": true, 1380 | "funding": { 1381 | "url": "https://github.com/sponsors/ljharb" 1382 | } 1383 | }, 1384 | "node_modules/detective": { 1385 | "version": "5.2.1", 1386 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", 1387 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", 1388 | "dev": true, 1389 | "dependencies": { 1390 | "acorn-node": "^1.8.2", 1391 | "defined": "^1.0.0", 1392 | "minimist": "^1.2.6" 1393 | }, 1394 | "bin": { 1395 | "detective": "bin/detective.js" 1396 | }, 1397 | "engines": { 1398 | "node": ">=0.8.0" 1399 | } 1400 | }, 1401 | "node_modules/didyoumean": { 1402 | "version": "1.2.2", 1403 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1404 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 1405 | "dev": true 1406 | }, 1407 | "node_modules/dlv": { 1408 | "version": "1.1.3", 1409 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1410 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 1411 | "dev": true 1412 | }, 1413 | "node_modules/electron-to-chromium": { 1414 | "version": "1.4.284", 1415 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", 1416 | "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", 1417 | "dev": true 1418 | }, 1419 | "node_modules/emoji-regex": { 1420 | "version": "8.0.0", 1421 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1422 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1423 | "dev": true 1424 | }, 1425 | "node_modules/esbuild": { 1426 | "version": "0.16.16", 1427 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", 1428 | "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", 1429 | "dev": true, 1430 | "hasInstallScript": true, 1431 | "bin": { 1432 | "esbuild": "bin/esbuild" 1433 | }, 1434 | "engines": { 1435 | "node": ">=12" 1436 | }, 1437 | "optionalDependencies": { 1438 | "@esbuild/android-arm": "0.16.16", 1439 | "@esbuild/android-arm64": "0.16.16", 1440 | "@esbuild/android-x64": "0.16.16", 1441 | "@esbuild/darwin-arm64": "0.16.16", 1442 | "@esbuild/darwin-x64": "0.16.16", 1443 | "@esbuild/freebsd-arm64": "0.16.16", 1444 | "@esbuild/freebsd-x64": "0.16.16", 1445 | "@esbuild/linux-arm": "0.16.16", 1446 | "@esbuild/linux-arm64": "0.16.16", 1447 | "@esbuild/linux-ia32": "0.16.16", 1448 | "@esbuild/linux-loong64": "0.16.16", 1449 | "@esbuild/linux-mips64el": "0.16.16", 1450 | "@esbuild/linux-ppc64": "0.16.16", 1451 | "@esbuild/linux-riscv64": "0.16.16", 1452 | "@esbuild/linux-s390x": "0.16.16", 1453 | "@esbuild/linux-x64": "0.16.16", 1454 | "@esbuild/netbsd-x64": "0.16.16", 1455 | "@esbuild/openbsd-x64": "0.16.16", 1456 | "@esbuild/sunos-x64": "0.16.16", 1457 | "@esbuild/win32-arm64": "0.16.16", 1458 | "@esbuild/win32-ia32": "0.16.16", 1459 | "@esbuild/win32-x64": "0.16.16" 1460 | } 1461 | }, 1462 | "node_modules/escalade": { 1463 | "version": "3.1.1", 1464 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1465 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1466 | "dev": true, 1467 | "engines": { 1468 | "node": ">=6" 1469 | } 1470 | }, 1471 | "node_modules/escape-string-regexp": { 1472 | "version": "1.0.5", 1473 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1474 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1475 | "dev": true, 1476 | "engines": { 1477 | "node": ">=0.8.0" 1478 | } 1479 | }, 1480 | "node_modules/fast-glob": { 1481 | "version": "3.2.12", 1482 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 1483 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 1484 | "dev": true, 1485 | "dependencies": { 1486 | "@nodelib/fs.stat": "^2.0.2", 1487 | "@nodelib/fs.walk": "^1.2.3", 1488 | "glob-parent": "^5.1.2", 1489 | "merge2": "^1.3.0", 1490 | "micromatch": "^4.0.4" 1491 | }, 1492 | "engines": { 1493 | "node": ">=8.6.0" 1494 | } 1495 | }, 1496 | "node_modules/fast-glob/node_modules/glob-parent": { 1497 | "version": "5.1.2", 1498 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1499 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1500 | "dev": true, 1501 | "dependencies": { 1502 | "is-glob": "^4.0.1" 1503 | }, 1504 | "engines": { 1505 | "node": ">= 6" 1506 | } 1507 | }, 1508 | "node_modules/fastq": { 1509 | "version": "1.15.0", 1510 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1511 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1512 | "dev": true, 1513 | "dependencies": { 1514 | "reusify": "^1.0.4" 1515 | } 1516 | }, 1517 | "node_modules/fill-range": { 1518 | "version": "7.0.1", 1519 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1520 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1521 | "dev": true, 1522 | "dependencies": { 1523 | "to-regex-range": "^5.0.1" 1524 | }, 1525 | "engines": { 1526 | "node": ">=8" 1527 | } 1528 | }, 1529 | "node_modules/fraction.js": { 1530 | "version": "4.2.0", 1531 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 1532 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 1533 | "dev": true, 1534 | "engines": { 1535 | "node": "*" 1536 | }, 1537 | "funding": { 1538 | "type": "patreon", 1539 | "url": "https://www.patreon.com/infusion" 1540 | } 1541 | }, 1542 | "node_modules/framer-motion": { 1543 | "version": "8.4.0", 1544 | "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-8.4.0.tgz", 1545 | "integrity": "sha512-32ECxsAMrhFfpMnA/j3wXku//587kQe29emTGpIQsnh60mFSMTrnpIupAn5Bnk5qq4/OMNgWWCI6mnaFhsIu7w==", 1546 | "dependencies": { 1547 | "@motionone/dom": "^10.15.3", 1548 | "hey-listen": "^1.0.8", 1549 | "tslib": "^2.4.0" 1550 | }, 1551 | "optionalDependencies": { 1552 | "@emotion/is-prop-valid": "^0.8.2" 1553 | }, 1554 | "peerDependencies": { 1555 | "react": "^18.0.0", 1556 | "react-dom": "^18.0.0" 1557 | } 1558 | }, 1559 | "node_modules/fsevents": { 1560 | "version": "2.3.2", 1561 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1562 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1563 | "dev": true, 1564 | "hasInstallScript": true, 1565 | "optional": true, 1566 | "os": [ 1567 | "darwin" 1568 | ], 1569 | "engines": { 1570 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1571 | } 1572 | }, 1573 | "node_modules/function-bind": { 1574 | "version": "1.1.1", 1575 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1576 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1577 | "dev": true 1578 | }, 1579 | "node_modules/gensync": { 1580 | "version": "1.0.0-beta.2", 1581 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1582 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1583 | "dev": true, 1584 | "engines": { 1585 | "node": ">=6.9.0" 1586 | } 1587 | }, 1588 | "node_modules/get-caller-file": { 1589 | "version": "2.0.5", 1590 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1591 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1592 | "dev": true, 1593 | "engines": { 1594 | "node": "6.* || 8.* || >= 10.*" 1595 | } 1596 | }, 1597 | "node_modules/glob-parent": { 1598 | "version": "6.0.2", 1599 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1600 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1601 | "dev": true, 1602 | "dependencies": { 1603 | "is-glob": "^4.0.3" 1604 | }, 1605 | "engines": { 1606 | "node": ">=10.13.0" 1607 | } 1608 | }, 1609 | "node_modules/globals": { 1610 | "version": "11.12.0", 1611 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1612 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1613 | "dev": true, 1614 | "engines": { 1615 | "node": ">=4" 1616 | } 1617 | }, 1618 | "node_modules/has": { 1619 | "version": "1.0.3", 1620 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1621 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1622 | "dev": true, 1623 | "dependencies": { 1624 | "function-bind": "^1.1.1" 1625 | }, 1626 | "engines": { 1627 | "node": ">= 0.4.0" 1628 | } 1629 | }, 1630 | "node_modules/has-flag": { 1631 | "version": "3.0.0", 1632 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1633 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1634 | "dev": true, 1635 | "engines": { 1636 | "node": ">=4" 1637 | } 1638 | }, 1639 | "node_modules/hey-listen": { 1640 | "version": "1.0.8", 1641 | "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", 1642 | "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" 1643 | }, 1644 | "node_modules/is-binary-path": { 1645 | "version": "2.1.0", 1646 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1647 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1648 | "dev": true, 1649 | "dependencies": { 1650 | "binary-extensions": "^2.0.0" 1651 | }, 1652 | "engines": { 1653 | "node": ">=8" 1654 | } 1655 | }, 1656 | "node_modules/is-core-module": { 1657 | "version": "2.11.0", 1658 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1659 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1660 | "dev": true, 1661 | "dependencies": { 1662 | "has": "^1.0.3" 1663 | }, 1664 | "funding": { 1665 | "url": "https://github.com/sponsors/ljharb" 1666 | } 1667 | }, 1668 | "node_modules/is-extglob": { 1669 | "version": "2.1.1", 1670 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1671 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1672 | "dev": true, 1673 | "engines": { 1674 | "node": ">=0.10.0" 1675 | } 1676 | }, 1677 | "node_modules/is-fullwidth-code-point": { 1678 | "version": "3.0.0", 1679 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1680 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1681 | "dev": true, 1682 | "engines": { 1683 | "node": ">=8" 1684 | } 1685 | }, 1686 | "node_modules/is-glob": { 1687 | "version": "4.0.3", 1688 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1689 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1690 | "dev": true, 1691 | "dependencies": { 1692 | "is-extglob": "^2.1.1" 1693 | }, 1694 | "engines": { 1695 | "node": ">=0.10.0" 1696 | } 1697 | }, 1698 | "node_modules/is-number": { 1699 | "version": "7.0.0", 1700 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1701 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1702 | "dev": true, 1703 | "engines": { 1704 | "node": ">=0.12.0" 1705 | } 1706 | }, 1707 | "node_modules/js-tokens": { 1708 | "version": "4.0.0", 1709 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1710 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1711 | }, 1712 | "node_modules/jsesc": { 1713 | "version": "2.5.2", 1714 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1715 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1716 | "dev": true, 1717 | "bin": { 1718 | "jsesc": "bin/jsesc" 1719 | }, 1720 | "engines": { 1721 | "node": ">=4" 1722 | } 1723 | }, 1724 | "node_modules/json5": { 1725 | "version": "2.2.3", 1726 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1727 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1728 | "dev": true, 1729 | "bin": { 1730 | "json5": "lib/cli.js" 1731 | }, 1732 | "engines": { 1733 | "node": ">=6" 1734 | } 1735 | }, 1736 | "node_modules/lilconfig": { 1737 | "version": "2.0.6", 1738 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", 1739 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", 1740 | "dev": true, 1741 | "engines": { 1742 | "node": ">=10" 1743 | } 1744 | }, 1745 | "node_modules/lodash": { 1746 | "version": "4.17.21", 1747 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1748 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1749 | "dev": true 1750 | }, 1751 | "node_modules/loose-envify": { 1752 | "version": "1.4.0", 1753 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1754 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1755 | "dependencies": { 1756 | "js-tokens": "^3.0.0 || ^4.0.0" 1757 | }, 1758 | "bin": { 1759 | "loose-envify": "cli.js" 1760 | } 1761 | }, 1762 | "node_modules/lru-cache": { 1763 | "version": "5.1.1", 1764 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1765 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1766 | "dev": true, 1767 | "dependencies": { 1768 | "yallist": "^3.0.2" 1769 | } 1770 | }, 1771 | "node_modules/magic-string": { 1772 | "version": "0.27.0", 1773 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 1774 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 1775 | "dev": true, 1776 | "dependencies": { 1777 | "@jridgewell/sourcemap-codec": "^1.4.13" 1778 | }, 1779 | "engines": { 1780 | "node": ">=12" 1781 | } 1782 | }, 1783 | "node_modules/merge2": { 1784 | "version": "1.4.1", 1785 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1786 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1787 | "dev": true, 1788 | "engines": { 1789 | "node": ">= 8" 1790 | } 1791 | }, 1792 | "node_modules/micromatch": { 1793 | "version": "4.0.5", 1794 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1795 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1796 | "dev": true, 1797 | "dependencies": { 1798 | "braces": "^3.0.2", 1799 | "picomatch": "^2.3.1" 1800 | }, 1801 | "engines": { 1802 | "node": ">=8.6" 1803 | } 1804 | }, 1805 | "node_modules/minimist": { 1806 | "version": "1.2.7", 1807 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 1808 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 1809 | "dev": true, 1810 | "funding": { 1811 | "url": "https://github.com/sponsors/ljharb" 1812 | } 1813 | }, 1814 | "node_modules/ms": { 1815 | "version": "2.1.2", 1816 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1817 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1818 | "dev": true 1819 | }, 1820 | "node_modules/nanoid": { 1821 | "version": "3.3.4", 1822 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1823 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1824 | "dev": true, 1825 | "bin": { 1826 | "nanoid": "bin/nanoid.cjs" 1827 | }, 1828 | "engines": { 1829 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1830 | } 1831 | }, 1832 | "node_modules/node-releases": { 1833 | "version": "2.0.8", 1834 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", 1835 | "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", 1836 | "dev": true 1837 | }, 1838 | "node_modules/normalize-path": { 1839 | "version": "3.0.0", 1840 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1841 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1842 | "dev": true, 1843 | "engines": { 1844 | "node": ">=0.10.0" 1845 | } 1846 | }, 1847 | "node_modules/normalize-range": { 1848 | "version": "0.1.2", 1849 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1850 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 1851 | "dev": true, 1852 | "engines": { 1853 | "node": ">=0.10.0" 1854 | } 1855 | }, 1856 | "node_modules/object-hash": { 1857 | "version": "3.0.0", 1858 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1859 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1860 | "dev": true, 1861 | "engines": { 1862 | "node": ">= 6" 1863 | } 1864 | }, 1865 | "node_modules/path-parse": { 1866 | "version": "1.0.7", 1867 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1868 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1869 | "dev": true 1870 | }, 1871 | "node_modules/picocolors": { 1872 | "version": "1.0.0", 1873 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1874 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1875 | "dev": true 1876 | }, 1877 | "node_modules/picomatch": { 1878 | "version": "2.3.1", 1879 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1880 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1881 | "dev": true, 1882 | "engines": { 1883 | "node": ">=8.6" 1884 | }, 1885 | "funding": { 1886 | "url": "https://github.com/sponsors/jonschlinkert" 1887 | } 1888 | }, 1889 | "node_modules/pify": { 1890 | "version": "2.3.0", 1891 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1892 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1893 | "dev": true, 1894 | "engines": { 1895 | "node": ">=0.10.0" 1896 | } 1897 | }, 1898 | "node_modules/postcss": { 1899 | "version": "8.4.21", 1900 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 1901 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 1902 | "dev": true, 1903 | "funding": [ 1904 | { 1905 | "type": "opencollective", 1906 | "url": "https://opencollective.com/postcss/" 1907 | }, 1908 | { 1909 | "type": "tidelift", 1910 | "url": "https://tidelift.com/funding/github/npm/postcss" 1911 | } 1912 | ], 1913 | "dependencies": { 1914 | "nanoid": "^3.3.4", 1915 | "picocolors": "^1.0.0", 1916 | "source-map-js": "^1.0.2" 1917 | }, 1918 | "engines": { 1919 | "node": "^10 || ^12 || >=14" 1920 | } 1921 | }, 1922 | "node_modules/postcss-import": { 1923 | "version": "14.1.0", 1924 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", 1925 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", 1926 | "dev": true, 1927 | "dependencies": { 1928 | "postcss-value-parser": "^4.0.0", 1929 | "read-cache": "^1.0.0", 1930 | "resolve": "^1.1.7" 1931 | }, 1932 | "engines": { 1933 | "node": ">=10.0.0" 1934 | }, 1935 | "peerDependencies": { 1936 | "postcss": "^8.0.0" 1937 | } 1938 | }, 1939 | "node_modules/postcss-js": { 1940 | "version": "4.0.0", 1941 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 1942 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 1943 | "dev": true, 1944 | "dependencies": { 1945 | "camelcase-css": "^2.0.1" 1946 | }, 1947 | "engines": { 1948 | "node": "^12 || ^14 || >= 16" 1949 | }, 1950 | "funding": { 1951 | "type": "opencollective", 1952 | "url": "https://opencollective.com/postcss/" 1953 | }, 1954 | "peerDependencies": { 1955 | "postcss": "^8.3.3" 1956 | } 1957 | }, 1958 | "node_modules/postcss-load-config": { 1959 | "version": "3.1.4", 1960 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 1961 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 1962 | "dev": true, 1963 | "dependencies": { 1964 | "lilconfig": "^2.0.5", 1965 | "yaml": "^1.10.2" 1966 | }, 1967 | "engines": { 1968 | "node": ">= 10" 1969 | }, 1970 | "funding": { 1971 | "type": "opencollective", 1972 | "url": "https://opencollective.com/postcss/" 1973 | }, 1974 | "peerDependencies": { 1975 | "postcss": ">=8.0.9", 1976 | "ts-node": ">=9.0.0" 1977 | }, 1978 | "peerDependenciesMeta": { 1979 | "postcss": { 1980 | "optional": true 1981 | }, 1982 | "ts-node": { 1983 | "optional": true 1984 | } 1985 | } 1986 | }, 1987 | "node_modules/postcss-nested": { 1988 | "version": "6.0.0", 1989 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", 1990 | "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", 1991 | "dev": true, 1992 | "dependencies": { 1993 | "postcss-selector-parser": "^6.0.10" 1994 | }, 1995 | "engines": { 1996 | "node": ">=12.0" 1997 | }, 1998 | "funding": { 1999 | "type": "opencollective", 2000 | "url": "https://opencollective.com/postcss/" 2001 | }, 2002 | "peerDependencies": { 2003 | "postcss": "^8.2.14" 2004 | } 2005 | }, 2006 | "node_modules/postcss-selector-parser": { 2007 | "version": "6.0.11", 2008 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", 2009 | "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", 2010 | "dev": true, 2011 | "dependencies": { 2012 | "cssesc": "^3.0.0", 2013 | "util-deprecate": "^1.0.2" 2014 | }, 2015 | "engines": { 2016 | "node": ">=4" 2017 | } 2018 | }, 2019 | "node_modules/postcss-value-parser": { 2020 | "version": "4.2.0", 2021 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2022 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2023 | "dev": true 2024 | }, 2025 | "node_modules/queue-microtask": { 2026 | "version": "1.2.3", 2027 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2028 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2029 | "dev": true, 2030 | "funding": [ 2031 | { 2032 | "type": "github", 2033 | "url": "https://github.com/sponsors/feross" 2034 | }, 2035 | { 2036 | "type": "patreon", 2037 | "url": "https://www.patreon.com/feross" 2038 | }, 2039 | { 2040 | "type": "consulting", 2041 | "url": "https://feross.org/support" 2042 | } 2043 | ] 2044 | }, 2045 | "node_modules/quick-lru": { 2046 | "version": "5.1.1", 2047 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 2048 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 2049 | "dev": true, 2050 | "engines": { 2051 | "node": ">=10" 2052 | }, 2053 | "funding": { 2054 | "url": "https://github.com/sponsors/sindresorhus" 2055 | } 2056 | }, 2057 | "node_modules/react": { 2058 | "version": "18.2.0", 2059 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 2060 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 2061 | "dependencies": { 2062 | "loose-envify": "^1.1.0" 2063 | }, 2064 | "engines": { 2065 | "node": ">=0.10.0" 2066 | } 2067 | }, 2068 | "node_modules/react-dom": { 2069 | "version": "18.2.0", 2070 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 2071 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 2072 | "dependencies": { 2073 | "loose-envify": "^1.1.0", 2074 | "scheduler": "^0.23.0" 2075 | }, 2076 | "peerDependencies": { 2077 | "react": "^18.2.0" 2078 | } 2079 | }, 2080 | "node_modules/react-refresh": { 2081 | "version": "0.14.0", 2082 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", 2083 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", 2084 | "dev": true, 2085 | "engines": { 2086 | "node": ">=0.10.0" 2087 | } 2088 | }, 2089 | "node_modules/react-use-websocket": { 2090 | "version": "4.2.0", 2091 | "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-4.2.0.tgz", 2092 | "integrity": "sha512-ZovaTlc/tWX6a590fi3kMWImhyoWj46BWJWvO5oucZJzRnVVhYtes2D9g+5MKXjSdR7Es3456hB89v4/1pcBKg==", 2093 | "peerDependencies": { 2094 | "react": ">= 18.0.0", 2095 | "react-dom": ">= 18.0.0" 2096 | } 2097 | }, 2098 | "node_modules/read-cache": { 2099 | "version": "1.0.0", 2100 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 2101 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 2102 | "dev": true, 2103 | "dependencies": { 2104 | "pify": "^2.3.0" 2105 | } 2106 | }, 2107 | "node_modules/readdirp": { 2108 | "version": "3.6.0", 2109 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2110 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2111 | "dev": true, 2112 | "dependencies": { 2113 | "picomatch": "^2.2.1" 2114 | }, 2115 | "engines": { 2116 | "node": ">=8.10.0" 2117 | } 2118 | }, 2119 | "node_modules/require-directory": { 2120 | "version": "2.1.1", 2121 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2122 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2123 | "dev": true, 2124 | "engines": { 2125 | "node": ">=0.10.0" 2126 | } 2127 | }, 2128 | "node_modules/resolve": { 2129 | "version": "1.22.1", 2130 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 2131 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 2132 | "dev": true, 2133 | "dependencies": { 2134 | "is-core-module": "^2.9.0", 2135 | "path-parse": "^1.0.7", 2136 | "supports-preserve-symlinks-flag": "^1.0.0" 2137 | }, 2138 | "bin": { 2139 | "resolve": "bin/resolve" 2140 | }, 2141 | "funding": { 2142 | "url": "https://github.com/sponsors/ljharb" 2143 | } 2144 | }, 2145 | "node_modules/reusify": { 2146 | "version": "1.0.4", 2147 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2148 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2149 | "dev": true, 2150 | "engines": { 2151 | "iojs": ">=1.0.0", 2152 | "node": ">=0.10.0" 2153 | } 2154 | }, 2155 | "node_modules/rollup": { 2156 | "version": "3.9.1", 2157 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", 2158 | "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", 2159 | "dev": true, 2160 | "bin": { 2161 | "rollup": "dist/bin/rollup" 2162 | }, 2163 | "engines": { 2164 | "node": ">=14.18.0", 2165 | "npm": ">=8.0.0" 2166 | }, 2167 | "optionalDependencies": { 2168 | "fsevents": "~2.3.2" 2169 | } 2170 | }, 2171 | "node_modules/run-parallel": { 2172 | "version": "1.2.0", 2173 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2174 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2175 | "dev": true, 2176 | "funding": [ 2177 | { 2178 | "type": "github", 2179 | "url": "https://github.com/sponsors/feross" 2180 | }, 2181 | { 2182 | "type": "patreon", 2183 | "url": "https://www.patreon.com/feross" 2184 | }, 2185 | { 2186 | "type": "consulting", 2187 | "url": "https://feross.org/support" 2188 | } 2189 | ], 2190 | "dependencies": { 2191 | "queue-microtask": "^1.2.2" 2192 | } 2193 | }, 2194 | "node_modules/rxjs": { 2195 | "version": "7.8.0", 2196 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", 2197 | "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", 2198 | "dev": true, 2199 | "dependencies": { 2200 | "tslib": "^2.1.0" 2201 | } 2202 | }, 2203 | "node_modules/scheduler": { 2204 | "version": "0.23.0", 2205 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 2206 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 2207 | "dependencies": { 2208 | "loose-envify": "^1.1.0" 2209 | } 2210 | }, 2211 | "node_modules/semver": { 2212 | "version": "6.3.0", 2213 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2214 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2215 | "dev": true, 2216 | "bin": { 2217 | "semver": "bin/semver.js" 2218 | } 2219 | }, 2220 | "node_modules/shell-quote": { 2221 | "version": "1.7.4", 2222 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", 2223 | "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", 2224 | "dev": true, 2225 | "funding": { 2226 | "url": "https://github.com/sponsors/ljharb" 2227 | } 2228 | }, 2229 | "node_modules/source-map-js": { 2230 | "version": "1.0.2", 2231 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2232 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2233 | "dev": true, 2234 | "engines": { 2235 | "node": ">=0.10.0" 2236 | } 2237 | }, 2238 | "node_modules/spawn-command": { 2239 | "version": "0.0.2-1", 2240 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", 2241 | "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", 2242 | "dev": true 2243 | }, 2244 | "node_modules/string-width": { 2245 | "version": "4.2.3", 2246 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2247 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2248 | "dev": true, 2249 | "dependencies": { 2250 | "emoji-regex": "^8.0.0", 2251 | "is-fullwidth-code-point": "^3.0.0", 2252 | "strip-ansi": "^6.0.1" 2253 | }, 2254 | "engines": { 2255 | "node": ">=8" 2256 | } 2257 | }, 2258 | "node_modules/strip-ansi": { 2259 | "version": "6.0.1", 2260 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2261 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2262 | "dev": true, 2263 | "dependencies": { 2264 | "ansi-regex": "^5.0.1" 2265 | }, 2266 | "engines": { 2267 | "node": ">=8" 2268 | } 2269 | }, 2270 | "node_modules/supports-color": { 2271 | "version": "5.5.0", 2272 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2273 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2274 | "dev": true, 2275 | "dependencies": { 2276 | "has-flag": "^3.0.0" 2277 | }, 2278 | "engines": { 2279 | "node": ">=4" 2280 | } 2281 | }, 2282 | "node_modules/supports-preserve-symlinks-flag": { 2283 | "version": "1.0.0", 2284 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2285 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2286 | "dev": true, 2287 | "engines": { 2288 | "node": ">= 0.4" 2289 | }, 2290 | "funding": { 2291 | "url": "https://github.com/sponsors/ljharb" 2292 | } 2293 | }, 2294 | "node_modules/tailwindcss": { 2295 | "version": "3.2.4", 2296 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", 2297 | "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", 2298 | "dev": true, 2299 | "dependencies": { 2300 | "arg": "^5.0.2", 2301 | "chokidar": "^3.5.3", 2302 | "color-name": "^1.1.4", 2303 | "detective": "^5.2.1", 2304 | "didyoumean": "^1.2.2", 2305 | "dlv": "^1.1.3", 2306 | "fast-glob": "^3.2.12", 2307 | "glob-parent": "^6.0.2", 2308 | "is-glob": "^4.0.3", 2309 | "lilconfig": "^2.0.6", 2310 | "micromatch": "^4.0.5", 2311 | "normalize-path": "^3.0.0", 2312 | "object-hash": "^3.0.0", 2313 | "picocolors": "^1.0.0", 2314 | "postcss": "^8.4.18", 2315 | "postcss-import": "^14.1.0", 2316 | "postcss-js": "^4.0.0", 2317 | "postcss-load-config": "^3.1.4", 2318 | "postcss-nested": "6.0.0", 2319 | "postcss-selector-parser": "^6.0.10", 2320 | "postcss-value-parser": "^4.2.0", 2321 | "quick-lru": "^5.1.1", 2322 | "resolve": "^1.22.1" 2323 | }, 2324 | "bin": { 2325 | "tailwind": "lib/cli.js", 2326 | "tailwindcss": "lib/cli.js" 2327 | }, 2328 | "engines": { 2329 | "node": ">=12.13.0" 2330 | }, 2331 | "peerDependencies": { 2332 | "postcss": "^8.0.9" 2333 | } 2334 | }, 2335 | "node_modules/tailwindcss/node_modules/color-name": { 2336 | "version": "1.1.4", 2337 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2338 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2339 | "dev": true 2340 | }, 2341 | "node_modules/to-fast-properties": { 2342 | "version": "2.0.0", 2343 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2344 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 2345 | "dev": true, 2346 | "engines": { 2347 | "node": ">=4" 2348 | } 2349 | }, 2350 | "node_modules/to-regex-range": { 2351 | "version": "5.0.1", 2352 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2353 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2354 | "dev": true, 2355 | "dependencies": { 2356 | "is-number": "^7.0.0" 2357 | }, 2358 | "engines": { 2359 | "node": ">=8.0" 2360 | } 2361 | }, 2362 | "node_modules/tree-kill": { 2363 | "version": "1.2.2", 2364 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 2365 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 2366 | "dev": true, 2367 | "bin": { 2368 | "tree-kill": "cli.js" 2369 | } 2370 | }, 2371 | "node_modules/tslib": { 2372 | "version": "2.4.1", 2373 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 2374 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 2375 | }, 2376 | "node_modules/typescript": { 2377 | "version": "4.9.4", 2378 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", 2379 | "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", 2380 | "dev": true, 2381 | "bin": { 2382 | "tsc": "bin/tsc", 2383 | "tsserver": "bin/tsserver" 2384 | }, 2385 | "engines": { 2386 | "node": ">=4.2.0" 2387 | } 2388 | }, 2389 | "node_modules/update-browserslist-db": { 2390 | "version": "1.0.10", 2391 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", 2392 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", 2393 | "dev": true, 2394 | "funding": [ 2395 | { 2396 | "type": "opencollective", 2397 | "url": "https://opencollective.com/browserslist" 2398 | }, 2399 | { 2400 | "type": "tidelift", 2401 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2402 | } 2403 | ], 2404 | "dependencies": { 2405 | "escalade": "^3.1.1", 2406 | "picocolors": "^1.0.0" 2407 | }, 2408 | "bin": { 2409 | "browserslist-lint": "cli.js" 2410 | }, 2411 | "peerDependencies": { 2412 | "browserslist": ">= 4.21.0" 2413 | } 2414 | }, 2415 | "node_modules/util-deprecate": { 2416 | "version": "1.0.2", 2417 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2418 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2419 | "dev": true 2420 | }, 2421 | "node_modules/vite": { 2422 | "version": "4.0.4", 2423 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", 2424 | "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", 2425 | "dev": true, 2426 | "dependencies": { 2427 | "esbuild": "^0.16.3", 2428 | "postcss": "^8.4.20", 2429 | "resolve": "^1.22.1", 2430 | "rollup": "^3.7.0" 2431 | }, 2432 | "bin": { 2433 | "vite": "bin/vite.js" 2434 | }, 2435 | "engines": { 2436 | "node": "^14.18.0 || >=16.0.0" 2437 | }, 2438 | "optionalDependencies": { 2439 | "fsevents": "~2.3.2" 2440 | }, 2441 | "peerDependencies": { 2442 | "@types/node": ">= 14", 2443 | "less": "*", 2444 | "sass": "*", 2445 | "stylus": "*", 2446 | "sugarss": "*", 2447 | "terser": "^5.4.0" 2448 | }, 2449 | "peerDependenciesMeta": { 2450 | "@types/node": { 2451 | "optional": true 2452 | }, 2453 | "less": { 2454 | "optional": true 2455 | }, 2456 | "sass": { 2457 | "optional": true 2458 | }, 2459 | "stylus": { 2460 | "optional": true 2461 | }, 2462 | "sugarss": { 2463 | "optional": true 2464 | }, 2465 | "terser": { 2466 | "optional": true 2467 | } 2468 | } 2469 | }, 2470 | "node_modules/wrap-ansi": { 2471 | "version": "7.0.0", 2472 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2473 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2474 | "dev": true, 2475 | "dependencies": { 2476 | "ansi-styles": "^4.0.0", 2477 | "string-width": "^4.1.0", 2478 | "strip-ansi": "^6.0.0" 2479 | }, 2480 | "engines": { 2481 | "node": ">=10" 2482 | }, 2483 | "funding": { 2484 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2485 | } 2486 | }, 2487 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 2488 | "version": "4.3.0", 2489 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2490 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2491 | "dev": true, 2492 | "dependencies": { 2493 | "color-convert": "^2.0.1" 2494 | }, 2495 | "engines": { 2496 | "node": ">=8" 2497 | }, 2498 | "funding": { 2499 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2500 | } 2501 | }, 2502 | "node_modules/wrap-ansi/node_modules/color-convert": { 2503 | "version": "2.0.1", 2504 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2505 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2506 | "dev": true, 2507 | "dependencies": { 2508 | "color-name": "~1.1.4" 2509 | }, 2510 | "engines": { 2511 | "node": ">=7.0.0" 2512 | } 2513 | }, 2514 | "node_modules/wrap-ansi/node_modules/color-name": { 2515 | "version": "1.1.4", 2516 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2517 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2518 | "dev": true 2519 | }, 2520 | "node_modules/xtend": { 2521 | "version": "4.0.2", 2522 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2523 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 2524 | "dev": true, 2525 | "engines": { 2526 | "node": ">=0.4" 2527 | } 2528 | }, 2529 | "node_modules/y18n": { 2530 | "version": "5.0.8", 2531 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2532 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2533 | "dev": true, 2534 | "engines": { 2535 | "node": ">=10" 2536 | } 2537 | }, 2538 | "node_modules/yallist": { 2539 | "version": "3.1.1", 2540 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 2541 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 2542 | "dev": true 2543 | }, 2544 | "node_modules/yaml": { 2545 | "version": "1.10.2", 2546 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 2547 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 2548 | "dev": true, 2549 | "engines": { 2550 | "node": ">= 6" 2551 | } 2552 | }, 2553 | "node_modules/yargs": { 2554 | "version": "17.6.2", 2555 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", 2556 | "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", 2557 | "dev": true, 2558 | "dependencies": { 2559 | "cliui": "^8.0.1", 2560 | "escalade": "^3.1.1", 2561 | "get-caller-file": "^2.0.5", 2562 | "require-directory": "^2.1.1", 2563 | "string-width": "^4.2.3", 2564 | "y18n": "^5.0.5", 2565 | "yargs-parser": "^21.1.1" 2566 | }, 2567 | "engines": { 2568 | "node": ">=12" 2569 | } 2570 | }, 2571 | "node_modules/yargs-parser": { 2572 | "version": "21.1.1", 2573 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2574 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 2575 | "dev": true, 2576 | "engines": { 2577 | "node": ">=12" 2578 | } 2579 | } 2580 | } 2581 | } 2582 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-websocket-chat-rust", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "concurrently \"vite\" \"cargo shuttle run --working-directory API --port 9999\"", 8 | "dev-fe": "vite", 9 | "build": "tsc && vite build --emptyOutDir", 10 | "preview": "vite preview", 11 | "deploy": "npm run build && cargo shuttle deploy --working-directory ./API" 12 | 13 | }, 14 | "dependencies": { 15 | "framer-motion": "^8.4.0", 16 | "react": "^18.2.0", 17 | "react-dom": "^18.2.0", 18 | "react-use-websocket": "^4.2.0" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^18.11.18", 22 | "@types/react": "^18.0.26", 23 | "@types/react-dom": "^18.0.9", 24 | "@vitejs/plugin-react": "^3.0.0", 25 | "autoprefixer": "^10.4.13", 26 | "concurrently": "^7.6.0", 27 | "postcss": "^8.4.21", 28 | "tailwindcss": "^3.2.4", 29 | "typescript": "^4.9.3", 30 | "vite": "^4.0.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | } 6 | } -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { SetStateAction } from 'react' 2 | import NamePrompt from './components/NamePrompt'; 3 | 4 | type Message = { 5 | name: string, 6 | uid: number, 7 | message: string 8 | } 9 | function App() { 10 | const [name, setName] = React.useState(""); 11 | const [vis, setVis] = React.useState(true); 12 | 13 | const [message, setMessage] = React.useState(""); 14 | 15 | 16 | return ( 17 | 18 | <> 19 | 20 |
21 |
22 |
23 |
24 |

Hi! Welcome to Rustcord. Enjoy your stay!

25 |
26 |
27 |
sendMessage(e, name, message, setMessage)}> 28 | ) => setMessage(e.target.value)} /> 31 | 34 |
35 |
36 |
37 | 38 | 39 | ) 40 | } 41 | 42 | export default App 43 | 44 | const sendMessage = (e: React.FormEvent, name: string, message: string, setMessage: React.Dispatch>) => { 45 | e.preventDefault() 46 | // if user hasn't entered anything in to send, do nothing 47 | if (message.trim() == "") { 48 | return 49 | } 50 | // Send a websocket message to the server 51 | websocket.send( 52 | JSON.stringify({ 53 | name: name, 54 | message: message 55 | }) 56 | ); 57 | // Reset message input box 58 | setMessage("") 59 | } 60 | 61 | // Set up the websocket URL. 62 | const wsUri = ((window.location.protocol == "https:" && "wss://") || "ws://") + 63 | window.location.host + 64 | "/ws"; 65 | 66 | const websocket = new WebSocket(wsUri); 67 | 68 | // On open, do nothing - console.log() can be added for debugging purposes 69 | websocket.onopen = () => { 70 | 71 | } 72 | 73 | // On close, do nothing - console.log() can be added for debugging purposes 74 | websocket.onclose = () => { 75 | 76 | } 77 | 78 | // On receiving a message from the server, parse the data and then create an entry in the chat 79 | websocket.onmessage = (ev) => { 80 | let message = JSON.parse(ev.data); 81 | create_message(message); 82 | } 83 | 84 | // store the message classes as an array 85 | const message_classes = "mx-8 break-all chat-message bg-slate-600 rounded-xl w-fit max-w-screen rounded-xl px-5 py-4".split(" "); 86 | const username_css_classes = "text-gray-200 text-sm".split(" "); 87 | 88 | const create_message = (data: Message) => { 89 | let messageContainer = document.createElement('div'); 90 | messageContainer.classList.add(...message_classes); 91 | let chatbox = document.querySelector('#chatbox'); 92 | let username = document.createElement('span'); 93 | username.classList.add(...username_css_classes); 94 | username.innerText = `${data.name}`; 95 | messageContainer.append(username); 96 | let message = document.createElement('p'); 97 | message.innerText = `${data.message}`; 98 | messageContainer.append(message); 99 | chatbox?.append(messageContainer); 100 | window.scrollTo(0, document.body.scrollHeight); 101 | } -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/NamePrompt.tsx: -------------------------------------------------------------------------------- 1 | import React, { SetStateAction } from 'react' 2 | import { motion, AnimatePresence } from 'framer-motion'; 3 | 4 | type Props = { 5 | vis: boolean, 6 | name: string, 7 | setName: React.Dispatch>, 8 | setVis: React.Dispatch> 9 | } 10 | 11 | const NamePrompt = ({vis, name, setName, setVis}: Props) => { 12 | 13 | const submitName = (e: React.FormEvent) => { 14 | e.preventDefault() 15 | if (name == "") { 16 | return 17 | } 18 | setVis(false) 19 | } 20 | 21 | return ( 22 | 23 | 38 | 39 | ) 40 | } 41 | 42 | export default NamePrompt -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Text+Me+One&display=swap'); 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | 6 | @layer base { 7 | 8 | input, button { 9 | box-shadow: 5px 5px rgba(0,0,0,0.5); 10 | } 11 | 12 | input:active, button:active { 13 | box-shadow: 3px 3px rgba(0,0,0,0.5); 14 | } 15 | } 16 | 17 | body { 18 | font-family: 'Text Me One', 'Sans Serif'; 19 | padding: 0; 20 | margin: 0; 21 | background-color: rgb(214 211 209); 22 | box-sizing: box-border; 23 | overflow-x: hidden; 24 | } -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( 7 | 8 | 9 | 10 | ) 11 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./src/**/*.{html,js,ts,tsx}"], 4 | theme: { 5 | extend: { 6 | }, 7 | }, 8 | plugins: [], 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | base: '', 7 | plugins: [react()], 8 | build: { 9 | outDir: 'API/static', 10 | emptyOutDir: true 11 | } 12 | }) 13 | --------------------------------------------------------------------------------