diff --git a/Cargo.lock b/Cargo.lock index 78e4db3..668d2a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,18 +52,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy 0.7.35", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -206,9 +194,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-credential-types" -version = "1.2.1" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60e8f6b615cb5fc60a98132268508ad104310f0cfb25a1c22eee76efdf9154da" +checksum = "3cd362783681b15d136480ad555a099e82ecd8e2d10a841e14dfd0078d67fee3" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -240,9 +228,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.5.5" +version = "1.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76dd04d39cc12844c0994f2c9c5a6f5184c22e9188ec1ff723de41910a21dcad" +checksum = "d81b5b2898f6798ad58f484856768bca817e3cd9de0974c24ae0f1113fe88f1b" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -257,7 +245,6 @@ dependencies = [ "fastrand", "http 0.2.12", "http-body 0.4.6", - "once_cell", "percent-encoding", "pin-project-lite", "tracing", @@ -266,11 +253,10 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.34.0" +version = "1.119.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "724119d8fd2d2638b9979673f3b5c2979fa388c9ca27815e3cb5ad6234fac3f5" +checksum = "1d65fddc3844f902dfe1864acb8494db5f9342015ee3ab7890270d36fbd2e01c" dependencies = [ - "ahash", "aws-credential-types", "aws-runtime", "aws-sigv4", @@ -289,9 +275,9 @@ dependencies = [ "hex", "hmac", "http 0.2.12", + "http 1.2.0", "http-body 0.4.6", "lru", - "once_cell", "percent-encoding", "regex-lite", "sha2", @@ -301,9 +287,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.2.8" +version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bc5bbd1e4a2648fd8c5982af03935972c24a2f9846b396de661d351ee3ce837" +checksum = "69e523e1c4e8e7e8ff219d732988e22bfeae8a1cafdbe6d9eca1546fa080be7c" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -317,7 +303,6 @@ dependencies = [ "hmac", "http 0.2.12", "http 1.2.0", - "once_cell", "p256", "percent-encoding", "ring", @@ -330,9 +315,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.4" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa59d1327d8b5053c54bf2eaae63bf629ba9e904434d0835a28ed3c0ed0a614e" +checksum = "9ee19095c7c4dda59f1697d028ce704c24b2d33c6718790c7f1d5a3015b4107c" dependencies = [ "futures-util", "pin-project-lite", @@ -341,15 +326,14 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.60.13" +version = "0.63.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1a71073fca26775c8b5189175ea8863afb1c9ea2cceb02a5de5ad9dfbaa795" +checksum = "87294a084b43d649d967efe58aa1f9e0adc260e13a6938eb904c0ae9b45824ae" dependencies = [ "aws-smithy-http", "aws-smithy-types", "bytes", - "crc32c", - "crc32fast", + "crc-fast", "hex", "http 0.2.12", "http-body 0.4.6", @@ -362,9 +346,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.6" +version = "0.60.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b18559a41e0c909b77625adf2b8c50de480a8041e5e4a3f5f7d177db70abc5a" +checksum = "dc12f8b310e38cad85cf3bef45ad236f470717393c613266ce0a89512286b650" dependencies = [ "aws-smithy-types", "bytes", @@ -373,9 +357,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.60.12" +version = "0.62.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7809c27ad8da6a6a68c454e651d4962479e81472aa19ae99e59f9aba1f9713cc" +checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", @@ -383,56 +367,93 @@ dependencies = [ "bytes", "bytes-utils", "futures-core", + "futures-util", "http 0.2.12", + "http 1.2.0", "http-body 0.4.6", - "once_cell", "percent-encoding", "pin-project-lite", "pin-utils", "tracing", ] +[[package]] +name = "aws-smithy-http-client" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59e62db736db19c488966c8d787f52e6270be565727236fd5579eaa301e7bc4a" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "h2 0.3.26", + "h2 0.4.13", + "http 0.2.12", + "http 1.2.0", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.8.1", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.5", + "hyper-util", + "pin-project-lite", + "rustls 0.21.12", + "rustls 0.23.36", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower", + "tracing", +] + [[package]] name = "aws-smithy-json" -version = "0.60.7" +version = "0.61.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4683df9469ef09468dad3473d129960119a0d3593617542b7d52086c8486f2d6" +checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551" dependencies = [ "aws-smithy-types", ] +[[package]] +name = "aws-smithy-observability" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a" +dependencies = [ + "aws-smithy-runtime-api", +] + [[package]] name = "aws-smithy-runtime" -version = "1.7.8" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d526a12d9ed61fadefda24abe2e682892ba288c2018bcb38b1b4c111d13f6d92" +checksum = "a392db6c583ea4a912538afb86b7be7c5d8887d91604f50eb55c262ee1b4a5f5" dependencies = [ "aws-smithy-async", "aws-smithy-http", + "aws-smithy-http-client", + "aws-smithy-observability", "aws-smithy-runtime-api", "aws-smithy-types", "bytes", "fastrand", - "h2 0.3.26", "http 0.2.12", + "http 1.2.0", "http-body 0.4.6", "http-body 1.0.1", - "httparse", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "once_cell", "pin-project-lite", "pin-utils", - "rustls 0.21.12", "tokio", "tracing", ] [[package]] name = "aws-smithy-runtime-api" -version = "1.7.3" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92165296a47a812b267b4f41032ff8069ab7ff783696d217f0994a0d7ab585cd" +checksum = "ab0d43d899f9e508300e587bf582ba54c27a452dd0a9ea294690669138ae14a2" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -447,9 +468,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.2.13" +version = "1.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7b8a53819e42f10d0821f56da995e1470b199686a1809168db6ca485665f042" +checksum = "905cb13a9895626d49cf2ced759b062d913834c7482c38e49557eac4e6193f01" dependencies = [ "base64-simd", "bytes", @@ -473,18 +494,18 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.9" +version = "0.60.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab0b0166827aa700d3dc519f72f8b3a91c35d0b8d042dc5d643a91e6f80648fc" +checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57" dependencies = [ "xmlparser", ] [[package]] name = "aws-types" -version = "1.3.5" +version = "1.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbd0a668309ec1f66c0f6bda4840dd6d4796ae26d699ebc266d7cc95c6d040f" +checksum = "1d980627d2dd7bfc32a3c025685a033eeab8d365cc840c631ef59d1b8f428164" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -515,12 +536,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -788,7 +803,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ "aes-gcm", - "base64 0.22.1", + "base64", "hkdf", "percent-encoding", "rand 0.8.5", @@ -834,12 +849,31 @@ dependencies = [ ] [[package]] -name = "crc32c" -version = "0.6.8" +name = "crc" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ - "rustc_version", + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc-fast" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3" +dependencies = [ + "crc", + "digest", + "rand 0.9.0", + "regex", + "rustversion", ] [[package]] @@ -1155,6 +1189,12 @@ dependencies = [ "syn", ] +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "downcast-rs" version = "2.0.2" @@ -1559,9 +1599,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -1752,7 +1792,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.7", + "h2 0.4.13", "http 1.2.0", "http-body 1.0.1", "httparse", @@ -1775,7 +1815,6 @@ dependencies = [ "hyper 0.14.32", "log", "rustls 0.21.12", - "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.24.1", ] @@ -1790,10 +1829,11 @@ dependencies = [ "http 1.2.0", "hyper 1.8.1", "hyper-util", - "rustls 0.23.28", + "rustls 0.23.36", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls 0.26.4", "tower-service", ] @@ -1819,7 +1859,7 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-core", @@ -2157,7 +2197,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14924a83612db7dfb6722e81a30bfe11e25ef89b1df0dc81128974371e3e64d8" dependencies = [ - "base64 0.22.1", + "base64", "foreign-types", "openssl", "openssl-sys", @@ -2664,7 +2704,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.28", + "rustls 0.23.36", "socket2 0.6.1", "thiserror 2.0.11", "tokio", @@ -2685,7 +2725,7 @@ dependencies = [ "rand 0.9.0", "ring", "rustc-hash", - "rustls 0.23.28", + "rustls 0.23.36", "rustls-pki-types", "slab", "thiserror 2.0.11", @@ -2877,13 +2917,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", + "regex-automata 0.4.13", "regex-syntax 0.8.5", ] @@ -2898,9 +2938,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -2931,13 +2971,13 @@ version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-channel", "futures-core", "futures-util", - "h2 0.4.7", + "h2 0.4.13", "http 1.2.0", "http-body 1.0.1", "http-body-util", @@ -2953,7 +2993,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile 2.2.0", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", @@ -2976,11 +3016,11 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", - "h2 0.4.7", + "h2 0.4.13", "http 1.2.0", "http-body 1.0.1", "http-body-util", @@ -2993,14 +3033,14 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.28", + "rustls 0.23.36", "rustls-pki-types", "rustls-platform-verifier", "serde", "serde_json", "sync_wrapper", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls 0.26.4", "tower", "tower-http", "tower-service", @@ -3193,30 +3233,18 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.28" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "aws-lc-rs", "once_cell", "rustls-pki-types", - "rustls-webpki 0.103.3", + "rustls-webpki 0.103.8", "subtle", "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe 0.1.6", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework 2.11.1", -] - [[package]] name = "rustls-native-certs" version = "0.8.3" @@ -3229,15 +3257,6 @@ dependencies = [ "security-framework 3.5.1", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -3249,11 +3268,12 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" dependencies = [ "web-time", + "zeroize", ] [[package]] @@ -3267,10 +3287,10 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.28", - "rustls-native-certs 0.8.3", + "rustls 0.23.36", + "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.3", + "rustls-webpki 0.103.8", "security-framework 3.5.1", "security-framework-sys", "webpki-root-certs", @@ -3295,9 +3315,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "aws-lc-rs", "ring", @@ -3500,7 +3520,7 @@ version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ - "base64 0.22.1", + "base64", "chrono", "hex", "indexmap 1.9.3", @@ -4013,11 +4033,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.28", + "rustls 0.23.36", "tokio", ] @@ -4400,6 +4420,7 @@ dependencies = [ "clap", "crossterm", "delegate", + "dotenvy", "log", "ratatui 0.26.3", "ratatui-widgets", diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index e8c92ef..9d1c2dc 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -19,7 +19,7 @@ "react-dom": "^18.2.0", "react-oidc-context": "^3.0.0-beta.0", "react-router-dom": "^6.15.0", - "rsuite": "^5.39.0", + "rsuite": "^6.1.1", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0" }, @@ -29,37 +29,11 @@ "process": "^0.11.10" } }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/runtime": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", - "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } @@ -71,15 +45,15 @@ "license": "Apache-2.0" }, "node_modules/@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.0.tgz", + "integrity": "sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==", "license": "MIT" }, "node_modules/@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.7.tgz", + "integrity": "sha512-wNIFWdSUfX9Jc6ePMzxSPVgTVB4EOfDIwLQLWASyiUdHKaMsiilj9bYiGkGQCKVodd0x6bgQCV207PILGFCF9Q==", "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" @@ -262,21 +236,21 @@ ] }, "node_modules/@parcel/bundler-default": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.13.3.tgz", - "integrity": "sha512-mOuWeth0bZzRv1b9Lrvydis/hAzJyePy0gwa0tix3/zyYBvw0JY+xkXVR4qKyD/blc1Ra2qOlfI2uD3ucnsdXA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.16.3.tgz", + "integrity": "sha512-zCW2KzMfcEXqpVSU+MbLFMV3mHIzm/7UK1kT8mceuj4UwUScw7Lmjmulc2Ev4hcnwnaAFyaVkyFE5JXA4GKsLQ==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/graph": "3.3.3", - "@parcel/plugin": "2.13.3", - "@parcel/rust": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/graph": "3.6.3", + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/utils": "2.16.3", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -284,14 +258,14 @@ } }, "node_modules/@parcel/cache": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.13.3.tgz", - "integrity": "sha512-Vz5+K5uCt9mcuQAMDo0JdbPYDmVdB8Nvu/A2vTEK2rqZPxvoOTczKeMBA4JqzKqGURHPRLaJCvuR8nDG+jhK9A==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.16.3.tgz", + "integrity": "sha512-iWlbdTk9h7yTG1fxpGvftUD7rVbXVQn1+U21BGqFyYxfrd+wgdN624daIG6+eqI6yBuaBTEwH+cb3kaI9sH1ng==", "license": "MIT", "dependencies": { - "@parcel/fs": "2.13.3", - "@parcel/logger": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/fs": "2.16.3", + "@parcel/logger": "2.16.3", + "@parcel/utils": "2.16.3", "lmdb": "2.8.5" }, "engines": { @@ -302,13 +276,13 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, "node_modules/@parcel/codeframe": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.13.3.tgz", - "integrity": "sha512-L/PQf+PT0xM8k9nc0B+PxxOYO2phQYnbuifu9o4pFRiqVmCtHztP+XMIvRJ2gOEXy3pgAImSPFVJ3xGxMFky4g==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.16.3.tgz", + "integrity": "sha512-oXZx8PUqExnXnAHCLhxulTDeFvTBqPAwJU4AVZwnYFToaQ6nltXWWYaDGUu2f/V3Z17LObWiOROHT7HYXAe62Q==", "license": "MIT", "dependencies": { "chalk": "^4.1.2" @@ -322,16 +296,16 @@ } }, "node_modules/@parcel/compressor-raw": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.13.3.tgz", - "integrity": "sha512-C6vjDlgTLjYc358i7LA/dqcL0XDQZ1IHXFw6hBaHHOfxPKW2T4bzUI6RURyToEK9Q1X7+ggDKqgdLxwp4veCFg==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.16.3.tgz", + "integrity": "sha512-84lI0ULxvjnqDn3yHorMHj2X2g0oQsIwNFYopQWz9UWjnF7g5IU0EFgAAqMCQxKKUV6fttqaQiDDPikXLR6hHA==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3" + "@parcel/plugin": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -339,83 +313,84 @@ } }, "node_modules/@parcel/config-default": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.13.3.tgz", - "integrity": "sha512-WUsx83ic8DgLwwnL1Bua4lRgQqYjxiTT+DBxESGk1paNm1juWzyfPXEQDLXwiCTcWMQGiXQFQ8OuSISauVQ8dQ==", - "license": "MIT", - "dependencies": { - "@parcel/bundler-default": "2.13.3", - "@parcel/compressor-raw": "2.13.3", - "@parcel/namer-default": "2.13.3", - "@parcel/optimizer-css": "2.13.3", - "@parcel/optimizer-htmlnano": "2.13.3", - "@parcel/optimizer-image": "2.13.3", - "@parcel/optimizer-svgo": "2.13.3", - "@parcel/optimizer-swc": "2.13.3", - "@parcel/packager-css": "2.13.3", - "@parcel/packager-html": "2.13.3", - "@parcel/packager-js": "2.13.3", - "@parcel/packager-raw": "2.13.3", - "@parcel/packager-svg": "2.13.3", - "@parcel/packager-wasm": "2.13.3", - "@parcel/reporter-dev-server": "2.13.3", - "@parcel/resolver-default": "2.13.3", - "@parcel/runtime-browser-hmr": "2.13.3", - "@parcel/runtime-js": "2.13.3", - "@parcel/runtime-react-refresh": "2.13.3", - "@parcel/runtime-service-worker": "2.13.3", - "@parcel/transformer-babel": "2.13.3", - "@parcel/transformer-css": "2.13.3", - "@parcel/transformer-html": "2.13.3", - "@parcel/transformer-image": "2.13.3", - "@parcel/transformer-js": "2.13.3", - "@parcel/transformer-json": "2.13.3", - "@parcel/transformer-postcss": "2.13.3", - "@parcel/transformer-posthtml": "2.13.3", - "@parcel/transformer-raw": "2.13.3", - "@parcel/transformer-react-refresh-wrap": "2.13.3", - "@parcel/transformer-svg": "2.13.3" + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.16.3.tgz", + "integrity": "sha512-OgB6f+EpCzjeFLoVB5qJzKy0ybB2wPK0hB2aXgD3oYCHWLny7LJOGaktY9OskSn1jfz7Tdit9zLNXOhBTMRujw==", + "license": "MIT", + "dependencies": { + "@parcel/bundler-default": "2.16.3", + "@parcel/compressor-raw": "2.16.3", + "@parcel/namer-default": "2.16.3", + "@parcel/optimizer-css": "2.16.3", + "@parcel/optimizer-html": "2.16.3", + "@parcel/optimizer-image": "2.16.3", + "@parcel/optimizer-svg": "2.16.3", + "@parcel/optimizer-swc": "2.16.3", + "@parcel/packager-css": "2.16.3", + "@parcel/packager-html": "2.16.3", + "@parcel/packager-js": "2.16.3", + "@parcel/packager-raw": "2.16.3", + "@parcel/packager-svg": "2.16.3", + "@parcel/packager-wasm": "2.16.3", + "@parcel/reporter-dev-server": "2.16.3", + "@parcel/resolver-default": "2.16.3", + "@parcel/runtime-browser-hmr": "2.16.3", + "@parcel/runtime-js": "2.16.3", + "@parcel/runtime-rsc": "2.16.3", + "@parcel/runtime-service-worker": "2.16.3", + "@parcel/transformer-babel": "2.16.3", + "@parcel/transformer-css": "2.16.3", + "@parcel/transformer-html": "2.16.3", + "@parcel/transformer-image": "2.16.3", + "@parcel/transformer-js": "2.16.3", + "@parcel/transformer-json": "2.16.3", + "@parcel/transformer-node": "2.16.3", + "@parcel/transformer-postcss": "2.16.3", + "@parcel/transformer-posthtml": "2.16.3", + "@parcel/transformer-raw": "2.16.3", + "@parcel/transformer-react-refresh-wrap": "2.16.3", + "@parcel/transformer-svg": "2.16.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, "node_modules/@parcel/core": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.13.3.tgz", - "integrity": "sha512-SRZFtqGiaKHlZ2YAvf+NHvBFWS3GnkBvJMfOJM7kxJRK3M1bhbwJa/GgSdzqro5UVf9Bfj6E+pkdrRQIOZ7jMQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.16.3.tgz", + "integrity": "sha512-b9ll4jaFYfXSv6NZAOJ2P0uuyT/Doel7ho2AHLSUz2thtcL6HEb2+qdV2f9wriVvbEoPAj9VuSOgNc0t0f5iMw==", "license": "MIT", "peer": true, "dependencies": { - "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/cache": "2.13.3", - "@parcel/diagnostic": "2.13.3", - "@parcel/events": "2.13.3", - "@parcel/feature-flags": "2.13.3", - "@parcel/fs": "2.13.3", - "@parcel/graph": "3.3.3", - "@parcel/logger": "2.13.3", - "@parcel/package-manager": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/profiler": "2.13.3", - "@parcel/rust": "2.13.3", + "@mischnic/json-sourcemap": "^0.1.1", + "@parcel/cache": "2.16.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/events": "2.16.3", + "@parcel/feature-flags": "2.16.3", + "@parcel/fs": "2.16.3", + "@parcel/graph": "3.6.3", + "@parcel/logger": "2.16.3", + "@parcel/package-manager": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/profiler": "2.16.3", + "@parcel/rust": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/types": "2.13.3", - "@parcel/utils": "2.13.3", - "@parcel/workers": "2.13.3", - "base-x": "^3.0.8", - "browserslist": "^4.6.6", - "clone": "^2.1.1", - "dotenv": "^16.4.5", - "dotenv-expand": "^11.0.6", - "json5": "^2.2.0", - "msgpackr": "^1.9.9", + "@parcel/types": "2.16.3", + "@parcel/utils": "2.16.3", + "@parcel/workers": "2.16.3", + "base-x": "^3.0.11", + "browserslist": "^4.24.5", + "clone": "^2.1.2", + "dotenv": "^16.5.0", + "dotenv-expand": "^11.0.7", + "json5": "^2.2.3", + "msgpackr": "^1.11.2", "nullthrows": "^1.1.1", - "semver": "^7.5.2" + "semver": "^7.7.1" }, "engines": { "node": ">= 16.0.0" @@ -426,12 +401,12 @@ } }, "node_modules/@parcel/diagnostic": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.13.3.tgz", - "integrity": "sha512-C70KXLBaXLJvr7XCEVu8m6TqNdw1gQLxqg5BQ8roR62R4vWWDnOq8PEksxDi4Y8Z/FF4i3Sapv6tRx9iBNxDEg==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.16.3.tgz", + "integrity": "sha512-NBoGGFMqOmbs8i0zGVwTeU0alQ0BkEZe894zAb5jEBQqsRBPmdqogwmARsT4Ix2bN1QBco4o0gn9kBtalFC6IQ==", "license": "MIT", "dependencies": { - "@mischnic/json-sourcemap": "^0.1.0", + "@mischnic/json-sourcemap": "^0.1.1", "nullthrows": "^1.1.1" }, "engines": { @@ -442,10 +417,23 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@parcel/error-overlay": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/error-overlay/-/error-overlay-2.16.3.tgz", + "integrity": "sha512-JqJR4Fl5SwTmqDEuCAC8F1LmNLWpjfiJ+hGp3CoLb0/9EElRxlpkuP/SxTe2/hyXevpfn3bfvS1cn/mWhHUc3w==", + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@parcel/events": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.13.3.tgz", - "integrity": "sha512-ZkSHTTbD/E+53AjUzhAWTnMLnxLEU5yRw0H614CaruGh+GjgOIKyukGeToF5Gf/lvZ159VrJCGE0Z5EpgHVkuQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.16.3.tgz", + "integrity": "sha512-rAh/yXwtHYcKWmi9Tjjf5t95UdBVhhlyJkIYN25/PYKdSRBcQ9c1rd8/fvOeZKy1/fSiOcEXqm6dK7bhLSCaww==", "license": "MIT", "engines": { "node": ">= 16.0.0" @@ -456,9 +444,9 @@ } }, "node_modules/@parcel/feature-flags": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/feature-flags/-/feature-flags-2.13.3.tgz", - "integrity": "sha512-UZm14QpamDFoUut9YtCZSpG1HxPs07lUwUCpsAYL0PpxASD3oWJQxIJGfDZPa2272DarXDG9adTKrNXvkHZblw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/feature-flags/-/feature-flags-2.16.3.tgz", + "integrity": "sha512-D15/cM/mAO8yv0NQ9kFBxXZ7C3A+jAq+9tVfrjYegofMk18pQoXJz6X/po2Kq1PzO7pjydn7PqYMB/O9p/+zbQ==", "license": "MIT", "engines": { "node": ">= 16.0.0" @@ -469,17 +457,17 @@ } }, "node_modules/@parcel/fs": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.13.3.tgz", - "integrity": "sha512-+MPWAt0zr+TCDSlj1LvkORTjfB/BSffsE99A9AvScKytDSYYpY2s0t4vtV9unSh0FHMS2aBCZNJ4t7KL+DcPIg==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.16.3.tgz", + "integrity": "sha512-InMXHVIfDUSimjBoGJcdNlNjoIsDQ8MUDN8UJG4jnjJQ6DDor+W+yg4sw/40tToUqIyi99lVhQlpkBA+nHLpOQ==", "license": "MIT", "dependencies": { - "@parcel/feature-flags": "2.13.3", - "@parcel/rust": "2.13.3", - "@parcel/types-internal": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/feature-flags": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/types-internal": "2.16.3", + "@parcel/utils": "2.16.3", "@parcel/watcher": "^2.0.7", - "@parcel/workers": "2.13.3" + "@parcel/workers": "2.16.3" }, "engines": { "node": ">= 16.0.0" @@ -489,16 +477,16 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, "node_modules/@parcel/graph": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.3.3.tgz", - "integrity": "sha512-pxs4GauEdvCN8nRd6wG3st6LvpHske3GfqGwUSR0P0X0pBPI1/NicvXz6xzp3rgb9gPWfbKXeI/2IOTfIxxVfg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.6.3.tgz", + "integrity": "sha512-3qV99HCHrPR1CnMOHkwwpmPBimVMd3d/GcEcgOHUKi+2mS0KZ4TwMs/THaIWtJx7q5jrhqEht+IyQ1Smupo49g==", "license": "MIT", "dependencies": { - "@parcel/feature-flags": "2.13.3", + "@parcel/feature-flags": "2.16.3", "nullthrows": "^1.1.1" }, "engines": { @@ -510,13 +498,13 @@ } }, "node_modules/@parcel/logger": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.13.3.tgz", - "integrity": "sha512-8YF/ZhsQgd7ohQ2vEqcMD1Ag9JlJULROWRPGgGYLGD+twuxAiSdiFBpN3f+j4gQN4PYaLaIS/SwUFx11J243fQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.16.3.tgz", + "integrity": "sha512-dHUJk8dvo2wOg3dIqSjNGqlVqsRn4hTZVbgTShaImaLTWdueaKfMojxo79P7T3em49y0dQb0m+xl2SunDhtwsA==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/events": "2.13.3" + "@parcel/diagnostic": "2.16.3", + "@parcel/events": "2.16.3" }, "engines": { "node": ">= 16.0.0" @@ -527,9 +515,9 @@ } }, "node_modules/@parcel/markdown-ansi": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.13.3.tgz", - "integrity": "sha512-B4rUdlNUulJs2xOQuDbN7Hq5a9roq8IZUcJ1vQ8PAv+zMGb7KCfqIIr/BSCDYGhayfAGBVWW8x55Kvrl1zrDYw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.16.3.tgz", + "integrity": "sha512-r0QQpS44jNueY8lcZcSoUua3kJfI5kDZrJvFgi1jrkyxwDUfq3L0xWQjxHrXzv8K6uFAeU+teoq8JcWLVLXa1w==", "license": "MIT", "dependencies": { "chalk": "^4.1.2" @@ -543,18 +531,18 @@ } }, "node_modules/@parcel/namer-default": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.13.3.tgz", - "integrity": "sha512-A2a5A5fuyNcjSGOS0hPcdQmOE2kszZnLIXof7UMGNkNkeC62KAG8WcFZH5RNOY3LT5H773hq51zmc2Y2gE5Rnw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.16.3.tgz", + "integrity": "sha512-4MwRm8ZnloMdQ6sAMrTDxMiPVN1fV+UcBIrA0Fpp4kD3XLkqSAUCLnjl13+VrPelfh01irM6QnpK4JTKBqRk0A==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -562,18 +550,18 @@ } }, "node_modules/@parcel/node-resolver-core": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.4.3.tgz", - "integrity": "sha512-IEnMks49egEic1ITBp59VQyHzkSQUXqpU9hOHwqN3KoSTdZ6rEgrXcS3pa6tdXay4NYGlcZ88kFCE8i/xYoVCg==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.7.3.tgz", + "integrity": "sha512-0xdXyhGcGwtYmfWwEwzdVVGnTaADdTScx1S8IXiK0Nh3S1b4ilGqnKzw8fVsJCsBMvQA5e251EDFeG3qTnUsnw==", "license": "MIT", "dependencies": { - "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/diagnostic": "2.13.3", - "@parcel/fs": "2.13.3", - "@parcel/rust": "2.13.3", - "@parcel/utils": "2.13.3", + "@mischnic/json-sourcemap": "^0.1.1", + "@parcel/diagnostic": "2.16.3", + "@parcel/fs": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/utils": "2.16.3", "nullthrows": "^1.1.1", - "semver": "^7.5.2" + "semver": "^7.7.1" }, "engines": { "node": ">= 16.0.0" @@ -584,44 +572,41 @@ } }, "node_modules/@parcel/optimizer-css": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.13.3.tgz", - "integrity": "sha512-A8o9IVCv919vhv69SkLmyW2WjJR5WZgcMqV6L1uiGF8i8z18myrMhrp2JuSHx29PRT9uNyzNC4Xrd4StYjIhJg==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.16.3.tgz", + "integrity": "sha512-j/o9bGtu1Fe7gJYQD+/SeJ5yR7FmS6Z7e6CtTkVxjeeq0/IdR0KoZOCkJ4cRETPnm+wkyQVlY8koAAFbEEqV8w==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.3", - "browserslist": "^4.6.6", - "lightningcss": "^1.22.1", + "@parcel/utils": "2.16.3", + "browserslist": "^4.24.5", + "lightningcss": "^1.30.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/optimizer-htmlnano": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.13.3.tgz", - "integrity": "sha512-K4Uvg0Sy2pECP7pdvvbud++F0pfcbNkq+IxTrgqBX5HJnLEmRZwgdvZEKF43oMEolclMnURMQRGjRplRaPdbXg==", + "node_modules/@parcel/optimizer-html": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-html/-/optimizer-html-2.16.3.tgz", + "integrity": "sha512-EBmjY+QRa/in05wRWiL6B/kQ1ERemdg4W9py+V2w0tJx1n6yOvtjPGvivYtU+s82rlVlx6DN3DFU13iGRt0FuQ==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", - "htmlnano": "^2.0.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5" + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/utils": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -629,42 +614,42 @@ } }, "node_modules/@parcel/optimizer-image": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.13.3.tgz", - "integrity": "sha512-wlDUICA29J4UnqkKrWiyt68g1e85qfYhp4zJFcFJL0LX1qqh1QwsLUz3YJ+KlruoqPxJSFEC8ncBEKiVCsqhEQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.16.3.tgz", + "integrity": "sha512-PbGsDXbbWyOnkpWn3jgZxtAp8l8LNXl7DCv5Q4l1TR6k4sULjmxTTPY6+AkY6H84cAN7s5h6F8k2XeN3ygXWCA==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/rust": "2.13.3", - "@parcel/utils": "2.13.3", - "@parcel/workers": "2.13.3" + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/utils": "2.16.3", + "@parcel/workers": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, - "node_modules/@parcel/optimizer-svgo": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.13.3.tgz", - "integrity": "sha512-piIKxQKzhZK54dJR6yqIcq+urZmpsfgUpLCZT3cnWlX4ux5+S2iN66qqZBs0zVn+a58LcWcoP4Z9ieiJmpiu2w==", + "node_modules/@parcel/optimizer-svg": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svg/-/optimizer-svg-2.16.3.tgz", + "integrity": "sha512-fgQhrqu5pKtEaM9G//PvBZSuCDP6ZVbGyFnePKCzqnXJ173/Y+4kUbNOrPi7wE4HupWMsJRNUf/vyCu+lXdOiQ==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3" + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/utils": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -672,21 +657,21 @@ } }, "node_modules/@parcel/optimizer-swc": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.13.3.tgz", - "integrity": "sha512-zNSq6oWqLlW8ksPIDjM0VgrK6ZAJbPQCDvs1V+p0oX3CzEe85lT5VkRpnfrN1+/vvEJNGL8e60efHKpI+rXGTA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.16.3.tgz", + "integrity": "sha512-8P5Bis2SynQ6sPW1bwB6H8WK+nFF61RCKzlGnTPoh1YE36dubYqUreYYISMLFt/rG8eb+Ja78DQLPZTVP3sfQQ==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.3", - "@swc/core": "^1.7.26", + "@parcel/utils": "2.16.3", + "@swc/core": "^1.11.24", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -694,20 +679,20 @@ } }, "node_modules/@parcel/package-manager": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.13.3.tgz", - "integrity": "sha512-FLNI5OrZxymGf/Yln0E/kjnGn5sdkQAxW7pQVdtuM+5VeN75yibJRjsSGv88PvJ+KvpD2ANgiIJo1RufmoPcww==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.16.3.tgz", + "integrity": "sha512-TySTY93SyGfu8E5YWiekumw6sm/2+LBHcpv1JWWAfNd+1b/x3WB5QcRyEk6mpnOo7ChQOfqykzUaBcrmLBGaSw==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/fs": "2.13.3", - "@parcel/logger": "2.13.3", - "@parcel/node-resolver-core": "3.4.3", - "@parcel/types": "2.13.3", - "@parcel/utils": "2.13.3", - "@parcel/workers": "2.13.3", - "@swc/core": "^1.7.26", - "semver": "^7.5.2" + "@parcel/diagnostic": "2.16.3", + "@parcel/fs": "2.16.3", + "@parcel/logger": "2.16.3", + "@parcel/node-resolver-core": "3.7.3", + "@parcel/types": "2.16.3", + "@parcel/utils": "2.16.3", + "@parcel/workers": "2.16.3", + "@swc/core": "^1.11.24", + "semver": "^7.7.1" }, "engines": { "node": ">= 16.0.0" @@ -717,25 +702,25 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, "node_modules/@parcel/packager-css": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.13.3.tgz", - "integrity": "sha512-ghDqRMtrUwaDERzFm9le0uz2PTeqqsjsW0ihQSZPSAptElRl9o5BR+XtMPv3r7Ui0evo+w35gD55oQCJ28vCig==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.16.3.tgz", + "integrity": "sha512-CUwMRif1ZGBfociDt6m18L7sgafsquo0+NYRDXCTHmig3w7zm5saE4PXborfzRI/Lj3kBUkJYH//NQGITHv1Yg==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.3", - "lightningcss": "^1.22.1", + "@parcel/utils": "2.16.3", + "lightningcss": "^1.30.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -743,20 +728,19 @@ } }, "node_modules/@parcel/packager-html": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.13.3.tgz", - "integrity": "sha512-jDLnKSA/EzVEZ3/aegXO3QJ/Ij732AgBBkIQfeC8tUoxwVz5b3HiPBAjVjcUSfZs7mdBSHO+ELWC3UD+HbsIrQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.16.3.tgz", + "integrity": "sha512-hluJXpvcW2EwmBxO/SalBiX5SIYJ7jGTkhFq5ka2wrQewFxaAOv2BVTuFjl1AAnWzjigcNhC4n0jkQUckCNW4g==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/types": "2.13.3", - "@parcel/utils": "2.13.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5" + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/types": "2.16.3", + "@parcel/utils": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -764,23 +748,23 @@ } }, "node_modules/@parcel/packager-js": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.13.3.tgz", - "integrity": "sha512-0pMHHf2zOn7EOJe88QJw5h/wcV1bFfj6cXVcE55Wa8GX3V+SdCgolnlvNuBcRQ1Tlx0Xkpo+9hMFVIQbNQY6zw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.16.3.tgz", + "integrity": "sha512-01fufzVOs9reEDq9OTUyu5Kpasd8nGvBJEUytagM6rvNlEpmlUX5HvoAzUMSTyYeFSH+1VnX6HzK6EcQNY9Y8Q==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/rust": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/types": "2.13.3", - "@parcel/utils": "2.13.3", - "globals": "^13.2.0", + "@parcel/types": "2.16.3", + "@parcel/utils": "2.16.3", + "globals": "^13.24.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -788,16 +772,16 @@ } }, "node_modules/@parcel/packager-raw": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.13.3.tgz", - "integrity": "sha512-AWu4UB+akBdskzvT3KGVHIdacU9f7cI678DQQ1jKQuc9yZz5D0VFt3ocFBOmvDfEQDF0uH3jjtJR7fnuvX7Biw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.16.3.tgz", + "integrity": "sha512-GCehb36D2xe8P8gftyZcjNr3XcUzBgRzWcasM4I0oPaLRZw4nuIu60cwTsGk6/HhUYDq8uPze+gr1L4pApRrjw==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3" + "@parcel/plugin": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -805,19 +789,19 @@ } }, "node_modules/@parcel/packager-svg": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.13.3.tgz", - "integrity": "sha512-tKGRiFq/4jh5u2xpTstNQ7gu+RuZWzlWqpw5NaFmcKe6VQe5CMcS499xTFoREAGnRvevSeIgC38X1a+VOo+/AA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.16.3.tgz", + "integrity": "sha512-1TLmU8zcRBySOD3WXGUhTjmIurJoOMwQ3aIiyHXn4zjrl4+VPw/WnUoVGpMwUW1T7rb2/22BKPGAAxbOLDqxLQ==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/types": "2.13.3", - "@parcel/utils": "2.13.3", - "posthtml": "^0.16.4" + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/types": "2.16.3", + "@parcel/utils": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -825,16 +809,16 @@ } }, "node_modules/@parcel/packager-wasm": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.13.3.tgz", - "integrity": "sha512-SZB56/b230vFrSehVXaUAWjJmWYc89gzb8OTLkBm7uvtFtov2J1R8Ig9TTJwinyXE3h84MCFP/YpQElSfoLkJw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.16.3.tgz", + "integrity": "sha512-RfRM/RaA4eWV+qUt7A9Vo2VlvZx50Rfs81kZ4WBhxzey2BGAvBSJWceYEUnI7JuDmrHjDMDe6y0+gLNmELeL1g==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3" + "@parcel/plugin": "2.16.3" }, "engines": { "node": ">=16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -842,12 +826,12 @@ } }, "node_modules/@parcel/plugin": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.13.3.tgz", - "integrity": "sha512-cterKHHcwg6q11Gpif/aqvHo056TR+yDVJ3fSdiG2xr5KD1VZ2B3hmofWERNNwjMcnR1h9Xq40B7jCKUhOyNFA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.16.3.tgz", + "integrity": "sha512-w4adN/E2MBbNzUwuGWcUkilrf7B6eQThPRdgiw2awIY0/t0C1gN/hhBfUeWt7vt0WcvWlXcyR/OGzU/r0nPteA==", "license": "MIT", "dependencies": { - "@parcel/types": "2.13.3" + "@parcel/types": "2.16.3" }, "engines": { "node": ">= 16.0.0" @@ -858,14 +842,14 @@ } }, "node_modules/@parcel/profiler": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.13.3.tgz", - "integrity": "sha512-ok6BwWSLvyHe5TuSXjSacYnDStFgP5Y30tA9mbtWSm0INDsYf+m5DqzpYPx8U54OaywWMK8w3MXUClosJX3aPA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.16.3.tgz", + "integrity": "sha512-/4cVsLfv36fdphm+JiReeXXT3RD6258L79C2kjpD06i84sxyNPQVbFldgWRppbHW2KBR/D6XhIzHcwoDUYtTbw==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/events": "2.13.3", - "@parcel/types-internal": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/events": "2.16.3", + "@parcel/types-internal": "2.16.3", "chrome-trace-event": "^1.0.2" }, "engines": { @@ -877,20 +861,20 @@ } }, "node_modules/@parcel/reporter-cli": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.13.3.tgz", - "integrity": "sha512-EA5tKt/6bXYNMEavSs35qHlFdx6cZmRazlZxPBgxPePQYoouNAPMNLUOEQozaPhz9f5fvNDN7EHOFaAWcdO2LA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.16.3.tgz", + "integrity": "sha512-kIwhJy97xlgvNsUhn3efp6PxUfWCiiPG9ciDnAGBXpFmKWl63WQR6QIXNuNgrQremUTzIHJ02h6/+LyBJD4wjw==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/types": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/plugin": "2.16.3", + "@parcel/types": "2.16.3", + "@parcel/utils": "2.16.3", "chalk": "^4.1.2", "term-size": "^2.2.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -898,17 +882,19 @@ } }, "node_modules/@parcel/reporter-dev-server": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.13.3.tgz", - "integrity": "sha512-ZNeFp6AOIQFv7mZIv2P5O188dnZHNg0ymeDVcakfZomwhpSva2dFNS3AnvWo4eyWBlUxkmQO8BtaxeWTs7jAuA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.16.3.tgz", + "integrity": "sha512-c2YEHU3ePOSUO+JXoehn3r0ruUlP2i4xvHfwHLHI3NW/Ymlp4Gy9rWyyYve/zStfoEOyMN/vKRWKtxr6nCy9DQ==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3" + "@parcel/codeframe": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -916,19 +902,19 @@ } }, "node_modules/@parcel/reporter-tracer": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.13.3.tgz", - "integrity": "sha512-aBsVPI8jLZTDkFYrI69GxnsdvZKEYerkPsu935LcX9rfUYssOnmmUP+3oI+8fbg+qNjJuk9BgoQ4hCp9FOphMQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.16.3.tgz", + "integrity": "sha512-DqQQRQC6JKQcYo8fAC69JGri++WC9cTRZFH2QJdbcMXnmeCW0YjBwHsl65C0Q/8aO6lwVlV0P1waMPW3iQw+uA==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/plugin": "2.16.3", + "@parcel/utils": "2.16.3", "chrome-trace-event": "^1.0.3", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -936,17 +922,17 @@ } }, "node_modules/@parcel/resolver-default": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.13.3.tgz", - "integrity": "sha512-urBZuRALWT9pFMeWQ8JirchLmsQEyI9lrJptiwLbJWrwvmlwSUGkcstmPwoNRf/aAQjICB7ser/247Vny0pFxA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.16.3.tgz", + "integrity": "sha512-2bf2VRKt1fZRZbi85SBLrePr4Eid0zXUQMy+MRcFoVZ8MaxsjvWjnlxHW71cWNcRQATUOX/0w0z0Gcf7Kjrh2g==", "license": "MIT", "dependencies": { - "@parcel/node-resolver-core": "3.4.3", - "@parcel/plugin": "2.13.3" + "@parcel/node-resolver-core": "3.7.3", + "@parcel/plugin": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -954,17 +940,17 @@ } }, "node_modules/@parcel/runtime-browser-hmr": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.13.3.tgz", - "integrity": "sha512-EAcPojQFUNUGUrDk66cu3ySPO0NXRVS5CKPd4QrxPCVVbGzde4koKu8krC/TaGsoyUqhie8HMnS70qBP0GFfcQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.16.3.tgz", + "integrity": "sha512-dN5Kv6/BLaKAf80zogimvSPZYQRA+h+o3rKQLnxid2FilVRTCjz+FOcuMsT/EqAJXai1mKjrxtqlM9IJ4oSV1A==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3" + "@parcel/plugin": "2.16.3", + "@parcel/utils": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -972,39 +958,39 @@ } }, "node_modules/@parcel/runtime-js": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.13.3.tgz", - "integrity": "sha512-62OucNAnxb2Q0uyTFWW/0Hvv2DJ4b5H6neh/YFu2/wmxaZ37xTpEuEcG2do7KW54xE5DeLP+RliHLwi4NvR3ww==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.16.3.tgz", + "integrity": "sha512-Xk1G7A0g5Dbm374V8piDbxLRQoQ1JiKIChXzQuiQ755A22JYOSP0yA2djBEuB7KWPwFKDd4f9DFTVDn6VclPaQ==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/utils": "2.16.3", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/runtime-react-refresh": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.13.3.tgz", - "integrity": "sha512-PYZ1klpJVwqE3WuifILjtF1dugtesHEuJcXYZI85T6UoRSD5ctS1nAIpZzT14Ga1lRt/jd+eAmhWL1l3m/Vk1Q==", + "node_modules/@parcel/runtime-rsc": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-rsc/-/runtime-rsc-2.16.3.tgz", + "integrity": "sha512-QR+4BjGE2OqLcjh6WfAMrNoM0FubxvJNH9p31yjI4H1ivrvTJECanvVZ6C7QRR/30l+WAYb5USrcYJVMwHi1zg==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", - "react-error-overlay": "6.0.9", - "react-refresh": ">=0.9 <=0.14" + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/utils": "2.16.3", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 16.0.0", - "parcel": "^2.13.3" + "node": ">= 12.0.0", + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1012,18 +998,18 @@ } }, "node_modules/@parcel/runtime-service-worker": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.13.3.tgz", - "integrity": "sha512-BjMhPuT7Us1+YIo31exPRwomPiL+jrZZS5UUAwlEW2XGHDceEotzRM94LwxeFliCScT4IOokGoxixm19qRuzWg==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.16.3.tgz", + "integrity": "sha512-O+jhRFNThRAxsHOW6RYcYR6+sA9MxeGTmbVRguFyM12OqzuXRTuuv9x2RDSGP/cgBBCpVuq5JvK8KwS2RB26Gg==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/plugin": "2.16.3", + "@parcel/utils": "2.16.3", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1031,13 +1017,191 @@ } }, "node_modules/@parcel/rust": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.13.3.tgz", - "integrity": "sha512-dLq85xDAtzr3P5200cvxk+8WXSWauYbxuev9LCPdwfhlaWo/JEj6cu9seVdWlkagjGwkoV1kXC+GGntgUXOLAQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.16.3.tgz", + "integrity": "sha512-pUsgURnDdlHA9AqvEcm124/9+DB7GM7Mk0qQ9XDNiznl09n8XZ67lf/IIvaMW7y0vQ7FpTzRIrRzAJhGyMRbMw==", "license": "MIT", "engines": { "node": ">= 16.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/rust-darwin-arm64": "2.16.3", + "@parcel/rust-darwin-x64": "2.16.3", + "@parcel/rust-linux-arm-gnueabihf": "2.16.3", + "@parcel/rust-linux-arm64-gnu": "2.16.3", + "@parcel/rust-linux-arm64-musl": "2.16.3", + "@parcel/rust-linux-x64-gnu": "2.16.3", + "@parcel/rust-linux-x64-musl": "2.16.3", + "@parcel/rust-win32-x64-msvc": "2.16.3" + }, + "peerDependencies": { + "napi-wasm": "^1.1.2" + }, + "peerDependenciesMeta": { + "napi-wasm": { + "optional": true + } + } + }, + "node_modules/@parcel/rust-darwin-arm64": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-darwin-arm64/-/rust-darwin-arm64-2.16.3.tgz", + "integrity": "sha512-9JG19DDNjIpvlI1b8VYIjvCaulftd6/J09/Rj2A8KgREv6EtCDkus8jCsNw7Jacj2HIWg23kxJY3XKcJ9pkiug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-darwin-x64": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-darwin-x64/-/rust-darwin-x64-2.16.3.tgz", + "integrity": "sha512-9mG6M6SGYiCO9IfD85Bixg5udXoy2IQHCRdBoQmpNej5+FrDW1a3FeDwDzqOFtl9b7axpzPEVb7zp+WK36Rn4w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-arm-gnueabihf": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-arm-gnueabihf/-/rust-linux-arm-gnueabihf-2.16.3.tgz", + "integrity": "sha512-zSA1Dz5JWS28DkEMjEQNmf8qk55dR6rcKtwrw5CMg3Ndt30ugrGtRechsqEpXSYYxcDY1kmZ779LwiTUdkdCrQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-arm64-gnu": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-arm64-gnu/-/rust-linux-arm64-gnu-2.16.3.tgz", + "integrity": "sha512-PvjO0U6qM0JjRCH2eKi3JNKgBVWDBP3VrMEUXJJM8K37ylfLTozK0f7oK2M03voCS1WjKrduRGjJNk8EZrBPow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-arm64-musl": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-arm64-musl/-/rust-linux-arm64-musl-2.16.3.tgz", + "integrity": "sha512-a4TZB9/Y/y8DQ55XZXh9bNb5yIC9CAoK2YK8g3OytauC8OrHGtIIVlF+E1UCn/FPBFr2dobYOeih/InvLKITpQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-x64-gnu": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-x64-gnu/-/rust-linux-x64-gnu-2.16.3.tgz", + "integrity": "sha512-6/a/5jDcVwE0xpLSLGI9T2pclgnad0jVFRH/4Gm9yQ5fl2gpYghjg3fcCNeSjJ/aBNFKlOeKLlp/oBSlTtlkoQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-x64-musl": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-x64-musl/-/rust-linux-x64-musl-2.16.3.tgz", + "integrity": "sha512-gTUlFvJBLR3UxNjGs076wVuFZyx+X6G6opJzBFaSG9XqLhLo+VrpqHpjCx+SCwSufDLTVq8rWJbwpvbe2EhRJg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-win32-x64-msvc": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/rust-win32-x64-msvc/-/rust-win32-x64-msvc-2.16.3.tgz", + "integrity": "sha512-/kyr5CL4XFJpMj9CvW8K1NNNqkzyOhxc7ibXhykiPyPiGOwO/ZbqnfDhqVx3JMSjOASeW1e6UlGNjnfTPvFkGQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" @@ -1056,23 +1220,23 @@ } }, "node_modules/@parcel/transformer-babel": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.13.3.tgz", - "integrity": "sha512-ikzK9f5WTFrdQsPitQgjCPH6HmVU8AQPRemIJ2BndYhtodn5PQut5cnSvTrqax8RjYvheEKCQk/Zb/uR7qgS3g==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.16.3.tgz", + "integrity": "sha512-Jsusa2xWlgrmBYmvuC70/SIvcNdYZj3NyQhCxTOARV2scksSKH8iSvNsMKepYiZl6nHRNOmnGOShz9xJqNpUDw==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.3", - "browserslist": "^4.6.6", - "json5": "^2.2.0", + "@parcel/utils": "2.16.3", + "browserslist": "^4.24.5", + "json5": "^2.2.3", "nullthrows": "^1.1.1", - "semver": "^7.5.2" + "semver": "^7.7.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1080,22 +1244,22 @@ } }, "node_modules/@parcel/transformer-css": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.13.3.tgz", - "integrity": "sha512-zbrNURGph6JeVADbGydyZ7lcu/izj41kDxQ9xw4RPRW/3rofQiTU0OTREi+uBWiMENQySXVivEdzHA9cA+aLAA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.16.3.tgz", + "integrity": "sha512-RKGfjvQQVYpd27Ag7QHzBEjqfN/hj6Yf6IlbUdOp06bo+XOXQXe5/n2ulJ1EL9ZjyDOtXbB94A7QzSQmtFGEow==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.3", - "browserslist": "^4.6.6", - "lightningcss": "^1.22.1", + "@parcel/utils": "2.16.3", + "browserslist": "^4.24.5", + "lightningcss": "^1.30.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1103,103 +1267,102 @@ } }, "node_modules/@parcel/transformer-html": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.13.3.tgz", - "integrity": "sha512-Yf74FkL9RCCB4+hxQRVMNQThH9+fZ5w0NLiQPpWUOcgDEEyxTi4FWPQgEBsKl/XK2ehdydbQB9fBgPQLuQxwPg==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.16.3.tgz", + "integrity": "sha512-j/f+fR3hS9g3Kw4mySyF2sN4mp0t6amq3x52SAptpa4C7w8XVWproc+3ZLgjzi91OPqNeQAQUNQMy86AfuMuEw==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/rust": "2.13.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.12.1", - "posthtml-render": "^3.0.0", - "semver": "^7.5.2", - "srcset": "4" + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/transformer-html/node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@parcel/transformer-image": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.13.3.tgz", - "integrity": "sha512-wL1CXyeFAqbp2wcEq/JD3a/tbAyVIDMTC6laQxlIwnVV7dsENhK1qRuJZuoBdixESeUpFQSmmQvDIhcfT/cUUg==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.16.3.tgz", + "integrity": "sha512-q8BhaGSaGtIP1JPxDpRoRxs5Oa17sVR4c0kyPyxwP0QoihKth1eQElbINx+7Ikbt7LoGucPUKEsnxrDzkUt8og==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", - "@parcel/workers": "2.13.3", + "@parcel/plugin": "2.16.3", + "@parcel/utils": "2.16.3", + "@parcel/workers": "2.16.3", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, "node_modules/@parcel/transformer-js": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.13.3.tgz", - "integrity": "sha512-KqfNGn1IHzDoN2aPqt4nDksgb50Xzcny777C7A7hjlQ3cmkjyJrixYjzzsPaPSGJ+kJpknh3KE8unkQ9mhFvRQ==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.16.3.tgz", + "integrity": "sha512-k83yElHagwDRYfza7BrADdf9NRGpizX3zOfctfEsQWh9mEZLNJENivP6ZLB9Aje9H0GaaSTiYU8VwOWLXbLgOw==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/rust": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.3", - "@parcel/workers": "2.13.3", + "@parcel/utils": "2.16.3", + "@parcel/workers": "2.16.3", "@swc/helpers": "^0.5.0", - "browserslist": "^4.6.6", + "browserslist": "^4.24.5", "nullthrows": "^1.1.1", "regenerator-runtime": "^0.14.1", - "semver": "^7.5.2" + "semver": "^7.7.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, "node_modules/@parcel/transformer-json": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.13.3.tgz", - "integrity": "sha512-rrq0ab6J0w9ePtsxi0kAvpCmrUYXXAx1Z5PATZakv89rSYbHBKEdXxyCoKFui/UPVCUEGVs5r0iOFepdHpIyeA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.16.3.tgz", + "integrity": "sha512-iT4IKGT95+S/7RBK1MUY/KxD8ad9FUlElF+w40NBLv4lm012wkYogFRhEHnyElPOByZL1aJ8GaVOGbZL9yuZfg==", + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.3", + "json5": "^2.2.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-node": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-node/-/transformer-node-2.16.3.tgz", + "integrity": "sha512-FIbSphLisxmzwqE43ALsGeSPSYBA3ZE6xmhAIgwoFdeI6VfTSkCZnGhSqUhP3m9R55IuWm/+NP6BlePWADmkwg==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "json5": "^2.2.0" + "@parcel/plugin": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1207,23 +1370,23 @@ } }, "node_modules/@parcel/transformer-postcss": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.13.3.tgz", - "integrity": "sha512-AIiWpU0QSFBrPcYIqAnhqB8RGE6yHFznnxztfg1t2zMSOnK3xoU6xqYKv8H/MduShGGrC3qVOeDfM8MUwzL3cw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.16.3.tgz", + "integrity": "sha512-OMjU17OwPhPBK2LIzqQozBezolqI8jPgoT+CmoOkKr1GlgWMzCcHFpW6KQZxVVR+vI0lUEJp+RZc9MzhNndv4A==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/rust": "2.13.3", - "@parcel/utils": "2.13.3", - "clone": "^2.1.1", + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3", + "@parcel/utils": "2.16.3", + "clone": "^2.1.2", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", - "semver": "^7.5.2" + "semver": "^7.7.1" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1231,22 +1394,17 @@ } }, "node_modules/@parcel/transformer-posthtml": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.13.3.tgz", - "integrity": "sha512-5GSLyccpHASwFAu3uJ83gDIBSvfsGdVmhJvy0Vxe+K1Fklk2ibhvvtUHMhB7mg6SPHC+R9jsNc3ZqY04ZLeGjw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.16.3.tgz", + "integrity": "sha512-y3iuM+yp8nPbt8sbQayPGR0saVGR6uj0aYr7hWoS0oUe9vZsH1mP3BTP6L6ABe/dZKU3QcFmMQgLwH6WC/apAA==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.12.1", - "posthtml-render": "^3.0.0", - "semver": "^7.5.2" + "@parcel/plugin": "2.16.3", + "@parcel/utils": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1254,16 +1412,16 @@ } }, "node_modules/@parcel/transformer-raw": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.13.3.tgz", - "integrity": "sha512-BFsAbdQF0l8/Pdb7dSLJeYcd8jgwvAUbHgMink2MNXJuRUvDl19Gns8jVokU+uraFHulJMBj40+K/RTd33in4g==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.16.3.tgz", + "integrity": "sha512-Lha1+z75QbNAsxMAffp5K+ykGXEYSNOFUqI/8XtetYfuqIvS5s/OBkwsg8MWbjtPkbKo1F3EwNBaIAagw/BbIg==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3" + "@parcel/plugin": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1271,18 +1429,19 @@ } }, "node_modules/@parcel/transformer-react-refresh-wrap": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.13.3.tgz", - "integrity": "sha512-mOof4cRyxsZRdg8kkWaFtaX98mHpxUhcGPU+nF9RQVa9q737ItxrorsPNR9hpZAyE2TtFNflNW7RoYsgvlLw8w==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.16.3.tgz", + "integrity": "sha512-8rzO5iKF5bYrPUnbw4At0H7AwE+UHkuNNo385JL0VzXggrA0VsXsjjJwXVyhSeMvEbo2ioo/+nYUlazTQBABwA==", "license": "MIT", "dependencies": { - "@parcel/plugin": "2.13.3", - "@parcel/utils": "2.13.3", - "react-refresh": ">=0.9 <=0.14" + "@parcel/error-overlay": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/utils": "2.16.3", + "react-refresh": "^0.16.0" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1290,23 +1449,18 @@ } }, "node_modules/@parcel/transformer-svg": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.13.3.tgz", - "integrity": "sha512-9jm7ZF4KHIrGLWlw/SFUz5KKJ20nxHvjFAmzde34R9Wu+F1BOjLZxae7w4ZRwvIc+UVOUcBBQFmhSVwVDZg6Dw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.16.3.tgz", + "integrity": "sha512-fDpUWSBZxt/R5pZUNd4gV/BX0c7B074lw/wmqwowjcwQU/QxhzPJBDlAsyTvOJ75PeJiQf/qFtnIK5bNwMoasA==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/plugin": "2.13.3", - "@parcel/rust": "2.13.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.12.1", - "posthtml-render": "^3.0.0", - "semver": "^7.5.2" + "@parcel/diagnostic": "2.16.3", + "@parcel/plugin": "2.16.3", + "@parcel/rust": "2.16.3" }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.3" + "parcel": "^2.16.3" }, "funding": { "type": "opencollective", @@ -1314,38 +1468,38 @@ } }, "node_modules/@parcel/types": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.13.3.tgz", - "integrity": "sha512-+RpFHxx8fy8/dpuehHUw/ja9PRExC3wJoIlIIF42E7SLu2SvlTHtKm6EfICZzxCXNEBzjoDbamCRcN0nmTPlhw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.16.3.tgz", + "integrity": "sha512-aIJJFMif/A7u86UEt3sJPZ/F7suQW56ugiCp2Y2mYTPHpTJbI2Knk9yO4fkWHNO1BrH6a/VUWh7bWIOsQtzL1Q==", "license": "MIT", "dependencies": { - "@parcel/types-internal": "2.13.3", - "@parcel/workers": "2.13.3" + "@parcel/types-internal": "2.16.3", + "@parcel/workers": "2.16.3" } }, "node_modules/@parcel/types-internal": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/types-internal/-/types-internal-2.13.3.tgz", - "integrity": "sha512-Lhx0n+9RCp+Ipktf/I+CLm3zE9Iq9NtDd8b2Vr5lVWyoT8AbzBKIHIpTbhLS4kjZ80L3I6o93OYjqAaIjsqoZw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/types-internal/-/types-internal-2.16.3.tgz", + "integrity": "sha512-zi2GKdJHpNeW9sspTBfM68A9lekEztTWU8Dxs1ouPk90lfA0tfrMznAvkD5iJdKsM6usbgcqjjI8s+Ow8OrsBg==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/feature-flags": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/feature-flags": "2.16.3", "@parcel/source-map": "^2.1.1", - "utility-types": "^3.10.0" + "utility-types": "^3.11.0" } }, "node_modules/@parcel/utils": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.13.3.tgz", - "integrity": "sha512-yxY9xw2wOUlJaScOXYZmMGoZ4Ck4Kqj+p6Koe5kLkkWM1j98Q0Dj2tf/mNvZi4yrdnlm+dclCwNRnuE8Q9D+pw==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.16.3.tgz", + "integrity": "sha512-g/yqVWSdZqPvTiS96dEK9MEl7q6w31u+luD5VGt6f9w6PQCpuVajhhDNuXf9uzDU/dL4sSZPKUhLteVZDqryHA==", "license": "MIT", "dependencies": { - "@parcel/codeframe": "2.13.3", - "@parcel/diagnostic": "2.13.3", - "@parcel/logger": "2.13.3", - "@parcel/markdown-ansi": "2.13.3", - "@parcel/rust": "2.13.3", + "@parcel/codeframe": "2.16.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/logger": "2.16.3", + "@parcel/markdown-ansi": "2.16.3", + "@parcel/rust": "2.16.3", "@parcel/source-map": "^2.1.1", "chalk": "^4.1.2", "nullthrows": "^1.1.1" @@ -1359,16 +1513,16 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.4.tgz", + "integrity": "sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "detect-libc": "^1.0.3", + "detect-libc": "^2.0.3", "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">= 10.0.0" @@ -1378,25 +1532,25 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" + "@parcel/watcher-android-arm64": "2.5.4", + "@parcel/watcher-darwin-arm64": "2.5.4", + "@parcel/watcher-darwin-x64": "2.5.4", + "@parcel/watcher-freebsd-x64": "2.5.4", + "@parcel/watcher-linux-arm-glibc": "2.5.4", + "@parcel/watcher-linux-arm-musl": "2.5.4", + "@parcel/watcher-linux-arm64-glibc": "2.5.4", + "@parcel/watcher-linux-arm64-musl": "2.5.4", + "@parcel/watcher-linux-x64-glibc": "2.5.4", + "@parcel/watcher-linux-x64-musl": "2.5.4", + "@parcel/watcher-win32-arm64": "2.5.4", + "@parcel/watcher-win32-ia32": "2.5.4", + "@parcel/watcher-win32-x64": "2.5.4" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.4.tgz", + "integrity": "sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==", "cpu": [ "arm64" ], @@ -1414,9 +1568,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.4.tgz", + "integrity": "sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==", "cpu": [ "arm64" ], @@ -1434,9 +1588,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.4.tgz", + "integrity": "sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==", "cpu": [ "x64" ], @@ -1454,9 +1608,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.4.tgz", + "integrity": "sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==", "cpu": [ "x64" ], @@ -1474,9 +1628,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.4.tgz", + "integrity": "sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==", "cpu": [ "arm" ], @@ -1494,9 +1648,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.4.tgz", + "integrity": "sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==", "cpu": [ "arm" ], @@ -1514,9 +1668,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.4.tgz", + "integrity": "sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==", "cpu": [ "arm64" ], @@ -1534,9 +1688,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.4.tgz", + "integrity": "sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==", "cpu": [ "arm64" ], @@ -1554,9 +1708,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.4.tgz", + "integrity": "sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==", "cpu": [ "x64" ], @@ -1574,9 +1728,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.4.tgz", + "integrity": "sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==", "cpu": [ "x64" ], @@ -1594,9 +1748,9 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.4.tgz", + "integrity": "sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==", "cpu": [ "arm64" ], @@ -1614,9 +1768,9 @@ } }, "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.4.tgz", + "integrity": "sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==", "cpu": [ "ia32" ], @@ -1634,9 +1788,9 @@ } }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.4.tgz", + "integrity": "sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==", "cpu": [ "x64" ], @@ -1653,17 +1807,26 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/@parcel/workers": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.13.3.tgz", - "integrity": "sha512-oAHmdniWTRwwwsKbcF4t3VjOtKN+/W17Wj5laiYB+HLkfsjGTfIQPj3sdXmrlBAGpI4omIcvR70PHHXnfdTfwA==", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.16.3.tgz", + "integrity": "sha512-SxIXRnrlQFhw377wxWC5WIl1FL1Y9IedhUtuc7j3uac3tlbCQJJ+3rFr5/BDUknJbTktvVsPakE98fH7TIJyyw==", "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.13.3", - "@parcel/logger": "2.13.3", - "@parcel/profiler": "2.13.3", - "@parcel/types-internal": "2.13.3", - "@parcel/utils": "2.13.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/logger": "2.16.3", + "@parcel/profiler": "2.16.3", + "@parcel/types-internal": "2.16.3", + "@parcel/utils": "2.16.3", "nullthrows": "^1.1.1" }, "engines": { @@ -1674,13 +1837,13 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.13.3" + "@parcel/core": "^2.16.3" } }, "node_modules/@remix-run/router": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.22.0.tgz", - "integrity": "sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==", + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz", + "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -1693,9 +1856,9 @@ "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)" }, "node_modules/@rsuite/icons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@rsuite/icons/-/icons-1.3.0.tgz", - "integrity": "sha512-6yv2CQjtQGgSCkMw1wlVlmPFEKBTU9AFFFxPJbAI2V4kS9lZEHqhY+jmVSAdbC7rmawO5r2ROzGMJpvkpRCnUw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rsuite/icons/-/icons-1.4.0.tgz", + "integrity": "sha512-NUOKX/KNO8Qy0nCJ4XzHKRdp0ovUM7zZhvuelteNkdhwwtmc9R0Ap4TlW2q/74sYa1aVXjH1RF+d2EGRD8EOEA==", "license": "MIT", "dependencies": { "@rsuite/icon-font": "^4.1.0", @@ -1707,14 +1870,14 @@ } }, "node_modules/@swc/core": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.15.tgz", - "integrity": "sha512-/iFeQuNaGdK7mfJbQcObhAhsMqLT7qgMYl7jX2GEIO+VDTejESpzAyKwaMeYXExN8D6e5BRHBCe7M5YlsuzjDA==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.8.tgz", + "integrity": "sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.17" + "@swc/types": "^0.1.25" }, "engines": { "node": ">=10" @@ -1724,19 +1887,19 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.10.15", - "@swc/core-darwin-x64": "1.10.15", - "@swc/core-linux-arm-gnueabihf": "1.10.15", - "@swc/core-linux-arm64-gnu": "1.10.15", - "@swc/core-linux-arm64-musl": "1.10.15", - "@swc/core-linux-x64-gnu": "1.10.15", - "@swc/core-linux-x64-musl": "1.10.15", - "@swc/core-win32-arm64-msvc": "1.10.15", - "@swc/core-win32-ia32-msvc": "1.10.15", - "@swc/core-win32-x64-msvc": "1.10.15" + "@swc/core-darwin-arm64": "1.15.8", + "@swc/core-darwin-x64": "1.15.8", + "@swc/core-linux-arm-gnueabihf": "1.15.8", + "@swc/core-linux-arm64-gnu": "1.15.8", + "@swc/core-linux-arm64-musl": "1.15.8", + "@swc/core-linux-x64-gnu": "1.15.8", + "@swc/core-linux-x64-musl": "1.15.8", + "@swc/core-win32-arm64-msvc": "1.15.8", + "@swc/core-win32-ia32-msvc": "1.15.8", + "@swc/core-win32-x64-msvc": "1.15.8" }, "peerDependencies": { - "@swc/helpers": "*" + "@swc/helpers": ">=0.5.17" }, "peerDependenciesMeta": { "@swc/helpers": { @@ -1745,9 +1908,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.15.tgz", - "integrity": "sha512-zFdZ6/yHqMCPk7OhLFqHy/MQ1EqJhcZMpNHd1gXYT7VRU3FaqvvKETrUlG3VYl65McPC7AhMRfXPyJ0JO/jARQ==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.8.tgz", + "integrity": "sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg==", "cpu": [ "arm64" ], @@ -1761,9 +1924,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.15.tgz", - "integrity": "sha512-8g4yiQwbr8fxOOjKXdot0dEkE5zgE8uNZudLy/ZyAhiwiZ8pbJ8/wVrDOu6dqbX7FBXAoDnvZ7fwN1jk4C8jdA==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.8.tgz", + "integrity": "sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ==", "cpu": [ "x64" ], @@ -1777,9 +1940,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.15.tgz", - "integrity": "sha512-rl+eVOltl2+7WXOnvmWBpMgh6aO13G5x0U0g8hjwlmD6ku3Y9iRcThpOhm7IytMEarUp5pQxItNoPq+VUGjVHg==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.8.tgz", + "integrity": "sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg==", "cpu": [ "arm" ], @@ -1793,9 +1956,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.15.tgz", - "integrity": "sha512-qxWEQeyAJMWJqjaN4hi58WMpPdt3Tn0biSK9CYRegQtvZWCbewr6v2agtSu5AZ2rudeH6OfCWAMDQQeSgn6PJQ==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.8.tgz", + "integrity": "sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q==", "cpu": [ "arm64" ], @@ -1809,9 +1972,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.15.tgz", - "integrity": "sha512-QcELd9/+HjZx0WCxRrKcyKGWTiQ0485kFb5w8waxcSNd0d9Lgk4EFfWWVyvIb5gIHpDQmhrgzI/yRaWQX4YSZQ==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.8.tgz", + "integrity": "sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==", "cpu": [ "arm64" ], @@ -1825,9 +1988,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.15.tgz", - "integrity": "sha512-S1+ZEEn3+a/MiMeQqQypbwTGoBG8/sPoCvpNbk+uValyygT+jSn3U0xVr45FbukpmMB+NhBMqfedMLqKA0QnJA==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.8.tgz", + "integrity": "sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==", "cpu": [ "x64" ], @@ -1841,9 +2004,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.15.tgz", - "integrity": "sha512-qW+H9g/2zTJ4jP7NDw4VAALY0ZlNEKzYsEoSj/HKi7k3tYEHjMzsxjfsY9I8WZCft23bBdV3RTCPoxCshaj1CQ==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.8.tgz", + "integrity": "sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==", "cpu": [ "x64" ], @@ -1857,9 +2020,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.15.tgz", - "integrity": "sha512-AhRB11aA6LxjIqut+mg7qsu/7soQDmbK6MKR9nP3hgBszpqtXbRba58lr24xIbBCMr+dpo6kgEapWt+t5Po6Zg==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.8.tgz", + "integrity": "sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==", "cpu": [ "arm64" ], @@ -1873,9 +2036,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.15.tgz", - "integrity": "sha512-UGdh430TQwbDn6KjgvRTg1fO022sbQ4yCCHUev0+5B8uoBwi9a89qAz3emy2m56C8TXxUoihW9Y9OMfaRwPXUw==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.8.tgz", + "integrity": "sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ==", "cpu": [ "ia32" ], @@ -1889,9 +2052,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.10.15", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.15.tgz", - "integrity": "sha512-XJzBCqO1m929qbJsOG7FZXQWX26TnEoMctS3QjuCoyBmkHxxQmZsy78KjMes1aomTcKHCyFYgrRGWgVmk7tT4Q==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.8.tgz", + "integrity": "sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA==", "cpu": [ "x64" ], @@ -1911,50 +2074,50 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.18.tgz", + "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" } }, "node_modules/@swc/types": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", - "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" } }, "node_modules/@types/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.18", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", - "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "version": "18.3.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", "license": "MIT", "peer": true, "dependencies": { "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", - "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1998,12 +2161,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2011,20 +2168,20 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" @@ -2051,22 +2208,19 @@ ], "license": "MIT" }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" + "node_modules/baseline-browser-mapping": { + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", + "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "funding": [ { "type": "opencollective", @@ -2084,10 +2238,11 @@ "license": "MIT", "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -2121,19 +2276,23 @@ "ieee754": "^1.2.1" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001762", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", - "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "version": "1.0.30001764", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", + "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", "funding": [ { "type": "opencollective", @@ -2229,58 +2388,26 @@ "node": ">=18" } }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", "license": "MIT" }, "node_modules/delayed-stream": { @@ -2313,122 +2440,96 @@ "@babel/runtime": "^7.20.0" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "url": "https://dotenvx.com" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "license": "BSD-2-Clause", "dependencies": { - "domelementtype": "^2.3.0" + "dotenv": "^16.4.5" }, "engines": { - "node": ">= 4" + "node": ">=12" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://dotenvx.com" } }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "node": ">= 0.4" } }, "node_modules/electron-to-chromium": { - "version": "1.5.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.96.tgz", - "integrity": "sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "license": "ISC" }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/escalade": { @@ -2440,22 +2541,10 @@ "node": ">=6" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -2473,19 +2562,54 @@ } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-port": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", @@ -2495,6 +2619,19 @@ "node": ">=6" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -2510,6 +2647,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2519,70 +2668,43 @@ "node": ">=8" } }, - "node_modules/htmlnano": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.1.1.tgz", - "integrity": "sha512-kAERyg/LuNZYmdqgCdYvugyLWNFAm8MWXpQMz1pLpetmCbFwoMxvkSoaAMlFrOC4OKTWI4KlZGT/RsNxg4ghOw==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { - "cosmiconfig": "^9.0.0", - "posthtml": "^0.16.5", - "timsort": "^0.3.0" + "has-symbols": "^1.0.3" }, - "peerDependencies": { - "cssnano": "^7.0.0", - "postcss": "^8.3.11", - "purgecss": "^6.0.0", - "relateurl": "^0.2.7", - "srcset": "5.0.1", - "svgo": "^3.0.2", - "terser": "^5.10.0", - "uncss": "^0.17.3" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "cssnano": { - "optional": true - }, - "postcss": { - "optional": true - }, - "purgecss": { - "optional": true - }, - "relateurl": { - "optional": true - }, - "srcset": { - "optional": true - }, - "svgo": { - "optional": true - }, - "terser": { - "optional": true - }, - "uncss": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/ieee754": { @@ -2606,28 +2728,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2649,45 +2749,12 @@ "node": ">=0.10.0" } }, - "node_modules/is-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", - "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", - "license": "ISC" - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -2710,12 +2777,12 @@ } }, "node_modules/lightningcss": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz", - "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", "license": "MPL-2.0", "dependencies": { - "detect-libc": "^1.0.3" + "detect-libc": "^2.0.3" }, "engines": { "node": ">= 12.0.0" @@ -2725,22 +2792,43 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.29.1", - "lightningcss-darwin-x64": "1.29.1", - "lightningcss-freebsd-x64": "1.29.1", - "lightningcss-linux-arm-gnueabihf": "1.29.1", - "lightningcss-linux-arm64-gnu": "1.29.1", - "lightningcss-linux-arm64-musl": "1.29.1", - "lightningcss-linux-x64-gnu": "1.29.1", - "lightningcss-linux-x64-musl": "1.29.1", - "lightningcss-win32-arm64-msvc": "1.29.1", - "lightningcss-win32-x64-msvc": "1.29.1" + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.1.tgz", - "integrity": "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", "cpu": [ "arm64" ], @@ -2758,9 +2846,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.1.tgz", - "integrity": "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", "cpu": [ "x64" ], @@ -2778,9 +2866,9 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.1.tgz", - "integrity": "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", "cpu": [ "x64" ], @@ -2798,9 +2886,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.1.tgz", - "integrity": "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", "cpu": [ "arm" ], @@ -2818,9 +2906,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.1.tgz", - "integrity": "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", "cpu": [ "arm64" ], @@ -2838,9 +2926,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.1.tgz", - "integrity": "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", "cpu": [ "arm64" ], @@ -2858,9 +2946,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz", - "integrity": "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", "cpu": [ "x64" ], @@ -2878,9 +2966,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz", - "integrity": "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", "cpu": [ "x64" ], @@ -2898,9 +2986,9 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.1.tgz", - "integrity": "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", "cpu": [ "arm64" ], @@ -2918,9 +3006,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.1.tgz", - "integrity": "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", "cpu": [ "x64" ], @@ -2937,11 +3025,14 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } }, "node_modules/lmdb": { "version": "2.8.5", @@ -2992,25 +3083,21 @@ "loose-envify": "cli.js" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -3033,9 +3120,9 @@ } }, "node_modules/msgpackr": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz", - "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==", + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.8.tgz", + "integrity": "sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==", "license": "MIT", "optionalDependencies": { "msgpackr-extract": "^3.0.2" @@ -3064,9 +3151,9 @@ } }, "node_modules/msgpackr-extract/node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "optional": true, "engines": { @@ -3109,18 +3196,18 @@ } }, "node_modules/node-gyp-build-optional-packages/node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "engines": { "node": ">=8" } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, "node_modules/nullthrows": { @@ -3129,19 +3216,10 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", "license": "MIT" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/oidc-client-ts": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/oidc-client-ts/-/oidc-client-ts-3.1.0.tgz", - "integrity": "sha512-IDopEXjiwjkmJLYZo6BTlvwOtnlSniWZkKZoXforC/oLZHC9wkIxd25Kwtmo5yKFMMVcsp3JY6bhcNJqdYk8+g==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/oidc-client-ts/-/oidc-client-ts-3.4.1.tgz", + "integrity": "sha512-jNdst/U28Iasukx/L5MP6b274Vr7ftQs6qAhPBCvz6Wt5rPCA+Q/tUmCzfCHHWweWw5szeMy2Gfrm1rITwUKrw==", "license": "Apache-2.0", "peer": true, "dependencies": { @@ -3152,29 +3230,29 @@ } }, "node_modules/ordered-binary": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.3.tgz", - "integrity": "sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", "license": "MIT" }, "node_modules/parcel": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.13.3.tgz", - "integrity": "sha512-8GrC8C7J8mwRpAlk7EJ7lwdFTbCN+dcXH2gy5AsEs9pLfzo9wvxOTx6W0fzSlvCOvZOita+8GdfYlGfEt0tRgA==", - "license": "MIT", - "dependencies": { - "@parcel/config-default": "2.13.3", - "@parcel/core": "2.13.3", - "@parcel/diagnostic": "2.13.3", - "@parcel/events": "2.13.3", - "@parcel/feature-flags": "2.13.3", - "@parcel/fs": "2.13.3", - "@parcel/logger": "2.13.3", - "@parcel/package-manager": "2.13.3", - "@parcel/reporter-cli": "2.13.3", - "@parcel/reporter-dev-server": "2.13.3", - "@parcel/reporter-tracer": "2.13.3", - "@parcel/utils": "2.13.3", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.16.3.tgz", + "integrity": "sha512-N9jnwcTeVEaRjjJCCHmYfPCvjjJeHZuuO50qL4CCNcQX4RjwPuOaDft7hvTT2W8PIb4XhhZKDYB1lstZhXLJRQ==", + "license": "MIT", + "dependencies": { + "@parcel/config-default": "2.16.3", + "@parcel/core": "2.16.3", + "@parcel/diagnostic": "2.16.3", + "@parcel/events": "2.16.3", + "@parcel/feature-flags": "2.16.3", + "@parcel/fs": "2.16.3", + "@parcel/logger": "2.16.3", + "@parcel/package-manager": "2.16.3", + "@parcel/reporter-cli": "2.16.3", + "@parcel/reporter-dev-server": "2.16.3", + "@parcel/reporter-tracer": "2.16.3", + "@parcel/utils": "2.16.3", "chalk": "^4.1.2", "commander": "^12.1.0", "get-port": "^4.2.0" @@ -3190,36 +3268,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3227,12 +3275,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -3244,138 +3292,6 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "license": "MIT" }, - "node_modules/posthtml": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", - "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", - "license": "MIT", - "dependencies": { - "posthtml-parser": "^0.11.0", - "posthtml-render": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/posthtml-parser": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.12.1.tgz", - "integrity": "sha512-rYFmsDLfYm+4Ts2Oh4DCDSZPtdC1BLnRXAobypVzX9alj28KGl65dIFtgDY9zB57D0TC4Qxqrawuq/2et1P0GA==", - "license": "MIT", - "dependencies": { - "htmlparser2": "^9.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/posthtml-render": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", - "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", - "license": "MIT", - "dependencies": { - "is-json": "^2.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/posthtml/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "node_modules/posthtml/node_modules/posthtml-parser": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", - "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", - "license": "MIT", - "dependencies": { - "htmlparser2": "^7.1.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -3386,18 +3302,6 @@ "node": ">= 0.6.0" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -3431,47 +3335,35 @@ "react": "^18.3.1" } }, - "node_modules/react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", - "license": "MIT" - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/react-oidc-context": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-oidc-context/-/react-oidc-context-3.2.0.tgz", - "integrity": "sha512-ZLaCRLWV84Cn9pFdsatmblqxLMv0np69GWVXq9RWGqAjppdOGXNIbIxWMByIio0oSCVUwdeqwYRnJme0tjqd8A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/react-oidc-context/-/react-oidc-context-3.3.0.tgz", + "integrity": "sha512-302T/ma4AOVAxrHdYctDSKXjCq9KNHT564XEO2yOPxRfxEP58xa4nz+GQinNl8x7CnEXECSM5JEjQJk3Cr5BvA==", "license": "MIT", "engines": { "node": ">=18" }, "peerDependencies": { "oidc-client-ts": "^3.1.0", - "react": ">=16.8.0" + "react": ">=16.14.0" } }, "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.16.0.tgz", + "integrity": "sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-router": { - "version": "6.29.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.29.0.tgz", - "integrity": "sha512-DXZJoE0q+KyeVw75Ck6GkPxFak63C4fGqZGNijnWgzB/HzSP1ZfTlBj5COaGWwhrMQ/R8bXiq5Ooy4KG+ReyjQ==", + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz", + "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.22.0" + "@remix-run/router": "1.23.2" }, "engines": { "node": ">=14.0.0" @@ -3481,13 +3373,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.29.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.29.0.tgz", - "integrity": "sha512-pkEbJPATRJ2iotK+wUwHfy0xs2T59YPEN8BQxVCPeBZvK7kfPESRc/nyxzdcxR17hXgUPYx2whMwl+eo9cUdnQ==", + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", + "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.22.0", - "react-router": "6.29.0" + "@remix-run/router": "1.23.2", + "react-router": "6.30.3" }, "engines": { "node": ">=14.0.0" @@ -3497,6 +3389,23 @@ "react-dom": ">=16.8" } }, + "node_modules/react-textarea-autosize": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", + "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/react-use-set": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/react-use-set/-/react-use-set-1.0.0.tgz", @@ -3529,68 +3438,49 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/rsuite": { - "version": "5.77.1", - "resolved": "https://registry.npmjs.org/rsuite/-/rsuite-5.77.1.tgz", - "integrity": "sha512-4TfxtGgq0CXyeo89YnMrON4Rm4Gi+bj+1FTSdVXidhrLZbBrRNZzsPYiI+2iGwda5/rqP9Bzufc12aKMgoxS2g==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rsuite/-/rsuite-6.1.1.tgz", + "integrity": "sha512-lbDhtPT01ljjWggj26QKHUE57aONCV88x1lk0xwAcB7wWOgjTlmUDRQN5CTW4pRXh48UFNC8s3Lq6C76jp3fjw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", + "@babel/runtime": "^7.26.0", "@juggle/resize-observer": "^3.4.0", - "@rsuite/icons": "^1.3.0", + "@rsuite/icons": "^1.4.0", "@types/lodash": "^4.17.15", - "@types/prop-types": "^15.7.5", - "@types/react-window": "^1.8.5", + "@types/react-window": "^1.8.8", "classnames": "^2.3.1", - "date-fns": "^2.29.3", + "date-fns": "^4.1.0", "dom-lib": "^3.3.1", "lodash": "^4.17.21", - "prop-types": "^15.8.1", + "react-textarea-autosize": "^8.5.9", "react-use-set": "^1.0.0", - "react-window": "^1.8.8", - "rsuite-table": "^5.19.1", - "schema-typed": "^2.3.0" + "react-window": "^1.8.11", + "rsuite-table": "^5.19.2", + "schema-typed": "^2.4.2" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "react": ">=18", + "react-dom": ">=18" } }, "node_modules/rsuite-table": { - "version": "5.19.1", - "resolved": "https://registry.npmjs.org/rsuite-table/-/rsuite-table-5.19.1.tgz", - "integrity": "sha512-PsG+z3GfwywDvPVEjZYVZcel0M6zOBAx2HKTgYLfct/yAzXJWPgW/eVuv9+8KmkcKzAh03UVYQdB88Gp7+RlGg==", + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/rsuite-table/-/rsuite-table-5.19.2.tgz", + "integrity": "sha512-0mnAuvTlDjNGo3FTWqIMdlCP2+gx8NJiMYJnGvOoYMt/kcxRsWzayQRrywc2cvnHTEOjMIQFi2uHYfie0irAHg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "@juggle/resize-observer": "^3.3.1", - "@rsuite/icons": "^1.0.0", "classnames": "^2.3.1", "dom-lib": "^3.3.1", - "lodash": "^4.17.21", - "react-is": "^17.0.2" + "lodash": "^4.17.21" }, "peerDependencies": { - "prop-types": "^15.7.2", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, - "node_modules/rsuite-table/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "license": "MIT" - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -3621,18 +3511,18 @@ } }, "node_modules/schema-typed": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/schema-typed/-/schema-typed-2.3.0.tgz", - "integrity": "sha512-GwUKUxj2h2zPpighJfFOJD94/LDoaCUGQFWg1rJIa59VjME93u8txvaW28oScVvb7cboeKHh05lScTyGAtifeA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/schema-typed/-/schema-typed-2.4.2.tgz", + "integrity": "sha512-4eYZiheiPps+I7JEKrhm/S8OIPncXqY0lKQbvI/Agn9QMJUQ3cgfFZ2spy4Ta9Qr3xLYB3/qj4wGbsNcVwEO/w==", "license": "MIT", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3665,24 +3555,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -3702,9 +3574,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -3731,6 +3603,51 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/use-composed-ref": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", + "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "license": "MIT", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/utility-types": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", diff --git a/dashboard/package.json b/dashboard/package.json index f89c3c8..1d8f357 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -25,7 +25,7 @@ "react-dom": "^18.2.0", "react-oidc-context": "^3.0.0-beta.0", "react-router-dom": "^6.15.0", - "rsuite": "^5.39.0", + "rsuite": "^6.1.1", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0" }, diff --git a/dashboard/src/components/filter-slider.tsx b/dashboard/src/components/filter-slider.tsx index 8e61458..bfae01e 100644 --- a/dashboard/src/components/filter-slider.tsx +++ b/dashboard/src/components/filter-slider.tsx @@ -1,10 +1,7 @@ import { CSSProperties, useEffect, useMemo, useRef, useState } from "react"; import * as s from "./filter-slider.module.css"; - -type FilterValue = string | null; - -export type FilterOption = { label: string; value: FilterValue; color: string }; +import {FilterOption, FilterValue} from "./tasks"; type DragState = { startX: number; moved: boolean }; diff --git a/dashboard/src/components/menu.tsx b/dashboard/src/components/menu.tsx index 9fdda50..c2f5830 100644 --- a/dashboard/src/components/menu.tsx +++ b/dashboard/src/components/menu.tsx @@ -1,44 +1,41 @@ -import { Nav, Navbar } from "rsuite" +import {Avatar, Nav, Navbar} from "rsuite" import * as s from "./menu.module.css"; -import UserIcon from '@rsuite/icons/legacy/User'; - -import { Link, useNavigate } from "react-router-dom"; -import { useContext, useEffect, useState } from "react"; -import { useAPI } from "../services/api"; -import { UserContext } from "../contexts/user"; -import { useAuth } from "react-oidc-context"; - +import {NavLink} from "react-router-dom"; +import {ReactEventHandler, useContext} from "react"; +import {UserContext} from "../contexts/user"; +import {useAuth} from "react-oidc-context"; +import * as React from "react"; const Menu = () => { - - const activeKey = "tasks"; const user = useContext(UserContext) const auth = useAuth(); return ( - - - Vicky - - { - user ? ( - + ) diff --git a/dashboard/src/components/tag.tsx b/dashboard/src/components/tag.tsx index 81fa91b..6604d54 100644 --- a/dashboard/src/components/tag.tsx +++ b/dashboard/src/components/tag.tsx @@ -1,64 +1,44 @@ -import { useMemo } from "react" -import { Tag } from "rsuite"; -import { ITask } from "../services/api" +import {useMemo} from "react" +import {Tag} from "rsuite"; +import {ITask} from "../services/api" +import {FilterOption} from "./tasks"; type TaskTagProps = { task: ITask, size: "sm" | "md" | "lg" + options: FilterOption[], } +const fallbackTag: FilterOption = { color: "", label: "-", value: "None" } const TaskTag = (props: TaskTagProps) => { const { task, - size + size, + options, } = props; - const [tagContent, tagColor] = useMemo(() => { - const tagContent = task.status.result ?? task.status.state + const tag: FilterOption = useMemo(() => { + const tagContent = task.status.state + (task.status.result ? "::" + task.status.result : "") - console.log(task) - - let tagColor = null - let tagDisplay = null - switch (tagContent) { - case "ERROR": { - tagColor = "red"; - tagDisplay = "Error"; - break; - } - case "SUCCESS": { - tagColor = "green"; - tagDisplay = "Success"; - break; - } - case "RUNNING": { - tagColor = "violet"; - tagDisplay = "Running"; - break; - } - case "NEW": { - tagColor = "cyan"; - tagDisplay = "New"; - break; - } - case "NEEDSUSERVALIDATION": { - tagColor = "orange"; - tagDisplay = "Validation"; - break; - } - default: { - tagColor = ""; - tagDisplay = "-" - } - } - - return [tagDisplay, tagColor] + return options.find(o => o.value == tagContent) ?? fallbackTag }, [task.status]) - return ( - {tagContent} + return ( + + {tag.label} + ) } diff --git a/dashboard/src/components/task.module.css b/dashboard/src/components/task.module.css index ba166dc..c7c733d 100644 --- a/dashboard/src/components/task.module.css +++ b/dashboard/src/components/task.module.css @@ -3,6 +3,10 @@ margin-bottom: 1em; } +.TaskHeader { + width: 100%; +} + .Panel { height: 100%; } @@ -11,6 +15,13 @@ height: 100%; } +.Panel :global(.rs-panel-body) { + display: flex; + flex-direction: column; + min-height: 0; + box-sizing: border-box; +} + .TitleRow { width: 100%; } @@ -40,4 +51,7 @@ padding: 2px 6px; min-width: 4em; text-align: center; + display: inline-flex; + align-items: center; + justify-content: center; } diff --git a/dashboard/src/components/task.tsx b/dashboard/src/components/task.tsx index 4390d5f..b7ce460 100644 --- a/dashboard/src/components/task.tsx +++ b/dashboard/src/components/task.tsx @@ -10,6 +10,7 @@ import * as s from "./task.module.css"; import { Fragment, useEffect, useMemo, useState } from "react"; import { TaskTag } from "./tag"; import { useAPI } from "../services/api"; +import {FILTERS} from "./tasks"; type TaskProps = { task: ITask @@ -37,13 +38,13 @@ const Task = (props: TaskProps) => { } return ( - - + +

{task.display_name}

- +
@@ -55,10 +56,16 @@ const Task = (props: TaskProps) => {
{task.locks.length ? ( + Locks: {task.locks.map(lock => { return ( - - {lock.name} + + {lock.name} ) })} diff --git a/dashboard/src/components/tasks.module.css b/dashboard/src/components/tasks.module.css index b0cadb9..072d432 100644 --- a/dashboard/src/components/tasks.module.css +++ b/dashboard/src/components/tasks.module.css @@ -6,6 +6,9 @@ .List { margin-top: 1em; + flex: 1 1 auto; + min-height: 0; + overflow-y: auto; } .List > a:hover div:first-of-type > span { @@ -20,22 +23,45 @@ padding: 1em; height: 100%; width: 100%; + box-sizing: border-box; overflow-x: hidden; + min-height: 0; +} + +.Row { + margin-inline: 0; + height: 100%; +} + +.TasksColumn { + height: 100%; + min-height: 0; } .GridElement { height: 100%; + min-height: 0; } .TasksPanel { position: relative; overflow: visible; /* because the popover needs some space outside */ min-height: 340px; /* because the dropdown needs some space */ + height: 100%; +} + +.TasksPanel :global(.rs-panel-body) { + height: 100%; + display: flex; + flex-direction: column; + min-height: 0; + box-sizing: border-box; } .HeaderRow { flex-wrap: wrap; gap: 12px; + width: 100%; } .Filters { @@ -44,6 +70,10 @@ gap: 10px; } +.ListRow { + width: 100%; +} + .Pagination { padding: 1em 0; diff --git a/dashboard/src/components/tasks.tsx b/dashboard/src/components/tasks.tsx index 497b235..54f4234 100644 --- a/dashboard/src/components/tasks.tsx +++ b/dashboard/src/components/tasks.tsx @@ -3,7 +3,7 @@ import { Link, useParams } from "react-router-dom" import CalendarIcon from '@rsuite/icons/Calendar'; import TimeIcon from '@rsuite/icons/Time'; -import { Col, Grid, HStack, List, Pagination, Panel, Text, VStack } from "rsuite" +import {Col, Grid, Heading, HStack, List, Pagination, Panel, Row, Text, VStack} from "rsuite" import { TaskTag } from "./tag"; import { Task } from "./task"; import { FilterSlider } from "./filter-slider"; @@ -14,12 +14,17 @@ import { useTask, useTasks, useTasksCount } from "../hooks/useTasks"; import { useTaskGroups } from "../hooks/useTaskGroups"; import { GroupFilter } from "./group-filter"; -const FILTERS: { label: string; value: string | null; color: string }[] = [ + +export type FilterValue = string | null; +export type FilterOption = { label: string; value: FilterValue; color: string }; + +export const FILTERS: FilterOption[] = [ { label: "All", value: null, color: "#6b7280"}, { label: "Validation", value: "NEEDS_USER_VALIDATION", color: "#f59e0b" }, { label: "New", value: "NEW", color: "#22d3ee" }, { label: "Running", value: "RUNNING", color: "#7c3aed" }, - { label: "Finished", value: "FINISHED::SUCCESS", color: "#22c55e" }, + { label: "Success", value: "FINISHED::SUCCESS", color: "#22c55e" }, + { label: "Timeout", value: "FINISHED::TIMEOUT", color: "#ff6200" }, { label: "Error", value: "FINISHED::ERROR", color: "#ef4444" }, ]; @@ -45,71 +50,73 @@ const Tasks = () => { return ( - - - -

Tasks

- - - + + + + + Tasks + + + + - - + + { + tasks?.map((t) => { + const isSelected = t.id == task?.id; + const duration = t.finished_at && t.claimed_at ? Math.max(t.finished_at - t.claimed_at, 0) : null + + return ( + + + + + {t.display_name} + + {dayjs.unix(t.created_at).toNow(true)} ago + {duration != null ? : null} + {duration != null ? {duration}s : null} + + + + + + + + ) + }) + } + +
{ - tasks?.map((t) => { - const isSelected = t.id == task?.id; - const duration = t.finished_at && t.claimed_at ? Math.max(t.finished_at - t.claimed_at, 0) : null - - return ( - - - - - {t.display_name} - - {dayjs.unix(t.created_at).toNow(true)} ago - {duration != null ? : null} - {duration != null ? {duration}s : null} - - - - - - - - ) - }) + tasksCount ? + ( + setPage(p)} /> + ) + : null } - -
- { - tasksCount ? - ( - setPage(p)} /> - ) - : null - } -
- - - - { - task ? ( - - - - ) : null - } +
+
+ + + { + task ? ( + + + + ) : null + } +
) } diff --git a/dashboard/src/components/xterm.tsx b/dashboard/src/components/xterm.tsx index e71e494..6092f30 100644 --- a/dashboard/src/components/xterm.tsx +++ b/dashboard/src/components/xterm.tsx @@ -59,7 +59,11 @@ const Terminal = (props: TerminalProps) => { return ( -
setRef(ref)}>
+
setRef(ref)} + >
) } diff --git a/dashboard/src/content.module.css b/dashboard/src/content.module.css index b550f35..0dbdf3c 100644 --- a/dashboard/src/content.module.css +++ b/dashboard/src/content.module.css @@ -1,5 +1,8 @@ .Content { - height: calc( 100% - 56px ); + flex: 1; + min-height: 0; max-width: 2600px; - margin: auto; + width: 100%; + margin: 0 auto; + overflow: hidden; } diff --git a/dashboard/src/content.tsx b/dashboard/src/content.tsx index 253d36b..8e0dc31 100644 --- a/dashboard/src/content.tsx +++ b/dashboard/src/content.tsx @@ -1,4 +1,3 @@ -import { ReactNode, useContext } from "react" import { Navigate, Route, Routes } from "react-router-dom" import { Login } from "./components/login" import { Menu } from "./components/menu" @@ -7,11 +6,11 @@ import { UserContext, UserProvider } from "./contexts/user" import * as s from "./content.module.css" import { useAuth } from "react-oidc-context" +import * as React from "react"; const Content = () => { - - const auth = useAuth(); + const auth = useAuth() switch (auth.activeNavigator) { case "signinSilent": diff --git a/dashboard/src/services/api.tsx b/dashboard/src/services/api.tsx index 73ef158..c143759 100644 --- a/dashboard/src/services/api.tsx +++ b/dashboard/src/services/api.tsx @@ -7,6 +7,7 @@ type ITask = { locks: { type: "WRITE" | "READ" name: string, + poisoned: string, }[] status: { state: string, diff --git a/dashboard/src/styles.css b/dashboard/src/styles.css index 221d675..1bfd07e 100644 --- a/dashboard/src/styles.css +++ b/dashboard/src/styles.css @@ -1,5 +1,19 @@ - #root, html, body { height: 100%; } + +html, +body { + overflow-x: hidden; +} + +body { + margin: 0; +} + +#root { + display: flex; + flex-direction: column; + overflow: hidden; +} diff --git a/deployment/docker-compose.yaml b/deployment/docker-compose.yaml index 38bb464..0eb0484 100644 --- a/deployment/docker-compose.yaml +++ b/deployment/docker-compose.yaml @@ -15,17 +15,40 @@ services: POSTGRES_PASSWORD: vicky POSTGRES_DB: vicky - minio: - image: minio/minio +# Kept just for simplicity. Not recommended to be used +# minio: +# image: minio/minio +# ports: +# - "9000:9000" +# - "9001:9001" +# volumes: +# - "./data/minio_data:/data" +# environment: +# MINIO_ROOT_USER: minio +# MINIO_ROOT_PASSWORD: aichudiKohr6aithi4ahh3aeng2eL7xo +# command: server --console-address ":9001" /data + + + # use the following inside the docker container for first time setup + # garage stats # copy the Node ID + # garage layout assign -z zone -c 10GB + # garage layout show + # garage layout apply --version 1 + # + # then create a bucket using the cli, make a key and assign permissions + garage: + image: dxflrs/garage:v2.1.0 ports: - - "9000:9000" - - "9001:9001" + - "3900:3900" # S3 API + - "3901:3901" # Exists too + - "3902:3902" # Web API + - "3903:3903" # Admin API + - "3904:3904" # K2V API + restart: unless-stopped volumes: - - "./data/minio_data:/data" - environment: - MINIO_ROOT_USER: minio - MINIO_ROOT_PASSWORD: aichudiKohr6aithi4ahh3aeng2eL7xo - command: server --console-address ":9001" /data + - ./garage.toml:/etc/garage.toml + - ./data/garage/meta:/var/lib/garage/meta + - ./data/garage/data:/var/lib/garage/data oidc: image: quay.io/keycloak/keycloak:24.0.1 diff --git a/deployment/garage.toml b/deployment/garage.toml new file mode 100644 index 0000000..aeaa378 --- /dev/null +++ b/deployment/garage.toml @@ -0,0 +1,27 @@ +metadata_dir = "/tmp/meta" +data_dir = "/tmp/data" +db_engine = "sqlite" + +replication_factor = 1 + +rpc_bind_addr = "[::]:3901" +rpc_public_addr = "127.0.0.1:3901" +rpc_secret = "23de54b06853e7bd7bf92aa17a0dc8c10a065ae05057cf55ee7942a5b62ae028" + +[s3_api] +s3_region = "garage" +api_bind_addr = "[::]:3900" +root_domain = ".s3.garage.localhost" + +[s3_web] +bind_addr = "[::]:3902" +root_domain = ".web.garage.localhost" +index = "index.html" + +[k2v_api] +api_bind_addr = "[::]:3904" + +[admin] +api_bind_addr = "[::]:3903" +admin_token = "S7tV8d9Y9hIPbInSq/YigE4ICMiy0j5ZjfDlXJK4Jso=" +metrics_token = "A/yBJI9sFRorbEUX6UbK7RxUqpWnk8bH2mTMunYef7E=" diff --git a/fairy/src/error.rs b/fairy/src/error.rs index bce6a09..20c011b 100644 --- a/fairy/src/error.rs +++ b/fairy/src/error.rs @@ -46,4 +46,10 @@ pub enum Error { #[snafu(display("missing log pipe: {which}"))] MissingPipe { which: &'static str }, + + #[snafu(display("the runner stopped sending heartbeats, timed out and got killed"))] + Timeout, + + #[snafu(display("process was killed but process isn't exiting"))] + NixZombie, } diff --git a/fairy/src/main.rs b/fairy/src/main.rs index a195c7f..3eba41b 100644 --- a/fairy/src/main.rs +++ b/fairy/src/main.rs @@ -5,13 +5,18 @@ use rocket::figment::providers::{Env, Format, Toml}; use rocket::figment::{Figment, Profile}; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; -use snafu::{ensure, ResultExt}; +use snafu::{ResultExt, ensure}; +use std::pin::pin; +use std::process::{Stdio, exit}; +use std::sync::Arc; use std::time::Duration; use tokio::process::Command; +use tokio::select; +use tokio::time::interval; use tokio_util::codec::{FramedRead, LinesCodec}; use uuid::Uuid; -use vickylib::database::entities::task::TaskResult; use vickylib::database::entities::Task; +use vickylib::database::entities::task::{EXPECTED_HEARTBEAT_INTERVAL_SEC, TaskResult}; use which::which; mod error; @@ -150,6 +155,9 @@ async fn try_run_task(cfg: Arc, task: &Task) -> Result<()> { args.extend(vec!["-L".into(), task.flake_ref.flake.clone()]); args.extend(task.flake_ref.args.clone()); + let cmd_str = format!("nix {}", args.join(" ")); + + info!("Executing `{cmd_str}`"); let mut child = Command::new("nix") .args(args) @@ -179,24 +187,62 @@ async fn try_run_task(cfg: Arc, task: &Task) -> Result<()> { .ok_or(Error::MissingPipe { which: "stderr" })?, LinesCodec::new(), ), - ); + ) + .ready_chunks(1024) // TODO switch to try_ready_chunks + .map(|v| v.into_iter().collect::, _>>()) + .map_err(|source| Error::StreamLogs { source }) + .forward(logger); - lines - .ready_chunks(1024) // TODO switch to try_ready_chunks - .map(|v| v.into_iter().collect::, _>>()) - .map_err(|source| Error::StreamLogs { source }) - .forward(logger) - .await?; - let exit_status = child.wait().await.context(error::WaitNixErr)?; - - if exit_status.success() { - log::info!("task finished: {} {} 🎉", task.id, task.display_name); - Ok(()) - } else { - Err(Error::TaskExit { - code: exit_status.code(), - }) + let mut sink = pin!(lines); + let mut tick = interval(Duration::from_secs(EXPECTED_HEARTBEAT_INTERVAL_SEC as u64)); + + let mut force_exit = false; + loop { + select! { + r = &mut sink => break r?, + _ = tick.tick() => { + if let Err(e) = heartbeat(&cfg, task).await { + warn!("Received failure response when sending heartbeat. (Did I time out?): {e}"); + force_exit = true; + break; + } + }, + } + } + + tick.reset_immediately(); // use as timeout + + if force_exit { + select! { + _ = child.kill() => return Err(Error::Timeout), + _ = tick.tick() => return Err(Error::NixZombie), + } } + + let exit_status = select! { + result = child.wait() => result.context(WaitNixErr), + _ = tick.tick() => Err(Error::NixZombie), + }?; + + ensure!( + exit_status.success(), + TaskExitErr { + code: exit_status.code(), + } + ); + + Ok(()) +} + +async fn heartbeat(cfg: &AppConfig, task: &Task) -> Result<()> { + debug!("Sending heartbeat"); + api::<(), ()>( + cfg, + Method::POST, + &format!("api/v1/tasks/{}/heartbeat", task.id), + None::<&()>, + ) + .await } async fn run_task(cfg: Arc, task: Task) { @@ -206,7 +252,10 @@ async fn run_task(cfg: Arc, task: Task) { info!("task failed: {} {} ({:?})", task.id, task.display_name, e); TaskResult::Error } - Ok(_) => TaskResult::Success, + Ok(_) => { + info!("task finished: {} {} 🎉", task.id, task.display_name); + TaskResult::Success + } }; #[cfg(feature = "nixless-test-mode")] diff --git a/flake.nix b/flake.nix index 441bf7b..d4b4594 100644 --- a/flake.nix +++ b/flake.nix @@ -46,7 +46,7 @@ src = ./dashboard; - npmDepsHash = "sha256-0kBOcPA3Z8h0rAY4POrsEc/s04FQuFRnB+5nIo7rZN0="; + npmDepsHash = "sha256-0AfxATq6eiAGgHcEX6J7lO3Ugj6eEmW9u5yq7LnL0lM="; installPhase = '' runHook preInstall @@ -80,4 +80,4 @@ }; }); -} \ No newline at end of file +} diff --git a/vicky/Cargo.toml b/vicky/Cargo.toml index cec68d4..d130dec 100644 --- a/vicky/Cargo.toml +++ b/vicky/Cargo.toml @@ -16,7 +16,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" async-trait = "0.1" # https://github.com/awesomized/crc64fast-nvme/issues/5 -aws-sdk-s3 = "=1.34.0" +aws-sdk-s3 = "1.119" uuid = { version = "1.19", features = ["fast-rng", "v4", "serde"] } rocket = { version = "0.5", features = ["json", "secrets", "uuid"] } rocket_sync_db_pools = { version = "0.1", features = ["diesel_postgres_pool"] } diff --git a/vicky/migrations/2026-01-05-130242-0000_heartbeat/down.sql b/vicky/migrations/2026-01-05-130242-0000_heartbeat/down.sql new file mode 100644 index 0000000..1e68ec1 --- /dev/null +++ b/vicky/migrations/2026-01-05-130242-0000_heartbeat/down.sql @@ -0,0 +1,21 @@ +ALTER TABLE tasks + DROP COLUMN "last_heartbeat"; + +-- can't drop enum values from an enum. +CREATE TYPE "TaskStatus_Type_New" AS ENUM ( + 'NEW', + 'NEEDS_USER_VALIDATION', + 'RUNNING', + 'FINISHED::SUCCESS', + 'FINISHED::ERROR' +); + +UPDATE tasks SET status = 'FINISHED::ERROR' WHERE status = 'FINISHED::TIMEOUT'; + +ALTER TABLE tasks + ALTER COLUMN status TYPE "TaskStatus_Type_New" + USING (status::text::"TaskStatus_Type_New"); + +DROP TYPE "TaskStatus_Type"; + +ALTER TYPE "TaskStatus_Type_New" RENAME TO "TaskStatus_Type"; \ No newline at end of file diff --git a/vicky/migrations/2026-01-05-130242-0000_heartbeat/up.sql b/vicky/migrations/2026-01-05-130242-0000_heartbeat/up.sql new file mode 100644 index 0000000..f762b1f --- /dev/null +++ b/vicky/migrations/2026-01-05-130242-0000_heartbeat/up.sql @@ -0,0 +1,4 @@ +ALTER TABLE tasks + ADD COLUMN "last_heartbeat" timestamp; + +ALTER TYPE "TaskStatus_Type" ADD VALUE 'FINISHED::TIMEOUT'; diff --git a/vicky/migrations/2026-01-06-184413-0000_fix_timestamp_tz/down.sql b/vicky/migrations/2026-01-06-184413-0000_fix_timestamp_tz/down.sql new file mode 100644 index 0000000..88fc198 --- /dev/null +++ b/vicky/migrations/2026-01-06-184413-0000_fix_timestamp_tz/down.sql @@ -0,0 +1,4 @@ +ALTER TABLE tasks ALTER COLUMN "created_at" TYPE TIMESTAMP USING "created_at" AT TIME ZONE 'UTC'; +ALTER TABLE tasks ALTER COLUMN "finished_at" TYPE TIMESTAMP USING "finished_at" AT TIME ZONE 'UTC'; +ALTER TABLE tasks ALTER COLUMN "claimed_at" TYPE TIMESTAMP USING "claimed_at" AT TIME ZONE 'UTC'; +ALTER TABLE tasks ALTER COLUMN "last_heartbeat" TYPE TIMESTAMP USING last_heartbeat AT TIME ZONE 'UTC'; diff --git a/vicky/migrations/2026-01-06-184413-0000_fix_timestamp_tz/up.sql b/vicky/migrations/2026-01-06-184413-0000_fix_timestamp_tz/up.sql new file mode 100644 index 0000000..a501e2d --- /dev/null +++ b/vicky/migrations/2026-01-06-184413-0000_fix_timestamp_tz/up.sql @@ -0,0 +1,4 @@ +ALTER TABLE tasks ALTER COLUMN "created_at" TYPE TIMESTAMP WITH TIME ZONE; +ALTER TABLE tasks ALTER COLUMN "finished_at" TYPE TIMESTAMP WITH TIME ZONE; +ALTER TABLE tasks ALTER COLUMN "claimed_at" TYPE TIMESTAMP WITH TIME ZONE; +ALTER TABLE tasks ALTER COLUMN "last_heartbeat" TYPE TIMESTAMP WITH TIME ZONE; diff --git a/vicky/src/bin/vicky/config.rs b/vicky/src/bin/vicky/config.rs index b739720..f1de96f 100644 --- a/vicky/src/bin/vicky/config.rs +++ b/vicky/src/bin/vicky/config.rs @@ -57,21 +57,18 @@ pub fn build_rocket_config() -> Figment { impl S3Config { pub fn credentials(&self) -> Credentials { - Credentials::new( - &self.access_key_id, - &self.secret_access_key, - None, - None, - "static", - ) + Credentials::builder() + .access_key_id(&self.access_key_id) + .secret_access_key(&self.secret_access_key) + .provider_name("static") + .build() } pub fn build_config(&self) -> aws_sdk_s3::Config { info!("building s3 client"); aws_sdk_s3::Config::builder() - .behavior_version(BehaviorVersion::v2024_03_28()) - .force_path_style(true) + .behavior_version(BehaviorVersion::v2025_08_07()) .endpoint_url(&self.endpoint) .credentials_provider(self.credentials()) .region(Region::new(self.region.clone())) diff --git a/vicky/src/bin/vicky/main.rs b/vicky/src/bin/vicky/main.rs index 52a598c..b8d4c1c 100644 --- a/vicky/src/bin/vicky/main.rs +++ b/vicky/src/bin/vicky/main.rs @@ -6,7 +6,7 @@ use crate::locks::{ use crate::startup::Result; use crate::tasks::{ tasks_add, tasks_claim, tasks_confirm, tasks_count, tasks_download_logs, tasks_finish, - tasks_get, tasks_get_logs, tasks_get_specific, tasks_put_logs, + tasks_get, tasks_get_logs, tasks_get_specific, tasks_heartbeat, tasks_put_logs, }; use crate::user::get_user; use crate::webconfig::get_web_config; @@ -15,11 +15,14 @@ use errors::AppError; use jwtk::jwk::RemoteJwksVerifier; use log::{error, info, trace, warn, LevelFilter}; use rocket::fairing::AdHoc; -use rocket::{routes, Build, Rocket}; +use rocket::{Build, Ignite, Rocket, routes}; use snafu::ResultExt; +use std::time::Duration; +use tokio::select; use tokio::sync::broadcast; use tokio::sync::broadcast::Sender; use vickylib::database::entities::Database; +use vickylib::database::entities::task::HEARTBEAT_TIMEOUT_SEC; use vickylib::logs::LogDrain; use vickylib::s3::client::S3Client; @@ -105,7 +108,7 @@ async fn inner_main() -> Result<()> { let (tx_global_events, _rx_task_events) = broadcast::channel::(5); - serve_web_api( + let web_server = build_web_api( app_config, build_rocket, oidc_config_resolved, @@ -116,10 +119,46 @@ async fn inner_main() -> Result<()> { ) .await?; + let db_pool = Database::pool(&web_server) + .expect("Fairings succeeded. Database should exist as state unless not registered at all") + .clone(); + + let web_task = + tokio::task::spawn(async move { web_server.launch().await.context(startup::LaunchErr) }); + + let task_timeout_sweeper = tokio::task::spawn(async move { + let mut interval = tokio::time::interval(Duration::from_secs(10)); + + loop { + interval.tick().await; + let Some(db) = Database::get_one_from_pool(&db_pool).await else { + warn!( + "Could not perform sweep as no database connection could be retrieved from the pool" + ); + continue; + }; + + match db.perform_timeout_sweep().await { + Ok((0, 0)) => trace!("Performed timeout sweep"), + Ok((tasks_affected, locks_affected)) => warn!( + "Timed out {tasks_affected} task(s) and poisoned {locks_affected} lock(s) after not receiving a heartbeat for {HEARTBEAT_TIMEOUT_SEC} seconds" + ), + Err(e) => warn!( + "Could not perform sweep as the database could not be queried successfully: {e}" + ), + } + } + }); + + select! { + e = web_task => e.map(|_| ()).context(startup::JoinErr)?, + _ = task_timeout_sweeper => panic!("Task timeout sweeper shouldn't exit"), + } + Ok(()) } -async fn serve_web_api( +async fn build_web_api( app_config: Config, build_rocket: Rocket, oidc_config_resolved: OIDCConfigResolved, @@ -127,7 +166,7 @@ async fn serve_web_api( s3_log_bucket_client: S3Client, log_drain: LogDrain, tx_global_events: Sender, -) -> Result<()> { +) -> Result> { info!("starting web api"); build_rocket @@ -153,6 +192,7 @@ async fn serve_web_api( tasks_get, tasks_get_specific, tasks_claim, + tasks_heartbeat, tasks_finish, tasks_add, tasks_get_logs, @@ -170,9 +210,7 @@ async fn serve_web_api( locks_unlock ], ) - .launch() + .ignite() .await - .context(startup::LaunchErr)?; - - Ok(()) + .context(startup::IgniteErr) } diff --git a/vicky/src/bin/vicky/startup.rs b/vicky/src/bin/vicky/startup.rs index 7e08b57..ba4d91e 100644 --- a/vicky/src/bin/vicky/startup.rs +++ b/vicky/src/bin/vicky/startup.rs @@ -3,6 +3,7 @@ use aws_sdk_s3::{Client, error::SdkError, operation::create_bucket::CreateBucket use log::{error, info}; use rocket::figment; use snafu::{ResultExt, Snafu}; +use tokio::task::JoinError; pub type Result = std::result::Result; @@ -30,11 +31,20 @@ pub enum Error { #[snafu(display("connection to database failed"))] DatabaseConnect, - #[snafu(display("launch server: {source}"))] + #[snafu(display("prepare web server: {source}"))] + Ignite { + #[snafu(source(from(rocket::Error, Box::new)))] + source: Box, + }, + + #[snafu(display("launch web server: {source}"))] Launch { #[snafu(source(from(rocket::Error, Box::new)))] source: Box, }, + + #[snafu(display("failed to join asnyc thread: {source}"))] + Join { source: JoinError }, } pub async fn fetch_oidc_config(uri: &str) -> Result { diff --git a/vicky/src/bin/vicky/tasks.rs b/vicky/src/bin/vicky/tasks.rs index d925359..4a3fbba 100644 --- a/vicky/src/bin/vicky/tasks.rs +++ b/vicky/src/bin/vicky/tasks.rs @@ -1,4 +1,4 @@ -use chrono::Utc; +use chrono::{TimeDelta, Utc}; use log::{error, warn}; use rocket::http::Status; use rocket::response::stream::{Event, EventStream}; @@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize}; use std::time; use tokio::sync::broadcast::{self, error::TryRecvError}; use uuid::Uuid; +use vickylib::database::entities::task::HEARTBEAT_TIMEOUT_SEC; use vickylib::database::entities::task::{FlakeRef, TaskResult, TaskStatus}; use vickylib::database::entities::{Database, Lock, Task}; use vickylib::query::FilterParams; @@ -262,7 +263,8 @@ pub async fn tasks_claim( Some(next_task) => { let mut task: Task = task_or_not_found!(db, next_task.id)?; task.status = TaskStatus::Running; - task.claimed_at = Some(Utc::now().naive_utc()); + task.claimed_at = Some(Utc::now()); + task.last_heartbeat = task.claimed_at; db.update_task(task.clone()).await?; global_events.send(GlobalEvent::TaskUpdate { uuid: task.id })?; @@ -272,6 +274,23 @@ pub async fn tasks_claim( } } +#[post("//heartbeat")] +pub async fn tasks_heartbeat(id: Uuid, db: Database, _auth: AnyAuthGuard) -> Result<(), AppError> { + let task: Task = task_or_not_found!(db, id)?; + + if task.status != TaskStatus::Running { + return Err(AppError::HttpError(Status::Conflict)); + } + + if db.register_task_heartbeat(id).await? == 0 { + return Err(AppError::HttpError(Status::Conflict)); + } + + // TODO: Consider sending a global event here + + Ok(()) +} + #[post("//finish", format = "json", data = "")] pub async fn tasks_finish( id: Uuid, @@ -283,18 +302,17 @@ pub async fn tasks_finish( ) -> Result, AppError> { let mut task: Task = task_or_not_found!(db, id)?; - log_drain.finish_logs(id).await?; + task.finish(finish.result); - task.status = TaskStatus::Finished(finish.result); - task.finished_at = Some(Utc::now().naive_utc()); + db.update_task(task.clone()).await?; - if finish.result == TaskResult::Error { - task.locks.iter_mut().for_each(|lock| lock.poison(&task.id)); - } + let log_error = log_drain.finish_logs(id).await; - db.update_task(task.clone()).await?; global_events.send(GlobalEvent::TaskUpdate { uuid: task.id })?; + // only handle log error here so that the UI gets the event at the right time + log_error?; + Ok(Json(task)) } @@ -360,6 +378,29 @@ pub async fn tasks_confirm( Ok(Json(task)) } +// only returns the task back if the task is in a running state and not timed out or finished +#[allow(unused)] +async fn maybe_timeout_task(task: Task, db: &mut Database) -> Result, AppError> { + if task.status != TaskStatus::Running { + return Ok(None); + } + + let Some(last_heartbeat) = task.last_heartbeat else { + return Ok(Some(task)); // a running task should always have a last heartbeat from when it was claimed + }; + + if last_heartbeat + TimeDelta::seconds(HEARTBEAT_TIMEOUT_SEC) <= Utc::now() { + let affected = db.timeout_task(task.id).await?; + if cfg!(debug_assertions) && affected != 1 { + warn!("Expected to timeout 1 task, but timed out {affected}"); + } + + return Ok(None); + } + + Ok(Some(task)) +} + #[cfg(test)] mod tests { use vickylib::database::entities::Task; diff --git a/vicky/src/lib/database/entities/lock.rs b/vicky/src/lib/database/entities/lock.rs index 1f2837a..a326472 100644 --- a/vicky/src/lib/database/entities/lock.rs +++ b/vicky/src/lib/database/entities/lock.rs @@ -80,6 +80,10 @@ impl Lock { self.poisoned_by = Some(*by_task); } + pub fn clear_poison(&mut self) { + self.poisoned_by = None; + } + pub fn name(&self) -> &str { self.name.as_str() } @@ -249,6 +253,13 @@ pub mod db_impl { Ok(locks) } + fn poison_all_locks_by_task(&mut self, task_id: Uuid) -> Result { + let affected = update(locks::table.filter(locks::task_id.eq(task_id))) + .set(locks::poisoned_by_task.eq(task_id)) + .execute(self)?; + Ok(affected) + } + fn unlock_lock(&mut self, lock_uuid: &Uuid) -> Result { let affected = update(locks::table.filter(locks::id.eq(lock_uuid))) .set(locks::poisoned_by_task.eq(None::)) diff --git a/vicky/src/lib/database/entities/mod.rs b/vicky/src/lib/database/entities/mod.rs index ba97ffc..871aff3 100644 --- a/vicky/src/lib/database/entities/mod.rs +++ b/vicky/src/lib/database/entities/mod.rs @@ -10,9 +10,10 @@ use crate::database::entities::user::User; use crate::database::entities::user::db_impl::UserDatabase; use crate::errors::VickyError; use crate::query::FilterParams; +use chrono::Utc; use delegate::delegate; pub use lock::{Lock, LockKind}; -use rocket_sync_db_pools::database; +use rocket_sync_db_pools::{ConnectionPool, database}; pub use task::Task; use uuid::Uuid; @@ -20,6 +21,10 @@ use uuid::Uuid; pub struct Database(diesel::PgConnection); impl Database { + pub async fn get_one_from_pool(pool: &ConnectionPool) -> Option { + pool.get().await.map(Self) + } + delegate! { #[await(false)] #[expr(self.run(move |conn| $).await)] @@ -41,6 +46,9 @@ impl Database { pub async fn update_task(&self, #[as_ref] task: Task) -> Result; pub async fn confirm_task(&self, uuid: Uuid) -> Result; pub async fn has_task(&self, task_id: Uuid) -> Result; + pub async fn has_running_task(&self, task_id: Uuid) -> Result; + pub async fn perform_timeout_sweep(&self) -> Result<(usize, usize), VickyError>; + pub async fn timeout_task(&self, task_id: Uuid) -> Result; } #[await(false)] @@ -61,4 +69,10 @@ impl Database { pub async fn upsert_user(&self, user: User) -> Result<(), VickyError>; } } + + pub async fn register_task_heartbeat(&self, task_id: Uuid) -> Result { + let heartbeat = Utc::now().naive_utc(); + self.run(move |d| d.register_task_heartbeat(task_id, heartbeat)) + .await + } } diff --git a/vicky/src/lib/database/entities/task.rs b/vicky/src/lib/database/entities/task.rs index bfd655b..01ee3d4 100644 --- a/vicky/src/lib/database/entities/task.rs +++ b/vicky/src/lib/database/entities/task.rs @@ -2,19 +2,24 @@ use crate::database::entities::lock::Lock; use crate::database::entities::lock::db_impl::DbLock; use crate::database::entities::task::db_impl::DbTask; use bon::Builder; -use chrono::naive::serde::ts_seconds; -use chrono::naive::serde::ts_seconds_option; -use chrono::{NaiveDateTime, Utc}; +use chrono::serde::ts_seconds; +use chrono::serde::ts_seconds_option; +use chrono::{DateTime, Utc}; use diesel::{AsExpression, FromSqlRow}; use itertools::Itertools; use serde::{Deserialize, Serialize}; use uuid::Uuid; +pub const HEARTBEAT_TIMEOUT_SEC: i64 = 60; +#[allow(unused)] +pub const EXPECTED_HEARTBEAT_INTERVAL_SEC: i64 = 15; + #[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize, clap::ValueEnum)] #[serde(tag = "result", rename_all = "UPPERCASE")] pub enum TaskResult { Success, Error, + Timeout, } #[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize, FromSqlRow, AsExpression)] @@ -68,15 +73,40 @@ pub struct Task { pub status: TaskStatus, #[serde(with = "ts_seconds")] - #[builder(skip = Utc::now().naive_utc())] - pub created_at: NaiveDateTime, + #[builder(skip = Utc::now())] + pub created_at: DateTime, + #[serde(with = "ts_seconds_option")] - pub claimed_at: Option, + pub claimed_at: Option>, + #[serde(with = "ts_seconds_option")] - pub finished_at: Option, + pub finished_at: Option>, + + #[serde(with = "ts_seconds_option")] + pub last_heartbeat: Option>, + pub group: Option, } +impl Task { + pub fn finish(&mut self, result: TaskResult) { + self.status = TaskStatus::Finished(result); + self.finished_at = Some(Utc::now()); + + if result == TaskResult::Error { + self.locks.iter_mut().for_each(|lock| lock.poison(&self.id)); + } + } + + pub fn poison_locks(&mut self) { + self.locks.iter_mut().for_each(|lock| lock.poison(&self.id)); + } + + pub fn clear_poisoned_locks(&mut self) { + self.locks.iter_mut().for_each(|lock| lock.clear_poison()); + } +} + impl AsRef for Task { fn as_ref(&self) -> &Task { self @@ -172,29 +202,43 @@ impl From<(DbTask, Vec)> for Task { created_at: task.created_at, claimed_at: task.claimed_at, finished_at: task.finished_at, + last_heartbeat: task.last_heartbeat, group: task.group, } } } +impl TaskStatus { + pub fn is_failed(&self) -> bool { + match self { + TaskStatus::NeedsUserValidation + | TaskStatus::New + | TaskStatus::Running + | TaskStatus::Finished(TaskResult::Success) => false, + TaskStatus::Finished(TaskResult::Error | TaskResult::Timeout) => true, + } + } +} + // this was on purpose because these macro-generated entity types // mess up the whole namespace and HAVE to be scoped pub mod db_impl { - use crate::database::entities::task::{Task, TaskResult, TaskStatus}; + use crate::database::entities::task::{HEARTBEAT_TIMEOUT_SEC, Task, TaskResult, TaskStatus}; use crate::errors::VickyError; use crate::query::FilterParams; - use chrono::NaiveDateTime; + use chrono::{DateTime, NaiveDateTime, Utc}; // these here are evil >:( use crate::database::entities::lock::db_impl::{DbLock, NewDbLock}; use crate::database::schema::locks; use crate::database::schema::tasks; use diesel::deserialize::FromSql; + use diesel::dsl::now; use diesel::pg::PgValue; use diesel::serialize::{IsNull, Output, ToSql}; use diesel::{ - AsChangeset, BoolExpressionMethods, Connection, ExpressionMethods, Insertable, QueryDsl, - QueryId, Queryable, RunQueryDsl, SqlType, + AsChangeset, BoolExpressionMethods, Connection, ExpressionMethods, Insertable, + NullableExpressionMethods, QueryDsl, QueryId, Queryable, RunQueryDsl, SqlType, }; use itertools::Itertools; use serde::Serialize; @@ -233,9 +277,11 @@ pub mod db_impl { pub features: Vec, pub flake_ref_uri: String, pub flake_ref_args: Vec, - pub created_at: NaiveDateTime, - pub claimed_at: Option, - pub finished_at: Option, + pub created_at: DateTime, + pub claimed_at: Option>, + + pub finished_at: Option>, + pub last_heartbeat: Option>, pub group: Option, } @@ -244,6 +290,7 @@ pub mod db_impl { pub const STATE_RUNNING_STR: &str = "RUNNING"; pub const STATE_FINISHED_SUCCESS_STR: &str = "FINISHED::SUCCESS"; pub const STATE_FINISHED_ERROR_STR: &str = "FINISHED::ERROR"; + pub const STATE_FINISHED_TIMEOUT_STR: &str = "FINISHED::TIMEOUT"; impl Display for TaskStatus { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -254,6 +301,7 @@ pub mod db_impl { TaskStatus::Finished(r) => match r { TaskResult::Success => STATE_FINISHED_SUCCESS_STR, TaskResult::Error => STATE_FINISHED_ERROR_STR, + TaskResult::Timeout => STATE_FINISHED_TIMEOUT_STR, }, }; write!(f, "{str}") @@ -270,6 +318,7 @@ pub mod db_impl { STATE_RUNNING_STR => Ok(TaskStatus::Running), STATE_FINISHED_SUCCESS_STR => Ok(TaskStatus::Finished(TaskResult::Success)), STATE_FINISHED_ERROR_STR => Ok(TaskStatus::Finished(TaskResult::Error)), + STATE_FINISHED_TIMEOUT_STR => Ok(TaskStatus::Finished(TaskResult::Timeout)), _ => Err("Could not deserialize to TaskStatus"), } } @@ -287,6 +336,7 @@ pub mod db_impl { created_at: task.created_at, claimed_at: task.claimed_at, finished_at: task.finished_at, + last_heartbeat: task.last_heartbeat, group: task.group, } } @@ -316,6 +366,7 @@ pub mod db_impl { fn update_task(&mut self, task: &Task) -> Result; fn confirm_task(&mut self, task_id: Uuid) -> Result; fn has_task(&mut self, task_id: Uuid) -> Result; + fn has_running_task(&mut self, tid: Uuid) -> Result; } impl TaskDatabase for diesel::pg::PgConnection { @@ -425,19 +476,79 @@ pub mod db_impl { }) } + fn register_task_heartbeat( + &mut self, + task_id: Uuid, + heartbeat: NaiveDateTime, + ) -> Result { + let rows_updated = diesel::update( + tasks::table.filter( + tasks::id + .eq(task_id) + .and(tasks::status.eq(TaskStatus::Running)), + ), + ) + .set(tasks::last_heartbeat.eq(heartbeat)) + .execute(self)?; + + Ok(rows_updated) + } + + fn timeout_task(&mut self, task_id: Uuid) -> Result { + let rows_updated = diesel::update( + tasks::table.filter( + tasks::id + .eq(task_id) + .and(tasks::status.eq(TaskStatus::Running)), + ), + ) + .set(tasks::status.eq(TaskStatus::Finished(TaskResult::Timeout))) + .execute(self)?; + + Ok(rows_updated) + } + + fn perform_timeout_sweep(&mut self) -> Result<(usize, usize), VickyError> { + use crate::database::entities::LockDatabase; + let tasks_updated: Vec = diesel::update( + tasks::table + .filter(tasks::status.eq(TaskStatus::Running)) + .filter(tasks::last_heartbeat.is_not_null()) + .filter( + (tasks::last_heartbeat.assume_not_null() + + chrono::Duration::seconds(HEARTBEAT_TIMEOUT_SEC)) + .le(now), + ), + ) + .set(tasks::status.eq(TaskStatus::Finished(TaskResult::Timeout))) + .get_results::(self)? + .into_iter() + .collect(); + + let task_rows_updated = tasks_updated.len(); + let mut lock_rows_updated = 0; + + for task in &tasks_updated { + lock_rows_updated += self.poison_all_locks_by_task(task.id)?; + } + + Ok((task_rows_updated, lock_rows_updated)) + } + fn update_task(&mut self, task: &Task) -> Result { let affected = diesel::update(tasks::table.filter(tasks::id.eq(task.id))) .set(( tasks::status.eq(task.status), tasks::claimed_at.eq(task.claimed_at), tasks::finished_at.eq(task.finished_at), + tasks::last_heartbeat.eq(task.last_heartbeat), )) .execute(self)?; // FIXME: Conversion from DbLock to Lock drops id. No way to update locks here. // this is just a workaround for now. Should behave fine though // and is more performant. - if task.status == TaskStatus::Finished(TaskResult::Error) { + if task.status.is_failed() { diesel::update(locks::table.filter(locks::task_id.eq(task.id))) .set(locks::poisoned_by_task.eq(task.id)) .execute(self)?; @@ -468,5 +579,14 @@ pub mod db_impl { Ok(task_count > 0) } + + fn has_running_task(&mut self, tid: Uuid) -> Result { + let task_count: i64 = tasks::table + .filter(tasks::id.eq(tid).and(tasks::status.eq(TaskStatus::Running))) + .count() + .get_result(self)?; + + Ok(task_count > 0) + } } } diff --git a/vicky/src/lib/database/schema.rs b/vicky/src/lib/database/schema.rs index b7bbcd0..7bf64b5 100644 --- a/vicky/src/lib/database/schema.rs +++ b/vicky/src/lib/database/schema.rs @@ -25,9 +25,10 @@ diesel::table! { features -> Array, flake_ref_uri -> Varchar, flake_ref_args -> Array, - created_at -> Timestamp, - claimed_at -> Nullable, - finished_at -> Nullable, + created_at -> Timestamptz, + claimed_at -> Nullable, + finished_at -> Nullable, + last_heartbeat -> Nullable, group -> Nullable, } } diff --git a/vickyctl/Cargo.toml b/vickyctl/Cargo.toml index bf21160..a6f67fa 100644 --- a/vickyctl/Cargo.toml +++ b/vickyctl/Cargo.toml @@ -16,4 +16,5 @@ ratatui = { version = "0.26.3", features = ["serde"] } ratatui-widgets = "0.1.6" crossterm = "0.27.0" vicky = { path = "../vicky" } -delegate = "0.13.5" \ No newline at end of file +delegate = "0.13.5" +dotenvy = "0.15.7" \ No newline at end of file diff --git a/vickyctl/src/main.rs b/vickyctl/src/main.rs index 557fbde..3472863 100644 --- a/vickyctl/src/main.rs +++ b/vickyctl/src/main.rs @@ -11,6 +11,8 @@ use crate::tasks::{claim_task, confirm_task, create_task, finish_task}; use clap::Parser; fn main() { + _ = dotenvy::dotenv(); + let cli = Cli::parse(); let error: Result<_, _> = match cli {